Synchronization with Tizen 2.4 and open source files of maps-plugin-here package 64/51664/2
authorchanywa <cbible.kim@samsung.com>
Thu, 12 Nov 2015 02:08:50 +0000 (11:08 +0900)
committerchanywa <cbible.kim@samsung.com>
Thu, 12 Nov 2015 02:35:29 +0000 (11:35 +0900)
Change-Id: Id4da16a533fca2196bf350720ccfb7f98d09878f

176 files changed:
CMakeLists.txt
aarch64/libheremaps-engine.so.1 [deleted symlink]
aarch64/libheremaps-engine.so.1.0.6_6 [deleted file]
aarch64/libmaps-plugin-here.so [deleted symlink]
aarch64/libmaps-plugin-here.so.0 [deleted symlink]
aarch64/libmaps-plugin-here.so.0.1.6 [deleted file]
arm/libheremaps-engine.so.1 [deleted symlink]
arm/libheremaps-engine.so.1.0.6_6 [deleted file]
arm/libmaps-plugin-here.so [deleted symlink]
arm/libmaps-plugin-here.so.0 [deleted symlink]
arm/libmaps-plugin-here.so.0.1.6 [deleted file]
i586/libheremaps-engine.so.1 [deleted symlink]
i586/libheremaps-engine.so.1.0.6_6 [deleted file]
i586/libmaps-plugin-here.so [deleted symlink]
i586/libmaps-plugin-here.so.0 [deleted symlink]
i586/libmaps-plugin-here.so.0.1.6 [deleted file]
inc/engine/base/BaseBufferBase.h [new file with mode: 0755]
inc/engine/base/BaseByteBuffer.h [new file with mode: 0755]
inc/engine/base/BaseObject.h [new file with mode: 0755]
inc/engine/base/EventDrivenThread.h [new file with mode: 0755]
inc/engine/base/HereObject.h [new file with mode: 0755]
inc/engine/base/Timer.h [new file with mode: 0755]
inc/engine/common/Address.h [new file with mode: 0755]
inc/engine/common/ApplicationContext.h [new file with mode: 0755]
inc/engine/common/BaseQuery.h [new file with mode: 0755]
inc/engine/common/BaseReply.h [new file with mode: 0755]
inc/engine/common/CommunicationError.h [new file with mode: 0755]
inc/engine/common/ErrorBase.h [new file with mode: 0755]
inc/engine/common/GeoBoundingArea.h [new file with mode: 0755]
inc/engine/common/GeoBoundingBox.h [new file with mode: 0755]
inc/engine/common/GeoBoundingCircle.h [new file with mode: 0755]
inc/engine/common/GeoCoordinates.h [new file with mode: 0755]
inc/engine/common/GeoLocation.h [new file with mode: 0755]
inc/engine/common/HereConfig.h [new file with mode: 0755]
inc/engine/common/HereMaps_global.h [new file with mode: 0755]
inc/engine/common/Mutex.h [new file with mode: 0755]
inc/engine/common/Operators.h [new file with mode: 0755]
inc/engine/common/ParserError.h [new file with mode: 0755]
inc/engine/common/QueryListener.h [new file with mode: 0755]
inc/engine/common/RestItemHandle.h [new file with mode: 0644]
inc/engine/common/Size.h [new file with mode: 0644]
inc/engine/common/TileKey.h [new file with mode: 0755]
inc/engine/debug/EchoQuery.h [new file with mode: 0755]
inc/engine/debug/EchoReply.h [new file with mode: 0644]
inc/engine/finder/BaseContent.h [new file with mode: 0755]
inc/engine/finder/BaseFinderReply.h [new file with mode: 0644]
inc/engine/finder/Category.h [new file with mode: 0755]
inc/engine/finder/CategoryId.h [new file with mode: 0755]
inc/engine/finder/ContactDetails.h [new file with mode: 0755]
inc/engine/finder/DiscoveryQuery.h [new file with mode: 0755]
inc/engine/finder/DiscoveryReply.h [new file with mode: 0755]
inc/engine/finder/EditorialContent.h [new file with mode: 0755]
inc/engine/finder/ExtendedAttribute.h [new file with mode: 0755]
inc/engine/finder/FinderError.h [new file with mode: 0755]
inc/engine/finder/FinderQueryListener.h [new file with mode: 0755]
inc/engine/finder/ImageContent.h [new file with mode: 0755]
inc/engine/finder/LinkObject.h [new file with mode: 0755]
inc/engine/finder/PlaceDetails.h [new file with mode: 0755]
inc/engine/finder/PlaceDetailsQuery.h [new file with mode: 0755]
inc/engine/finder/PlaceDetailsReply.h [new file with mode: 0755]
inc/engine/finder/PlaceItem.h [new file with mode: 0755]
inc/engine/finder/PlacesError.h [new file with mode: 0755]
inc/engine/finder/PlacesGlobals.h [new file with mode: 0755]
inc/engine/finder/Ratings.h [new file with mode: 0755]
inc/engine/finder/RelatedItem.h [new file with mode: 0755]
inc/engine/finder/ReviewContent.h [new file with mode: 0755]
inc/engine/finder/SearchContext.h [new file with mode: 0755]
inc/engine/finder/SearchItem.h [new file with mode: 0755]
inc/engine/geocoder/GeoCoderQuery.h [new file with mode: 0755]
inc/engine/geocoder/GeoCoderQueryBase.h [new file with mode: 0755]
inc/engine/geocoder/GeoCoderQueryListener.h [new file with mode: 0755]
inc/engine/geocoder/GeoCoderReply.h [new file with mode: 0755]
inc/engine/geocoder/GeoCoderReplyParser.h [new file with mode: 0755]
inc/engine/geocoder/GeoCoderReplyParserError.h [new file with mode: 0755]
inc/engine/geocoder/MetaInfo.h [new file with mode: 0755]
inc/engine/geocoder/Result.h [new file with mode: 0755]
inc/engine/geocoder/ReverseGeoCoderQuery.h [new file with mode: 0755]
inc/engine/graphic/Bitmap.h [new file with mode: 0755]
inc/engine/graphic/BufferInfo.h [new file with mode: 0755]
inc/engine/graphic/Canvas.h [new file with mode: 0755]
inc/engine/graphic/Color.h [new file with mode: 0755]
inc/engine/graphic/Dimension.h [new file with mode: 0755]
inc/engine/graphic/DoubleMatrix4.h [new file with mode: 0755]
inc/engine/graphic/FloatDimension.h [new file with mode: 0755]
inc/engine/graphic/FloatPoint.h [new file with mode: 0755]
inc/engine/graphic/FloatRectangle.h [new file with mode: 0755]
inc/engine/graphic/Grp_GL_macro.h [new file with mode: 0755]
inc/engine/graphic/Grp_Util.h [new file with mode: 0755]
inc/engine/graphic/Grp_UtilType.h [new file with mode: 0755]
inc/engine/graphic/PngDecoder.h [new file with mode: 0755]
inc/engine/graphic/Point.h [new file with mode: 0755]
inc/engine/graphic/Rectangle.h [new file with mode: 0755]
inc/engine/internal/Distance.h [new file with mode: 0644]
inc/engine/internal/DoublePoint.h [new file with mode: 0644]
inc/engine/internal/DoublePoint3.h [new file with mode: 0644]
inc/engine/internal/EncodingConversion.h [new file with mode: 0755]
inc/engine/internal/FPSCounter.h [new file with mode: 0644]
inc/engine/internal/GeoMercatorProjection.h [new file with mode: 0755]
inc/engine/internal/GeoOpenGlRenderer.h [new file with mode: 0755]
inc/engine/internal/HereLogo.h [new file with mode: 0644]
inc/engine/internal/JsonParser.h [new file with mode: 0755]
inc/engine/internal/Logger.h [new file with mode: 0644]
inc/engine/internal/Opt.h [new file with mode: 0644]
inc/engine/internal/Proximity.h [new file with mode: 0644]
inc/engine/internal/RestCurl.h [new file with mode: 0755]
inc/engine/internal/RestEngine.h [new file with mode: 0755]
inc/engine/internal/RestItem.h [new file with mode: 0755]
inc/engine/internal/ServerStringBuilder.h [new file with mode: 0644]
inc/engine/internal/StringHelper.h [new file with mode: 0755]
inc/engine/maps/DrawableBitmap.h [new file with mode: 0755]
inc/engine/maps/GeoMapObject.h [new file with mode: 0644]
inc/engine/maps/GeoMapObjectMarker.h [new file with mode: 0755]
inc/engine/maps/GeoMapObjectPolygon.h [new file with mode: 0755]
inc/engine/maps/GeoMapObjectPolyline.h [new file with mode: 0755]
inc/engine/maps/GeoObjectProvider.h [new file with mode: 0755]
inc/engine/maps/GeoProjection.h [new file with mode: 0755]
inc/engine/maps/GeoProjectionNode.h [new file with mode: 0755]
inc/engine/maps/GeoProvider.h [new file with mode: 0755]
inc/engine/maps/GeoProviderManager.h [new file with mode: 0755]
inc/engine/maps/GeoTile.h [new file with mode: 0755]
inc/engine/maps/GeoTileProvider.h [new file with mode: 0755]
inc/engine/maps/GeoTiledMap.h [new file with mode: 0755]
inc/engine/maps/GlTexture.h [new file with mode: 0755]
inc/engine/routes/GeoRoute.h [new file with mode: 0755]
inc/engine/routes/GeoRouteQuery.h [new file with mode: 0755]
inc/engine/routes/GeoRouteQueryListener.h [new file with mode: 0755]
inc/engine/routes/GeoRouteReply.h [new file with mode: 0755]
inc/engine/routes/GeoRouterReplyParser.h [new file with mode: 0755]
inc/engine/routes/Maneuver.h [new file with mode: 0755]
inc/engine/routes/RouteSegment.h [new file with mode: 0755]
inc/engine/routes/RouterError.h [new file with mode: 0755]
inc/engine/tilefetcher/TileFetcherError.h [new file with mode: 0755]
inc/engine/tilefetcher/TileFetcherMetaQuery.h [new file with mode: 0644]
inc/engine/tilefetcher/TileFetcherMetaQueryListener.h [new file with mode: 0644]
inc/engine/tilefetcher/TileFetcherMetaReply.h [new file with mode: 0644]
inc/engine/tilefetcher/TileFetcherQuery.h [new file with mode: 0755]
inc/engine/tilefetcher/TileFetcherQueryListener.h [new file with mode: 0644]
inc/engine/tilefetcher/TileFetcherReply.h [new file with mode: 0755]
inc/here_api.h [new file with mode: 0644]
inc/here_base.h [new file with mode: 0644]
inc/here_geocode.h [new file with mode: 0644]
inc/here_manager.h [new file with mode: 0644]
inc/here_place.h [new file with mode: 0644]
inc/here_revgeocode.h [new file with mode: 0644]
inc/here_route.h [new file with mode: 0644]
inc/here_types.h [new file with mode: 0644]
inc/here_utils.h [new file with mode: 0644]
lib/aarch64/libheremaps-engine.so [moved from x86_64/libheremaps-engine.so with 100% similarity]
lib/aarch64/libheremaps-engine.so.1 [new symlink]
lib/aarch64/libheremaps-engine.so.1.0.6_7 [new file with mode: 0755]
lib/arm/libheremaps-engine.so [moved from i586/libheremaps-engine.so with 100% similarity]
lib/arm/libheremaps-engine.so.1 [new symlink]
lib/arm/libheremaps-engine.so.1.0.6_7 [new file with mode: 0755]
lib/i586/libheremaps-engine.so [moved from arm/libheremaps-engine.so with 100% similarity]
lib/i586/libheremaps-engine.so.1 [new symlink]
lib/i586/libheremaps-engine.so.1.0.6_7 [new file with mode: 0755]
lib/x86_64/libheremaps-engine.so [moved from aarch64/libheremaps-engine.so with 100% similarity]
lib/x86_64/libheremaps-engine.so.1 [new symlink]
lib/x86_64/libheremaps-engine.so.1.0.6_7 [new file with mode: 0755]
maps-plugin-here.changes [new file with mode: 0644]
maps-plugin-here.pc.in [new file with mode: 0644]
packaging/maps-plugin-here.spec
src/here_api.cpp [new file with mode: 0644]
src/here_base.cpp [new file with mode: 0644]
src/here_geocode.cpp [new file with mode: 0644]
src/here_manager.cpp [new file with mode: 0644]
src/here_place.cpp [new file with mode: 0644]
src/here_plugin.cpp [new file with mode: 0644]
src/here_revgeocode.cpp [new file with mode: 0644]
src/here_route.cpp [new file with mode: 0644]
src/here_utils.cpp [new file with mode: 0644]
x86_64/libheremaps-engine.so.1 [deleted symlink]
x86_64/libheremaps-engine.so.1.0.6_6 [deleted file]
x86_64/libmaps-plugin-here.so [deleted symlink]
x86_64/libmaps-plugin-here.so.0 [deleted symlink]
x86_64/libmaps-plugin-here.so.0.1.6 [deleted file]

index 8c54075..cb083d2 100644 (file)
@@ -1,7 +1,78 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT("maps-plugin-here")
+SET(pkg_name "maps-plugin-here")
+PROJECT(${pkg_name} C CXX)
 
+SET(CMAKE_INSTALL_PREFIX /usr)
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 
-INSTALL(FILES ${ARCH}/libmaps-plugin-here.so DESTINATION lib/maps/plugins)
-INSTALL(FILES ${ARCH}/libheremaps-engine.so DESTINATION lib)
+# Dependencies
+SET(dependents "glib-2.0 gmodule-2.0 libxml-2.0 dlog capi-network-connection capi-appfw-app-manager capi-maps-service")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED ${dependents})
+FOREACH(flag ${pkgs_CFLAGS})
+    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+    SET(EXTRA_CXXFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+
+# Build
+SET(CMAKE_INSTALL_PREFIX /usr)
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fvisibility=hidden -fPIC -Wall -Werror")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -Wall -fPIC -std=c++0x -fvisibility=hidden")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DEXPORT_API=__attribute__((visibility(\"default\")))")
+ADD_DEFINITIONS("-DTIZEN_DEBUG")
+
+
+# Main Include file
+SET(INC_DIR
+       inc     
+       inc/engine
+)
+
+INCLUDE_DIRECTORIES(
+       ${INC_DIR}
+)
+
+#This file must be corrected
+
+# Source Lists
+SET(SRCS
+       # Maps API
+       src/here_plugin.cpp
+
+       # Here plug-in
+       src/here_api.cpp
+       src/here_base.cpp
+       src/here_manager.cpp
+       src/here_geocode.cpp
+       src/here_place.cpp
+       src/here_revgeocode.cpp
+       src/here_route.cpp
+       src/here_utils.cpp
+)
+
+ADD_LIBRARY(${pkg_name} SHARED ${SRCS})
+
+SET_TARGET_PROPERTIES(${pkg_name}
+       PROPERTIES
+    VERSION ${FULLVER}
+    SOVERSION ${MAJORVER}
+    CLEAN_DIRECT_OUTPUT 1
+)
+
+TARGET_LINK_LIBRARIES(${pkg_name} ${pkgs_LDFLAGS})
+
+# Install
+INSTALL(TARGETS ${pkg_name} DESTINATION ${LIBDIR}/maps/plugins)
+INSTALL(FILES lib/${ARCH}/libheremaps-engine.so DESTINATION lib)
+
+# Test Suite
+#IF("${BINTYPE}" STREQUAL "eng")
+#ENDIF("${BINTYPE}" STREQUAL "eng")
diff --git a/aarch64/libheremaps-engine.so.1 b/aarch64/libheremaps-engine.so.1
deleted file mode 120000 (symlink)
index 0fc20c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6
\ No newline at end of file
diff --git a/aarch64/libheremaps-engine.so.1.0.6_6 b/aarch64/libheremaps-engine.so.1.0.6_6
deleted file mode 100755 (executable)
index eb41c8f..0000000
Binary files a/aarch64/libheremaps-engine.so.1.0.6_6 and /dev/null differ
diff --git a/aarch64/libmaps-plugin-here.so b/aarch64/libmaps-plugin-here.so
deleted file mode 120000 (symlink)
index 89d69a6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0
\ No newline at end of file
diff --git a/aarch64/libmaps-plugin-here.so.0 b/aarch64/libmaps-plugin-here.so.0
deleted file mode 120000 (symlink)
index f343856..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6
\ No newline at end of file
diff --git a/aarch64/libmaps-plugin-here.so.0.1.6 b/aarch64/libmaps-plugin-here.so.0.1.6
deleted file mode 100755 (executable)
index f89f98f..0000000
Binary files a/aarch64/libmaps-plugin-here.so.0.1.6 and /dev/null differ
diff --git a/arm/libheremaps-engine.so.1 b/arm/libheremaps-engine.so.1
deleted file mode 120000 (symlink)
index 0fc20c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6
\ No newline at end of file
diff --git a/arm/libheremaps-engine.so.1.0.6_6 b/arm/libheremaps-engine.so.1.0.6_6
deleted file mode 100755 (executable)
index f25ef47..0000000
Binary files a/arm/libheremaps-engine.so.1.0.6_6 and /dev/null differ
diff --git a/arm/libmaps-plugin-here.so b/arm/libmaps-plugin-here.so
deleted file mode 120000 (symlink)
index 89d69a6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0
\ No newline at end of file
diff --git a/arm/libmaps-plugin-here.so.0 b/arm/libmaps-plugin-here.so.0
deleted file mode 120000 (symlink)
index f343856..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6
\ No newline at end of file
diff --git a/arm/libmaps-plugin-here.so.0.1.6 b/arm/libmaps-plugin-here.so.0.1.6
deleted file mode 100755 (executable)
index 34228b2..0000000
Binary files a/arm/libmaps-plugin-here.so.0.1.6 and /dev/null differ
diff --git a/i586/libheremaps-engine.so.1 b/i586/libheremaps-engine.so.1
deleted file mode 120000 (symlink)
index 0fc20c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6
\ No newline at end of file
diff --git a/i586/libheremaps-engine.so.1.0.6_6 b/i586/libheremaps-engine.so.1.0.6_6
deleted file mode 100755 (executable)
index 400a010..0000000
Binary files a/i586/libheremaps-engine.so.1.0.6_6 and /dev/null differ
diff --git a/i586/libmaps-plugin-here.so b/i586/libmaps-plugin-here.so
deleted file mode 120000 (symlink)
index 89d69a6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0
\ No newline at end of file
diff --git a/i586/libmaps-plugin-here.so.0 b/i586/libmaps-plugin-here.so.0
deleted file mode 120000 (symlink)
index f343856..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6
\ No newline at end of file
diff --git a/i586/libmaps-plugin-here.so.0.1.6 b/i586/libmaps-plugin-here.so.0.1.6
deleted file mode 100755 (executable)
index b2c636f..0000000
Binary files a/i586/libmaps-plugin-here.so.0.1.6 and /dev/null differ
diff --git a/inc/engine/base/BaseBufferBase.h b/inc/engine/base/BaseBufferBase.h
new file mode 100755 (executable)
index 0000000..79950de
--- /dev/null
@@ -0,0 +1,56 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef BASE_BUFFER_BASE_H
+#define BASE_BUFFER_BASE_H
+
+#include "common/HereMaps_global.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class BufferBase
+{
+public:
+       BufferBase(void);
+       virtual ~BufferBase(void);
+
+       int GetCapacity(void) const;
+       int GetLimit(void) const;
+
+       class _BufferData
+       {
+       public:
+               _BufferData(void);
+               virtual ~_BufferData(void);
+               byte* GetArray(void);
+
+
+               // Attribute
+               unsigned long long capacityInByte;
+               long refCount;
+       }; // _BufferData
+
+       int _capacity;
+       int _position;
+       int _limit;
+       int _mark;
+       _BufferData* _pData;
+       byte* __pArrayStart;
+}; // BufferBase
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* BASE_BUFFER_BASE_H */
diff --git a/inc/engine/base/BaseByteBuffer.h b/inc/engine/base/BaseByteBuffer.h
new file mode 100755 (executable)
index 0000000..0dd4c99
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef BASE_BYTE_BUFFER_H
+#define BASE_BYTE_BUFFER_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseBufferBase.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class ByteBuffer       : public BufferBase
+{
+public:
+       ByteBuffer(void);
+       virtual ~ByteBuffer(void);
+       unsigned long Construct(const byte* pBuffer, int index, int length, int capacity);
+       byte* GetPointer(void) const;
+
+}; // ByteBuffer
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* BASE_BYTE_BUFFER_H */
diff --git a/inc/engine/base/BaseObject.h b/inc/engine/base/BaseObject.h
new file mode 100755 (executable)
index 0000000..ba651a1
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef BASE_OBJECT_H
+#define BASE_OBJECT_H
+
+#include "common/HereMaps_global.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Object
+{
+public:
+       Object(void);
+       virtual ~Object(void);
+       virtual bool Equals(const Object& obj) const;
+       virtual long GetHashCode(void) const;
+
+protected:
+       Object(const Object& obj);
+       Object& operator =(const Object& rhs);
+       virtual void Object_Reserved1(void) { }
+
+}; // Object
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* BASE_OBJECT_H */
diff --git a/inc/engine/base/EventDrivenThread.h b/inc/engine/base/EventDrivenThread.h
new file mode 100755 (executable)
index 0000000..05215c1
--- /dev/null
@@ -0,0 +1,127 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_EVENTDRIVENTHREAD_H
+#define HERE_EVENTDRIVENTHREAD_H
+
+#include <glib.h>
+#include <sys/eventfd.h>
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class EventDrivenThread;
+
+typedef std::vector<void*> FireArg_List;
+
+class EventDrivenThread : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class.
+        *
+        * @since 2.0
+        *
+        * @remarks     After creating an instance of this class, one of the
+        *              Construct() methods must be called explicitly to initialize this instance.
+        */
+       EventDrivenThread(void);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since 2.0
+        *
+        */
+       virtual ~EventDrivenThread(void);
+
+       result Construct(bool Delegate);
+
+       void Quit(void);
+
+       int Join(void);
+
+       /**
+        * Sends a user event to the event-driven thread.
+        *
+        * @since 2.0
+        *
+        * @final        Although this method is virtual, it must not be overridden.
+        *               If overridden, it may not work as expected.
+        *
+        * @return       An error code
+        * @param[in]    requestId              The user-defined event ID
+        * @param[in]    pArgs                  A pointer to the list of arguments
+        * @exception    E_SUCCESS          The method is successful.
+        * @exception    E_INVALID_STATE    The thread is in an invalid state.
+        * @exception    E_OUT_OF_MEMORY    The memory is insufficient.
+        * @exception    E_SYSTEM           A system error has occurred.
+        *
+        * @see          OnUserEventReceivedN()
+        */
+       int SendUserEvent(int requestType, void* pArgs);
+
+       void Fire(void* pArgs);
+
+       virtual void FireImpl( void* pArgs) = 0;
+
+       /**
+        * Called when the user event is received.
+        *
+        * @since 2.0
+        *
+        * @param[in]    requestId       The user-defined event ID
+        * @param[in]    pArgs           A pointer to the list of arguments
+        *
+        * @see          SendUserEvent()
+        */
+       virtual void OnUserEventReceivedN(int requestId, void* pArgs) = 0;
+
+private:
+       bool __constructed;
+       bool __is_quit;
+       GSource* __pSource;
+       GIOChannel* __pChannel;
+       GMainContext* __pGmainContext;
+
+       int __WorkingThreadNum;
+       bool __WaitingForJoin;
+       pthread_cond_t __join_condition;
+       pthread_mutex_t __join_mutex;
+
+       class ThreadArg
+       {
+       public:
+               int requestType;
+               void* pArg;
+               void* ReqInstance;
+       };
+
+       FireArg_List FireArgs;
+       pthread_mutex_t FireArgsLock;
+
+       static void* EventDrivenThreadHandler(void* thread_arg);
+       static gboolean OnEventReceived(GIOChannel* pChannel, GIOCondition condition, gpointer data);
+       static gboolean __stopWaitingForJoin(gpointer data);
+
+}; // EventDrivenThread
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_EVENTDRIVENTHREAD_H */
diff --git a/inc/engine/base/HereObject.h b/inc/engine/base/HereObject.h
new file mode 100755 (executable)
index 0000000..b0928a3
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_OBJECT_H
+#define HERE_OBJECT_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class HereObject: public Object
+{
+public:
+       HereObject();
+       HereObject(void* user_data);
+       ~HereObject();
+       void set_user_data(void* user_data);
+       void* data(void);
+
+protected:
+       void* __user_data;
+
+}; 
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_OBJECT_H */
diff --git a/inc/engine/base/Timer.h b/inc/engine/base/Timer.h
new file mode 100755 (executable)
index 0000000..166fc40
--- /dev/null
@@ -0,0 +1,169 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_TIMER_H
+#define HERE_TIMER_H
+
+#include <glib.h>
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Timer;
+
+enum TimerStatus
+{
+       TIMER_STATUS_NOT_ACTIVATED, // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+       TIMER_STATUS_ACTIVATED,     // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+       TIMER_STATUS_CANCELED,      // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+       TIMER_STATUS_EXPIRED,       // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+       TIMER_STATUS_ACTIVATED_REPEATABLE,       // This enum value is for internal use only. Using this enum can cause behavioral, security-related, and consistency-related issues in the application.
+};
+
+class ITimerEventListener
+{
+public:
+       /**
+        * This is the destructor for this class.
+        *
+        * @since 2.0
+        */
+       virtual ~ITimerEventListener(void) {}
+
+       /**
+        *      Called when the timer has expired.
+        *
+        *  @since 2.0
+        *
+        *      @param[in]      timer   The expired timer
+        */
+       virtual void OnTimerExpired(Timer& timer) = 0;
+
+}; // ITimerEventListener
+
+class Timer : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class.
+        *
+        * @since 2.0
+        */
+       Timer(void);
+
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since 2.0
+        */
+       virtual ~Timer(void);
+
+       /**
+        * Initializes this instance of %Timer with the specified listener.
+        *
+        * @since 2.0
+        *
+        * @return              An error code
+        * @param[in]   listener                The event listener
+        * @exception   E_SUCCESS               The method is successful.
+        * @exception   E_OUT_OF_MEMORY The memory is insufficient.
+        * @exception   E_SYSTEM                A system error has occurred.
+        */
+       int Construct(ITimerEventListener& listener);
+
+       /**
+        * Starts the timer.
+        *
+        * @if OSPCOMPAT
+        * @brief <i> [Compatibility] </i>
+        * @endif
+        *
+        * @since 2.0
+        *
+        * @if OSPCOMPAT
+     * @compatibility     This method has compatibility issues with Tizen API versions @b prior @b to @b 2.1. @n
+     *                    For more information, see @ref CompTimerStartPage "here".
+        * @endif
+        *
+        * @return      An error code
+        * @param[in]   timeout                 The timeout interval in milliseconds
+        * @exception   E_SUCCESS                       The method is successful.
+        * @exception   E_INVALID_ARG           The specified input parameter is invalid.
+        * @exception   E_INVALID_STATE         The timer cannot start as it is in an invalid state.
+        * @exception   E_SYSTEM                        A system error has occurred.
+        * @remarks     Once the timer has been started, it cannot be started again until it has expired.
+        * @see         Cancel()
+        */
+       int Start(int timeout);
+
+       /**
+        * @page                    CompTimerStartPage Compatibility for Start(int timeout)
+        * @section                 CompTimerStartPageIssueSection Issues
+        * Implementation of this method in Tizen API versions prior to 2.1 has the following issue: @n
+        * -# The method returns @c E_INVALID_ARG if timeout is equal to zero.
+        *
+        * @section                 CompTimerStartPageSolutionSection Resolutions
+        * The issue mentioned above is resolved in Tizen API version 2.1, and it is recommended to use Tizen API version 2.1 or above.
+        * -# In case of zero, %Timer sets the timeout to the best possible minimum interval without returning @c E_INVALID_ARG.
+        */
+
+       /**
+        * Starts the timer. @n
+        * The timer expires repeatedly until it is cancelled.
+        *
+        * @since 2.0
+        *
+        * @return      An error code
+        * @param[in]   interval                        The timeout interval in milliseconds
+        * @exception   E_SUCCESS                       The method is successful.
+        * @exception   E_INVALID_ARG           The specified input parameter is invalid.
+         * @exception   E_INVALID_STATE The timer cannot start as it is in an invalid state.
+        * @exception   E_SYSTEM                        A system error has occurred.
+        * @remarks     To stop the timer expiration or restart the timer, the timer must be cancelled.
+        * @see         Cancel()
+        */
+       int StartAsRepeatable(int interval);
+
+       /**
+        * Cancels the timer.
+        *
+        * @since 2.0
+        *
+        * @return              An error code
+        * @exception   E_SUCCESS       The method is successful.
+        * @exception   E_SYSTEM        A system error has occurred.
+        * @remarks     The started timer can be cancelled when it does not get expired. @n
+        *                      If the timer has already expired, this method also returns @c E_SUCCESS which causes the same effect as when cancelled normally.
+        */
+       int Cancel(void);
+
+private:
+       Timer(const Timer& rhs);
+
+       Timer& operator =(const Timer& rhs);
+
+private:
+       friend class _TimerImpl;
+       class _TimerImpl * __pTimerImpl;
+
+}; // Timer
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_TIMER_H */
diff --git a/inc/engine/common/Address.h b/inc/engine/common/Address.h
new file mode 100755 (executable)
index 0000000..0ad3889
--- /dev/null
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ADDRESS_H
+#define ADDRESS_H
+
+#include "HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a street address. It is used both in geocoding
+ * requests and in responses received from the server.
+ *
+ */
+class EXPORT_API Address
+{
+public:
+
+    /**
+     * This is the default constructor.
+     */
+    Address();
+
+    /**
+     * This method is the copy constructor.
+     *
+     * @param rRhs A constant reference to an <code>Address</code> object to
+     *        copy. 
+     */
+    Address(const Address& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~Address();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an <code>Address</code> object to
+     *        copy. 
+     * 
+     * @return A reference to the given instance of <code>Address</code> whose
+     *        contents now mirror those of the object supplied by the caller. 
+     */
+    Address& operator=(const Address& rRhs);
+
+    /**
+     * This method sets the name of the country.
+     * 
+     * @param sCountry A constant reference to a string containing the name of
+     *        a country.
+     */
+    void SetCountry(const String& sCountry);
+
+    /**
+     * This method retrieves the country code.
+     * 
+     * @return A constant reference to a string containing the country code.
+     */
+    const String& GetCountryCode() const;
+
+    /**
+     * This method sets the country code.
+     *
+     * @param sCountryCode A constant reference to a string containing the
+     *        country code.
+     */
+    void SetCountryCode(const String& sCountryCode);
+
+    /**
+     * This method retrieves the name of the country.
+     *
+     * @return A constant reference to a string containing the name of
+     *        a country.
+     */
+    const String& GetCountry() const;
+
+    /**
+     * This method sets the name of the county.
+     * 
+     * @param sCounty A constant reference to a string containing the name of
+     *        a county.
+     */
+    void SetCounty(const String& sCounty);
+
+    /**
+     * This method retrieves the name of the county.
+     * 
+     * @return A constant reference to a string containing the name of
+     *        a county.
+     */
+    const String& GetCounty() const;
+
+    /**
+     * This method sets the address label.
+     * 
+     * @param sLabel A constant reference to a string containing the label.
+     */
+    void SetLabel(const String& sLabel);
+
+    /**
+     * This method retrieves the address label.
+     * 
+     * @return A constant reference to a string containing the label.
+     */
+    const String& GetLabel() const;
+
+    /**
+     * This method sets the identifier of the state. State corresponds to a state
+     * in the USA or Bundesland in Germany.  
+     * 
+     * @param sState A constant reference to a string containing the name or the
+     *        abbreviation of the name of the state.
+     */
+    void SetState(const String& sState);
+
+    /**
+     * This method retrieves the identifier the state. State corresponds to a
+     * state in the USA or Bundesland in Germany.
+     * 
+     * @return A constant reference to a string containing the identifier of the
+     *        state.
+     */
+    const String& GetState() const;
+
+    /**
+     * This method sets the name of the city.
+     * 
+     * @param sCity A constant reference to a string containing the name of the
+     *        city.
+     */
+    void SetCity(const String& sCity);
+
+    /**
+     * This method retrieves the name of the city.
+     * 
+     * @return A constant reference to a string containing the name of the
+     *        city.
+     */
+    const String& GetCity() const;
+
+    /**
+     * This method sets the name of the district. A district corresponds either to
+     * an administrative area within a city or a neighborhood, for example "Greenwich
+     * Village", "Kreuzberg" (in Berlin).
+     *
+     * @param sDistrict A constant reference to a string containing the name of the
+     *        district.
+     */
+    void SetDistrict(const String& sDistrict);
+
+    /**
+     * This method retrieves the name of the district. A district corresponds
+     * either to an administrative area within a city or a neighborhood, for
+     * example "Greenwich Village", "Kreuzberg" (in Berlin).
+     *
+     * @return A constant reference to a string containing the name of the
+     *        district.
+     */
+    const String& GetDistrict() const;
+
+    /**
+     * This method sets the street name. 
+     * 
+     * @param sStreet A constant reference to a string containing the name of the
+     *        street.
+     */
+    void SetStreet(const String& sStreet);
+
+    /**
+     * This method retrieves the street name. 
+     * 
+     * @return A constant reference to a string containing the name of the
+     *        street.
+     */
+    const String& GetStreet() const;
+
+    /**
+     * This method sets the house number (or house name if appropriate). 
+     * 
+     * @param sHouseNumber A constant reference to a string containing the
+     *        house number (or the house name if appropriate).
+     */
+    void SetHouseNumber(const String& sHouseNumber);
+
+    /**
+     * This method retrieves the house number (or house name if appropriate). 
+     * 
+     * @return A constant reference to a string containing the
+     *        house number (or the house name if appropriate).
+     */
+    const String& GetHouseNumber() const;
+
+    /**
+     * This method sets the post code. 
+     * 
+     * @param sPostalCode A constant reference to a string containing the post
+     *        code.
+     */
+    void SetPostalCode(const String& sPostalCode);
+
+    /**
+     * This method retrieves the post code. 
+     * 
+     * @return A constant reference to a string containing the post
+     *        code.
+     */
+    const String& GetPostalCode() const;
+
+    /**
+     * This method sets the identifier of the floor (within a building). 
+     * 
+     * @param sFloor A constant reference to a string containing the identifier
+     *        of the floor.
+     */
+    void SetFloor(const String& sFloor);
+
+    /**
+     * This method retrieves the identifier of the floor (within a building). 
+     * 
+     * @return A constant reference to a string containing the identifier
+     *        of the floor.
+     */
+    const String& GetFloor() const;
+
+    /**
+     * This method sets the identifier of suite (within a building). 
+     * 
+     * @param sSuite A constant reference to a string containing the identifier
+     *        of the suite.
+     */
+    void SetSuite(const String& sSuite);
+
+    /**
+     * This method retrieves the identifier of suite (within a building). 
+     * 
+     * @return A constant reference to a string containing the identifier
+     *        of the suite.
+     */
+    const String& GetSuite() const;
+
+    /**
+     * This method associates an adidtional data item with the given address.
+     * 
+     * @param sKey A constant reference to a string containing the key
+     *        that identifies the data item (in a map of additional data items).
+     * 
+     * @param sValue A constant reference to a string containing the value of
+     *        the data item identified by <code>sKey</code>.
+     */
+    void AddAdditionalData(const String& sKey, const String& sValue);
+
+    /**
+     * This method retrieves the value of an additional address data item on the
+     * basis of a key provided by the caller.
+     *
+     * @param sKey A constant reference to a string containing the key
+     *        that identifies the data item to retrieve.
+     */
+    const String* GetAdditionalDataValue(const String& sKey) const;
+
+    /**
+     * This method retrieves a value indicating how many additional address data
+     * items have been associated with the given instance of
+     * <code>Address</code>.
+     * 
+     * @return An integer indicating the number of additional data items that
+     *        are associated with the given instance of <code>Address</code>.
+     */
+    size_t GetNumAdditionalDataEntries() const;
+
+    /**
+     * This method retrieves the key of the additional data item at the index
+     * specified by the caller.
+     *
+     * @param idx An integer value specifying the index of the additional address
+     *        data item whose key is to be retrieved. 
+     * 
+     * @return A constant pointer to a string containing the key
+     *        for an additional address data item.
+     */
+    const String* GetAdditionalDataKey(size_t idx) const;
+
+private:
+    class AddressImpl;
+    AddressImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/ApplicationContext.h b/inc/engine/common/ApplicationContext.h
new file mode 100755 (executable)
index 0000000..d19dd95
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef APPLICATIONCONTEXT_H
+#define APPLICATIONCONTEXT_H
+
+#include "common/HereMaps_global.h"
+
+#include <vector>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates the credentials required to use the Geocoding API.
+ * The credentials consists of the app code and app id.
+ *
+ * The class is a singleton.
+ */
+class EXPORT_API ApplicationContext
+{
+public:
+    /**
+     * This is the destructor.
+     */
+    ~ApplicationContext();
+
+    /**
+     * This method sets the preferred language, using a two-letter BCP-47 code
+     * supplied by the caller. 
+     *
+     * @param sLanguage A const reference to a string containing a two-letter
+     *        code identifying the preferred map language.
+     */
+    void SetPreferredLanguage(const String& sLanguage);
+
+    /**
+     * This method retrieves a string containing a BCP-47 code that indicates
+     * the preferred language.
+     *
+     * @return A constant reference to a string containing a two-letter BCP-47
+     *        code indicating the preferred language.
+     */
+    const String& GetPreferredLanguage() const;
+
+    /**
+     * This method retrieves the app code.
+     * 
+     * @return A constant reference to a string containing the app code. 
+     */
+    const String& GetAppCode() const;
+
+    /**
+     * This method retrieves the app id.
+     * 
+     * @return A constant reference to a string containing the app id. 
+     */
+    const String& GetAppId() const;
+
+    /**
+     * This is a static method which returns the singleton's instance.
+     *
+     * @return A static reference to the instance of this singleton class.
+     */
+    static ApplicationContext& GetInstance();
+
+    /**
+     * This method initialises the singleton object.
+     *
+     * @param sAppCode A constant reference to a string containing the app code.
+     *
+     * @param sAppId A constant reference to a string containing the app id.
+     *
+     * @return A Boolean indicating the result of initialization,
+     *        <code>true</code> on success, <code>false</code> on failure. Note
+     *        that if the object already exists and has been initialized,
+     *        further attempts to call this methods fail (the return value is
+     *        <code>false</code>.
+     */
+    bool Initialize(const String& sAppCode, const String& sAppId);
+
+    /**
+     * This method queries initialisation status.
+     *
+     * @return A Boolean indicating the status of initialization,
+     *        <code>true</code> if the object is initialized, otherwise
+     *        <code>false</code>.
+     */
+    bool IsInitialized() const;
+
+    /**
+     * This method sets a flag to indicate whether a high-resolution map is to be used.
+     * 
+     * @param haveHighResolution A Boolean, <code>true</code> to indicate that a
+     *        high-resolution map is to be used, otherwise <code>false</code>.
+     */
+    void SetHighResolutionMap(bool haveHighResolution);
+
+    /**
+     * This method retrieves a Boolean value indicating whether a high-resolution map is used.
+     * 
+     * @return A Boolean, <code>true</code> to indicate that a
+     *        high-resolution map is (to be) used, otherwise <code>false</code>.
+     */
+    bool HaveHighResolutionMap() const;
+
+private:
+    /**
+     * This method is a private constructor for the singleton.
+     */
+    ApplicationContext();
+
+    HERE_MAPS_NO_COPY_NO_ASSIGN(ApplicationContext);
+
+    class ApplicationContextImpl;
+    ApplicationContextImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // APPLICATIONCONTEXT_H
diff --git a/inc/engine/common/BaseQuery.h b/inc/engine/common/BaseQuery.h
new file mode 100755 (executable)
index 0000000..3123bd7
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASEQUERY_H
+#define BASEQUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+#include "common/RestItemHandle.h"
+#ifdef TIZEN_MIGRATION
+#include "base/HereObject.h"
+#else
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class BaseReply;
+class QueryListener;
+class GeoCoordinates;
+class GeoBoundingBox;
+
+/**
+ * This class is the base class representing any rest based query class
+ * in this library
+ */
+class BaseQuery
+{
+public:
+    typedef int RequestId;
+
+    /**
+     * This is the destructor.
+     */
+    virtual ~BaseQuery();
+
+    /**
+     * This method creates the query URI. It is to be implemented be derived classes.
+     *
+     * @return URI string.
+     */
+    virtual String CreateUri() const = 0;
+
+protected:
+    /**
+     * This constant represents an illegal URL (an empty string).
+     */
+    static const String ILLEGAL_URL;
+
+    /**
+     * This is the default constructor.
+     */
+    BaseQuery();
+
+    /**
+     * This method appends authentication credentials to the query. The
+     * authentication credentials are <code>app_id</code> and
+     * <code>app_code</code>. The method obtains the credentials set at
+     * initialization and copies them to the destination provided by the caller,
+     * following the standard query-parameter format:
+     * <code>app_id=app_id_value&app_code=app_code_value<code>
+     *
+     * @param sDst A reference to a string to receive the authentication
+     * credentials.
+     *
+     * @return <code>true</code> if the destination string has been set with the
+     *        authentication credentials, <code>false</code> if the the
+     *        <code>ApplicationContext</code> is uninitialized.
+     */
+    bool AppendCredentials(String& sDst) const;
+
+#ifndef TIZEN_MIGRATION
+    /**
+     * This method retrieves the user data associated with the query.
+     *
+     * @return A pointer to an object containing the user data.
+     */
+    Tizen::Maps::HereObject* GetUserData() const;
+#endif
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(BaseQuery);
+
+    class BaseQueryImpl;
+    BaseQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASEQUERY_H
diff --git a/inc/engine/common/BaseReply.h b/inc/engine/common/BaseReply.h
new file mode 100755 (executable)
index 0000000..be04a4e
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASEREPLY_H
+#define BASEREPLY_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+
+#ifdef TIZEN_MIGRATION
+#include <base/HereObject.h>
+#else
+#include <FBaseObject.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ErrorBase;
+
+/**
+ * This class is the base class that encapsulates a reply to a REST-based query.
+ * 
+ * @ingroup TODO
+ */
+class EXPORT_API BaseReply
+{
+public:
+    /**
+     * This method is a destructor.
+     */
+    virtual ~BaseReply();
+
+    /**
+     * This method retrieves error information associated with the query
+     * response received from the server.
+     * 
+     * @return A constant pointer to an object containing the error details.
+     */
+    const ErrorBase* GetError() const;
+
+    /**
+     * This method sets (saves) a pointer to user data associated with the
+     * reply to the query.
+     *
+     * @param pUserData A pointer to user data.
+     */
+     void SetUserData(Tizen::Maps::HereObject* pUserData);
+
+    /**
+     * This method retrieves the pointer the user data.
+     *
+     * @return A pointer to the user data.
+     */
+    Tizen::Maps::HereObject* GetUserData() const;
+
+protected:
+    /**
+     * This method is the default constructor. 
+     */
+    BaseReply();
+
+    /**
+     * This method appends information about an error associated with the server
+     * response. 
+     *
+     * @param rError A reference to an object containing the error details.
+     */
+    void Append(ErrorBase& rError);
+
+private:
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize) = 0;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(BaseReply);
+    friend class RestItem;
+
+    class BaseReplyImpl;
+    BaseReplyImpl* m_pImpl;
+};
+
+typedef std::tr1::shared_ptr<BaseReply> BaseReplyPtr;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASEREPLY_H
diff --git a/inc/engine/common/CommunicationError.h b/inc/engine/common/CommunicationError.h
new file mode 100755 (executable)
index 0000000..7d7c163
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef COMMUNICATIONERROR_H
+#define COMMUNICATIONERROR_H
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FNet.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information about an error condition that may arise
+ * in network communications between the client and the server.
+ */
+class EXPORT_API CommunicationError : public ErrorBase
+{
+public:
+    /** 
+     * This enumeration defines error code identifiers. 
+     */
+    enum ErrorCode
+    {
+        CE_HttpError,       ///< Indicates an HTTP error.
+        CE_NetworkError,    ///< Indicates a network error.
+        CE_RestEngineError, ///< Indicates a REST engine error.
+        CE_MaxRequests      ///< Indicates that the maximum number of requests
+                            ///  has been reached.
+    };
+
+    /**
+     * This typedef defines a HTTP status code as a type.
+     */
+#ifdef TIZEN_MIGRATION
+    typedef long HttpStatusCode;
+#else
+    typedef Tizen::Net::Http::NetHttpStatusCode HttpStatusCode;
+#endif
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param aErrorCode A value representing an error code.
+     */
+    CommunicationError(ErrorCode aErrorCode);
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param aHttpStatusCode A value representing an HTTP status code as
+     *        defined on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
+     */
+    CommunicationError(HttpStatusCode aHttpStatusCode);
+
+    /**
+     * This method is a (virtual) destructor.
+     *
+     */
+    virtual ~CommunicationError();
+
+    /**
+     * This method retrieves an error code.
+     * 
+     * @return A value representing an error code.
+     */
+    ErrorCode GetErrorCode() const;
+
+    /**
+     * This method retrieves a string representation of the given instance of
+     * <code>CommunicationError</code>.
+     *
+     * @return A string representation of the given instance of
+     * <code>CommunicationError</code>.
+     */
+    virtual String ToString() const;
+
+    /**
+     * This method sets an HTTP status code.
+     *
+     * @param aHttpStatusCode A value representing an HTTP status code as
+     *        defined on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
+     */
+    void SetHttpStatusCode(HttpStatusCode aHttpStatusCode);
+
+#ifdef TIZEN_MIGRATION
+    /**
+     * This method retrieves the HTTP status code associated with the given
+     * instance of the class. 
+     *
+     * @return aHttpStatusCode A value representing an HTTP status code as
+     *        defined on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
+     */
+    const HttpStatusCode GetHttpStatusCode();
+#endif
+
+    /**
+     * This method associates a text string describing an error with the given
+     * instance of the class. 
+     * 
+     * @param sDesc A constant reference to a string containing the error
+     *        description.
+     */
+    void SetErrorDescription(const String& sDesc);
+
+    /**
+     * This method retrieves the error description associated with the given
+     * instance of the class. 
+     * 
+     * @return A constant reference to a string containing the error
+     *        description.
+     */
+    const String& GetErrorDescription() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(CommunicationError);
+
+    class CommunicationErrorImpl;
+    CommunicationErrorImpl* m_pImpl;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/ErrorBase.h b/inc/engine/common/ErrorBase.h
new file mode 100755 (executable)
index 0000000..abcff3d
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ERRORBASE_H
+#define ERRORBASE_H
+
+#include "common/HereMaps_global.h"
+
+#include <iostream>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class BaseReply;
+class GeoCoderReplyParser;
+
+/**
+ * This class is the base class for classes that encapsulate error conditions,
+ * for example <code>CommunicationError</code>.
+ */
+class EXPORT_API ErrorBase
+{
+public:
+    /**
+     * This enumeration defines identifiers for error categories.
+     */
+    enum ErrorCategory
+    {
+        EC_None = 0,            ///< Indicates success.
+        EC_CommunicationsError, ///< Indicates a communications error.
+        EC_ParserError,         ///< Indicates a parser error.
+        EC_RouterError,         ///< Indicates a router error.
+        EC_TileMapError,        ///< Indicates a tile map error.
+        EC_FinderError          ///< Indicates a finder/places error.
+    };
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~ErrorBase();
+
+    /**
+     * This method produces a string representation of the given instance of
+     * the class. The method must be implemented by derived classes. 
+     * 
+     * @return A string containing a text representation of the given instance
+     *        of the class.  
+     */
+    virtual String ToString() const = 0;
+
+    /**
+     * This method prints the text representation of the given instance of the
+     * class to the stream identified by the caller. 
+     * 
+     * \sa ToString
+     * 
+     * @param rSink A reference to the steam to which to output the (text
+     *        representeation) of the given instance.
+     */
+    void Print(std::ostream& rSink) const;
+
+    /**
+     * This method retrieves a value representing the error category assigned to
+     * the given instance of the class.
+     * 
+     * @return A value representing the error category assigned to
+     *        the given instance of the class.
+     */
+    ErrorCategory GetErrorCategory() const;
+
+protected:
+    /**
+     * This method is the default constructor.
+     */
+    ErrorBase();
+
+    /**
+     * This method sets the error category for the given instance of the class.
+     * 
+     * @param aErrorCategory A value representing the error category to be
+     *        assigned to the given instance of the class.
+     */
+    void SetErrorCategory(ErrorCategory aErrorCategory);
+
+private:
+   // HERE_MAPS_NO_COPY_NO_ASSIGN(ErrorBase);
+
+    friend class BaseReply;
+    friend class GeoCoderReplyParser;
+    friend class GeoRouterReplyParser;
+    friend class JsonParser;
+    friend class TestErrorBase;
+
+
+    /*
+     * \brief note ownership of parameter is transferred
+     * \param rError error that is appended to linked list of error - must be allocated on heap
+     */
+    void Append(ErrorBase& rError);
+
+    class ErrorBaseImpl;
+    ErrorBaseImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/GeoBoundingArea.h b/inc/engine/common/GeoBoundingArea.h
new file mode 100755 (executable)
index 0000000..86a9b89
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOBOUNDINGAREA_H
+#define GEOBOUNDINGAREA_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+
+/**
+ * This class encapsulates a bounding area defined in terms of the geographic
+ * coordinates of its top left and bottom right corners.
+ *
+ * The virtual methods of the class must be implemented by derived classes.
+ */
+class EXPORT_API GeoBoundingArea
+{
+public:
+    /**
+     * This enumeration defines identifiers for types of bounding areas. 
+     */
+    enum AreaType
+    {
+        AT_BoxType,   ///< Indicates that the bounding area is a box.
+        AT_CircleType ///< Indicates that the bounding area is a circle.
+    };
+
+    /**
+     * This method is a (virtual) destructor.
+     */
+    virtual ~GeoBoundingArea()
+    {
+    }
+
+    /**
+     * This method retrieves a value indicating what type of area the given
+     * object represents.
+     *
+     * @return A value indicating the area type.
+     */
+    virtual AreaType GetType() const = 0;
+
+    /**
+     * This method checks if the given bounding area contains the location
+     * whose coordinates are provided by the caller.
+     * 
+     * @param rCoordinate An object containing the geographic coordinates of the
+     *        location to check.
+     *
+     * @return <code>true</code> if the location lies within the given bounding
+     *        box, otherwise <code>false</code>.
+     */
+    virtual bool Contains(const GeoCoordinates& rCoordinate) const = 0;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOBOUNDINGAREA_H */
diff --git a/inc/engine/common/GeoBoundingBox.h b/inc/engine/common/GeoBoundingBox.h
new file mode 100755 (executable)
index 0000000..d21b1bb
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOBOUNDINGBOX_H
+#define GEOBOUNDINGBOX_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "common/GeoBoundingArea.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+
+class GeoBoundingBox;
+
+/**
+ * This typedef defines a vector of instances of <code>GeoBoundingBox</code> as
+ * a type. 
+ */
+typedef std::vector<GeoBoundingBox> GeoBoundingBoxList;
+
+/**
+ * This class encapsulates a bounding box defined in terms of the geographic
+ * coordinates of its top-left and bottom-right corners. 
+ */
+class EXPORT_API GeoBoundingBox : public GeoBoundingArea
+{
+public:
+    /**
+     * This method is the default constructor. 
+     */
+    GeoBoundingBox();
+
+    /**
+     * This method is a copy constructor. 
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        used to populate the new instance of this class. 
+     */
+    GeoBoundingBox(const GeoBoundingBox& rRhs);
+
+    /**
+     * This method is a constructor that creates a new instance, using the
+     * coordinates of the top-left and bottom=right corners provided by the
+     * caller.
+     * 
+     * @param rTopLeft A constant reference to an object providing the
+     *        geographic coordinates of the top-left corner of the given
+     *        bounding box.
+     * 
+     * @param rBottomRight A constant reference to an object providing the
+     *        geographic coordinates of the bottom-right corner of the given
+     *        bounding box.
+     */
+    GeoBoundingBox(const GeoCoordinates& rTopLeft, const GeoCoordinates& rBottomRight);
+
+    /**
+     * This method constructs a rectangle from the coordinates of its boundaries.
+     *
+     * If <code>west</code> is larger than <code>east</code>, then the new
+     * rectangle lies on the opposite side of the globe, i.e. +180 meridian.
+     *
+     * @param west A value indicating the minimum longitude.
+     * @param east A value indicating the maximum longitude.
+     * @param south A value indicating the minimum latitude.
+     * @param north A value indicating the the maximum latitude.
+     */
+    GeoBoundingBox( double west, double east, double south, double north );
+
+    /**
+     * This method is the destructor. 
+     */
+    ~GeoBoundingBox();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an object whose contents
+     *        are to be copied to the given instance of the class.
+     * 
+     * @return A reference to the given instance of the class after the
+     *        assignment. 
+     */
+    GeoBoundingBox& operator=(const GeoBoundingBox& rRhs);
+
+    /**
+     * This method sets the coordinates of the top-left corner of the given
+     * instance of <code>GeoBoundingBox</code>.
+     * 
+     * @param A constant reference to an object containing the new geographic
+     *        coordinates of the top-left corner of the bounding box.
+     */
+    void SetTopLeft(const GeoCoordinates& rCoord);
+
+    /**
+     * This method retrieves the coordinates of the top-left corner of the given
+     * instance of <code>GeoBoundingBox</code>.
+     * 
+     * @return A constant reference to an object containing the geographic
+     *        coordinates of the top-left corner of the bounding box.
+     */
+    const GeoCoordinates& GetTopLeft() const;
+
+    /**
+     * This method sets the coordinates of the bottom-right corner of the given
+     * instance of <code>GeoBoundingBox</code>.
+     * 
+     * @param A constant reference to an object containing the new geographic
+     *        coordinates of the bottom-right corner of the bounding box.
+     */
+    void SetBottomRight(const GeoCoordinates& rCoord);
+
+    /**
+     * This method retrieves the coordinates of the bottom-right corner of the
+     * given instance of <code>GeoBoundingBox</code>.
+     * 
+     * @return A constant reference to an object containing the geographic
+     *        coordinates of the bottom-right corner of the bounding box.
+     */
+    const GeoCoordinates& GetBottomRight() const;
+
+    /**
+     * This method calculates a bounding box that represents the union of the
+     * given <code>GeoBoundingBox</code> and the instance provided by the
+     * caller.
+     * 
+     * @param A constant reference to an object for which to calculate a union
+     *        with the given instance of <code>GeoBoundingBox</code>.
+     *
+     * @return An object representing the union of two instances of
+     *        <code>GeoBoundingBox</code>.
+     */
+    GeoBoundingBox Union(const GeoBoundingBox& rOther);
+
+    /**
+     * This method retrieves a value indicating the area type represented by the
+     * given object.
+     * 
+     * @return A value indicating the area type. 
+     */
+    AreaType GetType() const;
+
+    /**
+     * This method checks if the given bounding box contains the location
+     * provided by the caller.
+     * 
+     * @param rCoordinate An object containing the geographic coordinates of the
+     *        location to check. 
+     * 
+     * @return <code>true</code> if the location lies within the given bounding
+     *        box, otherwise <code>false</code>. 
+     */
+    bool Contains(const GeoCoordinates& rCoordinate) const;
+
+    /**
+     * This method checks if the coordinates of the given instance of
+     * <code>GeoBoundingBox</code> are valid.
+     *
+     * @return Value <code>true</code> if the coordinates of the top-left and
+     *        bottom-right corners are valid, otherwise <code>false</code>.
+     */
+    bool IsValid() const;
+
+private:
+    class GeoBoundingBoxImpl;
+    GeoBoundingBoxImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/GeoBoundingCircle.h b/inc/engine/common/GeoBoundingCircle.h
new file mode 100755 (executable)
index 0000000..a60146c
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOBOUNDINGCIRCLE_H
+#define GEOBOUNDINGCIRCLE_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoBoundingArea.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+
+/**
+ * This class encapsulates a bounding circle defined in terms of the geographic
+ * coordinates of its center and a radius. 
+ */
+class EXPORT_API GeoBoundingCircle : public GeoBoundingArea
+{
+public:
+    /**
+     * This method is the default constructor. 
+     */
+    GeoBoundingCircle();
+
+    /**
+     * This method is a copy constructor. 
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        used to set the properties of a new instance of this class. 
+     */
+    GeoBoundingCircle(const GeoBoundingCircle& rRhs);
+
+    /**
+     * This method is a constructor that creates a new instance, using the
+     * coordinates of the center of the circle and the length of its radius.
+     * 
+     * @param rCenter A constant reference to an object providing the
+     *        geographic coordinates of the center of the given
+     *        bounding circle.
+     * 
+     * @param rRadius A value providing the length of the radius in meters.
+     */
+    GeoBoundingCircle(const GeoCoordinates& rCenter, double rRadius);
+
+    /**
+     * This method is the destructor. 
+     */
+    ~GeoBoundingCircle();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to the right-hand object whose contents
+     *        are to be copied to the given instance of the class.
+     * 
+     * @return A reference to the given instance of the class after the
+     *        assignment. 
+     */
+    GeoBoundingCircle& operator = (const GeoBoundingCircle& rRhs);
+
+    /**
+     * This method sets the coordinates of the center of the given
+     * instance of <code>GeoBoundingCircle</code>.
+     * 
+     * @param A constant reference to an object containing the new geographic
+     *        coordinates of the center of the bounding circle.
+     */
+    void SetCenter(const GeoCoordinates& rCenter);
+
+    /**
+     * This method retrieves the coordinates of the center of the given
+     * instance of <code>GeoBoundingCircle</code>.
+     * 
+     * @return A constant reference to an object containing the geographic
+     *        coordinates of the center of the bounding circle.
+     */
+    const GeoCoordinates& GetCenter() const;
+
+    /**
+     * This method sets the radius of the given
+     * instance of <code>GeoBoundingCircle</code>.
+     * 
+     * @param rRadius A value providing the length of the radius in meters.
+     */
+    void SetRadius(double aRadius);
+
+    /**
+     * This method retrieves the radius of the given
+     * instance of <code>GeoBoundingCircle</code>.
+     * 
+     * @return A value providing the length of the radius in meters.
+     */
+    double GetRadius() const;
+
+
+    /**
+     * This method retrieves a value indicating the area type applicable to the
+     * given object.
+     * 
+     * @return A value indicating the area type. 
+     */
+    AreaType GetType() const;
+
+    /**
+     * This method checks if the given bounding circle contains the location
+     * defined by the object provided by the caller.
+     * 
+     * @param rCoordinate An object containing the geographic coordinates of the
+     *        location to check. 
+     * 
+     * @return <code>true</code> if the location lies within the given bounding
+     *        box, otherwise <code>false</code>. 
+     */
+    bool Contains(const GeoCoordinates& rCoordinate) const;
+
+private:
+    class GeoBoundingCircleImpl;
+    GeoBoundingCircleImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOBOUNDINGCIRCLE_H */
diff --git a/inc/engine/common/GeoCoordinates.h b/inc/engine/common/GeoCoordinates.h
new file mode 100755 (executable)
index 0000000..e8f6a30
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCOORDINATES_H
+#define GEOCOORDINATES_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+typedef std::vector<GeoCoordinates> GeoCoordinateList;
+
+/**
+ * This class represents a geographic location defined in terms of WGS84
+ * coordinates. The coordinates (latitude, longitude and altitude) are stored
+ * as doubles.
+ */
+class EXPORT_API GeoCoordinates
+{
+public:
+    static const double LATITUDE_RANGE;
+    static const double LONGITUDE_RANGE;
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoCoordinates();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs A constant reference to an instance of
+     *        <code>GeoCoordinates</code> whose contents are to be copied into
+     *        the object being created.
+     */
+    GeoCoordinates(const GeoCoordinates& rRhs);
+
+    /**
+     * This method is a constructor.
+     *
+     * @param fLatitude A value specifying WGS84 latitude in degrees.
+     * 
+     * @param fLongitude A value specifying WGS84 longitude in degrees.
+     * 
+     * @param fAltitude A value specifying the altitude in meters, 
+     *        as height above the WGS84 geoid; optional, the default
+     *        is 0.
+     */
+    GeoCoordinates(double fLatitude, double fLongitude, double fAltitude = 0.);
+
+    /**
+     * This method is the destructor.
+     */
+    ~GeoCoordinates();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an instance of
+     *        <code>GeoCoordinates</code> whose contents are to be copied into
+     *        the given instance.
+     */
+    GeoCoordinates& operator=(const GeoCoordinates& rRhs);
+    
+    /**
+     * This method sets the value of longitude. 
+     *
+     * @param fValue A value specifying WGS84 longitude in degrees.  
+     */
+    void SetLongitude(double fValue);
+    
+    /**
+     * This method retrieves the value of longitude. 
+     *
+     * @return A value specifying WGS84 longitude in degrees.  
+     */
+    double GetLongitude() const;
+
+    /**
+     * This method sets the value of latitude. 
+     *
+     * @param fValue A value specifying WGS84 latitude in degrees.  
+     */
+    void SetLatitude(double fValue);
+
+    /**
+     * This method retrieves the value of latitude. 
+     *
+     * @return A value specifying WGS84 latitude in degrees.  
+     */
+    double GetLatitude() const;
+
+    /**
+     * This method sets the value of altitude. 
+     *
+     * @param fValue  A value representing altitude as height above
+     *        the WGS84 geoid in meters.
+     */
+    void SetAltitude(double fValue);
+
+    /**
+     * This method retrieves the value of altitude. 
+     *
+     * @return  A value representing altitude as height above
+     *        the WGS84 geoid in meters.
+     */
+    double GetAltitude() const;
+    
+    /** 
+     * This method checks if the given object is valid. 
+     * 
+     * The object is valid if the latitude and longitude have been set,
+     * latitude is in the range [-85.015113..85.015113] (degrees) and longitude is
+     * in the range [-180..180] (degrees).
+     * 
+     * @return <code>true</code> if the object is valid, otherwise
+     *        <code>false</code>.
+     */
+    bool IsValid() const;
+
+    /**
+     * This operator checks if the given object is identical to the right-hand
+     * object. 
+     * 
+     * @param other A constant reference to an object which is to be compared to
+     *        the given instance. 
+     * 
+     * @return <code>true</code> if the two objects are identical, otherwise
+     *        <code>false</code>. 
+     */
+    bool operator == (const GeoCoordinates& other) const;
+
+    /** 
+     * This operator checks if the given object differs (is not equal to) the
+     * right-hand object.
+     * 
+     * @param other A constant reference to an object which is to be compared to
+     *        the given instance. 
+     * 
+     * @return <code>true</code> if the two objects are different, otherwise
+     *        <code>false</code>. 
+     */
+    bool operator != (const GeoCoordinates& other) const;    
+
+private:
+    class GeoCoordinatesImpl;
+    GeoCoordinatesImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/GeoLocation.h b/inc/engine/common/GeoLocation.h
new file mode 100755 (executable)
index 0000000..0f26c6f
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef LOCATION_H
+#define LOCATION_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Address;
+class GeoCoordinates;
+class GeoBoundingBox;
+
+/** 
+ *  This class represents the standard set of basic location information.
+ *
+ *  This includes the address, coordinates and map view.
+ *
+ */
+class EXPORT_API GeoLocation
+{
+public:
+    /**
+     * This enumeration defines identifiers for location types.
+     */
+    enum LocationType
+    {
+        LT_Unknown = -1, ///< Indicates an unknown location type.
+        LT_Point,        ///< Indicates that the location is a point.
+        LT_Area,         ///< Indicates that the location is an area.
+        LT_Line          ///< Indicates that the location is a line. 
+    };
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoLocation();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs A constant reference to an instance of
+     *        <code>GeoLocation</code> whose contents are to be copied into
+     *        the object being created.
+     */
+    GeoLocation(const GeoLocation& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~GeoLocation();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an instance of
+     *        <code>GeoLocation</code> whose contents are to be copied into
+     *        the given instance.
+     */
+    GeoLocation& operator=(const GeoLocation& rRhs);
+
+    /**
+     * This method sets the address of the location. 
+     *
+     * @param rAddress A constant reference to an object containing an address.
+     */
+    void SetAddress(const Address& rAddress);
+
+    /**
+     * This method retrieves the address of the location. 
+     *
+     * @return A constant reference to an object containing an address.
+     */
+    const Address& GetAddress() const;
+
+    /**
+     * This method sets the label for the location. 
+     *
+     * @param sLabel A constant reference to an object containing the value of
+     *        the label.
+     */
+    void SetLabel(const String& sLabel);
+
+    /**
+     * This method retrieves the label for the location. 
+     *
+     * @return A constant reference to an object containing the value of
+     *        the label.
+     */
+    const String& GetLabel() const;
+
+    /**
+     * This method sets the display position of the location. The display
+     * position contains the coordinates at which to place a marker indicating
+     * the given location on the map. 
+     *
+     * @param rCoord A constant reference to an object containing the geographic
+     *        coordinates of the display position.
+     */
+    void SetDisplayPosition(const GeoCoordinates& rCoord);
+
+    /**
+     * This method retrieves the display position of the location. The display
+     * position contains the coordinates at which to place a marker indicating
+     * the given location on the map. 
+     *
+     * @return A constant reference to an object containing the geographic
+     *        coordinates of the display position.
+     */
+    const GeoCoordinates& GetDisplayPosition() const;
+
+    /**
+     * This method appends the navigation position. A navigation position
+     * contains the coordinates of a potential route waypoint. It is used for
+     * routes that pass through the given location. 
+     *
+     * @param rCoord A constant reference to an object containing the geographic
+     *        coordinates of the navigation position.
+     */
+    void AppendNavigationPosition(const GeoCoordinates& rCoord);
+
+    /**
+     * This method retrieves the number of navigation positions that have been set. 
+     *
+     * @return An integer indicating the number of navigation positions.
+     */
+    size_t GetNumNavigationPositions() const;
+
+    /**
+     * This method retrieves the navigation position from the index specified by
+     * the caller. A navigation position contains the coordinates of a potential
+     * route waypoint. It is used for routes that pass through the given
+     * location.
+     * 
+     * @param idx A value specifying the index into an array of navigation
+     *        positions. 
+     *
+     * @return A constant pointer to an object containing the geographic
+     *        coordinates of the display position.
+     */
+    const GeoCoordinates* GetNavigationPosition(size_t idx) const;
+
+    /**
+     * This method sets the map view of the location. 
+     *
+     * @param rBbox A constant reference to an object that defines the map view
+     *        as a bounding box.
+     */
+    void SetMapView(const GeoBoundingBox& rBbox);
+
+    /**
+     * This method retrieves the map view of the location. 
+     *
+     * @return A constant reference to an object that defines the map view
+     *        as a bounding box.
+     */
+    const GeoBoundingBox& GetMapView() const;
+
+    /**
+     * This method sets the id of the location. 
+     *
+     * @param sLocationId A constant reference to a string containing the
+     *        location id.
+     */
+    void SetLocationId(const String& sLocationId);
+
+    /**
+     * This method retrieves the id of the location. 
+     *
+     * @return A constant reference to a string containing the
+     *        location id.
+     */
+    const String& GetLocationId() const;
+
+    /**
+     * This method sets the location type. 
+     *
+     * @param aType A numeric value indicating the location type.
+     */
+    void SetLocationType(LocationType aType);
+
+    /**
+     * This method sets the location type. 
+     *
+     * @param sType A constant reference to string identifying the location
+     *        type. The supported values are "area", "point", and "line".
+     */
+    void SetLocationType(const String& sType);
+
+    /**
+     * This method retrieves the location type. 
+     *
+     * @return A numeric value indicating the location type.
+     */
+    LocationType GetLocationType() const;
+
+private:
+    class GeoLocationImpl;
+    GeoLocationImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/HereConfig.h b/inc/engine/common/HereConfig.h
new file mode 100755 (executable)
index 0000000..840de74
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_CONFIG_H
+#define HERE_CONFIG_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class EXPORT_API HereConfig
+{
+public:
+       HereConfig();
+       ~HereConfig();
+       static void SetProxyAddress(char* address);
+       static char* GetProxyAddress(void);
+       static void Shutdown(void);
+
+//private:
+       static char* __proxy_address;
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_CONFIG_H */
+
diff --git a/inc/engine/common/HereMaps_global.h b/inc/engine/common/HereMaps_global.h
new file mode 100755 (executable)
index 0000000..8c5f6af
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef HEREMAPS_GLOBAL_H
+#define HEREMAPS_GLOBAL_H
+
+#ifndef TIZEN_MIGRATION // Migration for Tizen 2.4
+#define TIZEN_MIGRATION
+#endif
+
+#ifndef TIZEN_CUSTOMIZATION
+#define TIZEN_CUSTOMIZATION
+#endif
+
+
+
+#ifdef TIZEN_MIGRATION
+#include <string>
+
+typedef unsigned long result;
+typedef std::string String;
+typedef std::string Uri;
+typedef std::wstring WString;
+
+typedef unsigned char byte;
+#ifndef null
+#define null    0
+#endif // null
+#endif
+
+
+/*
+ * Note: DEBUG variable should be set from the outside.
+ * Currently done in CMAKE file
+ */
+
+#define HERE_MAPS_BEGIN_NAMESPACE  namespace Here { namespace Maps {
+#define HERE_MAPS_END_NAMESPACE    }}
+#define HERE_MAPS_NAMESPACE_PREFIX Here::Maps
+
+#define TIZEN_MAPS_BEGIN_NAMESPACE  namespace Tizen { namespace Maps {
+#define TIZEN_MAPS_END_NAMESPACE    }}
+#define TIZEN_MAPS_NAMESPACE_PREFIX Tizen::Maps
+
+#include <memory>
+#include <dlog.h>
+
+//logging macro prototypes
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "HERE_PLUGIN"
+
+#define MAPS_LOGD(fmt,args...)  LOGD(fmt, ##args)
+#define MAPS_LOGW(fmt,args...)  LOGW(fmt, ##args)
+#define MAPS_LOGI(fmt,args...)  LOGI(fmt, ##args)
+#define MAPS_LOGE(fmt,args...)  LOGE(fmt, ##args)
+#define MAPS_SECLOG(fmt,args...)  SECURE_LOGD(fmt, ##args)
+
+#define HERE_MAPS_LOG_DBG_INFO(fmt,args...)  LOGD(fmt, ##args);
+#define HERE_MAPS_LOG_ERROR(fmt,args...)     LOGE(fmt, ##args);
+#define HERE_MAPS_LOG_WARNING(fmt,args...)   LOGW(fmt, ##args);
+
+#define HERE_MAPS_RETURN_RESULT(cond,ret,fmt,args...)\
+        if (!cond) {\
+                LOGE(fmt, ##args);\
+                return ret;\
+        }
+
+#define HERE_MAPS_TRY_CATCH(cond,catch,fmt,args...)\
+        if (!cond) {\
+                LOGE(fmt, ##args);\
+                catch;\
+                goto CATCH;\
+        }
+
+// Error severities
+#define E_SUCCESS                       0
+#define E_FAILURE                       -1
+#define E_SYSTEM                        -2
+#define E_INVALID_STATE                 -3
+#define E_OUT_OF_MEMORY                 -4
+
+#ifndef INFINITE
+#define INFINITE    0xFFFFFFFF
+#endif // INFINITE
+
+//assertions
+#include <assert.h>
+#if DEBUG
+#define HERE_MAPS_ASSERT(x) assert(x);
+#else
+#define HERE_MAPS_ASSERT(x)
+#endif
+
+typedef unsigned char Byte;
+typedef unsigned int UInt;
+
+
+
+#define HERE_MAPS_NO_COPY_NO_ASSIGN(ClassName) \
+  private:                                     \
+  ClassName(const ClassName&);                 \
+  ClassName& operator=(const ClassName&)
+
+
+HERE_MAPS_BEGIN_NAMESPACE
+extern void Stopwatch_Start(int aIndex);
+extern void Stopwatch_Stop(int aIndex);
+extern void Stopwatch_Show(int aIndex);
+extern void Stopwatch_Reset(int aIndex);
+HERE_MAPS_END_NAMESPACE
+
+#endif // HEREMAPS_GLOBAL_H
diff --git a/inc/engine/common/Mutex.h b/inc/engine/common/Mutex.h
new file mode 100755 (executable)
index 0000000..1cc5375
--- /dev/null
@@ -0,0 +1,151 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               FBaseRtMutex.h
+ * @brief              This is the header file for the %Mutex class.
+ *
+ * This header file contains the declarations of the %Mutex class.
+ */
+
+#ifndef _TIZEN_MAPS_MUTEX_H_
+#define _TIZEN_MAPS_MUTEX_H_
+
+
+#include "HereMaps_global.h"
+#include "base/BaseObject.h"
+
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+
+class Mutex
+       : public Tizen::Maps::Object
+{
+public:
+       /**
+        *      This is the default constructor for this class.
+        *
+        *      @since 2.0
+        *      @remarks        After creating an instance of this class, you must explicitly call one of
+        *                              the Create() methods to initialize the instance.
+        */
+       Mutex(void);
+
+       /**
+        *      This is the destructor for this class.
+        *
+        *      @since 2.0
+        */
+       virtual ~Mutex(void);
+
+       /**
+        *      Creates an unnamed Mutex.
+        *
+        *      @since 2.0
+        *      @return                 An error code
+        *      @exception      E_SUCCESS               The method was successful.
+        *      @exception      E_SYSTEM                An unknown operating system error occurred.
+        */
+       result Create(void);
+
+       /**
+        *      Creates a non-recursive mutex.
+        *
+        *      @since 2.0
+        *      @return                 An error code
+        *      @exception      E_SUCCESS               The method was successful.
+        *      @exception      E_SYSTEM                An unknown operating system error occurred.
+        */
+       result CreateNonRecursiveMutex(void);
+
+       /**
+        *      Creates a named Mutex. @n
+        *      If there is already a Mutex with the specified name, this creates a Mutex which references that particular Mutex.
+        *
+        *      @since 2.0
+        *      @return                 An error code
+        *      @param[in]      name                    The name of the Mutex
+        *      @exception      E_SUCCESS               The method was successful.
+        *      @exception      E_SYSTEM                An unknown operating system error occurred.
+        */
+       result Create(const String& name);
+
+       /**
+        *      Acquires the Mutex if it is not acquired. @n
+        *      If the Mutex is already acquired by another thread,
+        *      the current thread is blocked until the Mutex is released.
+        *
+        *      @since 2.0
+        *      @return                 An error code
+        *      @param[in]      timeout                 The period during which the thread tries to acquire the mutex
+        *      @exception      E_SUCCESS               The method was successful.
+        *      @exception      E_TIMEOUT               The operation could not be completed within the specified time period. @n
+        *      @exception      E_SYSTEM                An unknown operating system error occurred. @n
+        *                                                              Failed to acquire the Mutex because an OS failure occurred.
+        */
+       result Acquire(long timeout);
+
+       /**
+        *      Releases the Mutex.
+        *
+        *      @since 2.0
+        *      @return                 An error code
+        *      @exception      E_SUCCESS       The method was successful.
+        *      @exception      E_SYSTEM        An unknown operating system error occurred. @n
+        *                                                      Failed to acquire the Mutex because an OS failure occurred.
+        */
+       result Release(void);
+
+       /**
+        *      Acquires the Mutex if it is not acquired. @n
+        *      If the Mutex is already acquired by another thread,
+        *      the current thread is blocked until the Mutex is released.
+        *
+        *      @since 2.0
+        *      @return                 An error code
+        *      @exception      E_SUCCESS               The method was successful.
+        *      @exception      E_SYSTEM                An unknown operating system error occurred. @n
+        *                                                              Failed to acquire the Mutex because an OS failure occurred.
+        */
+       result Acquire(void);
+
+       /**
+        *      Acquires the mutex if it is not acquired. @n
+        *      If the mutex is already acquired by another thread, E_OBJECT_LOCKED is returned.
+        *
+        *      @since 2.0
+        *
+        *      @return                 An error code
+        *      @exception      E_SUCCESS               The method is successful.
+        *      @exception      E_OBJECT_LOCKED         The mutex is already locked.    
+        *      @exception      E_INVALID_STATE         The mutex has not been initialized as yet.
+        *      @exception      E_SYSTEM                A system error has occurred.
+        */
+       result TryToAcquire(void);
+
+private:
+       pthread_mutex_t* __pMutex;
+       String __name;
+
+};
+
+
+
+TIZEN_MAPS_END_NAMESPACE
+    
+#endif // _TIZEN_MAPS_MUTEX_H_
+
diff --git a/inc/engine/common/Operators.h b/inc/engine/common/Operators.h
new file mode 100755 (executable)
index 0000000..249aff8
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef OPERATORS_H
+#define OPERATORS_H
+
+#include "common/HereMaps_global.h"
+
+#include <iostream>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class Address;
+class MetaInfo;
+class GeoLocation;
+class GeoCoordinates;
+
+HERE_MAPS_END_NAMESPACE
+
+//add operators to global namespace
+
+/**
+ * This is an operator that inserts the contents of a <code>Result</code> object
+ * into the output steam.
+ * 
+ * @param os A reference to the output stream to which the right-hand object is inserted.
+ * 
+ * @param rResult A constant reference to an object whose contents are to be
+ *        inserted (output).
+ * 
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::Result& rResult);
+
+/**
+ * This is an operator that inserts the contents of a <code>MetaInfo</code>
+ * object into the output steam.
+ * 
+ * @param os A reference to the output stream to which the right-hand object is
+ *        inserted.
+ * 
+ * @param rMetaInfo A constant reference to an object whose contents are to be
+ *        inserted (output).
+ * 
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::MetaInfo& rMetaInfo);
+
+/**
+ * This is an operator that inserts the contents of a <code>GeoLocation</code>
+ * object into the output steam.
+ * 
+ * @param os A reference to the output stream to which the right-hand object is
+ *        inserted.
+ * 
+ * @param rLocation A constant reference to an object whose contents are to be
+ *        inserted (output).
+ * 
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::GeoLocation& rLocation);
+
+/**
+ * This is an operator that inserts the contents of an <code>Address</code>
+ * object into the output steam.
+ * 
+ * @param os A reference to the output stream to which the right-hand object is
+ *        inserted.
+ * 
+ * @param rAddress A constant reference to an object whose contents are to be
+ *        inserted (output).
+ * 
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::Address& rAddress);
+
+/**
+ * This is an operator that inserts the contents of a
+ * <code>GeoCoordinates</code> object into the output steam.
+ * 
+ * @param os A reference to the output stream to which the right-hand object is
+ *        inserted.
+ * 
+ * @param rCoord A constant reference to an object whose contents are to be
+ *        inserted (output).
+ * 
+ * @return A reference to the output stream after insertion.
+ */
+std::ostream& operator<<(std::ostream& os, const HERE_MAPS_NAMESPACE_PREFIX::GeoCoordinates& rCoord);
+
+#endif
diff --git a/inc/engine/common/ParserError.h b/inc/engine/common/ParserError.h
new file mode 100755 (executable)
index 0000000..909cab7
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PARSERERROR_H
+#define PARSERERROR_H
+
+#include "HereMaps_global.h"
+
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates an XML parser error. It allows you to set and
+ * retrieve the error message, error type and other details concerning an error
+ * condition. 
+ */
+class EXPORT_API ParserError : public ErrorBase
+{
+public:
+    /** 
+     * This enumeration defines identifiers for the recognized error types.
+     */
+    enum Type
+    {
+        PE_InvalidXmlDocument,      ///< Indicates that the XML document is invalid.
+        PE_Utf8ConversionFailed,    ///< Indicates that UTF8 conversion failed.
+        PE_ExtractXMLTextNodeFail,  ///< Indicates that it an attempt to extract an XML node failed.
+        PE_MissingAttribute,        ///< Indicates that an attribute is missing.
+        PE_InternalParserError      ///< Indicates that an internal parser error occurred.
+    };
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param aType A value indicating the error type.
+     */
+    ParserError(Type aType);
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param aType A value indicating the error type.
+     * 
+     * @param sParentNodename A constant reference to the parent node (XML).
+     */
+    ParserError(Type aType, const String& sParentNodename);
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param aType A value indicating the error type.
+     * 
+     * @param sParentNodename A constant reference to a string containing the
+     *        name of the parent node (XML).
+     * 
+     * @param sDescription A constant reference to a string containing the error description. 
+     */
+    ParserError(Type aType, const String& sParentNodename, const String& sDescription);
+
+    /**
+     * This method is the destructor.
+     */
+    virtual ~ParserError();
+
+    /**
+     * This method converts the given instance to a string. The default
+     * implementation outputs a string containing the error type, description,
+     * parser input and the name of the parent element.
+     * 
+     * @return A string representation of the given instance of the class.
+     */
+    virtual String ToString() const;
+
+    /**
+     * This method retrieves a value indicating the error type.
+     * 
+     * @return A value indicating the error type. 
+     */
+    Type getParserErrorType() const;
+
+    /**
+     * This method sets the parser input.
+     * 
+     * @param sInput A constant reference to a string containing parser input.
+     */
+    void setParserInput(const String& sInput);
+
+    /**
+     * This method retrieves the parser input.
+     * 
+     * @return A constant reference to a string containing parser input.
+     */
+    const String& getParserInput() const;
+
+    /**
+     * This method sets the name of the parent node.
+     * 
+     * @param sNodename A constant reference to a string containing name of the
+     *        parent (XML) node.
+     */
+    void setParentElement(const String& sNodename);
+
+    /**
+     * This method retrieves the name of the parent node.
+     * 
+     * @return A constant reference to a string containing name of the
+     *        parent (XML) node.
+     */
+    const String& getParentElement() const;
+
+    /**
+     * This method sets the error description.
+     * 
+     * @param sDsc A constant reference to a string containing the
+     *        description of the error.
+     */
+    void setDescription(const String& sDsc);
+
+    /**
+     * This method retrieves the error description.
+     * 
+     * @return A constant reference to a string containing the
+     *        description of the error.
+     */
+    const String& getDescription() const;
+
+private:
+    class ParserErrorImpl;
+    ParserErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/QueryListener.h b/inc/engine/common/QueryListener.h
new file mode 100755 (executable)
index 0000000..931a549
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef QUERYLISTENER_H
+#define QUERYLISTENER_H
+
+#include <tr1/memory>
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBaseRtEvent.h>
+#include <FBaseRtIEventListener.h>
+#include <FBaseRtIEventArg.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class BaseReply;
+class ErrorBase;
+
+typedef std::tr1::shared_ptr<BaseReply> BaseReplyPtr;
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. 
+ * 
+ * Derived classes must implement the virtual methods of this class.
+ */
+class EXPORT_API QueryListener
+#ifndef TIZEN_MIGRATION
+: public Tizen::Base::Runtime::Event
+, public Tizen::Base::Runtime::IEventListener
+#endif
+{
+public:
+    /**
+     * This is the default constructor for the class.
+     */
+    QueryListener();
+
+    /**
+     * This is a virtual destructor for the class.
+     */
+    virtual ~QueryListener();
+
+    /**
+     * This method triggers a call to the listener's method
+     * <code>OnReplySuccess()</code>. 
+     * 
+     * @param pReply A pointer to the query reply.
+     */
+    void NotifyForSuccess(BaseReplyPtr pReply);
+
+    /**
+     * This method triggers a call to the listener's method
+     * <code>OnReplyFailure()</code>. 
+     * 
+     * @param pReply A pointer to the query reply.
+     */
+    void NotifyForFailure(BaseReplyPtr pReply);
+
+    /**
+     * This method is a callback invoked when a query is successful. The
+     * implementation of this method handles the reply to a successful query.
+     * 
+     * @param rReply A Reference to the query reply object.
+     *
+     */
+    virtual void OnReplySuccess(BaseReply& rReply) = 0;
+
+    /**
+     * This method is a callback invoked when a query fails. The
+     * implementation of this method handles the reply.
+     *
+     * @param rReply A Constant reference to the reply. Only the error and user
+     *        data are valid.
+     */
+#ifdef TIZEN_MIGRATION
+    virtual void OnFailure(const BaseReply& rReply) = 0;
+#else
+    virtual void OnFailure(const BaseReply& rReply);
+#endif
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(QueryListener);
+    class Arguments;
+#ifndef TIZEN_MIGRATION
+    void FireImpl(Tizen::Base::Runtime::IEventListener& rListener, const Tizen::Base::Runtime::IEventArg& rArgs);
+#endif
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/RestItemHandle.h b/inc/engine/common/RestItemHandle.h
new file mode 100644 (file)
index 0000000..f3a9340
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESTITEMHANDLE_H
+#define RESTITEMHANDLE_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class represents a handle to a REST request. 
+ *
+ */
+class EXPORT_API RestItemHandle
+{
+public:
+    /**
+     * This typedef defines a type that represents a REST request id.
+     */
+    typedef int RequestId;
+
+    /**
+     * This constant represents a passive REST request item.
+     */
+    static const RequestId PASSIVE_RESTITEM;
+
+    /**
+     * This constant represents an invalid REST request item.
+     */
+    static const RequestId INVALID_RESTITEM;
+
+    /**
+     * This method is a virtual destructor. 
+     */
+    virtual ~RestItemHandle();
+
+    /**
+     * This methos cancels a request with the id specified by the caller.
+     *
+     * @param aRequestId A value indicating the id of the request to cancel.
+     */
+    static void Cancel(RequestId aRequestId);
+
+    /**
+     * This method checks if the request id provided by the caller is valid.
+     *
+     * @param aRequestId A value indicating the id of the request to cancel.
+     */
+    static bool IsValid(RequestId aRequestId);
+
+private:
+    RestItemHandle();
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/common/Size.h b/inc/engine/common/Size.h
new file mode 100644 (file)
index 0000000..6382a17
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef _SIZE_H_
+#define _SIZE_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/** 
+ * This class encapsulates a image size defined in terms of its width and
+ * height. It can apply to a map, an overlay or an icon.
+ */ 
+class Size
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    Size();
+
+    /**
+     * This method is a constructor that initializes the new instance with the
+     * width and height supplied by the caller.
+     * 
+     * @param aWidth A value specifying the image width in pixels.
+     * 
+     * @param aHeight A value specifying the image height in pixels. 
+     */
+    Size(int aWidth, int aHeight);
+
+    /**
+     * This method is a copy constructor that initializes the new instance by
+     * copying the properties of the instance supplied by the caller.
+     * 
+     * @param rRhs A constant reference to an object whose properties are to be
+     *        copied to initialize the new instance.
+     */
+    Size(const Size& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~Size();
+
+    /**
+     * This method sets the properties of the given instance of the class.
+     * 
+     * @param aWidth A value specifying the image width in pixels.
+     * 
+     * @param aHeight A value specifying the image height in pixels. 
+     */
+    void SetSize(int aWidth, int aHeight);
+
+    /**
+     * This method retrieves the width of the image. 
+     *
+     * @return A value representing the width of the image.
+     */
+    int GetWidth() const;
+
+    /**
+     * This method retrieves the height of the image. 
+     *
+     * @return A value representing the height of the image.
+     */
+    int GetHeight() const;
+
+    /**
+     * This is the assignment operator. 
+     * 
+     * @param rRhs A constant reference to an object whose properties are to be copied
+     *        to the given instance.
+     * 
+     * @return A Reference to the given instance of the class after its
+     *        properties have been updated.
+     */
+    Size& operator = (const Size& rRhs);
+
+    /**
+     * This is the quality operator. It check if the given instance of the class
+     * is identical to the right-hand-side object.
+     * 
+     * @param rRhs A constant reference to an object whose properties are to be
+     *        compared to the properties of the given instance.
+     * 
+     * @return <code>true</code> if the objects are identical, otherwise
+     *         <code>false</code>.
+     */
+    bool operator == (const Size& rRhs) const;
+
+private:
+    class SizeImpl;
+    SizeImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* _SIZE_H_ */
diff --git a/inc/engine/common/TileKey.h b/inc/engine/common/TileKey.h
new file mode 100755 (executable)
index 0000000..77b2216
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEKEY_H_
+#define TILEKEY_H_
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoTiledMap.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information that identifies a map tile in a grid
+ * reflecting the normalized Mercator projection. The projection represents the
+ * surface of the globe as a set of squares. The size of the grid depends on the
+ * map zoom level.  At the lowest zoom level, the entire globe is
+ * shown in one square, which means that the tile grid consists of one row and
+ * one column. At the next higher zoom level, the tile grid contains two rows
+ * and two columns per row, at the next, four rows and four columns per row, and
+ * so on -- in other words, the number of rows and columns doubles at each
+ * higher zoom level.
+ */
+class TileKey
+{
+public:
+    /**
+     * This is a constructor. It initializes a new instance of the tile key with
+     * the zoom level and the x and y coordinates of the tile at that zoom level.
+     * 
+     * @param aLevel A value indicating the zoom level.
+     * 
+     * @param aX A value indicating the x coordinate in the map tile grid.
+     * 
+     * @param aY A value indicating the y coordinate in the map tile grid.
+     *
+     * @param aMapLanguage A value indicating the map language.
+     *
+     * @param aMapLanguage A value indicating the map type.
+     */ 
+    TileKey(int aLevel,
+            int aX,
+            int aY,
+            String sMapLanguage = String("eng"),
+            GeoTiledMap::MapType aMapType = GeoTiledMap::MT_Normal_Day)
+    {
+        m_aLevel = aLevel;
+        m_aX = aX;
+        m_aY = aY;
+        m_sMapLanguage = sMapLanguage;
+        m_aMapType = aMapType;
+    }
+
+    /** 
+     * This method is a copy constructor.
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        copied into the present instance.
+     */
+    TileKey(const TileKey& rRhs)
+    {
+        operator = (rRhs);
+    }
+
+    /**
+     * This method retrieves a tile hash value based on the tile key properties.
+     * 
+     * @return An integer value representing the tile hash.
+     */
+    int GetHash() const
+    {
+        int hashValue = (((int)m_aMapType) << 25) +
+                (m_aLevel << 16) +
+                (m_aY << 8) +
+                m_aX;
+        return hashValue;
+    }
+
+    /** 
+     * This is an equality operator.
+     * 
+     * @param rRhs A constant reference to an object that is to be compared to
+     *       the present instance.
+     * 
+     * @return <code>true</code> if the given instance and the right-hand object
+     *       are identical, otherwise <code>false</code>.
+     */
+    bool operator == (const TileKey& rRhs) const
+    {
+        return m_aLevel == rRhs.m_aLevel &&
+                m_aX == rRhs.m_aX &&
+                m_aY == rRhs.m_aY &&
+                m_sMapLanguage == rRhs.m_sMapLanguage &&
+                m_aMapType == rRhs.m_aMapType;
+    }
+
+    /** 
+     * This is an assignment operator.
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        copied into the present instance.
+     * 
+     * @return A reference to the given instance of the class after the assignment.
+     */
+    TileKey& operator = (const TileKey& rRhs)
+    {
+        if (&rRhs != this)
+        {
+            m_aLevel = rRhs.m_aLevel;
+            m_aX = rRhs.m_aX;
+            m_aY = rRhs.m_aY;
+            m_sMapLanguage = rRhs.m_sMapLanguage;
+            m_aMapType = rRhs.m_aMapType;
+        }
+        return *this;
+    }
+
+    /**
+     * This member variable holds a value indicating the tile zoom level.
+     */ 
+    int m_aLevel;
+
+    /**
+     * This member variable holds a value indicating the x coordinate of the tile.
+     */ 
+    int m_aX;
+
+    /**
+     * This member variable holds a value indicating the y coordinate of the tile.
+     */ 
+    int m_aY;
+
+    /**
+     * This member variable holds a value indicating the map language.
+     */
+    String m_sMapLanguage;
+
+    /**
+     * This member variable holds a value indicating the map type.
+     */
+    GeoTiledMap::MapType m_aMapType;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // TILEKEY_H_
diff --git a/inc/engine/debug/EchoQuery.h b/inc/engine/debug/EchoQuery.h
new file mode 100755 (executable)
index 0000000..6ca5645
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ECHOQUERY_H
+#define ECHOQUERY_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/BaseQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EchoQuery : public BaseQuery
+{
+public:
+    EchoQuery(unsigned int data);
+    ~EchoQuery();
+
+    virtual bool Execute(QueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(EchoQuery);
+
+    class EchoQueryImpl;
+    EchoQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/debug/EchoReply.h b/inc/engine/debug/EchoReply.h
new file mode 100644 (file)
index 0000000..53de75b
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ECHOREPLY_H
+#define ECHOREPLY_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EchoReply : public BaseReply
+{
+public:
+    EchoReply(unsigned int data);
+    virtual ~EchoReply();
+
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(EchoReply);
+
+    class EchoReplyImpl;
+    EchoReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/finder/BaseContent.h b/inc/engine/finder/BaseContent.h
new file mode 100755 (executable)
index 0000000..2abe795
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASE_CONTENT_H_
+#define BASE_CONTENT_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+/**
+ * This class encapsulates basic data relating to a place. The basic data
+ * include supplier, attribution and via information.
+ * 
+ * \ingroup finder
+ */
+class BaseContent
+{
+public:
+
+   /**
+    * This is the default constructor.
+    */
+    BaseContent();
+
+   /**
+    * This method is the copy constructor.
+    * 
+    * @param rRhs An object whose contents are to be copied to the instance
+    *        being created.
+    */
+    BaseContent(const BaseContent& rRhs);
+
+   /**
+    * This method is the (virtual) destructor.
+    */
+    virtual ~BaseContent();
+
+   /**
+    * This is the assignment operator.
+    * 
+    * @param rRhs An object whose contents are to be copied to the given
+    *        instance.
+    * 
+    * @return A reference to the given instance of the class after its contents
+    *       have been updated.
+    */
+    BaseContent& operator=(const BaseContent& rRhs);
+
+   /**
+    * This method retrieves information about the supplier of place-related
+    * information. 
+    * 
+    * @return An object containing information about the supplier.
+    */
+    LinkObject GetSupplier() const;
+
+
+   /**
+    * This method retrieves the attribution text for place-related
+    * information. 
+    * 
+    * @return A string containing the attribution text. 
+    */
+    String GetAttribution() const;
+
+
+   /**
+    * This method retrieves an object containing a hypermedia link to the origin
+    * of the information about the place, usually a Web site of the supplier.
+    * 
+    * @return An object containing a link to the origin of the information about
+    *       the place.
+    */
+    LinkObject GetVia() const;
+
+   /**
+    * This method sets information about the supplier of place-related
+    * information. 
+    * 
+    * @return rSupplier A constant reference to an object containing information
+    *        about the supplier.
+    */
+    void SetSupplier(const LinkObject& rSupplier);
+
+   /**
+    * This method sets the attribution text for place-related
+    * information. 
+    * 
+    * @return rAttribution A constant reference to a string containing the
+    *        attribution text.
+    */
+    void SetAttribution(const String& rsAttribution);
+
+   /**
+    * This method sets an object containing a hypermedia link to the origin
+    * of the information about the place, usually a Web site of the supplier.
+    * 
+    * @param rVia A constant reference to an object containing a link to the
+    *       origin of the information about the place.
+    */
+    void SetVia(const LinkObject& rVia);
+
+private:
+    class BaseContentImpl;
+    BaseContentImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASE_CONTENT_H_
diff --git a/inc/engine/finder/BaseFinderReply.h b/inc/engine/finder/BaseFinderReply.h
new file mode 100644 (file)
index 0000000..c9f7568
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef BASEFINDERREPLY_H
+#define BASEFINDERREPLY_H
+
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/** 
+ * This class encapsulates a basic reply to a places search query. 
+ */
+class BaseFinderReply : public BaseReply
+{
+public:
+    /**
+     * This enumeration defines identifiers for supported reply types.
+     */
+    enum ReplyType
+    {
+        RT_Discovery = 0, // Indicates a reply to a discovery query.
+        RT_PlaceDetails   // Indicates a reply to a request for place details.
+    };
+    /**
+     * This method is the constructor.
+     */
+    BaseFinderReply(ReplyType aReplyType);
+
+    /**
+     * This method is a virtual destructor.
+     */
+    virtual ~BaseFinderReply();
+
+    /**
+     * This method retrieves the reply type.
+     * 
+     * @return A value that ientifies the reply type.
+     */
+    ReplyType GetFinderReplyType() const;
+
+private:
+
+    ReplyType m_aReplyType;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // BASEFINDERREPLY_H
diff --git a/inc/engine/finder/Category.h b/inc/engine/finder/Category.h
new file mode 100755 (executable)
index 0000000..a54c229
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef CATEGORY_H_
+#define CATEGORY_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class CategoryId;
+class Category;
+
+
+/**
+ * This typedef defines a type representing a list of <code>Category</code>
+ * instances. 
+ * 
+ * \ingroup finder
+ */
+typedef std::vector<Category> CategoryList;
+
+/**
+ * This class encapsulates information about a Point of Interest (POI) category
+ * that can be applied to a place.
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API Category
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    Category();
+
+    /**
+     * This method is a constructor.
+     */
+    Category(const CategoryId& rId);
+
+   /**
+    * This method is a copy constructor.
+    * 
+    * @param rRhs An object whose contents are to be copied to the instance
+    *        being created.
+    */
+    Category(const Category& rRhs);
+
+   /**
+    * This method is the (virtual) destructor.
+    */
+    virtual ~Category();
+
+   /**
+    * This is the assignment operator.
+    * 
+    * @param rRhs An object whose contents are to be copied to the given
+    *        instance.
+    * 
+    * @return A reference to the given instance of the class after its contents
+    *       have been updated.
+    */
+    Category& operator=(const Category& rRhs);
+
+    /**
+     * This method retrieves the category identifier.
+     *
+     * @return A string containing the identifier of the POI category. 
+     */
+    const CategoryId& GetCategoryId() const;
+
+    /**
+     * This method sets the category identifier.
+     *
+     * @param rsId A constant reference to an object containing the identifier
+     *        of the POI category.
+     */
+    void SetCategoryId(const CategoryId& rsId);
+
+    /**
+     * This method retrieves the category name (localized).
+     *
+     * @return A string containing the localized name of the POI category.  
+     */
+    String GetTitle() const;
+
+    /**
+     * This method retrieves the URI of the category resource (icon).
+     *
+     * @return A string containing the URI of the icon of the POI category.  
+     */
+    String GetHref() const;
+
+    /**
+     * This method retrieves the resource type identifier for the given
+     * category. 
+     *
+     * @return A string containing the type identifier, which is either a valid
+     *        MIME type or a URI.
+     */
+    String GetType() const;
+
+    /**
+     * This method retrieves the path to the category icon.
+     *
+     * @return A URI object containing the path to the category icon.
+     */
+    String GetIconPath() const;
+
+    /**
+     * This method sets the category name (localized).
+     *
+     * @param sTitle A constant reference to a string containing the localized
+     *        name of the POI category.
+     */
+    void SetTitle(const String& sTitle);
+
+    /**
+     * This method sets the URI of the category resource (icon).
+     *
+     * @param sHref A constant reference to a string containing the URI of the icon
+     *        of the POI category.
+     */
+    void SetHref(const String& sHref);
+
+    /**
+     * This method sets the resource type identifier for the given
+     * category. 
+     *
+     * @param sType A constant reference to a string containing the type
+     *        identifier, which is either a valid MIME type or a URI.
+     */
+    void SetType(const String& sType);
+
+    /**
+     * This method sets the path to the category icon.
+     *
+     * @param rIcon A constant reference to a URI object containing the path to
+     *        the category icon.
+     */
+    void SetIconPath(const String& rIcon);
+
+private:
+    class CategoryImpl;
+    CategoryImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // CATEGORY_H_
diff --git a/inc/engine/finder/CategoryId.h b/inc/engine/finder/CategoryId.h
new file mode 100755 (executable)
index 0000000..a4bad29
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef CATEGORYID_H_
+#define CATEGORYID_H_
+
+#include "common/HereMaps_global.h"
+
+#ifdef TIZEN_MIGRATION
+namespace Here { namespace PlugIn { //for plug-in
+class HerePlace;
+}}
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class represents a (Place of Interest or POI) category identifier.
+ * \ingroup Finder
+ */
+class EXPORT_API CategoryId
+{
+public:
+
+    /** 
+     * This method is the destructor. 
+     */
+    virtual ~CategoryId( );
+
+   /**
+    * This method checks if the given instance of <code>CategoryId</code> is
+    * valid. An instance of this class is valid if its id element is not empty.  
+    * 
+    * @return <code>true</code> if the instance is valid, otherwise
+    *        <code>false</code>.
+    */
+    bool IsValid( ) const;
+
+    /**
+     * This method obtains a string representation of the given instance.
+     * 
+     * @return A Unicode string containing a string representation of the given
+     *        instance of <code>CategoryId</code>.
+     */
+    String ToString( ) const;
+
+    /**
+     * This method obtains an invalid category id object.
+     * 
+     * @return A constant reference to an invalid category id object.
+     */
+    static const CategoryId& GetInvalidCategoryId( );
+
+    /**
+     * This method obtains the id of the root category from the given instance.
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        root category id.
+     */
+    static const CategoryId& GetRootCategoryId( );
+
+    // Factory methods for category filters
+    /**
+     * This factory method obtains a category id object representing the
+     * eat-drink category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        eat-drink category id.
+     */
+    static const CategoryId& GetEatDrinkCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * going-out category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        going-out category id.
+     */
+    static const CategoryId& GetGoingOutCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * sights-museums category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        sights-museums category id.
+     */
+    static const CategoryId& GetSightsMuseumsCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * transport category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        transport category id.
+     */
+    static const CategoryId& GetTransportCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * accommodation category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        accommodation category id.
+     */
+    static const CategoryId& GetAccommodationCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * shopping category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        shopping category id.
+     */
+    static const CategoryId& GetShoppingCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * leisure-outdoor category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        leisure-outdoor category id.
+     */
+    static const CategoryId& GetLeisureOutdoorCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * administrative-areas-buildings category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        administrative-areas-buildings category id.
+     */
+    static const CategoryId& GetAdministrativeAreasBuildingsCategoryId();
+
+    /**
+     * This factory method obtains a category id object representing the
+     * natural-geographical category. 
+     * 
+     * @return A constant reference to an instance of the class representing the
+     *        natural-geographical category id.
+     */
+    static const CategoryId& GetNaturalGeographicalCategoryId();
+
+private:
+    CategoryId(const CategoryId&);
+    CategoryId& operator=(const CategoryId&);
+
+    /** Create an invalid instance */
+    CategoryId( const String& id);
+
+private:
+    class CategoryIdImpl;
+    CategoryIdImpl* m_pImpl;
+
+    friend class JsonParser;
+    friend class Category;
+    friend class TestCategoryId;
+#ifdef TIZEN_MIGRATION
+    friend class Here::PlugIn::HerePlace; //for plug-in
+#endif
+};
+
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // CATEGORYID_H_
diff --git a/inc/engine/finder/ContactDetails.h b/inc/engine/finder/ContactDetails.h
new file mode 100755 (executable)
index 0000000..8198042
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef CONTACT_DETAILS_H_
+#define CONTACT_DETAILS_H_
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EXPORT_API ContactDetails;
+/**
+ * This typedef defines a type representing a list of <code>ContactDetails</code>
+ * instances.
+ */
+typedef std::vector<ContactDetails> ContactDetailsList;
+
+/**
+ * This class encapsulates contact information relating to a place.
+ *
+ * \ingroup finder
+ */
+class ContactDetails
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    ContactDetails();
+
+   /**
+    * This method is the copy constructor.
+    *
+    * @param rRhs An object whose contents are to be copied to the instance
+    *        being created.
+    */
+    ContactDetails(const ContactDetails& rRhs);
+
+   /**
+    * This method is the destructor.
+    */
+     ~ContactDetails();
+
+   /**
+    * This is the assignment operator.
+    *
+    * @param rRhs An object whose contents are to be copied to the given
+    *        instance.
+    *
+    * @return A reference to the given instance of the class after its contents
+    *       have been updated.
+    */
+    ContactDetails& operator=(const ContactDetails& rRhs);
+
+    /**
+     * This method retrieves the contact type, which can be telephone, e-mail,
+     * website, site, etc.
+     *
+     * @return A string containing the contact type identifier. The possible
+     *       values are "phone", "website", "fax", or "email".
+     */
+    String GetContactType() const;
+
+    /**
+     * This method retrieves the contact detail label, which is a localized
+     * string identifying the purpose of the contact, for example "Phone",
+     * "Mobile". Note that label is accompanied by a "value" filed, which for
+     * example for a "Phone" contains the telephone number.
+     *
+     * @return A string containing the contact label.
+     */
+    String GetLabel() const;
+
+    /**
+     * This method retrieves the value for the associated contact label.
+     *
+     * @return A string containing the value corresponding to the contact label.
+     */
+    String GetValue() const;
+
+    /**
+     * This method sets the contact type, which can be telephone, e-mail,
+     * website, site, etc.
+     *
+     * @param rsName A string containing the contact type identifier.  The
+     *       possible values are "phone", "website", "fax", or "email".
+     */
+    void SetContactType(const String& rsName);
+
+    /**
+     * This method sets the contact detail label, which is a localized
+     * string identifying the purpose of the contact, for example "Phone",
+     * "Mobile". Note that label is accompanied by a "value" filed, which for
+     * example for a "Phone" contains the telephone number.
+     *
+     * @param rsLabel A string containing the contact label.
+     */
+    void SetLabel(const String& rsLabel);
+
+    /**
+     * This method sets the value for the contact label.
+     *
+     * @param rsValue A string containing the value corresponding to the contact
+     *       label (for example, if the label is "Phone", the value is the
+     *       telephone number).
+     */
+    void SetValue(const String& rsValue);
+
+private:
+    class ContactDetailsImpl;
+    ContactDetailsImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // CONTACT_DETAILS_H_
diff --git a/inc/engine/finder/DiscoveryQuery.h b/inc/engine/finder/DiscoveryQuery.h
new file mode 100755 (executable)
index 0000000..c13c931
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DISCOVERY_QUERY_H_
+#define DISCOVERY_QUERY_H_
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+#include "finder/Category.h"
+#ifdef TIZEN_CUSTOMIZATION
+#include "common/GeoBoundingArea.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class QueryListener;
+class GeoCoordinates;
+class FinderQueryListener;
+class FinderError;
+
+/**
+ * This class encapsulates a places discovery query.
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API DiscoveryQuery : public BaseQuery
+{
+public:
+   /** 
+    * This enumeration defines identifiers for the supported discovery query
+    * types. 
+    */
+    enum QueryType
+    {
+        QT_SEARCH = 0, ///< Indicates a search query (based on the search terms
+                       ///  supplied by the application user); results are
+                       ///  paginated.
+        QT_HERE,       ///< Indicates query that searches for places at or
+                       ///  within 200 meters of a specific location; a category
+                       ///  can be specified as an option.
+        QT_AROUND,     ///< Indicates a query that searches for places within a
+                       ///  certain radius around a location; results are
+                       ///  paginated; a category can be specified as an option.
+        QT_EXPLORE     ///< Indicates a query that searches for popular places
+                       ///  based on a location context provided by the
+                       ///  application user; results are paginated; a category
+                       ///  can be specified as an option.
+    };
+
+    /**
+     * This enumeration defines identifiers for the supported discovery query
+     * result types.
+     */
+    /*
+     * The identifiers are not valid for search QueryTypes.
+     */
+    enum ResultTypes
+    {
+        SIT_PLACE = 0,      ///< Indicates that the result contains only place items
+        SIT_SEARCH,         ///< Indicates that the result contains only search items
+        SIT_PLACEANDSEARCH  ///< Indicates that the result contains place and search items
+    };
+
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    DiscoveryQuery();
+
+    /**
+     * This method is a constructor. It constructs a valid <code>DiscoveryQuery</code> from
+     * a URL provided by the caller.
+     *
+     * @param sUrl A constant reference to the URL of the location whose details
+     *        are to be retrieved from the server
+     */
+    DiscoveryQuery(const  String& sUrl);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~DiscoveryQuery();
+
+    /**
+     * This method retrieves a value indicating the query type.
+     * 
+     * @return A value indicating the query type.
+     */
+    QueryType GetType() const;
+
+    /**
+     * This method sets the query type.
+     * 
+     * @param eType A value indicating the query type.
+     */
+    void SetType(QueryType eType);
+
+    /** 
+     * This method sets the search text (terms).
+     * 
+     * @param sSearch A constant reference to a string containing the search
+     *        terms.
+     */ 
+    void SetSearchText(const String& sSearch);
+
+    /** 
+     * This method retrieves the search text (terms).
+     * 
+     * @return A string containing the search terms.
+     */ 
+    String GetSearchText() const;
+
+    /** 
+     * This method retrieves the search proximity.
+     * 
+     * @return An object containing the geographic coordinates of the location
+     *        around which the search is/was to be conducted and within whose
+     *        proximity the results must lie.
+     */ 
+    GeoCoordinates GetProximity() const;
+
+    /** 
+     * This method sets search proximity.
+     * 
+     * @param rCoord An object containing the geographic coordinates of the
+     *        location around which the search is/was to be conducted and within
+     *        whose proximity the results must lie.
+     */ 
+    void SetProximity(const GeoCoordinates& rCoord);
+
+#ifdef TIZEN_CUSTOMIZATION
+    /** 
+     * This method retrieves the bounding area.
+     * 
+     * @return An object containing the geographic bounding area of the location
+     *        around which the search is/was to be conducted and within whose
+     *        area the results must lie.
+     */ 
+    GeoBoundingArea* GetArea() const;
+
+    /** 
+     * This method sets search bounding area.
+     * 
+     * @param rArea An object containing the geographic bounding area of the
+     *        location around which the search is/was to be conducted and within
+     *        whose bounding area the results must lie.
+     */ 
+    void SetArea(const GeoBoundingArea &rArea);
+#endif
+
+    /**
+     * This method retrieves a BCP 47 identifier of the search language.
+     *
+     * @return A string containing a BCP 47 identifier of the language.
+     */
+    String GetLanguage() const;
+
+    /**
+     * This method sets the langauge, using a BCP 47 langauge code.
+     *
+     * @param sSearch A constant reference to a string containing a BCP 47
+     *        identifier of the language.
+     */
+    void SetLanguage(const String& sLang);
+
+    /**
+     * This method retrieves a value that indicates the maximum number of search
+     * results to be retrieved in response to the query.
+     * 
+     * @return An integer indicating the maximum number of results to be
+     *        retrieved.
+     */
+    size_t GetMaxResults() const;
+
+    /**
+     * This method sets a value that indicates the maximum number of search
+     * results to be retrieved in response to the query.
+     * 
+     * @param uMaxResults An integer indicating the maximum number of results to
+     *        be retrieved.
+     */
+    void SetMaxResults(size_t uMaxResults);
+
+    /**
+     * This method retrieves a value that indicates the search item types
+     *  to be retrieved in response to the query.
+     *
+     * @return A value indicating the search item type of results to be
+     *        retrieved.
+     */
+    ResultTypes GetResultTypes() const;
+
+    /**
+     * This method sets a value that indicates the search item types
+     * to be retrieved in response to the query.
+     *
+     * @param eItemType A value indicating the search item type of results to
+     *        be retrieved.
+     */
+    void SetResultTypes(ResultTypes eItemType);
+
+    /**
+     * This method retrieves a list of categories used by the query.
+     * 
+     * @return An object containing a list of POI categories used by the query. 
+     */
+    CategoryList GetCategoriesFilter() const;
+
+    /**
+     * This method sets a list of categories used by the query.
+     * 
+     * @param filters A constant reference to an object containing a list of POI
+     *          categories used by the query.
+     */
+    void SetCategoriesFilter(const CategoryList& filters);
+
+    /**
+     * This method attempts to establish a connection
+     * with the server and then, if the connection has been established, it
+     * builds and submits a query.     
+     * 
+     * @param rDst A reference to an object that is to be notified when the
+     *        reply to the query has arrived from the server.
+     * 
+     * @param pUserData A pointer to user data to be passed back within the
+     *        corresponding reply object.
+     *
+     * @return Identifier of issued request.
+     */
+    RestItemHandle::RequestId Execute(FinderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+    /**
+     * This method retrieves error information associated with the query.
+     *
+     * @return A constant pointer to an object containing the error details.
+     */
+    const FinderError* GetError() const;
+
+    /**
+     * This static method returns the base URI to be used for all subsequent
+     * discovery queries.
+     *
+     * @return A string containing the base URI.
+     */
+    static String GetBaseUri();
+
+    /**
+     * This static method returns the base URI to be used for all subsequent
+     * discovery queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    static void SetBaseUri(const String& sUri);
+
+private:
+
+    /**
+     * This method creates the URI for the request.
+     *
+     * @return URI request string.
+     */
+    String CreateUri() const;
+
+    bool AppendService(DiscoveryQuery::QueryType eType, String& sDst) const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(DiscoveryQuery);
+
+    class DiscoveryQueryImpl;
+    DiscoveryQueryImpl* m_pImpl;
+
+    friend class DiscoveryReply;
+
+    static String s_sBaseUri;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // DISCOVERY_QUERY_H_
diff --git a/inc/engine/finder/DiscoveryReply.h b/inc/engine/finder/DiscoveryReply.h
new file mode 100755 (executable)
index 0000000..bb1589c
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DISCOVERY_REPLY_H_
+#define DISCOVERY_REPLY_H_
+
+#include "finder/BaseFinderReply.h"
+#include "finder/SearchItem.h"
+#include "finder/PlaceItem.h"
+#include "finder/DiscoveryQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class SearchContext;
+
+/**
+ * This class encapsulates a response to a discovery query. The response is a
+ * page of link objects, each containing information about one place. It also
+ * includes a link to the next page of results, if available.  
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API DiscoveryReply : public BaseFinderReply
+{
+public:
+
+    /**
+     * This is the default constructor. 
+     */
+    DiscoveryReply();
+
+    /**
+     * This is the (virtual) destructor.
+     */
+    virtual ~DiscoveryReply();
+
+    /**
+     * This method retrieves a list of search result items that can lead an
+     * application user to detailed information about specific places.
+     * 
+     * @return A vector of instances of <code>SearchItem</code> which represent
+     *       individual search results.
+     */
+    SearchItemList GetSearchItems() const;
+
+    /**
+     * This method retrieves a list of objects each of which contains
+     * information about a single place.
+     * 
+     * @return A vector of instances of <code>PlaceItem</code> which represent
+     *       individual places.
+     */
+    PlaceItemList GetPlaceItems() const;
+
+    /**
+     * This method retrieves a string that contains the URL to the next page of
+     * search result items. 
+     * 
+     * @return A string containing the URL to a page containing the next set of
+     *       results.
+     */
+    String GetNextResultsString() const;
+
+    /**
+     * This method retrieves the offset (index) of the first item on the
+     * current page of results
+     * 
+     * @return An integer indicating the index of the first result item on the
+     *       current page.
+     */
+    size_t GetOffset() const;
+
+    /**
+     * This method retrieves an object that defines the search context used in
+     * the original query.
+     * 
+     * @return An object containing the search context.
+     */
+    SearchContext GetSearchContext() const;
+
+    /**
+     * This method retrieves a query object that can be used to retrieve the
+     * next page of results.
+     * 
+     * @return A pointer to an object encapsulating a query to the next page of
+     *       results.
+     */
+    DiscoveryQuery* GetNextPageQuery() const;
+
+private:
+    void SetSearchItems(const SearchItemList&);
+    void SetPlaceItems(const PlaceItemList&);
+    void SetNextResults(const String&);
+    void SetOffset(size_t);
+    void SetSearchContext(const SearchContext& sContext);
+    
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(DiscoveryReply);
+    friend class TestDiscoveryReply;
+
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+    class DiscoveryReplyImpl;
+    DiscoveryReplyImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // DISCOVERY_REPLY_H_
diff --git a/inc/engine/finder/EditorialContent.h b/inc/engine/finder/EditorialContent.h
new file mode 100755 (executable)
index 0000000..274445d
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef EDITORIAL_CONTENT_H_
+#define EDITORIAL_CONTENT_H_
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "finder/BaseContent.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class EditorialContent;
+
+/**
+ * This typedef defines a list of editorial content items as a type. 
+ */
+typedef std::vector<EditorialContent> EditorialContentList;
+
+/**
+ * This class encapsulates editorial content relating to a place.
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API EditorialContent : public BaseContent
+{
+public:
+
+    /**
+     * This is the default constructor. 
+     */
+    EditorialContent();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    EditorialContent(const EditorialContent& rRhs);
+
+    /**
+     * This method is a (virtual) destructor.
+     */
+    virtual ~EditorialContent();
+
+    /**
+     * This is the assignment operator.
+     *
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     *
+     * @return A reference to the given instance of the class after its contents
+     *        have been updated.
+     */
+    EditorialContent& operator=(const EditorialContent& rRhs);
+
+    /**
+     * This method retrieves the description (the contents of an editorial
+     * item). 
+     * 
+     * @return A string containing the description.
+     */
+    String GetDescription() const;
+
+    /**
+     * This method retrieves the identifier of the language of the editorial
+     * item. The identifier is a string containing a BCP 47 language code (see
+     * also http://tools.ietf.org/html/rfc5646).
+     * 
+     * @return A string containing the language identifier.
+     */
+    String GetLanguage() const;
+
+    /**
+     * This method sets the description (the contents of an editorial
+     * item). 
+     * 
+     * @param sText A constant reference to a string containing the description.
+     */
+    void SetDescription(const String& sText);
+
+    /**
+     * This method retrieves the identifier of the language of the editorial
+     * item. The identifier is a string containing a BCP 47 language code (see
+     * also http://tools.ietf.org/html/rfc5646).
+     * 
+     * @param rLanguage A constant reference to a string containing the language
+     *       identifier.
+     */
+    void SetLanguage(const String& rLanguage);
+
+private:
+    class EditorialContentImpl;
+    EditorialContentImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // EDITORIAL_CONTENT_H_
diff --git a/inc/engine/finder/ExtendedAttribute.h b/inc/engine/finder/ExtendedAttribute.h
new file mode 100755 (executable)
index 0000000..b882cb3
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef EXTENDED_ATTRIBUTE_H_
+#define EXTENDED_ATTRIBUTE_H_
+
+#include "common/HereMaps_global.h"
+#include <vector>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ExtendedAttribute;
+/**
+ * This typedef defines a list of extended attributes as a type.
+ */
+typedef std::vector< ExtendedAttribute > ExtendedAttributeList;
+
+/**
+ * This class encapsulates an extended attribute relating to a place. 
+ *
+ * Extended attributes can be used to provide additional information about a
+ * place. They contain a localized label and a text field that can be displayed
+ * without modification.
+ * 
+ * \ingroup finder
+ */
+class ExtendedAttribute
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    ExtendedAttribute();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    ExtendedAttribute(const ExtendedAttribute& rRhs);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~ExtendedAttribute();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    ExtendedAttribute& operator=(const ExtendedAttribute& rRhs);
+
+    /**
+     * This method retrieves a string that indicates the type of the extended
+     * attribute. 
+     * 
+     * @return A string containing the attribute type identifier.
+     */
+    String GetAttributeType() const;
+
+    /**
+     * This method retrieves the extended attribute label, which is a localized
+     * string identifying the attribute.
+     * 
+     * @return A string containing the extended attribute label.
+     */
+    String GetLabel() const;
+
+    /**
+     * This method retrieves the extended attribute text, which can be displayed
+     * without modification.
+     * 
+     * @return A string containing the extended attribute text.
+     */
+    String GetText() const;
+
+    /**
+     * This method sets the type of the extended attribute.
+     * 
+     * @rsType A constant reference to a string containing the attribute type
+     *        identifier.
+     */
+    void SetAttributeType(const String& rsType);
+
+    /**
+     * This method sets the extended attribute label, which is a localized
+     * string identifying the attribute.
+     * 
+     * @param rsLabel A constant reference to a string containing the extended
+     *        attribute label.
+     */
+    void SetLabel(const String& rsLabel);
+
+    /**
+     * This method sets the extended attribute text, which can be displayed
+     * without modification.
+     * 
+     * @param rsText A constant reference to a string containing the extended
+     *        attribute text.
+     */
+    void SetText(const String& rsText);
+
+private:
+    class ExtendedAttributeImpl;
+    ExtendedAttributeImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // EXTENDED_ATTRIBUTE_H_
diff --git a/inc/engine/finder/FinderError.h b/inc/engine/finder/FinderError.h
new file mode 100755 (executable)
index 0000000..9356fcb
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef FINDER_ERROR_H_
+#define FINDER_ERROR_H_
+
+#include "common/HereMaps_global.h"
+
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates error information reflecting an error that
+ * may arise when a parsing a finder request.
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API FinderError : public ErrorBase
+{
+public:
+
+    /**
+     * This enumeration defines identifiers for the recognized error types.
+     */
+    enum ErrorType
+    {
+        ET_InvalidQueryArguments, ///< Indicates invalid query argument.
+        ET_ParserError,           ///< Indicates that an internal parser error occurred.
+        ET_InvalidCredentials,    ///< Indicates that credentials are not correct or empty
+        ET_UnknownError           ///< Indicate an unkown error
+    };
+
+    /**
+     * This method is a constructor.
+     *
+     * @param sStr A constant reference to a string containing an error message.
+     */
+    FinderError(ErrorType etype);
+
+    /**
+     * This method is a constructor.
+     *
+     * @param aType A value indicating the error type.
+     *
+     * @param sDescription A constant reference to a string containing the error
+     *        description.
+     */
+    FinderError(ErrorType eType, const String& sDescription);
+
+    /**
+     * This method is a (virtual) destructor. 
+     */
+    virtual ~FinderError();
+
+    /**
+     * This method retrieves a string representation of the given instance of
+     * the class. 
+     * 
+     * @return A string containing the error information held in the given
+     *        instance of the class. 
+     */
+    virtual String ToString() const;
+
+    /**
+     * This method sets the error description.
+     *
+     * @param sDsc A constant reference to a string containing the
+     *        description of the error.
+     */
+    void SetDescription(const String& sDsc);
+
+    /**
+     * This method retrieves the error description.
+     *
+     * @return A constant reference to a string containing the
+     *        description of the error.
+     */
+    String GetDescription() const;
+
+    /**
+     * This method retrieves the error type.
+     *
+     * @return A value indicating the error type.
+     */
+    ErrorType GetErrorType() const;
+
+    /**
+     * This method sets the error type.
+     *
+     * @param aType An error type.
+     */
+    void SetErrorType(ErrorType aType);
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(FinderError);
+
+    class FinderErrorImpl;
+    FinderErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // FINDER_ERROR_H_
diff --git a/inc/engine/finder/FinderQueryListener.h b/inc/engine/finder/FinderQueryListener.h
new file mode 100755 (executable)
index 0000000..9a84d48
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef FINDERQUERYLISTENER_H
+#define FINDERQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DiscoveryReply;
+class PlaceDetailsReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to handle the replies from the server.
+ */
+class EXPORT_API FinderQueryListener : public QueryListener
+{
+public:
+
+    /**
+     * This is the default constructor.
+     */
+    FinderQueryListener();
+
+    /**
+     * This method is the destructor.
+     */
+    ~FinderQueryListener();
+
+    /**
+     * This method is a callback invoked when data have arrived in response to a
+     * places search request.
+     *
+     * @param rReply A constant reference to an object containing the response data.
+     */
+    virtual void OnDiscoverReply(const DiscoveryReply& rReply) = 0;
+
+    #ifdef TIZEN_MIGRATION
+    /**
+     * This method is a callback invoked when geocoding request is failed.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnDiscoverFailure(const DiscoveryReply& rReply) = 0;
+    #endif
+
+    /**
+     * This method is a callback invoked when data have arrived in response to a
+     * places details request.
+     *
+     * @param rReply A constant reference to an object containing the response data.
+     */
+    virtual void OnPlaceDetailsReply(const PlaceDetailsReply& rReply) = 0;
+
+    #ifdef TIZEN_MIGRATION
+    /**
+     * This method is a callback invoked when geocoding request is failed.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnPlaceDetailsFailure(const PlaceDetailsReply& rReply) = 0;
+    #endif
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(FinderQueryListener);
+
+    void OnReplySuccess(BaseReply& rReply);
+
+    #ifdef TIZEN_MIGRATION
+    void OnFailure(const BaseReply& rReply);
+    #endif
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/finder/ImageContent.h b/inc/engine/finder/ImageContent.h
new file mode 100755 (executable)
index 0000000..46deb52
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef IMAGE_CONTENT_H_
+#define IMAGE_CONTENT_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBaseUtilUri.h>
+#endif
+
+#include "finder/BaseContent.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+class ImageContent;
+/**
+ * This typedef defines a list of image content objects as a type.
+ */
+typedef std::vector<ImageContent> ImageContentList;
+
+/**
+ * This class encapsulates the contents of an image. It includes information
+ * such as the source URL, image id, and the details of the user (provider).
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API ImageContent : public BaseContent
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    ImageContent();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    ImageContent(const ImageContent& rRhs);
+
+    /**
+     * This method is a (virtual) destructor.
+     */
+    virtual ~ImageContent();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    ImageContent& operator=(const ImageContent& rRhs);
+
+    /**
+     * This method retrieves the URI of the image source.
+     * 
+     * @return An object containing the URI of the image source.
+     */
+    String GetSource() const;
+
+    /**
+     * This method retrieves the image identifier. Note that a meaningful
+     * identifier can be retrieved only if the image the image has been uploaded
+     * via the Places API.
+     * 
+     * @return A string containing the id of the image.
+     */
+    String GetImageId() const;
+
+    /**
+     * This method retrieves a link to the provider of the image.   
+     * 
+     * @return An object with a link to the provider of the image.
+     */
+    LinkObject GetUser() const;
+
+    /**
+     * This method sets the URI of the image source.
+     * 
+     * @param rUrl A constant reference to an object containing the URI of the
+     *       image source.
+     */
+    void SetSource(const String& rUrl);
+
+    /**
+     * This method sets the image identifier. Note that a meaningful
+     * identifier can be retrieved only if the image has been uploaded
+     * via the Places API.
+     * 
+     * @param rImageId A constant reference to a string containing the id of the
+     *       image.
+     */
+    void SetImageId(const String& rImageId);
+
+    /**
+     * This method sets a link to the provider of the image.   
+     * 
+     * @param rUrl A constant reference to an object with a link to the provider
+     *        of the image.
+     */
+    void SetUser(const LinkObject& rUrl);
+
+private:
+    class ImageContentImpl;
+    ImageContentImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif //IMAGE_CONTENT_H_
diff --git a/inc/engine/finder/LinkObject.h b/inc/engine/finder/LinkObject.h
new file mode 100755 (executable)
index 0000000..2e0d2a0
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef LINKOBJECT_H_
+#define LINKOBJECT_H_
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a link that may be included in a search (result)
+ * item. 
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API LinkObject
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    LinkObject();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    LinkObject(const LinkObject& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~LinkObject();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    LinkObject& operator=(const LinkObject& rRhs);
+
+    /**
+     * This method retrieves the id of the resource to which the link points. 
+     * 
+     * @return A string containing the identifier of the object to which the
+     *       link points.
+     */
+    String GetId() const;
+
+    /**
+     * This method retrieves the title of the resource to which the link points. 
+     * 
+     * @return A string containing a localized title for the resource to which
+     *        the link refers.
+     */
+    String GetTitle() const;
+
+    /**
+     * This method retrieves the URI of the resource to which the link points. 
+     * 
+     * @return The URI for the resource to which the link refers.
+     */
+    String GetHref() const;
+
+    /**
+     * This method retrieves the identifier of the type of the resource to which
+     * the link points.  
+     * 
+     * @return A string containing the type identifier for the resource to which
+     *       the link refers.
+     */
+    String GetType() const;
+
+    /**
+     * This method retrieves the URI of the icon for the resource to which the
+     * link points.
+     * 
+     * @return The URI of the icon for the resource to which the link points.
+     */
+    String GetIconPath() const;
+
+    /**
+     * This method sets the id of the resource to which the link points. 
+     * 
+     * @param rsIdentifier A constant reference to a string containing the
+     *       identifier of the object to which the link points.
+     */
+    void SetId(const String& rsIdentifier);
+
+    /**
+     * This method sets the title of the resource to which the link points. 
+     * 
+     * @param sTitle A constant reference to a string containing a localized
+     *        title for the resource to which the link refers.
+     */
+    void SetTitle(const String& sTitle);
+
+    /**
+     * This method sets the URI of the resource to which the link points. 
+     * 
+     * @param rHref A constant reference to an object holding the URI for the
+     *       resource to which the link refers.
+     */
+    void SetHref(const String& rHref);
+
+    /**
+     * This method sets the identifier of the type of the resource to which
+     * the link points.  
+     * 
+     * @param sType A constant reference to a string containing the type
+     *       identifier for the resource to which the link refers.
+     */
+    void SetType(const String& sType);
+
+    /**
+     * This method sets the URI of the icon for the resource to which the
+     * link points.
+     * 
+     * @param A constant reference to an object containing the URI of the icon
+     *        for the resource to which the link points.
+     */
+    void SetIconPath(const String& rIconUrl);
+
+private:
+    class LinkObjectImpl;
+    LinkObjectImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // LINKOBJECT_H_
diff --git a/inc/engine/finder/PlaceDetails.h b/inc/engine/finder/PlaceDetails.h
new file mode 100755 (executable)
index 0000000..40ee8ef
--- /dev/null
@@ -0,0 +1,363 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_DETAILS_H_
+#define PLACE_DETAILS_H_
+
+#include "finder/ContactDetails.h"
+#include "finder/PlacesGlobals.h"
+#include "finder/Category.h"
+#include "finder/ImageContent.h"
+#include "finder/ReviewContent.h"
+#include "finder/EditorialContent.h"
+#include "finder/ExtendedAttribute.h"
+#include "common/HereMaps_global.h"
+#include "internal/StringHelper.h"
+
+#include <map>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Ratings;
+class GeoLocation;
+class ExtendedAttribute;
+class RelatedItem;
+class BaseContent;
+
+/**
+ * This class encapsulates detailed information about a place, including name,
+ * id, contact, category, location, ratings, review(s) and image(s).
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API PlaceDetails
+{
+public:
+    /**
+     * This typedef defines a map holding alternative place names as a type.
+     */ 
+   typedef std::map< String, std::vector< String >, TSPredicate > AlternativeNames;
+
+public:
+    /**
+     * This method is the default constructor.
+     */
+    PlaceDetails();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    PlaceDetails(const PlaceDetails& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~PlaceDetails();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    PlaceDetails& operator=(const PlaceDetails& rRhs);
+
+    /**
+     * This method retrieves the name of the place.
+     * 
+     * @return A string containing the place name.
+     */ 
+    String GetName() const;
+
+    /**
+     * This method retrieves the place id, which is a unique identifier in the
+     * Places database and can be used to obtain the complete information
+     * about the place.
+     * 
+     * @return A string containing the unique id of the place.
+     */ 
+    String GetPlaceId() const;    
+
+    /**
+     * This method retrieves a link to a representation of the
+     * place that can be viewed by end users.
+     * 
+     * @return A string containing a link to a view of the place.
+     */ 
+    String GetView() const;
+
+    /**
+     * This method retrieves a map object containing the alternative names of the
+     * place.  
+     * 
+     * @return An object containing the alternative names of the place.
+     */ 
+    AlternativeNames GetAlternativeNames() const;
+
+    /**
+     * This method retrieves detailed location information for the place.
+     * 
+     * @return An object containing the address and the geographical coordinates
+     *       of the place.
+     */ 
+    GeoLocation GetLocation() const;
+
+    /**
+     * This method retrieves basic information about the place.
+     * 
+     * @return An object containing basic information about the place.
+     */ 
+    BaseContent GetBaseContent() const;
+
+    /**
+     * This method retrieves a list of contact types available for the given
+     * place. Contact types can include telephone, e-mail, website, site, etc.
+     * 
+     * @return A list of strings containing contact type identifiers. The
+     *       possible values for contact type identifiers are "phone",
+     *       "website", "fax", or "email".
+     */
+    StringList GetContactTypes() const;
+
+    /**
+     * This method retrieves a list of contact details for the given place. 
+     * 
+     * @return A vector containing instances of <code>ContactDetails</code>.
+     */ 
+    ContactDetailsList GetContactDetails() const;
+
+    /**
+     * This method retrieves a list of categories applicable to the given place.
+     * 
+     * @return A vector containing instances of <code>Category</code>
+     */ 
+    CategoryList GetCategories() const;
+
+    /**
+     * This method retrieves information on user rating of the given place.
+     * 
+     * @return An object containing user rating information.
+     */ 
+    Ratings GetRatings() const;
+
+    /**
+     * This method retrieves the URI of the icon that represents the given
+     * place.
+     * 
+     * @return A URI of the place icon.
+     */ 
+    String GetIconPath() const;
+
+    /**
+     * This method retrieves a list object containing image content information
+     * for images relating to the given place.
+     * 
+     * @return An object containing a vector of instances of
+     *        <code>ImageContent</code>.
+     */ 
+    ImageContentList GetImageContent() const;
+
+    /**
+     * This method retrieves a list object containing review content
+     * relating to the given place.
+     * 
+     * @return An object containing a vector of instances of
+     *        <code>ReviewContent</code>.
+     */ 
+    ReviewContentList GetReviewContent() const;
+
+    /**
+     * This method retrieves a list object containing editorial content
+     * relating to the given place.
+     * 
+     * @return An object containing a vector of instances of
+     *        <code>EditorialContent</code>.
+     */ 
+    EditorialContentList GetEditorialContent() const;
+
+    /**
+     * This method retrieves a list of strings, each containing an identifier of
+     * an extended attribute type applicable to the given place.
+     * 
+     * @return A list of strings containing extended attribute type identifiers.
+     */ 
+    StringList GetExtendedAttributeTypes() const;
+
+    /**
+     * This method retrieves a list object containing extended attributes
+     * applicable to the given place. 
+     * 
+     * @return An object containing a vector of instances of
+     *        <code>ExtendedAttribute</code>.  
+     */ 
+    ExtendedAttributeList GetExtendedAttributes() const;
+
+    /**
+     * This method retrieves an object containing a list of places that
+     * are related to the given place (or places that may be be interesting to
+     * users who have looked at the given place).
+     * 
+     * @return An object encapsulating places related to the given place. 
+     */ 
+    RelatedItem GetRelatedItem() const;
+
+    /**
+     * This method sets the name of the place.
+     * 
+     * @param rsName A constant reference to a string containing the place name.
+     */ 
+    void SetName(const String& rsName);
+
+    /**
+     * This method sets the place id, which is a unique identifier in the
+     * Places database and can be used to obtain the complete information
+     * about the place.
+     * 
+     * @param rsIdentifier A constant reference to a string containing the
+     *        unique id of the place.
+     */ 
+    void SetPlaceId(const String& rsIdentifier);
+
+    /**
+     * This method sets a link to a representation of the
+     * place that can be viewed by end users.
+     * 
+     * @param rsView A constant reference to a string containing a link to a
+     *        view of the place.
+     */ 
+    void SetView(const String& rsView);
+
+    /**
+     * This method sets a map object containing the alternative names of the
+     * place.  
+     * 
+     * @param vNames A constant reference to an object containing the alternative
+     *        names of the place.
+     */ 
+    void SetAlternativeNames(const AlternativeNames& vNames);
+
+    /**
+     * This method sets the location details for the place.
+     * 
+     * @param rLocation A constant reference to an object containing the address
+     *       and the geographical coordinates of the place.
+     */ 
+    void SetLocation(const GeoLocation& rLocation);
+
+    /**
+     * This method sets basic information about the place.
+     * 
+     * @param rContent A constant reference to an object containing basic
+     *        information about the place.
+     */ 
+    void SetContent(const BaseContent& rContent);
+
+    /**
+     * This method sets a list of contact details for the given place. 
+     * 
+     * @param vDetails A constant reference to a vector containing instances of
+     *    <code>ContactDetails</code>.
+     */ 
+    void SetContactDetails(const ContactDetailsList& vDetails);
+
+    /**
+     * This method sets a list of (POI) categories applicable to the given place.
+     * 
+     * @param rvCategories A constant reference to a vector containing instances
+     *        of <code>Category</code>
+     */ 
+    void SetCategories(const CategoryList& rvCategories);
+
+    /**
+     * This method sets information on user rating of the given place.
+     * 
+     * @param rRatings A constant reference to an object containing user rating
+     *        information.
+     */ 
+    void SetRatings(const Ratings& rRatings);
+
+    /**
+     * This method sets the URI of the icon that represents the given
+     * place.
+     * 
+     * @param rIcon A constant reference to an object containing the URI of the
+     *        place icon.
+     */ 
+    void SetIconPath(const String rIcon);
+
+    /**
+     * This method sets a list object containing image content data
+     * for images relating to the given place.
+     * 
+     * @param rContent A constant reference to a vector of
+     *        instances of <code>ImageContent</code>.
+     */ 
+    void SetImageContent(const ImageContentList& rContent);
+
+    /**
+     * This method sets a list object containing review content
+     * relating to the given place.
+     * 
+     * @param rContent A constant reference to a vector of
+     *        instances of <code>ReviewContent</code>.
+     */ 
+    void SetReviewContent(const ReviewContentList& rContent);
+
+    /**
+     * This method sets a list object containing editorial content
+     * relating to the given place.
+     * 
+     * @param rContent A constant reference to a vector of
+     *          instances of <code>EditorialContent</code>.
+     */ 
+    void SetEditorialContent(const EditorialContentList& rContent);
+
+    /**
+     * This method sets a list object containing extended attributes
+     * applicable to the given place. 
+     * 
+     * @param rAttribute A constant reference to a vector of
+     *        instances of <code>ExtendedAttribute</code>.
+     */ 
+    void SetExtendedAttributes(const ExtendedAttributeList& rAttribute);
+
+    /**
+     * This method sets an object containing a list of places that
+     * are related to the given place (or places that may be of interest to
+     * users who have looked at the given place).
+     * 
+     * @param rAttribute A constant reference to a object encapsulating places
+     *        related to the given place.
+     */ 
+    void SetRelatedItem(const RelatedItem& rAttribute);
+
+private:
+    class PlaceDetailsImpl;
+    PlaceDetailsImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_DETAILS_H_
diff --git a/inc/engine/finder/PlaceDetailsQuery.h b/inc/engine/finder/PlaceDetailsQuery.h
new file mode 100755 (executable)
index 0000000..134db79
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_DETAILS_QUERY_H
+#define PLACE_DETAILS_QUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class PlaceDetailsReply;
+class FinderQueryListener;
+class FinderError;
+
+/**
+ * This class encapsulates a request for detailed information about a specific
+ * place. 
+ * 
+ * \ingroup finder
+ */ 
+class EXPORT_API PlaceDetailsQuery : public BaseQuery
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    PlaceDetailsQuery();
+
+    /**
+     * This method is a copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    PlaceDetailsQuery(const PlaceDetailsQuery& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~PlaceDetailsQuery();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    PlaceDetailsQuery& operator=(const PlaceDetailsQuery& rRhs);
+
+    /** 
+     * This method sets the place id.
+     * 
+     * @param rPlaceId A constant reference to a string containing the unique
+     *       identifier of the place whose details are to be obtained.
+     */
+    void SetPlaceId(const String& rPlaceId);
+
+    /** 
+     * This method retrieves the place id.
+     * 
+     * @return A string containing the unique identifier of the place whose
+     *       details are to be obtained.
+     */
+    String GetPlaceId() const;
+
+    /**
+     * This method retrieves a BCP 47 code representing the search language.
+     *
+     * @return A string containing a BCP 47 identifier of the language.
+     */
+    String GetLanguage() const;
+
+    /**
+     * This method sets the langauge, using a BCP 47 identifier.
+     *
+     * @param sSearch A constant reference to a string containing a BCP 47
+     *        identifier of the language.
+     */
+    void SetLanguage(const String& sLang);
+
+    /**
+     * This method attempts to establish a connection with the server and then,
+     * if the connection has been established, builds and submits a query.
+     * 
+     * @param rListener A reference to an object that is to be notified when the
+     *        reply to the query has arrived from the server.
+     * 
+     * @param pUserData A pointer to user data to be passed back within the
+     *        corresponding reply object.
+     *
+     * @return Identifier of issued request.
+     */
+    RestItemHandle::RequestId Execute(FinderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL, const char* pUrl="") const;
+
+    /**
+     * This method retrieves error information associated with the query parameters
+     *
+     * @return A constant pointer to an object containing the error details.
+     */
+    const FinderError* GetError() const;
+
+    /**
+     * This static method returns the base URI to be used for all subsequent
+     * place detail queries.
+     *
+     * @return A string containing the base URI.
+     */
+    static String GetBaseUri();
+
+    /**
+     * This static method returns the base URI to be used for all subsequent
+     * place detail queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    static void SetBaseUri(const String& sUri);
+
+private:
+    /**
+     * This method creates the URI for the request.
+     *
+     * @return URI request string.
+     */
+    String CreateUri() const;
+
+private:
+    class PlaceDetailsQueryImpl;
+    PlaceDetailsQueryImpl* m_pImpl;
+
+    static String s_sBaseUri;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_DETAILS_QUERY_H
diff --git a/inc/engine/finder/PlaceDetailsReply.h b/inc/engine/finder/PlaceDetailsReply.h
new file mode 100755 (executable)
index 0000000..1bbb36b
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_DETAILS_REPLY_H_
+#define PLACE_DETAILS_REPLY_H_
+
+#include "common/HereMaps_global.h"
+#include "finder/BaseFinderReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class PlaceDetails;
+
+/**
+ * This class encapsulates a response to a request for place details
+ * (<code>PlaceDetailsQuery</code>). 
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API PlaceDetailsReply : public BaseFinderReply
+{
+public:
+
+    /**
+     * This is the default constructor. 
+     */
+    PlaceDetailsReply();
+
+    /**
+     * This is the destructor. 
+     */
+    ~PlaceDetailsReply();
+
+    /**
+     * This method retrieves the details of the place that have been returned by
+     * the server.
+     * 
+     * @return An object containing the place details.
+     */
+    PlaceDetails GetPlaceDetails() const;
+
+private:
+    void SetPlaceDetails(const PlaceDetails& rPlace);
+    bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(PlaceDetailsReply);
+    friend class TestPlaceDetailsReply;
+
+    class PlaceDetailsReplyImpl;
+    PlaceDetailsReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_DETAILS_REPLY_H_
diff --git a/inc/engine/finder/PlaceItem.h b/inc/engine/finder/PlaceItem.h
new file mode 100755 (executable)
index 0000000..38eae3d
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACE_ITEM_H_
+#define PLACE_ITEM_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+class Category;
+class LinkObject;
+class GeoBoundingBox;
+
+class PlaceItem;
+/**
+ * This typedef defines a vector of place items as a type.
+ * 
+ * \ingroup finder
+ */
+typedef std::vector< PlaceItem > PlaceItemList;
+
+/**
+ * This class encapsulates information about a place that has been returned as
+ * part of a reply to a search query (an item in a search result). This
+ * information can be used to obtain place details.
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API PlaceItem
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    PlaceItem();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    PlaceItem(const PlaceItem& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~PlaceItem();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    PlaceItem& operator=(const PlaceItem& rRhs);
+
+    /**
+     * This method retrieves the geographic coordinates of the given place.
+     * 
+     * @return An object containing the geographic coordinates of the place. 
+     */
+    GeoCoordinates GetPosition() const;
+
+    /**
+     * This method retrieves the distance in meters between the given place and
+     * the search context (center).
+     * 
+     * @return A value indicating how far the given place lies from the search
+     *        context (center).
+     */
+    double GetDistance() const;
+
+    /**
+     * This method retrieves a value that represents the average rating of the
+     * place by users.
+     * 
+     * @return A value that represents the average rating of the place by users.
+     */
+    double GetAverageRating() const;
+
+    /**
+     * This method retrieves an object representing the category to which the
+     * given place is assigned.
+     * 
+     * @return An object representing the category to which the given place is
+     *        assigned.
+     */
+    Category GetCategory() const;
+
+    /**
+     * This method retrieves a link to a resource associated with the given
+     * place item.
+     * 
+     * @return An object encapsulating a link to a resource.
+     */
+    LinkObject GetLinkObject() const;
+
+    /**
+     * This method retrieves text describing the location of the place. The text
+     * is typically derived from the address of the place, but may also contain
+     * any other information that can help the user understand, where the place is
+     * located.
+     *
+     * @return A string containing the description of the vicinity (location) of
+     *       the place.
+     */
+    String GetVicinity() const;
+
+    /** 
+     * This method retrieves a Boolean value indicating if the given search
+     * result is sponsored or not.
+     * 
+     * @return <code>true</code> if the given search result is sponsored,
+     *        otherwise <code>false</code>.
+     */
+    bool GetIsSponsored() const;
+
+    /** 
+     * This method retrieves the bounding box enclosing the given place. 
+     * 
+     * @return An object representing the bounding box (defined in terms of the
+     *       geographical coordinates of its top-left and bottom-right corners)
+     *       that encloses the given place.
+     */
+    GeoBoundingBox GetBBox() const;
+
+    /**
+     * This method sets the geographic coordinates of the given place.
+     * 
+     * @param rPosition GeoCoordinates A constant reference to a object
+     *        containing the geographic coordinates of the place.
+     */
+    void SetPosition(const GeoCoordinates& rPosition);
+
+    /**
+     * This method sets the distance in meters between the given place and
+     * the search context (center).
+     * 
+     * @param dDistance A value indicating how far the
+     *        given place lies from the search context (center).
+     */
+    void SetDistance(double dDistance);
+
+    /**
+     * This method sets a value that represents the average rating of the
+     * place by users.
+     * 
+     * @param dAverageRating A value that represents the average rating of the
+     *        place by users.
+     */
+    void SetAverageRating(double dAverageRating);
+
+    /**
+     * This method sets an object representing the category to which the
+     * given place is assigned.
+     * 
+     * @param rCategory A constant reference to an object representing the
+     *        category to which the given place is assigned.
+     */
+    void SetCategory(const Category& rCategory);
+
+    /**
+     * This method sets text describing the location of the place. The text
+     * is typically derived from the address of the place, but may also contain
+     * any other information that may help the user understand, where the place is
+     * located.
+     *
+     * @param sVicinity A constant reference to a string containing the
+     *       description of the vicinity (location) of the place.
+     */
+    void SetVicinity(const String& sVicinity);
+
+    /**
+     * This method sets a link to a resource associated with the given
+     * place item.
+     * 
+     * @param rLinkObject A constant reference to an object encapsulating a link
+     *        to a resource.
+     */
+    void SetLinkObject(const LinkObject& rLinkObject);
+
+    /** 
+     * This method sets a Boolean value indicating if the given search
+     * result item is sponsored or not.
+     * 
+     * @param bIsSponsored <code>true</code> if the given search result item is
+     *        sponsored, otherwise <code>false</code>.
+     */
+    void SetIsSponsored(bool bIsSponsored);
+
+    /** 
+     * This method sets the bounding box enclosing the given place. 
+     * 
+     * @param rBbox A constant reference to an object representing the bounding
+     *       box (defined in terms of the geographical coordinates of its
+     *       top-left and bottom-right corners) that encloses the given place.
+     */
+    void SetBBox(const GeoBoundingBox& rBbox);
+
+private:
+    class PlaceItemImpl;
+    PlaceItemImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACE_ITEM_H_
diff --git a/inc/engine/finder/PlacesError.h b/inc/engine/finder/PlacesError.h
new file mode 100755 (executable)
index 0000000..b9c8bf3
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACES_ERROR_H_
+#define PLACES_ERROR_H_
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates an error condition that may arise when submitting
+ * places-related queries and retrieving results.
+ * 
+ * \ingroup finder
+ */
+class PlacesError : public ErrorBase
+{
+public:
+    /** 
+     * This enumeration defines identifiers for both success and error
+     * conditions. 
+     */ 
+    enum ErrorCode
+    {
+        EC_NoError,                   ///< Indicates success.
+        EC_PlaceDoesNotExistError,    ///< Indicates that the play does not exist.
+        EC_CategoryDoesNotExistError, ///< Indicates that the category does not exist.
+        EC_ParseError,                ///< Indicates a parsing error.
+        EC_PermissionsError,          ///< Indicates that the required
+                                      ///  permissions are not in place.
+        EC_UnsupportedError,          ///< Indicates that a query/operation is
+                                      ///  not supported.
+        EC_BadArgumentError,          ///< Indicates that an argument supplied
+                                      ///  by the caller is bad or not recognized.
+        EC_CancelError,               ///< Indicates that an error occurred when
+                                      ///  attempting to cancel a request. 
+        EC_UnknownError               ///< Indicates an unspecified/unknown error.
+    };
+
+    /** 
+     * This is a constructor for the class.
+     *
+     * @param aErrorCode A value representing the error code with which to
+     *       initialize a new instance of the class.
+     */
+    PlacesError(ErrorCode aErrorCode);
+
+    /** 
+     * This method is the (virtual) destructor for the class.
+     */
+    virtual ~PlacesError();
+
+    /**
+     * This method retrieves a value representing the error code assigned to
+     * the given instance of the class.
+     * 
+     * @return A value representing the error code assigned to
+     *        the given instance of the class.
+     */
+    ErrorCode GetErrorCode() const;
+
+    /**
+     * This method retrieves a string representation of the given instance of
+     * the class.
+     * 
+     * @return A String representation of
+     *        the given instance of the class. The possible values are 
+     *        "No Error", "Place Doesn't exist", "Category doesn't exist",
+     *        "Parse error", "Permissions error", "Unsupported error",
+     *        "Bad argument", "Cancel error", "Unknown error",
+     *        or "No defined error".
+     */
+    virtual String ToString() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(PlacesError);
+
+    class PlacesErrorImpl;
+    PlacesErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACES_ERROR_H_
diff --git a/inc/engine/finder/PlacesGlobals.h b/inc/engine/finder/PlacesGlobals.h
new file mode 100755 (executable)
index 0000000..577e106
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PLACES_GLOBAL_H_
+#define PLACES_GLOBAL_H_
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This typedef defines a list of strings as a type.
+ * 
+ * \ingroup finder
+ * \typedef std::vector<Tizen::Base::String> StringList
+ */
+typedef std::vector<String> StringList;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PLACES_GLOBAL_H_
diff --git a/inc/engine/finder/Ratings.h b/inc/engine/finder/Ratings.h
new file mode 100755 (executable)
index 0000000..87107be
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RATINGS_H_
+#define RATINGS_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates place ratings contributed by users. 
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API Ratings
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    Ratings();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    Ratings(const Ratings& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~Ratings();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     * 
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    Ratings& operator=(const Ratings& rRhs);
+
+    /**
+     * This method retrieves the average rating for a place.
+     * 
+     * @return A value reflecting the average user rating for a place. 
+     */
+    double GetAverage() const;
+
+    /**
+     * This method retrieves a value indicating how many users have rated a place.
+     * 
+     * @return A value indicating how many users have rated a place.
+     */
+    size_t GetCount() const;
+
+    /**
+     * This method sets the average rating for a place.
+     * 
+     * @param aAverage A value reflecting the average user rating for a place.
+     */
+    void SetAverage(double aAverage);
+
+    /**
+     * This method sets a value indicating how many users have rated a place.
+     * 
+     * @param aCount A value indicating how many users have rated a place.
+     */
+    void SetCount(size_t aCount);
+
+private:
+    class RatingsImpl;
+    RatingsImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // RATINGS_H_
diff --git a/inc/engine/finder/RelatedItem.h b/inc/engine/finder/RelatedItem.h
new file mode 100755 (executable)
index 0000000..2e55176
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RELATED_ITEM_H_
+#define RELATED_ITEM_H_
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates an item related to a place returned as part of a
+ * response to a query. 
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API RelatedItem
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    RelatedItem();
+
+    /**
+     * This method is the copy constructor.
+     *
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    RelatedItem(const RelatedItem& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~RelatedItem();
+
+    /**
+     * This is the assignment operator.
+     *
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     *
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    RelatedItem& operator=(const RelatedItem& rRhs);
+
+    /** 
+     * This method retrieves the title/name of the related/recommended item. 
+     * 
+     * @return A string containing the title or name.
+     */
+    String GetTitle() const;
+
+    /** 
+     * This method retrieves the type specifier for the related/recommended item.
+     * 
+     * @return A string containing the type specifier for the
+     *       related/recommended item.
+     */
+    String GetType() const;
+
+    /** 
+     * This method retrieves a hyperlink that refers to the resource
+     * represented by the related/recommended item.
+     * 
+     * @return A string containing a hyperlink that refers to the resource
+     *        represented by the related/recommended item.
+     */
+    String GetHref() const;
+
+    /** 
+     * This method sets the title/name of the related/recommended item. 
+     * 
+     * @param sTitle A constant reference to a string containing the title or
+     *        name.
+     */
+    void SetTitle(const String& sTitle);
+
+    /** 
+     * This method sets the type specifier for the related/recommended item.
+     * 
+     * @param sType A constant reference to a string containing the type
+     *       specifier for the related/recommended item.
+     */
+    void SetType(const String& sType);
+
+    /** 
+     * This method sets a hyperlink that refers to the resource
+     * represented by the related/recommended item.
+     * 
+     * @param uHref A constant reference to an object containing a hyperlink that
+     *        refers to the resource represented by the related/recommended
+     *        item.
+     */
+    void SetHref(const String& uHref);
+
+private:
+    class RelatedItemImpl;
+    RelatedItemImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // RELATED_ITEM_H_
+
diff --git a/inc/engine/finder/ReviewContent.h b/inc/engine/finder/ReviewContent.h
new file mode 100755 (executable)
index 0000000..a83f562
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef REVIEW_CONTENT_H_
+#define REVIEW_CONTENT_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBaseDateTime.h>
+#endif
+
+#include "finder/BaseContent.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+class ReviewContent;
+/**
+ * This typedef defines a list or review content items as a type.
+ */
+typedef std::vector<ReviewContent> ReviewContentList;
+
+/**
+ * This class encapsulates the content of a review related to a place.
+ * 
+ * \ingroup finder
+ */
+class EXPORT_API ReviewContent : public BaseContent
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    ReviewContent();
+
+    /**
+     * This method is the copy constructor.
+     *
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    ReviewContent(const ReviewContent& rRhs);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~ReviewContent();
+
+    /**
+     * This is the assignment operator.
+     *
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     *
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    ReviewContent& operator=(const ReviewContent& rRhs);
+
+    /**
+     * This method retrieves the review date as a string.
+     * 
+     * @return A string containing the date of the review. 
+     */
+    String GetDateTime() const;
+
+    /**
+     * This method retrieves the review title.
+     * 
+     * @return A string containing the review title.
+     */
+    String GetTitle() const;
+
+    /**
+     * This method retrieves the review rating.
+     * 
+     * @return A double containing the retrieved value of rating.
+     */
+    double GetRating() const;
+
+    /**
+     * This method retrieves the review description (text).
+     * 
+     * @return A string containing the review
+     *        description (text).
+     */
+    String GetDescription() const;
+
+    /**
+     * This method retrieves a link to the website of the user, who submitted
+     * the review. 
+     * 
+     * @return An object representing a link to the website of the user, who submitted
+     * the review. 
+     */
+    LinkObject GetUser() const;
+
+    /**
+     * This method retrieves the BCP 47 identifier of the language used in the
+     * review.
+     * 
+     * @return A string containing the identifier of the language used in the
+     *        review.
+     */
+    String GetLanguage() const;
+
+    /**
+     * This method sets the review date as a string.
+     * 
+     * @param rDateTime A constant reference to a string containing the date of
+     *        the review.
+     */
+    void SetDateTime(const String &rDateTime);
+
+    /**
+     * This method sets the review title.
+     * 
+     * @param rTitle A constant reference to a string containing the review
+     *        title.
+     */
+    void SetTitle(const String& rTitle);
+
+    /**
+     * This method sets the review rating.
+     * 
+     * @param dRating A double containing the retrieved value of rating.
+     */
+    void SetRating(double dRating);
+
+    /**
+     * This method sets the review description (text).
+     * 
+     * @param sText A constant reference to a string containing the review
+     *        description (text).
+     */
+    void SetDescription(const String& sText);
+
+    /**
+     * This method sets a link to the website of the user, who submitted
+     * the review. 
+     * 
+     * @param cUser A constant reference to an object representing a link to the
+     *        website of the user, who submitted the review.
+     */
+    void SetUser(const LinkObject& cUser);
+
+    /**
+     * This method sets the BCP 47 identifier of the language used in the
+     * review.
+     * 
+     * @param sLanguage A constant reference to a string containing the
+     *        identifier of the language used in the review.
+     */
+    void SetLanguage(const String& sLanguage);
+
+private:
+    class ReviewContentImpl;
+    ReviewContentImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // REVIEW_CONTENT_H_
diff --git a/inc/engine/finder/SearchContext.h b/inc/engine/finder/SearchContext.h
new file mode 100755 (executable)
index 0000000..68513f7
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef SEARCH_CONTEXT_H_
+#define SEARCH_CONTEXT_H_
+
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoLocation;
+
+/**
+ * This class encapsulates the search context used in queries. The context
+ * defines the point around which the search is conducted or an area within
+ * which the search is conducted. 
+ * 
+ * \ingroup finder
+ */
+class SearchContext
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    SearchContext();
+
+    /**
+     * This method is the copy constructor.
+     *
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    SearchContext(const SearchContext& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~SearchContext();
+
+    /**
+     * This is the assignment operator.
+     *
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     *
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    SearchContext& operator=(const SearchContext& rRhs);
+
+    /**
+     * This method retrieves a Boolean value that indicates if the retrieved
+     * location is different from the location context used in the search. The
+     * retrieved location is not the same as the location context, typically when
+     * the location context is implicit (derived from request headers).
+     * 
+     * @return <code>true</code> if the retrieved location is different from the
+     *       one used in the search, otherwise <code>false</code>.
+     */
+    bool GetMoved() const;
+
+    /**
+     * This method retrieves an object containing the details of the search
+     * context such as the geographic coordinates and street address.
+     * 
+     * @return An object containing the details of the search context
+     *        (geographic coordinates and address if available)
+     */
+    GeoLocation GetLocation() const;
+
+    /** 
+     * This method retrieves the media type specifier for the given search
+     * context.
+     *
+     * @return A string containing the media type specifier for the search
+     *        context,  "urn:nlp-types:place".
+     */  
+    String GetType() const;
+
+    /** 
+     * This method retrieves the title of the given search context.
+     * 
+     * @return A string containing the title of the search context.
+     */
+    String GetTitle() const;
+
+    /** 
+     * This method retrieves a link to the details of the place at
+     * the center of the search context. Note that the link is available only if
+     * the search context points to a recognized place, rather than, for
+     * example, the middle of an ocean. 
+     * 
+     * @return A URI (link) to the details of the place at the center of the
+     *       search context, if available.
+     */
+    String GetHref() const;
+
+    /**
+     * This method sets a Boolean value that indicates if the retrieved
+     * location is different from the location context used in the search. The
+     * retrieved location is not the same as the location context, typically when
+     * the location context is implicit (derived from request headers).
+     * 
+     * @param bMoved <code>true</code> if the retrieved location is different from the
+     *       one used in the search, otherwise <code>false</code>.
+     */
+    void SetMoved(bool bMoved);
+
+    /**
+     * This method sets an object containing the details of the search
+     * context such as the geographic coordinates and street address.
+     * 
+     * @return A constant reference to an object containing the details of the
+     *        search context (geographic coordinates and address if available)
+     */
+    void SetLocation(const GeoLocation& rLocation);
+
+    /** 
+     * This method sets the media type specifier for the given search
+     * context.
+     *
+     * @param sType A constant reference to a string containing the media type
+     *        specifier for the search context, "urn:nlp-types:place".
+     */  
+    void SetType(const String& sType);
+
+    /** 
+     * This method sets the title of the given search context.
+     * 
+     * @param sTitle A constant reference to a string containing the title of
+     *        the search context.
+     */
+    void SetTitle(const String& sTitle);
+
+    /** 
+     * This method sets a link to the details of the place at
+     * the center of the search context. Note that the link is available only if
+     * the search context points to a recognized place, rather than, for
+     * example, the middle of an ocean. 
+     * 
+     * @param uHref A constant reference to a URI (link) to the details of the
+     *        place at the center of the search context, if available.
+     */
+    void SetHref(const String& uHref);
+
+private:
+    class SearchContextImpl;
+    SearchContextImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // SEARCH_CONTEXT_H_
diff --git a/inc/engine/finder/SearchItem.h b/inc/engine/finder/SearchItem.h
new file mode 100755 (executable)
index 0000000..5d983f2
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef SEARCH_ITEM_H_
+#define SEARCH_ITEM_H_
+
+#include <vector>
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class LinkObject;
+
+class SearchItem;
+/** 
+ * This typedef defines a list of search items as a type.
+ */
+typedef std::vector< SearchItem > SearchItemList;
+
+/**
+ * This class encapsulates a search item returned by the server as part of a
+ * response to a discovery query. 
+ *
+ * \ingroup finder
+ */
+class SearchItem
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    SearchItem();
+
+    /**
+     * This method is the copy constructor.
+     *
+     * @param rRhs An object whose contents are to be copied to the instance
+     *        being created.
+     */
+    SearchItem(const SearchItem& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~SearchItem();
+
+    /**
+     * This is the assignment operator.
+     *
+     * @param rRhs An object whose contents are to be copied to the given
+     *        instance.
+     *
+     * @return A reference to the given instance of the class after its contents
+     *       have been updated.
+     */
+    SearchItem& operator=(const SearchItem& rRhs);
+
+    /**
+     * This method retrieves the link object from the given search item. The
+     * link points to another resource.
+     * 
+     * @return An object containing a link to another resource.
+     */
+    LinkObject GetLinkObject() const;
+
+    /**
+     * This method retrieves the URI to the detailed information about the place
+     * to which the given search item refers.
+     * 
+     * @return The URI of the detailed information about the
+     *        place to which the given search item refers.
+     */
+    String GetPlacesPath() const;
+
+    /**
+     * This method retrieves a value representing the weighting of the given
+     * search item.
+     * 
+     * @return A value that represents the weighting of the given
+     *        search item. 
+     */
+    double GetWeight() const;
+
+    /**
+     * This method sets the link object from the given search item. The
+     * link points to another resource.
+     * 
+     * @param uLink A constant reference to an object containing a link to
+     *        another resource.
+     */
+    void SetLinkObject(const LinkObject& uLink);
+
+    /**
+     * This method sets the URI to the detailed information about the place
+     * to which the given search item refers.
+     * 
+     * @param uPlacesPath A constant reference to an object containing the URI
+     *        of the detailed information about the place to which the given
+     *        search item refers.
+     */
+    void SetPlacesPath(const String& uPlacesPath);
+
+    /**
+     * This method sets a value representing the weighting of the given
+     * search item.
+     * 
+     * @param dWeight A value that represents the weighting of the given search
+     *        item.
+     */
+    void SetWeight(double dWeight);
+
+private:
+
+    class SearchItemImpl;
+    SearchItemImpl* m_pImpl;
+
+    friend class JsonParser;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // SEARCH_ITEM_H_
diff --git a/inc/engine/geocoder/GeoCoderQuery.h b/inc/engine/geocoder/GeoCoderQuery.h
new file mode 100755 (executable)
index 0000000..d88ca4a
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERQUERY_H_
+#define GEOCODERQUERY_H_
+
+#include "common/HereMaps_global.h"
+
+#include "geocoder/GeoCoderQueryBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Address;
+class GeoCoderReply;
+class GeoBoundingBox;
+class ApplicationContext;
+class GeoCoderQueryListener;
+
+/**
+ * This class represents a geocoding query.
+ *
+ * Instances of this class are used to obtain the geographic coordinates of
+ * locations on the basis of an address (complete or partial) and/or a free text
+ * search string.
+ * 
+ * @ingroup geocoding
+ */
+class EXPORT_API GeoCoderQuery : public GeoCoderQueryBase
+{
+public:
+
+    /**
+     * This is the default constructor. 
+     */
+    GeoCoderQuery();
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param rAddress A constant reference to an object providing the details
+     *        of an address to use in the query.
+     */
+    GeoCoderQuery(const Address& rAddress);
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param rAddress A constant reference to an object that provides the details
+     *        of an address to use in the query.
+     * 
+     * @param sSearch A constant reference to a string containing the search
+     *        text to use in the query. 
+     */
+    GeoCoderQuery(const Address& rAddress, const String& sSearch);
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param sSearch A constant reference to a string containing the search
+     *        text to use in the query. 
+     */
+    GeoCoderQuery(const String& sSearch);
+
+    /**
+     * This method is a virtual destructor.
+     */
+    virtual ~GeoCoderQuery();
+
+    /**
+     * This method sets the properties defining a circular area within which a
+     * search is to be conducted. The area is defined in terms of its center and
+     * radius.
+     *
+     * @param rCoord A constant reference to an object containing the latitude
+     *        and longitude of the center of the proximity area (search center).
+     *
+     * @param rRadius A value specifying the radius of the search area in meters.
+     */
+    void SetProximity(const GeoCoordinates& rCoord, float fRadius = 0);
+
+    /**
+     * This method detects whether coordinates/proximity (the center of search area
+     * set or not).
+     *
+     * @return <code>true</code> if the proximity was set,
+     *        otherwise <code>false</code>
+     */
+    bool HasProximity() const;
+
+    /**
+     * This method sets the address to be used in the query. 
+     * 
+     * @param rAddress A constant reference to an object providing the details
+     *        of an address to use in the query.
+     */
+    void SetAddress(const Address& rAddress);
+
+    /**
+     * This method sets the search text to be used in the query.
+     * 
+     * @param sSearch A constant reference to a string containing the search
+     *        text to use in the query. 
+     */
+    void SetSearchtext(const String& sSearch);
+
+    /**
+     * This method sets the map view using the bounding box object provided by
+     * the caller. The map view is a soft filter, which means that the
+     * response includes relevant results from within the map view, but also
+     * possibly from a wider area, and even relevant global results are
+     * also returned.
+     *
+     * @param rMapView A constant reference to a bounding box object that
+     *        defines the map view in terms of the geographic coordinates of
+     *        the top-left and bottom-right corners.
+     */
+    void SetMapView(const GeoBoundingBox& rMapView);
+
+    /**
+     * This method sets the bounding box to be used in the query. The bounding
+     * box is a hard filter in that the response includes relevant results from
+     * within the area it defines. 
+     * 
+     * @param A constant reference to an instance of
+     *        <code>GeoBoundingBox</code>, representing a geographic area within
+     *        which to perform the search.
+     */
+    void SetBoundingBox(const GeoBoundingBox& rBoundingBox);
+
+    /**
+     * This method sets the location identifier to be used in the query. 
+     * 
+     * @param sID a constant reference to a string containing the location
+     *        identifier. 
+     */
+
+    void SetLocationId(const String& sId);
+
+    /**
+     * This method attempts to establish a connection
+     * with the server and then, if the connection has been established, it
+     * builds and submits a query.     
+     * 
+     * @param rListener A reference to an object that is to be notified when
+     *        the reply to the query has arrived from the server.
+     * 
+     * @param pUserData A pointer to user data to be passed back within the
+     *        corresponding reply object.
+     *
+     * @return Identifier of issued request.
+     */
+    RestItemHandle::RequestId Execute(GeoCoderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * geo coder queries.
+     *
+     * @return A string containing the base URI.
+     */
+    String GetBaseUri() const;
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * geo coder queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    void SetBaseUri(const String& sUri);
+
+private:
+    /**
+     * This method creates the URI for the request.
+     *
+     * @return URI request string.
+     */
+    String CreateUri() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderQuery);
+
+    class GeoCoderQueryImpl;
+    GeoCoderQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOCODERQUERY_H_ */
diff --git a/inc/engine/geocoder/GeoCoderQueryBase.h b/inc/engine/geocoder/GeoCoderQueryBase.h
new file mode 100755 (executable)
index 0000000..29df37d
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERQUERYBASE_H
+#define GEOCODERQUERYBASE_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/BaseQuery.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ApplicationContext;
+
+/**
+ * This is the base class for implementations of geocoding query classes. 
+ *
+ * The virtual method require implementation in derived classes.
+ * 
+ * \ingroup geocoding
+ */
+class EXPORT_API GeoCoderQueryBase : public BaseQuery
+{
+public:
+    /**
+     * This enumeration defines identifiers for response attribute switches that
+     * indicate which attributes are to be included in query responses from the
+     * server.
+     */
+    enum ResponseAttribute
+    {
+        RA_PerformedSearch,       ///< Indicates that completed searches are to be included in the response.
+        RA_Label,                 ///< Indicates that labels are to be included in the response. 
+        RA_DidYouMeanSuggestion,  ///< Indicates that did-you-mean suggestions are to be included in the response.
+        RA_MatchQuality,          ///< Indicates that match quality is to be included in the response.
+        RA_MatchType,             ///< Indicates that match type specifiers are to be included in the response.
+        RA_MatchCode,             ///< Indicates that match codes are to be included in the response.
+        RA_ParsedRequest,         ///< Indicates that parsed requests are to be included in the response.
+        RA_All,                   ///< Indicates that all attributes are to be included in the response.
+        RA_None                   ///< Indicates that no attributes are to be included in the response.
+    };
+
+    /**
+     * This method is the destructor.
+     *
+     * @return
+     */
+    ~GeoCoderQueryBase();
+
+    /**
+     * This method sets the properties defining a circular area within which a
+     * search is to be conducted. The area is defined in terms of its center and
+     * radius.
+     *
+     * @param rCoord A constant reference to an object containing the latitude
+     *        and longitude of the center of the proximity area (search center).
+     *
+     * @param rRadius A value specifying the radius of the search area in meters.
+     */
+    virtual void SetProximity(const GeoCoordinates& rCoord, float fRadius = 0) = 0;
+
+    /**
+     * This method detects whether coordinates/proximity (the center of search area
+     * set or not).
+     *
+     * @return <code>true</code> if the proximity was set,
+     *        otherwise <code>false</code>
+     */
+    virtual bool HasProximity() const = 0;
+
+    /**
+     * This method adds a language code provided by the caller to the list of
+     * preferred languages.
+     *
+     * @param sPreferredLang A constant reference to a string containing a BCP
+     *        47 language code (see also  http://tools.ietf.org/html/rfc5646). 
+     *        identifying the preferred language.  
+     */
+    void AppendPreferredLanguage(const String& sPreferredLang);
+
+    /**
+     * This method retrieves a value indicating the number of preferred
+     * languages that have been set.  
+     *
+     * @return A value indicating how many preferred languages have been set. 
+     */
+    size_t GetNumPreferredLanguages() const;
+
+    /**
+     * This method retrieves the preferred language identifier at the index
+     * specified by the caller. The identifier is a BCP 47 language code (see
+     * also http://tools.ietf.org/html/rfc5646).
+     *
+     * @param idx A value representing an index into the array of preferred
+     *        languages from which to retrieve the language identifier.
+     * 
+     * @return A constant pointer to a string containing the language identifier
+     *        or <code>NULL</code> if the supplied index is not valid.
+     */
+    const String* GetPreferredLanguage(size_t idx) const;
+
+    /**
+     * This method sets a value indicating the maximum number of query results
+     * to be returned.
+     *
+     * @param uMaxResults A value indicating the maximum number of query results
+     * to be returned.
+     */
+    void SetMaxResults(size_t uMaxResults);
+
+    /**
+     * This method sets a value indicating which page is to be returned in a
+     * paging scenario. Note that the value has no effect unless a value
+     * indicating the maximum number of results to retrieve has been specified
+     * (see SetMaxResults).
+     *
+     * @param uPage An unsigned integer indicating the page number.  
+     */
+    void SetPageInformation(size_t uPage);
+    
+    /**
+     * This method allows the caller to set a value that determines the 
+     * functionality and data delivered by the underlying version of the RESTful
+     * service.
+     * 
+     * @param iValue An integer value that determines the functionality of (and
+     *        data delivered by) the underlying RESTful service:
+     *        <ul>
+     *        <li>0 - indicates the default behavior of the underlying RESTful
+     *                service 
+     *         </li>
+     *         <li>1 - indicates the default behavior of the underlying service and:
+     *         <ul><li>reverse geocoding responses include area names if addresses
+     *                cannot be determined</li>
+     *             <li>addresses/locations can be matched at
+     *                intersection level</li>
+     *         </ul>  
+     *         </li>
+     *         <li>2 - as 1 plus:
+     *             <ul><li>reverse geocoding responses include the area
+     *                 display position (center)</li>
+     *                <li>map version can be requested (and
+     *                   included in responses)</li>
+     *            </ul>  
+     *        </li>
+     *        </ul>
+     */
+     void SetGenParameter(int iValue);
+
+
+    /**
+     * This method adds a response attribute specified by the caller.
+     *
+     * @param aAttr A value identifying the response attribute to add.
+     */
+    void AddResponseAttribute(ResponseAttribute aAttr);
+
+    /**
+     * This method removes the response attribute specified by the caller.
+     *
+     * @param aAttr A value identifying the response attribute to remove.
+     */
+    void RemoveResponseAttribute(ResponseAttribute aAttr);
+
+    /**
+     * This method adds a key-value pair representing an additional parameter
+     * and its value.
+     *
+     * @param sKey A constant reference to a string containing the name/key of
+     *        the additional parameter.  
+     * 
+     * @param sValue A constant reference to a string containing the value of the
+     *        additional parameter. 
+     */
+    void AddAdditionalParameter(const String& sKey, const String& sValue);
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * geo coder queries.
+     *
+     * @return A string containing the base URI.
+     */
+    virtual String GetBaseUri() const = 0;
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * geo coder queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    virtual void SetBaseUri(const String& sUri) = 0;
+
+protected:
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoCoderQueryBase();
+
+    /**
+     * This method obtains the base URL for the service named by the caller.
+     *
+     * @param sService A constant reference to a string that identifies the
+     *        service whose base URL is to be obtained.
+     *
+     * @param sDst A reference to an object which is to receive the result.
+     *
+     * @return <code>true</code> if the base URL has been created successfully,
+     *        otherwise <code>false</code>
+     */
+    bool CreateBaseUrl(const String& sService, String& sDst) const;
+
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderQueryBase);
+
+    class GeoCoderQueryBaseImpl;
+    GeoCoderQueryBaseImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/GeoCoderQueryListener.h b/inc/engine/geocoder/GeoCoderQueryListener.h
new file mode 100755 (executable)
index 0000000..bcdb996
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERQUERYLISTENER_H
+#define GEOCODERQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoderReply;
+
+/**
+ * This class encapsulates a listener facility that is informed when the results
+ * of a query become available.
+ *
+ * The class exposes a callback method that must be implemented by the derived
+ * classes to process the data received from the server.
+ * 
+ * @ingroup geocoding
+ */
+class EXPORT_API GeoCoderQueryListener : public QueryListener
+{
+public:
+    /** 
+     * This method is the default constructor. 
+     */
+    GeoCoderQueryListener();
+
+    /** 
+     * This method is the destructor. 
+     */
+    ~GeoCoderQueryListener();
+
+    /**
+     * This method is a callback invoked when data have arrived in response to a
+     * geocoding request.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnGeoCoderReply(const GeoCoderReply& rReply) = 0;
+
+    #ifdef TIZEN_MIGRATION
+    /**
+     * This method is a callback invoked when geocoding request is failed.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnGeoCoderFailure(const GeoCoderReply& rReply) = 0;
+    #endif
+
+private:
+
+    void OnReplySuccess(BaseReply& rReply);
+
+    #ifdef TIZEN_MIGRATION
+    void OnFailure(const BaseReply& rReply);
+    #endif
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/GeoCoderReply.h b/inc/engine/geocoder/GeoCoderReply.h
new file mode 100755 (executable)
index 0000000..a821eb2
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERREPLY_H_
+#define GEOCODERREPLY_H_
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class MetaInfo;
+
+
+/**
+ * This class encapsulates a reply to a geocoding query. 
+ *
+ * The class receives the response data returned by the server in reply to a
+ * query asynchronously. Notification that the data is available comes via a
+ * listener object registered on the class by calling <code>AddListener()</code>.
+ * 
+ * @ingroup geocoding
+ */
+class EXPORT_API GeoCoderReply : public BaseReply
+{
+public:
+
+    /**
+     * This is the default constructor. 
+     */
+    GeoCoderReply();
+
+    /**
+     * This is a destructor.
+     */
+    virtual ~GeoCoderReply();
+
+    /**
+     * This method retrieves a value indicating the number of results in the
+     * reply to the query.
+     * 
+     * @return An integer value indicating the number of results.
+     */
+    size_t GetNumResults() const;
+
+    /**
+     * This method retrieves a result at the index specified by the caller.
+     * 
+     * @param A value indicating the index of the result to retrieve.
+     * 
+     * @return A constant pointer to an instance of <code>Result</code>.
+     */
+    const Result* GetResult(size_t idx) const;
+
+    /**
+     * This method retrieves the reply meta information.
+     * 
+     * @return A constant pointer to an instance of <code>MetaInfo</code>. 
+     */
+    const MetaInfo* GetMetaInfo() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderReply);
+    friend class TestGeoCoderParser;
+
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+    class GeoCoderReplyImpl;
+    GeoCoderReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOCODERREPLY_H_ */
diff --git a/inc/engine/geocoder/GeoCoderReplyParser.h b/inc/engine/geocoder/GeoCoderReplyParser.h
new file mode 100755 (executable)
index 0000000..20fba2a
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERREPLYPARSER_H
+#define GEOCODERREPLYPARSER_H
+
+#include "common/HereMaps_global.h"
+
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class Address;
+class MetaInfo;
+class ErrorBase;
+class ParserError;
+class GeoLocation;
+class GeoCoordinates;
+class GeoBoundingBox;
+
+/**
+ * This class encapsulates a request reply parser. It provides methods dedicated
+ * to parsing specific nodes of the reply data and populating a destination
+ * object supplied by the caller.
+ * 
+ * \ingroup geocoding
+ */
+class GeoCoderReplyParser
+{
+public:
+    /**
+     * This method retrieves reply meta info held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseMetaInfo(xmlNodePtr pNode, MetaInfo& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves a result entry held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseResultEntry(xmlNodePtr pNode, Result& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves an address held in the XML node supplied
+     * by the caller 
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseAddress(xmlNodePtr pNode, Address& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves geographic coordinates held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseCoordinate(xmlNodePtr pNode, GeoCoordinates& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves location information held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseLocation(xmlNodePtr pNode, GeoLocation& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves match quality information held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseMatchQualitites(xmlNodePtr pNode, Result& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves  held in the XML node supplied
+     * by the caller.   
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseBoundingBox(xmlNodePtr pNode, GeoBoundingBox& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+private:
+    static bool ExtractContent(xmlNodePtr pNode, String& sDst, ParserError*& pError);
+    static bool ExtractNodeName(xmlNodePtr pNode, String& sDst, ParserError*& pError);
+    static xmlNodePtr FindChildNode(xmlNodePtr pNode, const char* pUTF8Literal);
+
+    static void AppendOrSet(ParserError*& pError, ParserError* pLoc);
+
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderReplyParser);
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/GeoCoderReplyParserError.h b/inc/engine/geocoder/GeoCoderReplyParserError.h
new file mode 100755 (executable)
index 0000000..e2879ff
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOCODERERROR_H
+#define GEOCODERERROR_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information about an error that
+ * may arise when a parsing a geocoding request.
+ * 
+ * \ingroup geocoding
+ */
+class GeoCoderReplyParserError : public ErrorBase
+{
+public:
+    /**
+     * This method is a constructor. 
+     * 
+     * @param sStr A constant reference to a string containing an error message.
+     */
+    GeoCoderReplyParserError(const std::string& sStr);
+
+    /**
+     * This method is a (virtual) destructor. 
+     */
+    virtual ~GeoCoderReplyParserError();
+
+    /**
+     * This method retrieves a string representation of the given instance of
+     * the class. 
+     * 
+     * @return A string containing the error information held in the given
+     *        instance of the class. 
+     */
+    virtual String ToString() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoCoderReplyParserError);
+
+    class GeoCoderReplyParserErrorImpl;
+    GeoCoderReplyParserErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/MetaInfo.h b/inc/engine/geocoder/MetaInfo.h
new file mode 100755 (executable)
index 0000000..bf10e66
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef METAINFO_H
+#define METAINFO_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates meta information included in the search responses.  
+ * 
+ * \ingroup geocoding
+ */
+class MetaInfo
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    MetaInfo();
+
+    /**
+     * This method is the copy constructor.
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        copied to the newly created instance of the class.
+     */
+    MetaInfo(const MetaInfo& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~MetaInfo();
+
+    /**
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an instance of
+     *        <code>MetaInfo</code> whose contents are to be copied into
+     *        the given instance.
+     */
+    MetaInfo& operator=(const MetaInfo& rRhs);
+
+    /**
+     * This methos sets a key that can be used in subsequent requests to
+     * access the next n results.
+     * 
+     * @param n A key that can be used in subsequent requests to
+     *        access the next n results.
+     */
+    void SetNextPageInformation(size_t n);
+
+    /**
+     * This method retrieves a key that can be used in subsequent requests to
+     * access the next n results.
+     * 
+     * @return A key that can be used in subsequent requests to
+     *        access the next n results.
+     */
+    bool GetNextPageInformation(size_t& rDst) const;
+
+    /**
+     * This method sets a key that can be used in subsequent requests to
+     * access the previous n results.
+     * 
+     * @param n A key that can be used in subsequent requests to
+     *        access the previous n results.
+     */
+    void SetPreviousPageInformation(size_t n);
+
+    /**
+     * This method retrieves a key that can be used in subsequent requests to
+     * access the previous n results.
+     * 
+     * @return A key that can be used in subsequent requests to
+     *        access the previous n results.
+     */
+    bool GetPreviousPageInformation(size_t& rDst) const;
+
+    /**
+     * This method sets the timestamp indicating when the search was run.
+     * 
+     * @param sTimestamp A constant reference to a string containing the
+     *        timestamp indicating when the search was run.
+     */
+    void SetTimestamp(const String& sTimestamp);
+
+    /**
+     * This method retrieves the timestamp indicating when the search was run.
+     * 
+     * @param rDst A reference to a string to which the
+     *        timestamp indicating when the search was run is to be copied.
+     * 
+     * @return <code>true</code> if the timestamp has been retrieved
+     *        successfully, <code>false</code> if the time stamp cannot be
+     *        retrieved.
+     */
+    bool GetTimestamp(String& rDst) const;
+
+private:
+    class MetaInfoImpl;
+    MetaInfoImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/Result.h b/inc/engine/geocoder/Result.h
new file mode 100755 (executable)
index 0000000..eaa19a8
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESULT_H
+#define RESULT_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoLocation;
+
+/**
+ * This class encapsulates a result item returned by the server in response to a
+ * geocoding or reverse geocoding request.
+ * 
+ * \ingroup geocoding
+ */
+class EXPORT_API Result
+{
+public:
+    /**
+     * This enumeration defines identifiers for match levels -- they reflect how
+     * closely (to what level of detail) the result matches the request.
+     */ 
+    enum MatchLevel
+    {
+        ML_Unknown = -1,  ///< Indicates that the match level is unknown.
+        ML_Country = 0,   ///< Indicates country match.
+        ML_State,         ///< Indicates state match.
+        ML_County,        ///< Indicates county match.
+        ML_City,          ///< Indicates city match.
+        ML_District,      ///< Indicates district match.
+        ML_Street,        ///< Indicates street match.
+        ML_Intersection,  ///< Indicates intersection match. 
+        ML_HouseNumber,   ///< Indicates house-number match.  
+        ML_PostalCode,    ///< Indicates postal code match.  
+        ML_Suite,         ///< Indicates suite match.  
+        ML_Floor          ///< Indicates floor match.  
+    };
+
+    /** 
+     * This method is the default constructor.
+     */
+    Result();
+
+    /** 
+     * This method is the destructor.
+     */
+    ~Result();
+
+    /**
+     * This method sets location details for the given result.
+     * 
+     * @param rLocation A constant reference to an object containing the
+     *        location details.
+     */
+    void SetLocation(const GeoLocation& rLocation);
+
+    /**
+     * This method retrieves the location details from the given result object.
+     * 
+     * @param rLocation A constant reference to an object containing the
+     *        location details.
+     */
+    const GeoLocation& GetLocation() const;
+
+    /**
+     * This method sets the relevance value on the given result.
+     * 
+     * @param A float indicating the relevance of the given result in the range
+     *        [0..1], where 1 indicates maximum relevance.
+     */
+    void SetRelevance(float fValue);
+
+    /**
+     * This method retrieves a value indicating the relevance of the given result.
+     * 
+     * @param A float indicating the relevance of the given result; the value is
+     *        in the range [0..1], where 1 indicates maximum relevance.
+     */
+    float GetRelevance() const;
+
+#ifdef TIZEN_CUSTOMIZATION
+    /**
+     * This method sets a value representing the distance for the given result.
+     * 
+     * @param fValue A value indicating distance.
+     */
+    void SetDistance(float fValue);
+
+    /**
+     * This method retrieves a value representing the distance for the given
+     * result. 
+     * 
+     * @return A value indicating distance.
+     */
+    float GetDistance() const;
+#endif
+
+    /**
+     * This method sets a value representing the match level for the given
+     * result. 
+     * 
+     * @param aLevel A value indicating match level (see also
+     *        <code>Result::MatchLevel</code>).
+     */
+   void SetMatchLevel(MatchLevel aLevel);
+
+    /**
+     * This method sets a value representing the match level for the given
+     * result. 
+     * 
+     * @param sLevel A constant reference to a string indicating the match level
+     *        to set (see also <code>Result::MatchLevel</code>). The value of
+     *        the string must be one of "country", "state", "county", "city",
+     *        "street", "intersection", "housenumber", "postalcode", "suite",
+     *        "floor", "district".
+     */
+    void SetMatchLevel(const String& sLevel);
+
+    /**
+     * This method retrieves a value representing the match level for the given
+     * result. 
+     * 
+     * @return A value indicating match level (see also
+     *        <code>Result::MatchLevel</code>).
+     */
+    MatchLevel GetMatchLevel() const;
+
+    /**
+     * This method adds a match level indicator and sets the associated match
+     * quality value.  
+     * 
+     * @param aMatchLevel A value indicating the match level to set (see also 
+     *        <code>Result::MatchLevel</code>).   
+     * 
+     * @param fQuality A float value indicating the match quality.
+     */
+    void AddMatchQuality(MatchLevel aMatchLevel, float fQuality);
+
+    /**
+     * This method adds a match level indicator and sets the associated match
+     * qualityf value.  
+     * 
+     * @param sLevel A constant reference to a string indicating the match level
+     *        to set (see also <code>Result::MatchLevel</code>). The value of
+     *        the string must be one of "country", "state", "county", "city",
+     *        "street", "intersection", "housenumber", "postalcode", "suite",
+     *        "floor", "district".
+     * 
+     * @param fQuality A float value indicating the match quality.
+     */
+    void AddMatchQuality(const String& sLevel, float fQuality);
+
+    /**
+     * This method retrieves a value representing match quality of the given
+     * result for the match level specified by the caller. 
+     * 
+     * @param aMatchLevel A value indicating the match level to set (see also 
+     *        <code>Result::MatchLevel</code>).   
+     * 
+     * @return A float value indicating the match quality.
+    */
+    float GetMatchQuality(MatchLevel aMatchLevel) const;
+
+    /**
+     * This method retrieves the number of match quality values available for
+     * the given result. 
+     * 
+     * @return A value indicating the number of match quality values.  
+     */
+    unsigned int GetNumMatchQualities() const;
+
+    /**
+     * This method retrieves a value identifying the match level at the index
+     * specified by the caller.
+     * 
+     * @param uIdx A value representing the index from which to retrieve the
+     *        match level indicator (value). Note that the index must not be
+     *        greater than the return value from
+     *        <code>Result::GetNumMatchQualities()</code>. 
+     * 
+     * @return  A value indicating the match level at the index specified by the
+     *        caller (see also <code>Result::MatchLevel</code>).   
+     */
+    MatchLevel GetMatchQualityLevel(unsigned int uIdx) const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(Result);
+
+    class ResultImpl;
+    ResultImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/geocoder/ReverseGeoCoderQuery.h b/inc/engine/geocoder/ReverseGeoCoderQuery.h
new file mode 100755 (executable)
index 0000000..1a633e8
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef REVERSEGEOCODERQUERY_H
+#define REVERSEGEOCODERQUERY_H
+
+#include "common/HereMaps_global.h"
+
+#include "geocoder/GeoCoderQueryBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoderReply;
+class GeoCoordinates;
+class GeoCoderQueryListener;
+
+/**
+ * This class represents a reverse geocoding query.
+ *
+ * Instances of the class are used to obtain an address (or a set of addresses)
+ * corresponding to a set of geographic coordinates. 
+ * 
+ * @ingroup geocoding
+ */
+class EXPORT_API ReverseGeoCoderQuery : public GeoCoderQueryBase
+{
+public:
+    /** 
+     * This enumeration defines identifiers for reverse geocoding modes. A mode
+     * indicates whether addresses are to be returned or 
+     * administrative area names (such as city, county, state, country).
+     */ 
+    enum ReverseMode
+    {
+        RM_RetrieveAreas,    ///< Indicates that administrative area names are to be retrieved. 
+        RM_RetrieveAddresses ///< Indicates that addresses are to be retrieved. 
+    };
+
+    /** 
+     * This method is the default constructor. 
+     */
+    ReverseGeoCoderQuery();
+
+    /** 
+     * This method is a constructor that initializes the query with the location
+     * to reverse-geocode and the mode. 
+     * 
+     * @param rCoordinate A constant reference to an object containing the geographic
+     *        coordinates of the location to reverse-geocode.
+     * 
+     * @param aMode A value indicating the reverse geocoding mode to use.
+     */
+    ReverseGeoCoderQuery(const GeoCoordinates& rCoordinate, ReverseMode aMode);
+
+    /** 
+     * This method is a constructor that initializes the query with the location
+     * to reverse-geocode, the mode and the radius within which to conduct the
+     * search.  
+     * 
+     * @param rCoordinate A constant reference to an object containing the geographic
+     *        coordinates of the location to reverse-geocode.
+     * 
+     * @param aMode A value indicating the reverse geocoding mode to use.
+     * 
+     * @param fRadius A float value indicating the radius (in meters) within
+     *        which to search.
+     */
+    ReverseGeoCoderQuery(const GeoCoordinates& rCoordinate, ReverseMode aMode, float fRadius);
+
+    /**
+     * This method is the (virtual) destructor.
+     */ 
+    virtual ~ReverseGeoCoderQuery();
+
+    /**
+     * This method sets the properties defining a circular area within which a
+     * search is to be conducted. The area is defined in terms of its center and
+     * radius.
+     *
+     * @param rCoord A constant reference to an object containing the latitude
+     *        and longitude of the center of the proximity area (search center).
+     *
+     * @param rRadius A value specifying the radius of the search area in meters.
+     */
+    void SetProximity(const GeoCoordinates& rCoord, float fRadius = 0);
+
+    /**
+     * This method detects whether coordinates/proximity (the center of search area
+     * set or not).
+     *
+     * @return <code>true</code> if the proximity was set,
+     *        otherwise <code>false</code>
+     */
+    bool HasProximity() const;
+
+    /** 
+     * This method sets the reverse geocoding mode to apply to the query.
+     * 
+     * @param aMode A value indicating the reverse geocoding mode to use.
+     */
+    void SetMode(ReverseMode aMode);
+
+    /**
+     * This method attempts to establish a connection
+     * with the server and then, if the connection has been established, it
+     * builds and submits a query.     
+     * 
+     * @param rListener A shared pointer to an object that is to be notified when
+     *        the reply to the query has arrived from the server.
+     * 
+     * @param pUserData A pointer to user data to be echoed in the reply object.
+     *
+     * @return A value representing the identifier of the issued request.
+     */
+    RestItemHandle::RequestId Execute(GeoCoderQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * reverse geocoder queries.
+     *
+     * @return A string containing the base URI.
+     */
+    String GetBaseUri() const;
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * reverse geocoder queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    void SetBaseUri(const String& sUri);
+
+private:
+    /**
+     * This method creates the URI for the request.
+     *
+     * @return URI request string.
+     */
+    String CreateUri() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(ReverseGeoCoderQuery);
+
+    class ReverseGeoCoderQueryImpl;
+    ReverseGeoCoderQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/graphic/Bitmap.h b/inc/engine/graphic/Bitmap.h
new file mode 100755 (executable)
index 0000000..07b0162
--- /dev/null
@@ -0,0 +1,68 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_BITMAP_H
+#define HERE_GRAPHIC_BITMAP_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Dimension.h"
+#include "graphic/Rectangle.h"
+#include "graphic/BufferInfo.h"
+
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+enum BitmapPixelFormat
+{
+       BITMAP_PIXEL_FORMAT_RGB565 = 1, /**< The RGB565 pixel format */
+       BITMAP_PIXEL_FORMAT_ARGB8888, /**< The ARGB8888 pixel format */
+       BITMAP_PIXEL_FORMAT_R8G8B8A8, /**< The R8G8B8A8 pixel format, the order of the color component is guaranteed by the byte unit */
+       BITMAP_PIXEL_FORMAT_MAX, // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+       BITMAP_PIXEL_FORMAT_MIN = 0 // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+};
+
+class EXPORT_API Bitmap : public Object
+{
+public:
+    Bitmap(void);
+
+    virtual ~Bitmap(void);
+
+    result Construct(const Dimension& dim, BitmapPixelFormat bitmapPixelFormat=BITMAP_PIXEL_FORMAT_R8G8B8A8);
+    result Construct(const Bitmap& bitmap, const Rectangle& rect);
+    result Construct(const byte* pBuffer, int bufferSize, const Dimension& dim, BitmapPixelFormat bitmapPixelFormat=BITMAP_PIXEL_FORMAT_R8G8B8A8);
+    result Lock(BufferInfo& info, long timeout = INFINITE);
+    result Unlock(void);
+
+    int GetWidth(void) const;
+    int GetHeight(void) const;
+    void SetAlphaConstant(int opacity);
+    unsigned char* GetBuffer() const;
+    BitmapPixelFormat GetPixelColorFormat() const;
+private:
+    int width;
+    int height;
+    int bytes_per_pixel;
+    BitmapPixelFormat pixel_format;
+    unsigned char* buffer;
+
+    void BitBlt(int xDest, int yDest, unsigned char *pSrcBuffer, int xSour, int ySour, int wSour, int hSour, int nPitch, unsigned long opacity = 255);
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_BITMAP_H */
diff --git a/inc/engine/graphic/BufferInfo.h b/inc/engine/graphic/BufferInfo.h
new file mode 100755 (executable)
index 0000000..6bad4a9
--- /dev/null
@@ -0,0 +1,291 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_BUFFERINFO_H
+#define HERE_GRAPHIC_BUFFERINFO_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Rectangle.h"
+
+#if 0
+typedef enum
+{
+       PIXEL_FORMAT_RGB565 = 1, /**< The RGB565 pixel format */
+       PIXEL_FORMAT_ARGB8888, /**< The ARGB8888 pixel format */
+       PIXEL_FORMAT_R8G8B8A8, /**< The R8G8B8A8 pixel format @n
+                                           The order of color component is guaranteed by the byte unit. */
+       PIXEL_FORMAT_YCbCr420_PLANAR, /**< The 8-bit Y-plane followed by 8-bit 2x2 sub sampled U-plane and V-plane */
+       PIXEL_FORMAT_JPEG, /**< The encoded format */
+       PIXEL_FORMAT_NV12, /**< The NV12 pixel format */
+       PIXEL_FORMAT_UYVY, /**< The UYVY pixel format */
+       PIXEL_FORMAT_MAX, // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+       PIXEL_FORMAT_MIN = 0 // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+} PixelFormat;
+#endif
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class BufferInfo;
+
+class _BufferInfoImpl
+{
+public:
+       enum
+       {
+               INVALID_BUFFER_HANDLE = 0
+       };
+
+       enum Orientation
+       {
+               ORIENTATION_PORTRAIT,
+               ORIENTATION_LANDSCAPE,
+               ORIENTATION_PORTRAIT_REVERSE,
+               ORIENTATION_LANDSCAPE_REVERSE
+       };
+
+       enum HandleType
+       {
+               HANDLE_TYPE_NONE,
+               HANDLE_TYPE_OVERLAY_REGION,
+               HANDLE_TYPE_VE_SURFACE,
+               HANDLE_TYPE_CANVAS_TEXTURE,
+               HANDLE_TYPE_NATIVE_PIXMAP
+       };
+
+       enum Rotation
+       {
+               ROTATION_0,
+               ROTATION_90,
+               ROTATION_180,
+               ROTATION_270
+       };
+
+       /**
+        * This is the default constructor for this class.
+        */
+       _BufferInfoImpl();
+
+       /**
+        * This is the destructor for this class.
+        */
+       virtual ~_BufferInfoImpl();
+
+       /*
+        * Gets the handle of the current instance of _BufferInfoImpl.
+        *
+        * @return      The runtime handle
+        *
+        */
+       int GetHandle(HandleType handleType) const;
+
+       void* GetUserData(HandleType handleType) const;
+
+       /*
+        * Sets the handle of the current instance of _BufferInfoImpl.
+        *
+        */
+       void SetHandle(HandleType handleType, int handle, void* pUserData = null);
+
+       /*
+        * Gets the orientation of the current instance of _BufferInfoImpl.
+        *
+        */
+       Orientation GetOrientation(void) const;
+
+       /*
+        * Sets the orientation of the current instance of _BufferInfoImpl.
+        *
+        */
+       void SetOrientation(Orientation orientation);
+
+       /*
+        * Gets the bounds of the current instance of _BufferInfoImpl.
+        *
+        */
+       Rectangle GetBounds(void) const;
+
+       /*
+        * Sets the bounds of the current instance of _BufferInfoImpl.
+        *
+        */
+       void SetBounds(const Rectangle& rect);
+
+       /*
+        * Gets the rotation of the current instance of _BufferInfoImpl.
+        *
+        */
+       Rotation GetRotation(void) const;
+
+       /*
+        * Sets the rotation of the current instance of _BufferInfoImpl.
+        *
+        */
+       void SetRotation(Rotation rotation);
+
+       static _BufferInfoImpl* GetInstance(BufferInfo& bufferInfo);
+       static const _BufferInfoImpl* GetInstance(const BufferInfo& bufferInfo);
+
+private:
+       /**
+        * This is the default copy constructor for this class.
+        */
+       _BufferInfoImpl(const _BufferInfoImpl& src);
+
+       /**
+        * This is the default assignment operator for this class.
+        */
+       _BufferInfoImpl& operator =(const _BufferInfoImpl& rhs);
+
+       friend class BufferInfo;
+
+       HandleType __handleType;
+       int __handle;
+       void* __pUserData;
+       Orientation __orientation;
+       Rectangle __bounds;
+       Rotation __rotation;
+
+}; // _BufferInfoImpl
+
+class BufferInfo : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class.
+        *
+        * @since       2.0
+        */
+       BufferInfo(void);
+
+       /**
+        * This is the copy constructor for the %BufferInfo class.
+        *
+        * @since 2.0
+        *
+        * @param[in]          rhs         An instance of %BufferInfo
+        */
+       BufferInfo(const BufferInfo& rhs);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since       2.0
+        */
+       virtual ~BufferInfo(void);
+
+       /**
+        * This is the default assignment operator for this class.
+        *
+        * @since 2.0
+        *
+        * @param[in]          rhs         An instance of %BufferInfo
+        */
+       BufferInfo& operator =(const BufferInfo& rhs);
+
+       /**
+        *      Checks whether the value of the specified instance equals the value of the current instance.
+        *
+        * @since 2.0
+        *
+        *      @return                 @c true if the value of the current instance equals the value of the specified instance, @n
+        *           else @c false
+        *      @param[in]      rhs     The object to compare with the current instance
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        *      Gets the hash value of the current instance.
+        *
+        * @since 2.0
+        *
+        *      @return         An integer value indicating the hash value of the current instance
+        */
+       virtual long GetHashCode(void) const;
+
+public:
+       /**
+        * The width of the buffer's logical dimensions in pixels.
+        *
+        * @since       2.0
+        */
+       int width;
+
+       /**
+        * The height of the buffer's logical dimensions in pixels.
+        *
+        * @since       2.0
+        */
+       int height;
+
+       /**
+        * The length of the buffer scan-line in bytes.
+        *
+        * @since       2.0
+        */
+       int pitch;
+
+       /**
+        * The bits per pixel of the buffer.
+        *
+        * @since       2.0
+        */
+       int bitsPerPixel;
+
+       /**
+        * The color format of the buffer.
+        *
+        * @since       2.0
+        */
+       enum PixelFormat
+       {
+               PIXEL_FORMAT_RGB565 = 1, /**< The RGB565 pixel format */
+               PIXEL_FORMAT_ARGB8888, /**< The ARGB8888 pixel format */
+               PIXEL_FORMAT_R8G8B8A8, /**< The R8G8B8A8 pixel format @n
+                                                   The order of color component is guaranteed by the byte unit. */
+               PIXEL_FORMAT_YCbCr420_PLANAR, /**< The 8-bit Y-plane followed by 8-bit 2x2 sub sampled U-plane and V-plane */
+               PIXEL_FORMAT_JPEG, /**< The encoded format */
+               PIXEL_FORMAT_NV12, /**< The NV12 pixel format */
+               PIXEL_FORMAT_UYVY, /**< The UYVY pixel format */
+               PIXEL_FORMAT_MAX, // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+               PIXEL_FORMAT_MIN = 0 // This enum value is for internal use only. Using this enum value can cause behavioral, security-related, and consistency-related issues in the application.
+       };
+       
+       PixelFormat pixelFormat;
+
+       /**
+        * A pointer to the actual locked pixel bits.
+        *
+        * @since       2.0
+        */
+       void* pPixels;
+
+private:
+       friend class _BufferInfoImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _BufferInfoImpl * __pImpl;
+
+}; // BufferInfo
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_BUFFERINFO_H */
diff --git a/inc/engine/graphic/Canvas.h b/inc/engine/graphic/Canvas.h
new file mode 100755 (executable)
index 0000000..7c14229
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_CANVAS_H
+#define HERE_GRAPHIC_CANVAS_H
+
+#include <cairo/cairo.h>
+#include <vector>
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Color.h"
+#include "graphic/BufferInfo.h"
+#include "graphic/FloatPoint.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Canvas : public Object
+{
+public:
+    typedef std::vector<FloatPoint*> tPoint;
+    Canvas(void);
+    virtual ~Canvas(void);
+    result Construct(const BufferInfo& bufferInfo);
+    result FillPolygon(const Color& color, const tPoint& points);
+    result DrawPolyline(const tPoint& points);
+    result SetLineWidth(int width);
+    void SetForegroundColor(const Color& fgColor);
+protected:
+    void* _pNativeGfxEngine;
+private:
+    unsigned long __ComposeColor(unsigned long color32, int opacity);
+    void __SetColor(cairo_t* pCairo, unsigned long composedColor);
+
+    unsigned long* __pBuffer;
+    unsigned long __fgColor;
+    int __lineWidth;
+    cairo_operator_t __cairo_operator;
+    Color __fgColorNative;
+    int __fgOpacity;
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_CANVAS_H */
diff --git a/inc/engine/graphic/Color.h b/inc/engine/graphic/Color.h
new file mode 100755 (executable)
index 0000000..db68462
--- /dev/null
@@ -0,0 +1,483 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_COLOR_H
+#define HERE_GRAPHIC_COLOR_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class EXPORT_API Color;
+
+/**
+ * @class    Color32
+ * @brief    This template code makes a 32-bit combination from each color component.
+ * @since 2.0
+ *
+ * The following example demonstrates how to use this template code.
+ *
+ * @code
+ *
+ *     #include <FGraphics.h>
+ *
+ *     using namespace Tizen::Graphics;
+ *
+ *     // 0xFFFF00FF: Opaque magenta
+ *     const unsigned int MY_COLOR1 = Color32<255, 0, 255>::Value;
+ *
+ *     // 0x80FF0000: Red with 50% opacity
+ *     const unsigned int MY_COLOR2 = Color32<255, 0, 0, 128>::Value;
+ *
+ * @endcode
+ */
+template <unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha = 0xFF>
+struct Color32
+{
+       enum
+       {
+               Value = static_cast<unsigned int>(alpha) << 24 |
+                               static_cast<unsigned int>(red) << 16 |
+                               static_cast<unsigned int>(green) << 8 |
+                               static_cast<unsigned int>(blue)
+       };
+};
+
+/**
+ * @enum         ColorId
+ *
+ * Defines the color ID.
+ *
+ * @since 2.0
+ */
+enum ColorId
+{
+       COLOR_ID_BLACK, /**< This attribute is pre-defined. Its value is black. */
+       COLOR_ID_BLUE, /**< This attribute is pre-defined. Its value is blue. */
+       COLOR_ID_CYAN, /**< This attribute is pre-defined. Its value is cyan. */
+       COLOR_ID_GREEN, /**< This attribute is pre-defined. Its value is green. */
+       COLOR_ID_GREY, /**< This attribute is pre-defined. Its value is grey. */
+       COLOR_ID_MAGENTA, /**< This attribute is pre-defined. Its value is magenta. */
+       COLOR_ID_RED, /**< This attribute is pre-defined. Its value is red. */
+       COLOR_ID_VIOLET, /**< This attribute is pre-defined. Its value is violet. */
+       COLOR_ID_YELLOW, /**< This attribute is pre-defined. Its value is yellow. */
+       COLOR_ID_WHITE /**< This attribute is pre-defined. Its value is white. */
+};
+
+/**
+ * @class      Color
+ * @brief      This class encapsulates a color.
+ *
+ * @since      2.0
+ *
+ * @final      This class is not intended for extension.
+ *
+ * The %Color class provides an ARGB (Alpha, Red, Green, Blue) color model.
+ *
+ * For more information on the class features, see <a href="../org.tizen.native.appprogramming/html/guide/graphics/color.htm">Color</a>.
+ */
+class Color : public Object
+{
+
+public:
+       /**
+        * This is the default constructor for this class.
+        *
+        * @since       2.0
+        */
+       Color(void);
+
+       /**
+        * This is the copy constructor for the %Color class. @n
+        * This constructor initializes the instance of %Color with the attributes of the specified instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   rhs     An instance of %Color
+        */
+       Color(const Color& rhs);
+
+       /**
+        * Initializes the instance of %Color with the specified ARGB values.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   r       The red component
+        * @param[in]   g       The green component
+        * @param[in]   b       The blue component
+        * @param[in]   a       The alpha component
+        */
+       Color(byte r, byte g, byte b, byte a = 0xFF);
+
+       /**
+        * Initializes the instance of %Color with the specified RGB value.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   rgb                     The RGB color value
+        * @param[in]   hasAlpha        Set to @c true if @c rgb contains an alpha value, @n
+        *                                                      else @c false
+        */
+       Color(unsigned int rgb, bool hasAlpha = true);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since       2.0
+        */
+       virtual ~Color(void);
+
+
+public:
+       /**
+        * Checks whether the two instances of %Color are equal.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the values of the two instances of %Color are equal, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Color
+        */
+       bool operator ==(const Color& rhs) const;
+
+       /**
+        * Checks whether the two instances of %Color are not equal.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the values of the two instances of %Color are not equal, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Color
+        *
+        */
+       bool operator !=(const Color& rhs) const;
+
+       /**
+        * Assigns the values of the RGB components of the specified instance to the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              The reference to the instance of %Color
+        * @param[in]   rhs             An instance of %Color
+        */
+       Color& operator =(const Color& rhs);
+
+
+public:
+       /**
+        * Checks whether the current instance of %Color equals the specified instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the values of the current instance is equal to the value of the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Color
+        * @remarks
+        *                              - This method overrides Tizen::Base::Object::Equals().
+        *                              - This method uses the values of the RGB components to compare the two instances.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              The hash value of the current instance
+        * @remarks             Two equal instances must return the same hash value. @n For better performance,
+        *                              the used hash function must generate a random distribution for all inputs.
+        */
+       virtual long GetHashCode(void) const;
+
+
+public:
+       /**
+        * Gets the value of the alpha component of the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              A @c byte representation of the alpha component of the current instance of %Color
+        */
+       byte GetAlpha(void) const;
+
+       /**
+        * Gets the value of the red component of the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              A @c byte representation of the red component of the current instance of %Color
+        */
+       byte GetRed(void) const;
+
+       /**
+        * Gets the value of the blue component of the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              A @c byte representation of the blue component of the current instance of %Color
+        */
+       byte GetBlue(void) const;
+
+       /**
+        * Gets the value of the green component of the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              A @c byte representation of the green component of the current instance of %Color
+        */
+       byte GetGreen(void) const;
+
+       /**
+        * Gets the ARGB components of the current instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[out]  r       The red component
+        * @param[out]  g       The green component
+        * @param[out]  b       The blue component
+        * @param[out]  a       The alpha component
+        */
+       void GetColorComponents(byte& r, byte& g, byte& b, byte& a) const;
+
+       /**
+        * Gets the 32-bit integer value of the current instance of %Color.
+        *
+        * @since               2.0
+        *
+        * @return              An @c unsigned integer value representing the current instance of %Color
+        */
+       unsigned int GetRGB32(void) const;
+
+       /**
+        * Sets the value of the alpha component of the current instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   a       The new value of the alpha component
+        */
+       void SetAlpha(byte a);
+
+       /**
+        * Sets the value of the red component of the current instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   r       The new value of the red component
+        */
+       void SetRed(byte r);
+
+       /**
+        * Sets the value of the green component of the current instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   g       The new value of the green component
+        */
+       void SetGreen(byte g);
+
+       /**
+        * Sets the value of the blue component of the current instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   b       The new value of the blue component
+        */
+       void SetBlue(byte b);
+
+       /**
+        * Sets the values of the ARGB components of the current instance of %Color.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   r       The red component
+        * @param[in]   g       The green component
+        * @param[in]   b       The blue component
+        * @param[in]   a       The alpha component
+        */
+       void SetColorComponents(byte r, byte g, byte b, byte a = 0xFF);
+
+       /**
+        * Sets the current instance of %Color to the specified 32-bit integer value.
+        *
+        * @since               2.0
+        *
+        * @param[in]   rgb                     The new RGB color value
+        * @param[in]   hasAlpha        @c true if @c rgb contains alpha value, @n
+                                   else @c false
+        */
+       void SetRGB32(unsigned int rgb, bool hasAlpha = true);
+
+       /**
+        * Gets the %Color object for the specified color.
+        *
+        * @since 2.0
+        * @return              The %Color object
+        * @param[in]   colorId         The enum value for the specified color
+        */
+       static Color GetColor(ColorId colorId);
+
+
+public:
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is black.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated  This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_BLACK).
+        * @endif
+        */
+       const static Color COLOR_BLACK;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is blue.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_BLUE).
+        * @endif
+        */
+       const static Color COLOR_BLUE;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is cyan.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_CYAN).
+        * @endif
+        */
+       const static Color COLOR_CYAN;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is green.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_GREEN).
+        * @endif
+        */
+       const static Color COLOR_GREEN;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is grey.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_GREY).
+        * @endif
+        */
+       const static Color COLOR_GREY;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is magenta.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_MAGENTA).
+        * @endif
+        */
+       const static Color COLOR_MAGENTA;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is red.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_RED).
+        * @endif
+        */
+       const static Color COLOR_RED;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is violet.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_VIOLET).
+        * @endif
+        */
+       const static Color COLOR_VIOLET;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is yellow.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_YELLOW).
+        * @endif
+        */
+       const static Color COLOR_YELLOW;
+
+       /**
+        * @if OSPDEPREC
+        * This attribute is pre-defined. Its value is white.
+        *
+        * @brief       <i> [Deprecated] </i>
+        * @since                       2.0
+        *
+        * @deprecated This object is provided only for backward compatibility and will be deleted in a future release.
+        * Instead of using this static constant, it is recommended to use GetColor(COLOR_ID_WHITE).
+        * @endif
+        */
+       const static Color COLOR_WHITE;
+
+
+private:
+       unsigned int __color;
+
+       friend class _ColorImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _ColorImpl * __pImpl;
+
+}; // Color
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_COLOR_H */
diff --git a/inc/engine/graphic/Dimension.h b/inc/engine/graphic/Dimension.h
new file mode 100755 (executable)
index 0000000..d4e535d
--- /dev/null
@@ -0,0 +1,159 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_DIMENSION_H
+#define HERE_GRAPHIC_DIMENSION_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Dimension;
+
+class EXPORT_API Dimension : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * This constructor initializes an instance of %Dimension with the width and the height set as @c 0.
+        *
+        * @since       2.0
+        */
+       Dimension(void);
+
+       /**
+       * This is the copy constructor for the %Dimension class.
+       *
+       * @since 2.0
+       *
+       * @param[in]    rhs             An instance of %Dimension
+       */
+       Dimension(const Dimension& rhs);
+
+       /**
+        * Initializes an instance of %Dimension with the specified values of width and height.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   width   The width to set
+        * @param[in]   height  The height to set
+        */
+       Dimension(int width, int height);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since       2.0
+        */
+       virtual ~Dimension(void);
+
+       /**
+       * Assigns the value of the specified instance to the current instance of %Dimension.
+       *
+       * @since 2.0
+       *
+       * @param[in]    rhs             An instance of %Dimension
+       */
+       Dimension& operator =(const Dimension& rhs);
+
+       /**
+        * Checks whether the two instances of %Dimension have equal width and height values.
+        *
+        * @since                       2.0
+        *
+        * @return              @c true if the values of the width and height of the two instances of %Dimension are equal, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Dimension
+        */
+       bool operator ==(const Dimension& rhs) const;
+
+       /**
+        * Checks whether the two instances of %Dimension have different width and height values.
+        *
+        * @since                       2.0
+        *
+        * @return              @c true if the values of the width and the height of the two instances of %Dimension are not equal, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Dimension
+        */
+       bool operator !=(const Dimension& rhs) const;
+
+       /**
+        * Checks whether the value of the current instance of %Dimension equals the value of the specified instance.
+        *
+        * @since                       2.0
+        *
+        * @return              @c true if the value of the current instance equals the value of the specified instance, @n
+        *               else @c false
+        * @param[in]   rhs             An instance of %Dimension
+        * @remarks             The %Dimension class has a semantic value, which means that the
+        *                              Equals() method checks whether the two instances have the same width and height.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance.
+        *
+        * @since               2.0
+        *
+        * @return              The hash value of the current instance
+        * @remarks             Two equal instances must return the same hash value. For better performance,
+        *                              the used hash function must generate a random distribution for all inputs.
+        */
+       virtual long GetHashCode(void) const;
+
+       /**
+        * Sets the size of the current instance of %Dimension.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   width           The new width
+        * @param[in]   height          The new height
+        */
+       void SetSize(int width, int height);
+
+public:
+       /**
+        * The width of the current instance of %Dimension.
+        *
+        * @since       2.0
+        */
+       int width;
+
+       /**
+        * The height of the current instance of %Dimension.
+        *
+        * @since       2.0
+        */
+       int height;
+
+private:
+       friend class _DimensionImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _DimensionImpl * __pImpl;
+
+}; // Dimension
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_DIMENSION_H */
diff --git a/inc/engine/graphic/DoubleMatrix4.h b/inc/engine/graphic/DoubleMatrix4.h
new file mode 100755 (executable)
index 0000000..2377d9a
--- /dev/null
@@ -0,0 +1,388 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_DOUBLEMATRIX4_H
+#define HERE_DOUBLEMATRIX4_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class DoubleMatrix4;
+
+class DoubleMatrix4 : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * Constructs a 4 X 4 null matrix in which all the elements are zero.
+        *
+        * @since 2.0
+        */
+       DoubleMatrix4(void);
+
+       /**
+        * Copying of objects using this copy constructor is allowed.
+        *
+        * @since 2.0
+        *
+        * @param[in]   rhs     An instance of %DoubleMatrix4 to copy
+        */
+       DoubleMatrix4(const DoubleMatrix4& rhs);
+
+       /**
+        * Constructs a 4 by 4 matrix initialized to the value in the specified array.
+        *
+        * @since 2.0
+        *
+        * @param[in]   matrix  The matrix with 16 @c double values
+        */
+       DoubleMatrix4(const double matrix[4][4]);
+
+       /**
+        * This destructor overrides Object::~Object().
+        *
+        * @since 2.0
+        */
+       virtual ~DoubleMatrix4(void);
+
+       /**
+        * Checks whether the current instance and the specified instance of %DoubleMatrix4 are equal.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if all the matrix members of the current instance are equal to the corresponding matrix members in the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       bool operator ==(const DoubleMatrix4& rhs) const;
+
+       /**
+        * Checks whether the current instance and the specified instance of %DoubleMatrix4 are not equal.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if all the matrix members of the current instance are not equal to the corresponding matrix members in the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       bool operator !=(const DoubleMatrix4& rhs) const;
+
+       /**
+        * Copying of objects using this copy assignment operator is allowed.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to this instance
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4& operator =(const DoubleMatrix4& rhs);
+
+       /**
+        * Assigns the value of the specified instance to the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to this instance
+        * @param[in]   value   The @c double value to assign
+        */
+       DoubleMatrix4& operator =(double value);
+
+       /**
+        * Multiplies the value of the specified instance with the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4 operator *(const DoubleMatrix4& rhs) const;
+
+       /**
+        * Multiplies the value to each matrix member of current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to multiply
+        */
+       DoubleMatrix4 operator *(double value) const;
+
+       /**
+        * Adds the value of the specified instance to the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4 operator +(const DoubleMatrix4& rhs) const;
+
+       /**
+        * Adds the value to each matrix member of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to add
+        */
+       DoubleMatrix4 operator +(double value) const;
+
+       /**
+        * Subtracts the value of the specified instance from the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4 operator -(const DoubleMatrix4& rhs) const;
+
+       /**
+        * Subtracts the value from each matrix member of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to subtract
+        */
+       DoubleMatrix4 operator -(double value) const;
+
+       /**
+        * Multiplies the value of the specified instance and the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              The reference to %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4& operator *=(const DoubleMatrix4& rhs);
+
+       /**
+        * Multiplies the value to each matrix member of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to multiply
+        */
+       DoubleMatrix4& operator *=(double value);
+
+       /**
+        * Adds the value of the specified instance to the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4& operator +=(const DoubleMatrix4& rhs);
+
+       /**
+        * Adds the value to each matrix member of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to add
+        */
+       DoubleMatrix4& operator +=(double value);
+
+       /**
+        * Subtracts the value of the specified instance from the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to %DoubleMatrix4 cthat contains the resulting value of the operation
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       DoubleMatrix4& operator -=(const DoubleMatrix4& rhs);
+
+       /**
+        * Subtracts the value from each matrix member of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A reference to %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to subtract
+        */
+       DoubleMatrix4& operator -=(double value);
+
+       /**
+        * Gets an instance of %DoubleMatrix4 resulting from the sum of the value and the specified instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to add
+        * @param[in]   rhs     An instance of %DoubleMatrix4
+        */
+       friend DoubleMatrix4 operator +(const double& value, const DoubleMatrix4& rhs);
+
+       /**
+        * Gets an instance of %DoubleMatrix4 resulting from the product of the value and the specified instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to multiply
+        * @param[in]   rhs             An instance of %DoubleMatrix4
+        */
+       friend DoubleMatrix4 operator *(const double& value, const DoubleMatrix4& rhs);
+
+       /**
+        * Gets an instance of %DoubleMatrix4 resulting from the difference between the value and the specified instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @param[in]   value   The @c double value to subtract
+        * @param[in]   rhs             An instance of %DoubleMatrix4
+        */
+       friend DoubleMatrix4 operator -(const double& value, const DoubleMatrix4& rhs);
+
+       /**
+        * Checks whether the current instance of %DoubleMatrix4 equals the specified instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the values of the current instance is equal to the value of the specified instance, @n
+        *                              else @c false
+        * @param[in]   obj     An instance of %DoubleMatrix4
+        * @remarks
+        *                              - This method overrides Object::Equals(). 
+        *                              - This method uses the values of the Matrix components to compare the two instances.
+        */
+       virtual bool Equals(const Object& obj) const;
+
+       /**
+        * Gets the determinant of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              The determinant value of the current instance
+        */
+       double GetDeterminant(void) const;
+
+       /**
+        * Gets the inverse matrix of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        * @remarks             This method must be called after checking whether the matrix is invertible or not.
+        */
+       DoubleMatrix4 GetInverse(void) const;
+
+       /**
+        * Gets the trace of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              The trace of the current instance
+        */
+       double GetTrace(void) const;
+
+       /**
+        * Gets the transpose matrix of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %DoubleMatrix4 that contains the resulting value of the operation
+        */
+       DoubleMatrix4 GetTranspose(void) const;
+
+       /**
+        * Checks whether the current instance is an identity matrix.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the matrix is an identity matrix, @n
+        *                              else @c false
+        */
+       bool IsIdentity(void) const;
+
+       /**
+        * Checks whether the current matrix is invertible.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the matrix is invertible, @n
+        *                              else @c false
+        */
+       bool IsInvertible(void) const;
+
+       /**
+        * Negates the matrix members of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        */
+       void Negate(void);
+
+       /**
+        * Sets the identity matrix to the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        */
+       void SetAsIdentity(void);
+
+       /**
+        * Sets the inverse matrix to the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @return              An error code
+        * @exception   E_SUCCESS                       The method is successful.
+        * @exception   E_INVALID_OPERATION     The current instance is not invertible.
+        */
+       result Invert(void);
+
+       /**
+        * Sets the transposed matrix to the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        */
+       void Transpose(void);
+
+       /**
+        * Sets the matrix members of the current instance of %DoubleMatrix4 to zero.
+        *
+        * @since 2.0
+        */
+       void SetAsNull(void);
+
+       int Compare(const double d1, const double d2) const;
+
+       /**
+        * The matrix of the current instance of %DoubleMatrix4.
+        *
+        * @since 2.0
+        *
+        * @remarks             The column-major order matrix.
+        */
+       double matrix[4][4];
+
+private:
+       friend class _DoubleMatrix4Impl;
+       class _DoubleMatrix4Impl* __pImpl;
+
+}; // DoubleMatrix4
+
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_DOUBLEMATRIX4_H */
diff --git a/inc/engine/graphic/FloatDimension.h b/inc/engine/graphic/FloatDimension.h
new file mode 100755 (executable)
index 0000000..3eff37a
--- /dev/null
@@ -0,0 +1,159 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_FLOATDIMENTION_H
+#define HERE_GRAPHIC_FLOATDIMENTION_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class FloatDimension;
+
+class EXPORT_API FloatDimension :      public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * This constructor initializes an instance of %FloatDimension with the width and the height set as @c 0.f.
+        *
+        * @since 2.0
+        */
+       FloatDimension(void);
+
+       /**
+        * This is the copy constructor for the %FloatDimension class.
+        *
+        * @since 2.0
+        *
+        * @param[in]     rhs                     An instance of %FloatDimension
+        */
+       FloatDimension(const FloatDimension& rhs);
+
+       /**
+        * Initializes an instance of %FloatDimension with the specified values of width and height.
+        *
+        * @since 2.0
+        *
+        * @param[in]   width   The width to set
+        * @param[in]   height  The height to set
+        */
+       FloatDimension(float width, float height);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since 2.0
+        */
+       virtual ~FloatDimension(void);
+
+       /**
+        * This is the default assignment operator for this class.
+        *
+        * @since 2.0
+        *
+        * @param[in]     rhs                     An instance of %FloatDimension
+        */
+       FloatDimension& operator=(const FloatDimension& rhs);
+
+       /**
+        * Checks whether the two instances of %FloatDimension have equal width and height values.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the values of the width and height of the two instances of %FloatDimension are equal, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatDimension
+        */
+       bool operator==(const FloatDimension& rhs) const;
+
+       /**
+        * Checks whether the two instances of %FloatDimension have different width and height values.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the values of the width and height of the two instances of %FloatDimension are not equal, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatDimension
+        */
+       bool operator!=(const FloatDimension& rhs) const;
+
+       /**
+        * Checks whether the value of the current instance of %FloatDimension equals the value of the specified instance.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the value of the current instance equals the value of the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatDimension
+        * @remarks             The %FloatDimension class has a semantic value, which means that the
+        *                              Equals() method checks whether the two instances have the same width and height.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              The hash value of the current instance
+        * @remarks             Two equal instances must return the same hash value. For better performance,
+        *                              the used hash function must generate a random distribution for all inputs.
+        */
+       virtual long GetHashCode(void) const;
+
+       /**
+        * Sets the size of the current instance of %FloatDimension.
+        *
+        * @since 2.0
+        *
+        * @param[in]   width           The new width
+        * @param[in]   height          The new height
+        */
+       void SetSize(float width, float height);
+
+public:
+       /**
+        * The width of the current instance of %FloatDimension.
+        *
+        * @since 2.0
+        */
+       float width;
+
+       /**
+        * The height of the current instance of %FloatDimension.
+        *
+        * @since 2.0
+        */
+       float height;
+
+private:
+       friend class _FloatDimensionImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _FloatDimensionImpl* __pImpl;
+
+}; // FloatDimension
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_FLOATDIMENTION_H */
diff --git a/inc/engine/graphic/FloatPoint.h b/inc/engine/graphic/FloatPoint.h
new file mode 100755 (executable)
index 0000000..dae6d4d
--- /dev/null
@@ -0,0 +1,217 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_FLOATPOINT_H
+#define HERE_GRAPHIC_FLOATPOINT_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class FloatPoint;
+
+class EXPORT_API FloatPoint : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * This constructor initializes an instance of %FloatPoint with the values (0.f, 0.f).
+        *
+        * @since 2.0
+        */
+       FloatPoint(void);
+
+       /**
+        * This is the copy constructor for the %FloatPoint class.
+        *
+        * @since 2.0
+        *
+        * @param[in]     rhs                     An instance of %FloatPoint
+        */
+       FloatPoint(const FloatPoint& rhs);
+
+       /**
+        * Initializes an instance of %FloatPoint with the specified location.
+        *
+        * @since 2.0
+        *
+        * @param[in]   x  The x-coordinate
+        * @param[in]   y  The y-coordinate
+        */
+       FloatPoint(float x, float y);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since 2.0
+        */
+       virtual ~FloatPoint(void);
+
+       /**
+        * This is the default assignment operator for this class.
+        *
+        * @since 2.0
+        *
+        * @param[in]     rhs                     An instance of %FloatPoint
+        */
+       FloatPoint& operator=(const FloatPoint& rhs);
+
+       /**
+        * Checks whether the current instance and the specified instance of %FloatPoint are equal.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the two instances of %FloatPoint are at the same location, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatPoint
+        */
+       bool operator==(const FloatPoint& rhs) const;
+
+       /**
+        * Checks whether the current instance and the specified instance of %FloatPoint are not equal.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the two instances of %FloatPoint are at different locations, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatPoint
+        */
+       bool operator!=(const FloatPoint& rhs) const;
+
+       /**
+        * Adds the value of the specified instance of %FloatPoint and the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %FloatPoint containing the resulting value of the operation
+        * @param[in]   rhs             An instance of %FloatPoint
+        */
+       FloatPoint operator+(const FloatPoint& rhs) const;
+
+       /**
+        * Subtracts the value of the specified instance of %FloatPoint from the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              A new instance of %FloatPoint containing the resulting value of the operation
+        * @param[in]   rhs             An instance of %FloatPoint
+        */
+       FloatPoint operator-(const FloatPoint& rhs) const;
+
+       /**
+        * Adds the value of the specified instance of %FloatPoint to the current instance.
+        *
+        * @since 2.0
+        *
+        * @param[in]   point           An instance of %FloatPoint
+        */
+       FloatPoint& operator+=(const FloatPoint& point);
+
+       /**
+        * Subtracts the value of the specified instance of %FloatPoint from the current instance.
+        *
+        * @since 2.0
+        *
+        * @param[in]   point           An instance of %FloatPoint
+        */
+       FloatPoint& operator-=(const FloatPoint& point);
+
+       /**
+        * Checks whether the value of the specified instance of %FloatPoint equals the value of the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the value of the specified instance equals the value of the current instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatPoint
+        * @remarks             The %FloatPoint class has a semantic value, which means that the
+        *                              Equals() method checks whether the two instances have the same
+        *                              location.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              The hash value of the current instance
+        * @remarks             Two equal instances must return the same hash value. @n For better performance,
+        *                              the used hash function must generate a random distribution for all inputs.
+        */
+       virtual long GetHashCode(void) const;
+
+       /**
+        * Sets the x and y coordinates for the current instance of %FloatPoint.
+        *
+        * @since 2.0
+        *
+        * @param[in]   x       The new x-coordinate
+        * @param[in]   y       The new y-coordinate
+        */
+       void SetPosition(float x, float y);
+
+       /**
+        * Sets the current instance of %FloatPoint.
+        *
+        * @since 2.0
+        *
+        * @param[in]   point   An instance of %FloatPoint
+        */
+       void SetPosition(const FloatPoint& point);
+
+       /**
+        * Translates this %FloatPoint to the indicated distance.
+        *
+        * @since 2.0
+        *
+        * @param[in]   deltaX  The distance to move this point along the x-axis
+        * @param[in]   deltaY  The distance to move this point along the y-axis
+        */
+       void Translate(float deltaX, float deltaY);
+
+public:
+       /**
+        *      The x-coordinate of the point.
+        *
+        *  @since 2.0
+        */
+       float x;
+
+       /**
+        *      The y-coordinate of the point.
+        *
+        *  @since 2.0
+        */
+       float y;
+
+private:
+       friend class _FloatPointImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _FloatPointImpl* __pImpl;
+
+}; // FloatPoint
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_FLOATPOINT_H */
diff --git a/inc/engine/graphic/FloatRectangle.h b/inc/engine/graphic/FloatRectangle.h
new file mode 100755 (executable)
index 0000000..24e94c7
--- /dev/null
@@ -0,0 +1,329 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_FLOATRECTANGLE_H
+#define HERE_GRAPHIC_FLOATRECTANGLE_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/FloatDimension.h"
+#include "graphic/FloatPoint.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class FloatRectangle;
+
+class EXPORT_API FloatRectangle : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * It initializes an instance of %FloatRectangle with all its attributes set to @c 0.f.
+        *
+        * @since 2.0
+        *
+        * @remarks             The attribute value is @c 0 when initialized.
+        */
+       FloatRectangle(void);
+
+       /**
+        * This is the copy constructor for the %FloatRectangle class.
+        *
+        * @since 2.0
+        *
+        * @param[in]     rhs                     An instance of %FloatRectangle
+        */
+       FloatRectangle(const FloatRectangle& rhs);
+
+       /**
+        * Initializes an instance of %FloatRectangle with the specified location and dimension.
+        *
+        * @since 2.0
+        *
+        * @param[in]   x               The x-coordinate of the top-left corner of the rectangle
+        * @param[in]   y               The y-coordinate of the top-left corner of the rectangle
+        * @param[in]   width   The width of the rectangle
+        * @param[in]   height  The height of the rectangle
+        *
+        */
+       FloatRectangle(float x, float y, float width, float height);
+
+       /**
+        * Initializes an instance of %FloatRectangle at the location specified by @c point and
+        * with dimension specified by @c dim.
+        *
+        * @since 2.0
+        *
+        * @param[in]   point           The location of the top-left corner of the rectangle
+        * @param[in]   dim                     The width and height of the rectangle
+        */
+       FloatRectangle(const FloatPoint& point, const FloatDimension& dim);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since 2.0
+        */
+       virtual ~FloatRectangle(void);
+
+       /**
+        * This is the default assignment operator for this class.
+        *
+        * @since 2.0
+        *
+        * @param[in]     rhs                     An instance of %FloatRectangle
+        */
+       FloatRectangle& operator=(const FloatRectangle& rhs);
+
+       /**
+        * Checks whether the location and dimension of the current instance of %FloatRectangle match those of the
+        * specified instance of %FloatRectangle.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the location and dimension of the current instance match those of the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatRectangle
+        */
+       bool operator==(const FloatRectangle& rhs) const;
+
+       /**
+        * Checks whether the location and dimension of the current instance of %FloatRectangle do not match those of the
+        * specified instance of %FloatRectangle.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the location and dimension of the current instance do not match those of the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatRectangle
+        */
+       bool operator!=(const FloatRectangle& rhs) const;
+
+       /**
+        * Checks whether the specified point lies inside the current instance of %FloatRectangle.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the location represented by @c point lies inside the current instance of %FloatRectangle, @n
+        *                              else @c false
+        * @param[in]   point   An instance of FloatPoint
+        */
+       bool Contains(const FloatPoint& point) const;
+
+       /**
+        * Checks whether the value of the current instance of %FloatRectangle equals the value of the specified instance of
+        * %FloatRectangle.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the value of the current instance of %FloatRectangle equals the value of the specified instance of %FloatRectangle, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %FloatRectangle
+        * @remarks             The %FloatRectangle class has a semantic value, which means that the Equals() method checks whether the
+        *                              two instances have the same location and size.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              The hash value of the current instance
+        * @remarks             Two equal instances must return the same hash value. For better performance,
+        *                              the used hash function must generate a random distribution for all inputs.
+        */
+       virtual long GetHashCode(void) const;
+
+       /**
+        * Gets the intersection of the current instance and the specified instance of %FloatRectangle. @n
+        * If the two instances of %FloatRectangle do not intersect, empty instance is returned.
+        *
+        * @since 2.0
+        *
+        * @param[in]   rect    An instance of %FloatRectangle
+        */
+       FloatRectangle GetIntersection(const FloatRectangle& rect) const;
+
+       /**
+        * Checks whether the current instance of %FloatRectangle intersects with the specified instance of %FloatRectangle.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if the current instance of %FloatRectangle intersects with the specified instance of %FloatRectangle, @n
+        *                              else @c false
+        * @param[in]   rect    An instance of %FloatRectangle
+        *
+        */
+       bool IsIntersected(const FloatRectangle& rect) const;
+
+       /**
+        * Gets the union of the current instance and the specified instance of %FloatRectangle.
+        *
+        * @since 2.0
+        *
+        * @return              An instance of %FloatRectangle containing the union of the two rectangles
+        * @param[in]   rect    An instance of %FloatRectangle
+        */
+       FloatRectangle GetUnion(const FloatRectangle& rect) const;
+
+       /**
+        * Gets the coordinates of the point at the bottom-right corner of the rectangle.
+        *
+        * @since 2.0
+        *
+        * @return              The coordinates of the point at the bottom-right corner of the rectangle
+        */
+       FloatPoint GetBottomRight(void) const;
+
+       /**
+        * Gets the coordinates of the point at the top-left corner of the rectangle.
+        *
+        * @since 2.0
+        *
+        * @return              The coordinates of the point at the top-left corner of the rectangle
+        */
+       FloatPoint GetTopLeft(void) const;
+
+       /**
+        * Checks whether this %FloatRectangle is empty. @n
+        * A %FloatRectangle is empty if its width or its height is less than or equal to @c 0.
+        *
+        * @since 2.0
+        *
+        * @return              @c true if this rectangle is empty,     @n
+        *                              else @c false
+        */
+       bool IsEmpty(void) const;
+
+       /**
+        * Sets the size of this %FloatRectangle to match the specified FloatDimension.
+        *
+        * @since 2.0
+        *
+        * @param[in]   dim             The new size for FloatDimension
+        */
+       void SetSize(const FloatDimension& dim);
+
+       /**
+        * Sets the size of this %FloatRectangle to match the specified dimension.
+        *
+        * @since 2.0
+        *
+        * @param[in]   width   The new width
+        * @param[in]   height  The new height
+        */
+       void SetSize(float width, float height);
+
+       /**
+        * Sets the position of this %FloatRectangle to the specified point.
+        *
+        * @since 2.0
+        *
+        * @param[in]   point   The new position
+        */
+       void SetPosition(const FloatPoint& point);
+
+       /**
+        * Sets the location of the current instance of %FloatRectangle with the specified values of the
+        * x and y coordinates of the top-left corner point.
+        *
+        * @since 2.0
+        *
+        * @param[in]   x               The new x-coordinate
+        * @param[in]   y               The new y-coordinate
+        */
+       void SetPosition(float x, float y);
+
+       /**
+        * Sets the location and the dimensions of the current instance of %FloatRectangle with the specified x and y
+        * coordinates of the top-left corner point and the specified dimensions.
+        *
+        * @since 2.0
+        *
+        * @param[in]   x               The new x-coordinate
+        * @param[in]   y               The new y-coordinate
+        * @param[in]   width   The new width
+        * @param[in]   height  The new height
+        */
+       void SetBounds(float x, float y, float width, float height);
+
+       /**
+        * Sets the location and the dimensions of the current instance of %FloatRectangle with the specified location and
+        * dimension.
+        *
+        * @since 2.0
+        *
+        * @param[in]   point   An instance of FloatPoint
+        * @param[in]   dim             An instance of FloatDimension
+        */
+       void SetBounds(const FloatPoint& point, const FloatDimension& dim);
+
+       /**
+        * Translates this %FloatRectangle to the new point by the specified distance along the x-axis and y-axis.
+        *
+        * @since 2.0
+        *
+        * @param[in]   deltaX  The distance to move this %FloatRectangle along the x-axis
+        * @param[in]   deltaY  The distance to move this %FloatRectangle along the y-axis
+        */
+       void Translate(float deltaX, float deltaY);
+
+public:
+       /**
+        * The x-coordinate of the top-left corner of the rectangle.
+        *
+        * @since 2.0
+        */
+       float x;
+
+       /**
+        * The y-coordinate of the top-left corner of the rectangle.
+        *
+        * @since 2.0
+        */
+       float y;
+
+       /**
+        * The width of this rectangle.
+        *
+        * @since 2.0
+        */
+       float width;
+
+       /**
+        * The height of this rectangle.
+        *
+        * @since 2.0
+        */
+       float height;
+
+private:
+       friend class _FloatRectangleImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _FloatRectangleImpl* __pImpl;
+
+}; // FloatRectangle
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_FLOATRECTANGLE_H */
diff --git a/inc/engine/graphic/Grp_GL_macro.h b/inc/engine/graphic/Grp_GL_macro.h
new file mode 100755 (executable)
index 0000000..ffe5dbd
--- /dev/null
@@ -0,0 +1,266 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_GL_MACRO_H
+#define HERE_GRAPHIC_GL_MACRO_H
+
+#include <Evas_GL.h>
+
+extern Evas_GL_API *__evas_gl_glapi;
+
+#ifndef _EVAS_GL_GLES2_HELPERS_H
+#define glActiveTexture                            __evas_gl_glapi->glActiveTexture
+#define glAttachShader                             __evas_gl_glapi->glAttachShader
+#define glBindAttribLocation                       __evas_gl_glapi->glBindAttribLocation
+#define glBindBuffer                               __evas_gl_glapi->glBindBuffer
+#define glBindFramebuffer                          __evas_gl_glapi->glBindFramebuffer
+#define glBindRenderbuffer                         __evas_gl_glapi->glBindRenderbuffer
+#define glBindTexture                              __evas_gl_glapi->glBindTexture
+#define glBlendColor                               __evas_gl_glapi->glBlendColor
+#define glBlendEquation                            __evas_gl_glapi->glBlendEquation
+#define glBlendEquationSeparate                    __evas_gl_glapi->glBlendEquationSeparate
+#define glBlendFunc                                __evas_gl_glapi->glBlendFunc
+#define glBlendFuncSeparate                        __evas_gl_glapi->glBlendFuncSeparate
+#define glBufferData                               __evas_gl_glapi->glBufferData
+#define glBufferSubData                            __evas_gl_glapi->glBufferSubData
+#define glCheckFramebufferStatus                   __evas_gl_glapi->glCheckFramebufferStatus
+#define glClear                                    __evas_gl_glapi->glClear
+#define glClearColor                               __evas_gl_glapi->glClearColor
+#define glClearDepthf                              __evas_gl_glapi->glClearDepthf
+#define glClearStencil                             __evas_gl_glapi->glClearStencil
+#define glColorMask                                __evas_gl_glapi->glColorMask
+#define glCompileShader                            __evas_gl_glapi->glCompileShader
+#define glCompressedTexImage2D                     __evas_gl_glapi->glCompressedTexImage2D
+#define glCompressedTexSubImage2D                  __evas_gl_glapi->glCompressedTexSubImage2D
+#define glCopyTexImage2D                           __evas_gl_glapi->glCopyTexImage2D
+#define glCopyTexSubImage2D                        __evas_gl_glapi->glCopyTexSubImage2D
+#define glCreateProgram                            __evas_gl_glapi->glCreateProgram
+#define glCreateShader                             __evas_gl_glapi->glCreateShader
+#define glCullFace                                 __evas_gl_glapi->glCullFace
+#define glDeleteBuffers                            __evas_gl_glapi->glDeleteBuffers
+#define glDeleteFramebuffers                       __evas_gl_glapi->glDeleteFramebuffers
+#define glDeleteProgram                            __evas_gl_glapi->glDeleteProgram
+#define glDeleteRenderbuffers                      __evas_gl_glapi->glDeleteRenderbuffers
+#define glDeleteShader                             __evas_gl_glapi->glDeleteShader
+#define glDeleteTextures                           __evas_gl_glapi->glDeleteTextures
+#define glDepthFunc                                __evas_gl_glapi->glDepthFunc
+#define glDepthMask                                __evas_gl_glapi->glDepthMask
+#define glDepthRangef                              __evas_gl_glapi->glDepthRangef
+#define glDetachShader                             __evas_gl_glapi->glDetachShader
+#define glDisable                                  __evas_gl_glapi->glDisable
+#define glDisableVertexAttribArray                 __evas_gl_glapi->glDisableVertexAttribArray
+#define glDrawArrays                               __evas_gl_glapi->glDrawArrays
+#define glDrawElements                             __evas_gl_glapi->glDrawElements
+#define glEnable                                   __evas_gl_glapi->glEnable
+#define glEnableVertexAttribArray                  __evas_gl_glapi->glEnableVertexAttribArray
+#define glFinish                                   __evas_gl_glapi->glFinish
+#define glFlush                                    __evas_gl_glapi->glFlush
+#define glFramebufferRenderbuffer                  __evas_gl_glapi->glFramebufferRenderbuffer
+#define glFramebufferTexture2D                     __evas_gl_glapi->glFramebufferTexture2D
+#define glFrontFace                                __evas_gl_glapi->glFrontFace
+#define glGenBuffers                               __evas_gl_glapi->glGenBuffers
+#define glGenerateMipmap                           __evas_gl_glapi->glGenerateMipmap
+#define glGenFramebuffers                          __evas_gl_glapi->glGenFramebuffers
+#define glGenRenderbuffers                         __evas_gl_glapi->glGenRenderbuffers
+#define glGenTextures                              __evas_gl_glapi->glGenTextures
+#define glGetActiveAttrib                          __evas_gl_glapi->glGetActiveAttrib
+#define glGetActiveUniform                         __evas_gl_glapi->glGetActiveUniform
+#define glGetAttachedShaders                       __evas_gl_glapi->glGetAttachedShaders
+#define glGetAttribLocation                        __evas_gl_glapi->glGetAttribLocation
+#define glGetBooleanv                              __evas_gl_glapi->glGetBooleanv
+#define glGetBufferParameteriv                     __evas_gl_glapi->glGetBufferParameteriv
+#define glGetError                                 __evas_gl_glapi->glGetError
+#define glGetFloatv                                __evas_gl_glapi->glGetFloatv
+#define glGetFramebufferAttachmentParameteriv      __evas_gl_glapi->glGetFramebufferAttachmentParameteriv
+#define glGetIntegerv                              __evas_gl_glapi->glGetIntegerv
+#define glGetProgramiv                             __evas_gl_glapi->glGetProgramiv
+#define glGetProgramInfoLog                        __evas_gl_glapi->glGetProgramInfoLog
+#define glGetRenderbufferParameteriv               __evas_gl_glapi->glGetRenderbufferParameteriv
+#define glGetShaderiv                              __evas_gl_glapi->glGetShaderiv
+#define glGetShaderInfoLog                         __evas_gl_glapi->glGetShaderInfoLog
+#define glGetShaderPrecisionFormat                 __evas_gl_glapi->glGetShaderPrecisionFormat
+#define glGetShaderSource                          __evas_gl_glapi->glGetShaderSource
+#define glGetString                                __evas_gl_glapi->glGetString
+#define glGetTexParameterfv                        __evas_gl_glapi->glGetTexParameterfv
+#define glGetTexParameteriv                        __evas_gl_glapi->glGetTexParameteriv
+#define glGetUniformfv                             __evas_gl_glapi->glGetUniformfv
+#define glGetUniformiv                             __evas_gl_glapi->glGetUniformiv
+#define glGetUniformLocation                       __evas_gl_glapi->glGetUniformLocation
+#define glGetVertexAttribfv                        __evas_gl_glapi->glGetVertexAttribfv
+#define glGetVertexAttribiv                        __evas_gl_glapi->glGetVertexAttribiv
+#define glGetVertexAttribPointerv                  __evas_gl_glapi->glGetVertexAttribPointerv
+#define glHint                                     __evas_gl_glapi->glHint
+#define glIsBuffer                                 __evas_gl_glapi->glIsBuffer
+#define glIsEnabled                                __evas_gl_glapi->glIsEnabled
+#define glIsFramebuffer                            __evas_gl_glapi->glIsFramebuffer
+#define glIsProgram                                __evas_gl_glapi->glIsProgram
+#define glIsRenderbuffer                           __evas_gl_glapi->glIsRenderbuffer
+#define glIsShader                                 __evas_gl_glapi->glIsShader
+#define glIsTexture                                __evas_gl_glapi->glIsTexture
+#define glLineWidth                                __evas_gl_glapi->glLineWidth
+#define glLinkProgram                              __evas_gl_glapi->glLinkProgram
+#define glPixelStorei                              __evas_gl_glapi->glPixelStorei
+#define glPolygonOffset                            __evas_gl_glapi->glPolygonOffset
+#define glReadPixels                               __evas_gl_glapi->glReadPixels
+#define glReleaseShaderCompiler                    __evas_gl_glapi->glReleaseShaderCompiler
+#define glRenderbufferStorage                      __evas_gl_glapi->glRenderbufferStorage
+#define glSampleCoverage                           __evas_gl_glapi->glSampleCoverage
+#define glScissor                                  __evas_gl_glapi->glScissor
+#define glShaderBinary                             __evas_gl_glapi->glShaderBinary
+#define glShaderSource                             __evas_gl_glapi->glShaderSource
+#define glStencilFunc                              __evas_gl_glapi->glStencilFunc
+#define glStencilFuncSeparate                      __evas_gl_glapi->glStencilFuncSeparate
+#define glStencilMask                              __evas_gl_glapi->glStencilMask
+#define glStencilMaskSeparate                      __evas_gl_glapi->glStencilMaskSeparate
+#define glStencilOp                                __evas_gl_glapi->glStencilOp
+#define glStencilOpSeparate                        __evas_gl_glapi->glStencilOpSeparate
+#define glTexImage2D                               __evas_gl_glapi->glTexImage2D
+#define glTexParameterf                            __evas_gl_glapi->glTexParameterf
+#define glTexParameterfv                           __evas_gl_glapi->glTexParameterfv
+#define glTexParameteri                            __evas_gl_glapi->glTexParameteri
+#define glTexParameteriv                           __evas_gl_glapi->glTexParameteriv
+#define glTexSubImage2D                            __evas_gl_glapi->glTexSubImage2D
+#define glUniform1f                                __evas_gl_glapi->glUniform1f
+#define glUniform1fv                               __evas_gl_glapi->glUniform1fv
+#define glUniform1i                                __evas_gl_glapi->glUniform1i
+#define glUniform1iv                               __evas_gl_glapi->glUniform1iv
+#define glUniform2f                                __evas_gl_glapi->glUniform2f
+#define glUniform2fv                               __evas_gl_glapi->glUniform2fv
+#define glUniform2i                                __evas_gl_glapi->glUniform2i
+#define glUniform2iv                               __evas_gl_glapi->glUniform2iv
+#define glUniform3f                                __evas_gl_glapi->glUniform3f
+#define glUniform3fv                               __evas_gl_glapi->glUniform3fv
+#define glUniform3i                                __evas_gl_glapi->glUniform3i
+#define glUniform3iv                               __evas_gl_glapi->glUniform3iv
+#define glUniform4f                                __evas_gl_glapi->glUniform4f
+#define glUniform4fv                               __evas_gl_glapi->glUniform4fv
+#define glUniform4i                                __evas_gl_glapi->glUniform4i
+#define glUniform4iv                               __evas_gl_glapi->glUniform4iv
+#define glUniformMatrix2fv                         __evas_gl_glapi->glUniformMatrix2fv
+#define glUniformMatrix3fv                         __evas_gl_glapi->glUniformMatrix3fv
+#define glUniformMatrix4fv                         __evas_gl_glapi->glUniformMatrix4fv
+#define glUseProgram                               __evas_gl_glapi->glUseProgram
+#define glValidateProgram                          __evas_gl_glapi->glValidateProgram
+#define glVertexAttrib1f                           __evas_gl_glapi->glVertexAttrib1f
+#define glVertexAttrib1fv                          __evas_gl_glapi->glVertexAttrib1fv
+#define glVertexAttrib2f                           __evas_gl_glapi->glVertexAttrib2f
+#define glVertexAttrib2fv                          __evas_gl_glapi->glVertexAttrib2fv
+#define glVertexAttrib3f                           __evas_gl_glapi->glVertexAttrib3f
+#define glVertexAttrib3fv                          __evas_gl_glapi->glVertexAttrib3fv
+#define glVertexAttrib4f                           __evas_gl_glapi->glVertexAttrib4f
+#define glVertexAttrib4fv                          __evas_gl_glapi->glVertexAttrib4fv
+#define glVertexAttribPointer                      __evas_gl_glapi->glVertexAttribPointer
+#define glViewport                                 __evas_gl_glapi->glViewport
+
+// GLES 2.0 extensions
+#define glGetProgramBinaryOES                      __evas_gl_glapi->glGetProgramBinaryOES
+#define glProgramBinaryOES                         __evas_gl_glapi->glProgramBinaryOES
+#define glMapBufferOES                             __evas_gl_glapi->glMapBufferOES
+#define glUnmapBufferOES                           __evas_gl_glapi->glUnmapBufferOES
+#define glGetBufferPointervOES                     __evas_gl_glapi->glGetBufferPointervOES
+#define glTexImage3DOES                            __evas_gl_glapi->glTexImage3DOES
+#define glTexSubImage3DOES                         __evas_gl_glapi->glTexSubImage3DOES
+#define glCopyTexSubImage3DOES                     __evas_gl_glapi->glCopyTexSubImage3DOES
+#define glCompressedTexImage3DOES                  __evas_gl_glapi->glCompressedTexImage3DOES
+#define glCompressedTexSubImage3DOES               __evas_gl_glapi->glCompressedTexSubImage3DOES
+#define glFramebufferTexture3DOES                  __evas_gl_glapi->glFramebufferTexture3DOES
+#define glBindVertexArrayOES                       __evas_gl_glapi->glBindVertexArrayOES
+#define glDeleteVertexArraysOES                    __evas_gl_glapi->glDeleteVertexArraysOES
+#define glGenVertexArraysOES                       __evas_gl_glapi->glGenVertexArraysOES
+#define glIsVertexArrayOES                         __evas_gl_glapi->glIsVertexArrayOES
+#define glGetPerfMonitorGroupsAMD                  __evas_gl_glapi->glGetPerfMonitorGroupsAMD
+#define glGetPerfMonitorCountersAMD                __evas_gl_glapi->glGetPerfMonitorCountersAMD
+#define glGetPerfMonitorGroupStringAMD             __evas_gl_glapi->glGetPerfMonitorGroupStringAMD
+#define glGetPerfMonitorCounterStringAMD           __evas_gl_glapi->glGetPerfMonitorCounterStringAMD
+#define glGetPerfMonitorCounterInfoAMD             __evas_gl_glapi->glGetPerfMonitorCounterInfoAMD
+#define glGenPerfMonitorsAMD                       __evas_gl_glapi->glGenPerfMonitorsAMD
+#define glDeletePerfMonitorsAMD                    __evas_gl_glapi->glDeletePerfMonitorsAMD
+#define glSelectPerfMonitorCountersAMD             __evas_gl_glapi->glSelectPerfMonitorCountersAMD
+#define glBeginPerfMonitorAMD                      __evas_gl_glapi->glBeginPerfMonitorAMD
+#define glEndPerfMonitorAMD                        __evas_gl_glapi->glEndPerfMonitorAMD
+#define glGetPerfMonitorCounterDataAMD             __evas_gl_glapi->glGetPerfMonitorCounterDataAMD
+#define glCopyTextureLevelsAPPLE                   __evas_gl_glapi->glCopyTextureLevelsAPPLE
+#define glRenderbufferStorageMultisampleAPPLE      __evas_gl_glapi->glRenderbufferStorageMultisampleAPPLE
+#define glResolveMultisampleFramebufferAPPLE       __evas_gl_glapi->glResolveMultisampleFramebufferAPPLE
+#define glFenceSyncAPPLE                           __evas_gl_glapi->glFenceSyncAPPLE
+#define glIsSyncAPPLE                              __evas_gl_glapi->glIsSyncAPPLE
+#define glDeleteSyncAPPLE                          __evas_gl_glapi->glDeleteSyncAPPLE
+#define glClientWaitSyncAPPLE                      __evas_gl_glapi->glClientWaitSyncAPPLE
+#define glWaitSyncAPPLE                            __evas_gl_glapi->glWaitSyncAPPLE
+#define glGetInteger64vAPPLE                       __evas_gl_glapi->glGetInteger64vAPPLE
+#define glGetSyncivAPPLE                           __evas_gl_glapi->glGetSyncivAPPLE
+#define glDiscardFramebufferEXT                    __evas_gl_glapi->glDiscardFramebufferEXT
+#define glMapBufferRangeEXT                        __evas_gl_glapi->glMapBufferRangeEXT
+#define glFlushMappedBufferRangeEXT                __evas_gl_glapi->glFlushMappedBufferRangeEXT
+#define glMultiDrawArraysEXT                       __evas_gl_glapi->glMultiDrawArraysEXT
+#define glMultiDrawElementsEXT                     __evas_gl_glapi->glMultiDrawElementsEXT
+#define glRenderbufferStorageMultisampleEXT        __evas_gl_glapi->glRenderbufferStorageMultisampleEXT
+#define glFramebufferTexture2DMultisampleEXT       __evas_gl_glapi->glFramebufferTexture2DMultisampleEXT
+#define glGetGraphicsResetStatusEXT                __evas_gl_glapi->glGetGraphicsResetStatusEXT
+#define glReadnPixelsEXT                           __evas_gl_glapi->glReadnPixelsEXT
+#define glGetnUniformfvEXT                         __evas_gl_glapi->glGetnUniformfvEXT
+#define glGetnUniformivEXT                         __evas_gl_glapi->glGetnUniformivEXT
+#define glTexStorage1DEXT                          __evas_gl_glapi->glTexStorage1DEXT
+#define glTexStorage2DEXT                          __evas_gl_glapi->glTexStorage2DEXT
+#define glTexStorage3DEXT                          __evas_gl_glapi->glTexStorage3DEXT
+#define glTextureStorage1DEXT                      __evas_gl_glapi->glTextureStorage1DEXT
+#define glTextureStorage2DEXT                      __evas_gl_glapi->glTextureStorage2DEXT
+#define glTextureStorage3DEXT                      __evas_gl_glapi->glTextureStorage3DEXT
+#define glRenderbufferStorageMultisampleIMG        __evas_gl_glapi->glRenderbufferStorageMultisampleIMG
+#define glFramebufferTexture2DMultisampleIMG       __evas_gl_glapi->glFramebufferTexture2DMultisampleIMG
+#define glDeleteFencesNV                           __evas_gl_glapi->glDeleteFencesNV
+#define glGenFencesNV                              __evas_gl_glapi->glGenFencesNV
+#define glIsFenceNV                                __evas_gl_glapi->glIsFenceNV
+#define glTestFenceNV                              __evas_gl_glapi->glTestFenceNV
+#define glGetFenceivNV                             __evas_gl_glapi->glGetFenceivNV
+#define glFinishFenceNV                            __evas_gl_glapi->glFinishFenceNV
+#define glSetFenceNV                               __evas_gl_glapi->glSetFenceNV
+#define glGetDriverControlsQCOM                    __evas_gl_glapi->glGetDriverControlsQCOM
+#define glGetDriverControlStringQCOM               __evas_gl_glapi->glGetDriverControlStringQCOM
+#define glEnableDriverControlQCOM                  __evas_gl_glapi->glEnableDriverControlQCOM
+#define glDisableDriverControlQCOM                 __evas_gl_glapi->glDisableDriverControlQCOM
+#define glExtGetTexturesQCOM                       __evas_gl_glapi->glExtGetTexturesQCOM
+#define glExtGetBuffersQCOM                        __evas_gl_glapi->glExtGetBuffersQCOM
+#define glExtGetRenderbuffersQCOM                  __evas_gl_glapi->glExtGetRenderbuffersQCOM
+#define glExtGetFramebuffersQCOM                   __evas_gl_glapi->glExtGetFramebuffersQCOM
+#define glExtGetTexLevelParameterivQCOM            __evas_gl_glapi->glExtGetTexLevelParameterivQCOM
+#define glExtTexObjectStateOverrideiQCOM           __evas_gl_glapi->glExtTexObjectStateOverrideiQCOM
+#define glExtGetTexSubImageQCOM                    __evas_gl_glapi->glExtGetTexSubImageQCOM
+#define glExtGetBufferPointervQCOM                 __evas_gl_glapi->glExtGetBufferPointervQCOM
+#define glExtGetShadersQCOM                        __evas_gl_glapi->glExtGetShadersQCOM
+#define glExtGetProgramsQCOM                       __evas_gl_glapi->glExtGetProgramsQCOM
+#define glExtIsProgramBinaryQCOM                   __evas_gl_glapi->glExtIsProgramBinaryQCOM
+#define glExtGetProgramBinarySourceQCOM            __evas_gl_glapi->glExtGetProgramBinarySourceQCOM
+#define glStartTilingQCOM                          __evas_gl_glapi->glStartTilingQCOM
+#define glEndTilingQCOM                            __evas_gl_glapi->glEndTilingQCOM
+
+// glEvasGL functions
+#define glEvasGLImageTargetTexture2DOES            __evas_gl_glapi->glEvasGLImageTargetTexture2DOES
+#define glEvasGLImageTargetRenderbufferStorageOES  __evas_gl_glapi->glEvasGLImageTargetRenderbufferStorageOES
+
+// Evas GL glue layer
+#define evasglCreateImage                          __evas_gl_glapi->evasglCreateImage
+#define evasglCreateImageForContext                __evas_gl_glapi->evasglCreateImageForContext
+#define evasglDestroyImage                         __evas_gl_glapi->evasglDestroyImage
+#define evasglCreateSync                           __evas_gl_glapi->evasglCreateSync
+#define evasglDestroySync                          __evas_gl_glapi->evasglDestroySync
+#define evasglClientWaitSync                       __evas_gl_glapi->evasglClientWaitSync
+#define evasglSignalSync                           __evas_gl_glapi->evasglSignalSync
+#define evasglGetSyncAttrib                        __evas_gl_glapi->evasglGetSyncAttrib
+#define evasglWaitSync                             __evas_gl_glapi->evasglWaitSync
+#endif
+
+#endif /* HERE_GRAPHIC_GL_MACRO_H */
diff --git a/inc/engine/graphic/Grp_Util.h b/inc/engine/graphic/Grp_Util.h
new file mode 100755 (executable)
index 0000000..b5e2e39
--- /dev/null
@@ -0,0 +1,69 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_UTIL_H
+#define HERE_GRAPHIC_UTIL_H
+
+#include "common/HereMaps_global.h"
+#include "graphic/Grp_UtilType.h"
+#include "graphic/Bitmap.h"
+#include "graphic/PngDecoder.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+namespace _Util
+       {
+       bool IntersectRect(Rectangle<int>& outRect,
+                           const Rectangle<int>& srcRect1,
+                           const Rectangle<int>& srcRect2);
+
+       bool IntersectRect(Rectangle<float>& outRect,
+                           const Rectangle<float>& srcRect1,
+                           const Rectangle<float>& srcRect2);
+
+       long GetHashCode(const char *string);
+
+       EXPORT_API Bitmap* DecodePngToBmp(const byte* buffer, size_t size,
+                                          MediaPixelFormat pixelFormat=MEDIA_PIXEL_FORMAT_RGBA8888);
+
+       EXPORT_API void ConvertRGBA2BGRA(void *data, unsigned int w, unsigned int h,
+                                         MediaPixelFormat format=MEDIA_PIXEL_FORMAT_RGBA8888);
+
+       template<typename T>
+       inline T
+       Abs(const T& t)
+       {
+               return (t >= 0) ? t : -t;
+       }
+
+       template<typename T>
+       inline T
+       Min(T a, T b)
+       {
+               return (a < b) ? a : b;
+       }
+
+       template<typename T>
+       inline T
+       Max(T a, T b)
+       {
+               return (a > b) ? a : b;
+       }
+} // _Util
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_UTIL_H */
diff --git a/inc/engine/graphic/Grp_UtilType.h b/inc/engine/graphic/Grp_UtilType.h
new file mode 100755 (executable)
index 0000000..889f371
--- /dev/null
@@ -0,0 +1,314 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_UTILTYPE_H
+#define HERE_GRAPHIC_UTILTYPE_H
+
+#include "common/HereMaps_global.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+namespace _Util
+{
+
+template <unsigned int preFixed, unsigned int postFixed>
+struct FixedPoint
+{
+       FixedPoint(void)
+               : __fixedPoint(0)
+       {
+       }
+
+       FixedPoint(const FixedPoint& rhs)
+               : __fixedPoint(rhs.__fixedPoint)
+       {
+       }
+
+       explicit FixedPoint(int value)
+               : __fixedPoint(value << SHIFT)
+       {
+       }
+
+       explicit FixedPoint(long value)
+               : __fixedPoint(value << SHIFT)
+       {
+       }
+
+       explicit FixedPoint(float value)
+               : __fixedPoint(value * ((1 << SHIFT) * 1.0f))
+       {
+       }
+
+       explicit FixedPoint(double value)
+               : __fixedPoint(value * ((1 << SHIFT) * 1.0))
+       {
+       }
+
+       inline int
+       ToInt() const
+       {
+               return (__fixedPoint >> SHIFT);
+       }
+
+       inline float
+       ToFloat() const
+       {
+               return (__fixedPoint / ((1 << SHIFT) * 1.0f));
+       }
+
+       inline double
+       ToDouble() const
+       {
+               return (__fixedPoint / ((1 << SHIFT) * 1.0));
+       }
+
+       inline void
+       Reset(int fixedPointValue)
+       {
+               __fixedPoint = fixedPointValue;
+       }
+
+       inline operator const int(void)
+       {
+               return __fixedPoint;
+       }
+
+// operator +
+       inline FixedPoint
+       operator +(const FixedPoint& rhs) const
+       {
+               FixedPoint<preFixed, SHIFT> tempFixed(0);
+
+               tempFixed.__fixedPoint = __fixedPoint + rhs.__fixedPoint;
+
+               return tempFixed;
+       }
+
+// operator -
+       inline FixedPoint
+       operator -(const FixedPoint& rhs) const
+       {
+               FixedPoint<preFixed, SHIFT> tempFixed(0);
+
+               tempFixed.__fixedPoint = __fixedPoint - rhs.__fixedPoint;
+
+               return tempFixed;
+       }
+
+// operator ==
+       template <typename T>
+       inline bool
+       operator ==(const T& rhs) const
+       {
+               return (ToFloat() == rhs);
+       }
+
+       inline bool
+       operator ==(const FixedPoint& rhs) const
+       {
+               return (ToFloat() == rhs.ToFloat);
+       }
+
+// operator !=
+       template <typename T>
+       inline bool
+       operator !=(const T& rhs) const
+       {
+               return (ToFloat() != rhs);
+       }
+
+       inline bool
+       operator !=(const FixedPoint& rhs) const
+       {
+               return (ToFloat() != rhs.ToFloat());
+       }
+
+// operator <=
+       template <typename T>
+       inline bool
+       operator <=(const T& rhs) const
+       {
+               return (ToFloat() <= rhs);
+       }
+
+       inline bool
+       operator <=(const FixedPoint& rhs) const
+       {
+               return (ToFloat() <= rhs.ToFloat());
+       }
+
+// operator >=
+       template <typename T>
+       inline bool
+       operator >=(const T& rhs) const
+       {
+               return (ToFloat() >= rhs);
+       }
+
+       inline bool
+       operator >=(const FixedPoint& rhs) const
+       {
+               return (ToFloat() >= rhs.ToFloat());
+       }
+
+// operator >
+       template <typename T>
+       inline bool
+       operator >(const T& rhs) const
+       {
+               return (ToFloat() > rhs);
+       }
+
+       inline bool
+       operator >(const FixedPoint& rhs) const
+       {
+               return (ToFloat() > rhs.ToFloat());
+       }
+
+// operator <
+       template <typename T>
+       inline bool
+       operator <(const T& rhs) const
+       {
+               return (ToFloat() < rhs);
+       }
+
+       inline bool
+       operator <(const FixedPoint& rhs) const
+       {
+               return (ToFloat() < rhs.ToFloat());
+       }
+
+       int __fixedPoint;
+       enum { SHIFT = postFixed };
+};
+
+typedef FixedPoint<26, 6> FixedPoint26_6;
+typedef FixedPoint<22, 10> FixedPoint22_10;
+
+
+template <typename T>
+struct Point
+{
+       T x;
+       T y;
+};
+
+template <typename T>
+struct Dimension
+{
+       T w;
+       T h;
+};
+
+template <typename T>
+struct Rectangle
+{
+       T x;
+       T y;
+       T w;
+       T h;
+};
+
+template <typename T>
+inline bool
+operator ==(const Rectangle<T>& lhs, const Rectangle<T>& rhs)
+{
+       return (lhs.x == rhs.x) && (lhs.y == rhs.y) && (lhs.w == rhs.w) && (lhs.h == rhs.h);
+}
+
+template <typename T>
+inline bool
+operator !=(const Rectangle<T>& lhs, const Rectangle<T>& rhs)
+{
+       return !(operator ==(lhs, rhs));
+}
+
+template <typename T>
+struct Bounds
+{
+       T x1;
+       T y1;
+       T x2;
+       T y2;
+
+       bool IsInside(T x, T y)
+       {
+               return ((x >= x1) && (x < x2) && (y >= y1) && (y < y2));
+       }
+
+       bool IsInsideX(T x)
+       {
+               return ((x >= x1) && (x < x2));
+       }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// String
+
+struct String
+{
+       const wchar_t* pStart;
+       int length;
+
+       String(void)
+               : pStart(L"")
+               , length(0)
+       {
+       }
+
+       String(const wchar_t* pInputString, int inputStringLength)
+               : pStart(pInputString)
+               , length(inputStringLength)
+       {
+       }
+
+       String(const wchar_t* pInputString, int inputStringLength, int offset, int clippedLength)
+       {
+               const wchar_t* pInputStart = pInputString;
+               const wchar_t* pInputEnd = pInputStart + inputStringLength;
+
+               const wchar_t* pRevisedStart = pInputString + offset;
+               const wchar_t* pRevisedEnd = pRevisedStart + clippedLength;
+
+               const wchar_t* pClippedStart = (pInputStart > pRevisedStart) ? pInputStart : pRevisedStart;
+               const wchar_t* pClippedEnd = (pInputEnd < pRevisedEnd) ? pInputEnd : pRevisedEnd;
+
+               if (pClippedEnd - pClippedStart > 0)
+               {
+                       this->pStart = pClippedStart;
+                       this->length = pClippedEnd - pClippedStart;
+               }
+               else
+               {
+                       this->pStart = (pClippedStart == pInputString) ? pClippedStart : L"";
+                       this->length = 0;
+               }
+       }
+
+       operator const wchar_t*(void)
+       {
+               return pStart;
+       }
+};
+
+typedef std::wstring WString;
+
+} // _Util
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_UTILTYPE_H */
diff --git a/inc/engine/graphic/PngDecoder.h b/inc/engine/graphic/PngDecoder.h
new file mode 100755 (executable)
index 0000000..059005c
--- /dev/null
@@ -0,0 +1,133 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef _PNG_DECODER_H_
+#define _PNG_DECODER_H_
+
+#include <png.h>
+#include "common/HereMaps_global.h"
+
+
+enum MediaPixelFormat
+{
+       MEDIA_PIXEL_FORMAT_NONE = 0x0000,     /**< The undefined pixel format */
+       MEDIA_PIXEL_FORMAT_RGB565LE = 0x0001, /**< The RGB565 little-endian format */
+       MEDIA_PIXEL_FORMAT_RGB565BE,          /**< The RGB565 big-endian format */
+       MEDIA_PIXEL_FORMAT_RGB888 = 0x0100,   /**< The RGB888 format */
+       MEDIA_PIXEL_FORMAT_BGR888,            /**< The BGR888 format */
+       MEDIA_PIXEL_FORMAT_RGBA8888,          /**< The RGBA8888 format */
+       MEDIA_PIXEL_FORMAT_BGRA8888,          /**< The BGRA8888 format */
+       MEDIA_PIXEL_FORMAT_YUV420P = 0x0200,  /**< The YUV420 Planar format */
+       MEDIA_PIXEL_FORMAT_NV12,              /**< The NV12 format */
+       MEDIA_PIXEL_FORMAT_NV12_TILE,         /**< The NV12 tiled format */
+       MEDIA_PIXEL_FORMAT_NV21,              /**< The NV21 format */
+       MEDIA_PIXEL_FORMAT_YUV444P,           /**< The YUV444 Planar format */
+       MEDIA_PIXEL_FORMAT_YUYV422,           /**< The YUYV422 format */
+       MEDIA_PIXEL_FORMAT_UYVY422,           /**< The UYVY422 format */
+       MEDIA_PIXEL_FORMAT_GRAY,              /**< The gray pixel format */
+};
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class PngDecoder
+{
+public:
+
+       static const int MAX_WIDTH = 5000;
+       static const int MAX_HEIGHT = 5000;
+       static const int MAX_SIZE = 4096000;   // 4Mbyte
+
+       PngDecoder(void);
+       virtual ~PngDecoder(void);
+
+       /**
+        * Constructs this instancce with given buffer and length.
+        *
+        * @return       An error code
+        * @param[in]  buffer            The buffer that contains compressed data.
+        * @param[in]  length            The length of buffer.
+        * @exception  E_SUCCESS          The method is successful.
+        * @exception  E_INVALID_ARG  The input parameter is invalid.
+        */
+       virtual result Construct(const byte* buffer, int length, MediaPixelFormat pixelFormat);
+
+       /**
+        * Decodes current frame and returns decoded data.
+        *
+        * @return       A buffer pointer of decoded data
+        * @param[out] outLength                         The length of outBuf.
+        * @exception  E_SUCCESS                  The method is successful.
+        * @exception  E_OUT_OF_MEMORY  Memory is insufficient.
+        * @exception  E_INVALID_DATA    The data is invalid.
+        */
+       virtual byte* DecodeN(int& outLength);
+
+       /**
+        * Sets the decoding region. @n
+        *
+        * @return       An error code
+        * @param[in]  rect                                      The decoding region.
+        * @exception  E_SUCCESS                                The method is successful.
+        * @exception  E_INVALID_ARG                    The input parameter is invalid.
+        * @exception  E_UNSUPPORTED_OPERATION  This method is unsupported.
+        */
+       virtual result SetDecodingRegion(int x, int y, int width, int height);
+
+       /**
+        * Gets current dimension of image.
+        *
+        * @return        An error code
+        * @param[out]  width   The width of image.
+        * @param[out]  height  The height of image.
+        */
+       virtual result GetDimension(int& width, int& height);
+
+       /**
+        * Gets the output pixel format.
+        *
+        * @return                 The output pixel format.
+        */
+       virtual MediaPixelFormat GetPixelFormat(void);
+
+       void PngReadData(void *pngPtr, byte* data, int size);
+
+       static void PngReadDataStatic(png_structp pngPtr, png_bytep data, png_size_t length);
+protected:
+
+
+private:
+       byte* __pBuf;
+       unsigned int __curPos;
+       unsigned int __bufSize;
+
+       png_structp __pPng;
+       png_infop __pInfo;
+
+       int __srcWidth;
+       int __srcHeight;
+       int __scale;
+       int __decodingRectX;
+       int __decodingRectY;
+       int __decodingRectWidth;
+       int __decodingRectHeight;
+       bool __isDecodeRegionEnabled;
+       MediaPixelFormat __format;
+
+}; // class PngDecoder
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/graphic/Point.h b/inc/engine/graphic/Point.h
new file mode 100755 (executable)
index 0000000..0d00531
--- /dev/null
@@ -0,0 +1,217 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_POINT_H
+#define HERE_GRAPHIC_POINT_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Point;
+
+class EXPORT_API Point : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * This initializes an instance of %Point with the values (0, 0).
+        *
+        * @since       2.0
+        */
+       Point(void);
+
+       /**
+       * This is the copy constructor for the %Point class.
+       *
+       * @since 2.0
+       *
+       * @param[in]    rhs             An instance of %Point
+       */
+       Point(const Point& rhs);
+
+       /**
+        * Initializes an instance of %Point with the specified location.
+        *
+        * @since                       2.0
+        *
+        * @param[in]   x  The x-coordinate
+        * @param[in]   y  The y-coordinate
+        */
+       Point(int x, int y);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since       2.0
+        */
+       virtual ~Point(void);
+
+       /**
+       * Assigns the value of the specified instance to the current instance of %Point.
+       *
+       * @since 2.0
+       *
+       * @param[in]    rhs             An instance of %Point
+       */
+       Point& operator =(const Point& rhs);
+
+       /**
+        * Checks whether the current instance and the specified instance of %Point are equal.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the two instances of %Point are at the same location, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Point
+        */
+       bool operator ==(const Point& rhs) const;
+
+       /**
+        * Checks whether the current instance and the specified instance of %Point are not equal.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the two instances of %Point are at different locations, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Point
+        */
+       bool operator !=(const Point& rhs) const;
+
+       /**
+        * Adds the value of the specified instance of %Point and the current instance.
+        *
+        * @since               2.0
+        *
+        * @return              A new instance of %Point containing the resulting value of the operation
+        * @param[in]   rhs             An instance of %Point
+        */
+       Point operator +(const Point& rhs) const;
+
+       /**
+        * Subtracts the value of the specified instance of %Point from the current instance.
+        *
+        * @since               2.0
+        *
+        * @return              A new instance of %Point containing the resulting value of the operation
+        * @param[in]   rhs             An instance of %Point
+        */
+       Point operator -(const Point& rhs) const;
+
+       /**
+        * Adds the value of the specified instance of %Point to the current instance.
+        *
+        * @since               2.0
+        *
+        * @param[in]   point           An instance of %Point
+        */
+       Point& operator +=(const Point& point);
+
+       /**
+        * Subtracts the value of the specified instance of %Point from the current instance.
+        *
+        * @since               2.0
+        *
+        * @param[in]   point           An instance of %Point
+        */
+       Point& operator -=(const Point& point);
+
+       /**
+        * Checks whether the value of the specified instance of %Point equals the value of the current instance.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the value of the specified instance equals the value of the current instance, @n
+        *              else @c false
+        * @param[in]   rhs             An instance of %Point
+        * @remarks             The %Point class has a semantic value, which means that the
+        *                              Equals() method checks whether the two instances have the same
+        *                              location.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance.
+        *
+        * @since               2.0
+        *
+        * @return              The hash value of the current instance
+        * @remarks             Two equal instances must return the same hash value. @n For better performance,
+        *                              the used hash function must generate a random distribution for all inputs.
+        */
+       virtual long GetHashCode(void) const;
+
+       /**
+        * Sets the x and y coordinates for the current instance of %Point.
+        *
+        * @since               2.0
+        *
+        * @param[in]   x       The new x-coordinate
+        * @param[in]   y       The new y-coordinate
+        */
+       void SetPosition(int x, int y);
+
+       /**
+        * Sets the current instance of %Point.
+        *
+        * @since               2.0
+        *
+        * @param[in]   point   An instance of %Point
+        */
+       void SetPosition(const Point& point);
+
+       /**
+        * Translates this %Point to the indicated distance.
+        *
+        * @since               2.0
+        *
+        * @param[in]   deltaX  The distance to move this point along the x-axis
+        * @param[in]   deltaY  The distance to move this point along the y-axis
+        */
+       void Translate(int deltaX, int deltaY);
+
+public:
+       /**
+        *      The x-coordinate of the point.
+        *
+        *  @since      2.0
+        */
+       int x;
+
+       /**
+        *      The y-coordinate of the point.
+        *
+        *  @since      2.0
+        */
+       int y;
+
+private:
+       friend class _PointImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _PointImpl * __pImpl;
+
+}; // Point
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_POINT_H */
diff --git a/inc/engine/graphic/Rectangle.h b/inc/engine/graphic/Rectangle.h
new file mode 100755 (executable)
index 0000000..4d29ae0
--- /dev/null
@@ -0,0 +1,327 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef HERE_GRAPHIC_RECTANGLE_H
+#define HERE_GRAPHIC_RECTANGLE_H
+
+#include "common/HereMaps_global.h"
+#include "base/BaseObject.h"
+#include "graphic/Point.h"
+#include "graphic/Dimension.h"
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+class Rectangle;
+
+class EXPORT_API Rectangle     : public Object
+{
+public:
+       /**
+        * This is the default constructor for this class. @n
+        * It initializes an instance of %Rectangle with all its attributes set to @c 0.
+        *
+        * @since               2.0
+        *
+        * @remarks             The attribute value is @c 0 when initialized.
+        */
+       Rectangle(void);
+
+       /**
+       * This is the copy constructor for the %Rectangle class.
+       *
+       * @since 2.0
+       *
+       * @param[in]    rhs             An instance of %Rectangle
+       */
+       Rectangle(const Rectangle& rhs);
+
+       /**
+        * Initializes an instance of %Rectangle with the specified location and dimension.
+        *
+        * @since               2.0
+        *
+        * @param[in]   x               The x-coordinate of the top-left corner of the rectangle
+        * @param[in]   y               The y-coordinate of the top-left corner of the rectangle
+        * @param[in]   width   The width of the rectangle
+        * @param[in]   height  The height of the rectangle
+        *
+        */
+       Rectangle(int x, int y, int width, int height);
+
+       /**
+        * Initializes an instance of %Rectangle at the location specified by @c point and
+        * with dimension specified by @c dim.
+        *
+        * @since               2.0
+        *
+        * @param[in]   point           The location of the top-left corner of the rectangle
+        * @param[in]   dim                     The width and height of the rectangle
+        */
+       Rectangle(const Point& point, const Dimension& dim);
+
+       /**
+        * This is the destructor for this class.
+        *
+        * @since               2.0
+        */
+       virtual ~Rectangle(void);
+
+       /**
+       * Assigns the value of the specified instance to the current instance of %Rectangle.
+       *
+       * @since 2.0
+       *
+       * @param[in]    rhs             An instance of %Rectangle
+       */
+       Rectangle& operator =(const Rectangle& rhs);
+
+       /**
+        * Checks whether the location and dimension of the current instance of %Rectangle match those of the
+        * specified instance of %Rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the location and dimension of the current instance match those of the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Rectangle
+        */
+       bool operator ==(const Rectangle& rhs) const;
+
+       /**
+        * Checks whether the location and dimension of the current instance of %Rectangle do not match those of the
+        * specified instance of %Rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the location and dimension of the current instance do not match those of the specified instance, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Rectangle
+        */
+       bool operator !=(const Rectangle& rhs) const;
+
+       /**
+        * Checks whether the specified point lies inside the current instance of %Rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the location represented by the specified @c point lies inside the current instance of %Rectangle, @n
+        *                              else @c false
+        * @param[in]   point   An instance of %Point
+        */
+       bool Contains(const Point& point) const;
+
+       /**
+        * Checks whether the value of the current instance of %Rectangle equals the value of the specified instance of
+        * %Rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the value of the current instance of %Rectangle equals the value of the specified instance of %Rectangle, @n
+        *                              else @c false
+        * @param[in]   rhs             An instance of %Rectangle
+        * @remarks             The %Rectangle class has a semantic value, which means that the Equals() method checks whether the
+        *                              two instances have the same location and size.
+        */
+       virtual bool Equals(const Object& rhs) const;
+
+       /**
+        * Gets the hash value of the current instance.
+        *
+        * @since 2.0
+        *
+        * @return              The hash value of the current instance
+        */
+       virtual long GetHashCode(void) const;
+
+       /**
+        * Gets the intersection of the current instance and the specified instance of %Rectangle. @n
+        * If the two instances of %Rectangle do not intersect, an empty instance is returned.
+        *
+        * @since               2.0
+        *
+        * @param[in]   rect    An instance of %Rectangle
+        */
+       Rectangle GetIntersection(const Rectangle& rect) const;
+
+       /**
+        * Checks whether the current instance of %Rectangle intersects with the specified instance of %Rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if the current instance of %Rectangle intersects with the specified instance of %Rectangle, @n
+        *                              else @c false
+        * @param[in]   rect    An instance of %Rectangle
+        *
+        */
+       bool IsIntersected(const Rectangle& rect) const;
+
+       /**
+        * Gets the union of the current instance and the specified instance of %Rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              An instance of %Rectangle containing the union of the two rectangles
+        * @param[in]   rect    An instance of %Rectangle
+        */
+       Rectangle GetUnion(const Rectangle& rect) const;
+
+       /**
+        * Gets the coordinates of the point at the bottom-right corner of the rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              The coordinates of the point at the bottom-right corner of the rectangle
+        */
+       Point GetBottomRight(void) const;
+
+       /**
+        * Gets the coordinates of the point at the top-left corner of the rectangle.
+        *
+        * @since               2.0
+        *
+        * @return              The coordinates of the point at the top-left corner of the rectangle
+        */
+       Point GetTopLeft(void) const;
+
+       /**
+        * Checks whether this %Rectangle is empty. @n
+        * A %Rectangle is empty if its width or its height is less than or equal to @c 0.
+        *
+        * @since               2.0
+        *
+        * @return              @c true if this rectangle is empty,     @n
+        *                              else @c false
+        */
+       bool IsEmpty(void) const;
+
+       /**
+        * Sets the size of this %Rectangle to match the specified Dimension.
+        *
+        * @since               2.0
+        *
+        * @param[in]   dim             The new size for the Dimension
+        */
+       void SetSize(const Dimension& dim);
+
+       /**
+        * Sets the size of this %Rectangle to match the specified dimension.
+        *
+        * @since               2.0
+        *
+        * @param[in]   width   The new width
+        * @param[in]   height  The new height
+        */
+       void SetSize(int width, int height);
+
+       /**
+        * Sets the position of this %Rectangle to the specified point.
+        *
+        * @since               2.0
+        *
+        * @param[in]   point   The new position
+        */
+       void SetPosition(const Point& point);
+
+       /**
+        * Sets the location of the current instance of %Rectangle with the specified values of the
+        * x and y coordinates of the top-left corner point.
+        *
+        * @since               2.0
+        *
+        * @param[in]   x               The new x-coordinate
+        * @param[in]   y               The new y-coordinate
+        */
+       void SetPosition(int x, int y);
+
+       /**
+        * Sets the location and the dimensions of the current instance of %Rectangle with the specified x and y
+        * coordinates of the top-left corner point and the specified dimensions.
+        *
+        * @since               2.0
+        *
+        * @param[in]   x               The new x coordinate
+        * @param[in]   y               The new y coordinate
+        * @param[in]   width   The new width
+        * @param[in]   height  The new height
+        */
+       void SetBounds(int x, int y, int width, int height);
+
+       /**
+        * Sets the location and the dimensions of the current instance of %Rectangle with the specified location and
+        * dimension.
+        *
+        * @since               2.0
+        *
+        * @param[in]   point   An instance of Point
+        * @param[in]   dim             An instance of Dimension
+        */
+       void SetBounds(const Point& point, const Dimension& dim);
+
+       /**
+        * Translates this %Rectangle to the new point by the specified distance along the x-axis and y-axis.
+        *
+        * @since               2.0
+        *
+        * @param[in]   deltaX  The distance to move this %Rectangle along the x-axis
+        * @param[in]   deltaY  The distance to move this %Rectangle along the y-axis
+        */
+       void Translate(int deltaX, int deltaY);
+
+public:
+       /**
+        * The x-coordinate of the top-left corner of the rectangle.
+        *
+        * @since       2.0
+        */
+       int x;
+
+       /**
+        * The y-coordinate of the top-left corner of the rectangle.
+        *
+        * @since       2.0
+        */
+       int y;
+
+       /**
+        * The width of this rectangle.
+        *
+        * @since       2.0
+        */
+       int width;
+
+       /**
+        * The height of this rectangle.
+        *
+        * @since       2.0
+        */
+       int height;
+
+private:
+       friend class _RectangleImpl;
+
+       //
+       // This variable is for internal use only.
+       // Using this variable can cause behavioral, security-related, and consistency-related issues in the application.
+       //
+       // @since 2.0
+       //
+       class _RectangleImpl * __pImpl;
+
+}; // Rectangle
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* HERE_GRAPHIC_RECTANGLE_H */
diff --git a/inc/engine/internal/Distance.h b/inc/engine/internal/Distance.h
new file mode 100644 (file)
index 0000000..af5e76a
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DISTANCE_H_
+#define DISTANCE_H_
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Distance
+{
+public:
+    Distance();
+    Distance(float f);
+    float Get() const;
+    bool IsValid() const;
+
+private:
+    float __internal;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // DISTANCE_H_
diff --git a/inc/engine/internal/DoublePoint.h b/inc/engine/internal/DoublePoint.h
new file mode 100644 (file)
index 0000000..54f923e
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DOUBLEPOINT_H
+#define DOUBLEPOINT_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DoublePoint
+{
+public:
+    DoublePoint(double _x, double _y) : x(_x), y(_y){}
+
+    double x;
+    double y;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/DoublePoint3.h b/inc/engine/internal/DoublePoint3.h
new file mode 100644 (file)
index 0000000..ab21fe7
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DOUBLEPOINT3_H
+#define DOUBLEPOINT3_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DoublePoint3
+{
+public:
+    DoublePoint3() : x(0), y(0), z(0) {}
+    DoublePoint3(double _x, double _y, double _z) : x(_x), y(_y), z(_z){}
+
+    double x;
+    double y;
+    double z;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/EncodingConversion.h b/inc/engine/internal/EncodingConversion.h
new file mode 100755 (executable)
index 0000000..dbad832
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ENCODING_CONVERSION_H
+#define ENCODING_CONVERSION_H
+
+#include "common/HereMaps_global.h"
+
+#include <string>
+
+#ifndef TIZEN_MIGRATION
+namespace Tizen{ namespace Base{ class ByteBuffer; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class offers encoding conversion utilities between UTF-8 and platform
+ * default string encoding.
+ */
+class EncodingConversion
+{
+public:
+    /**
+     * This method converts a platform string to UTF-8.
+     *
+     * @param sSrc A constant reference to a platform string to convert.
+     *
+     * @param sDst A reference to a string object holding the results of
+     *        conversion to UTF-8.
+     *
+     * @return Always <code>true</code>.
+     */
+    static bool ToUTF8(const WString& sSrc, std::string& sDst);
+
+
+    /**
+     * This method converts a UTF-8 string to a platform string.
+     * 
+     * @param sSrc A constant reference to an unsigned character buffer
+     *        containing the string to convert. 
+     * 
+     * @param uLen A value representing the length of the buffer containing the
+     *        string to covert.
+     * 
+     * @param sDst A reference to a string object holding the results of
+     *        conversion from UTF-8.
+     * 
+     * @return Always <code>true</code>.
+     */
+    static bool FromUTF8(const char* pSrc, size_t uLen, WString& sDst);
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(EncodingConversion);
+};
+
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/FPSCounter.h b/inc/engine/internal/FPSCounter.h
new file mode 100644 (file)
index 0000000..626cc2d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef FPSCOUNTER_H
+#define FPSCOUNTER_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class FPSCounter
+{
+public:
+    FPSCounter(unsigned int uNumAccumulateFrames);
+    void operator++();
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(FPSCounter);
+
+    long long    m_lastTick;
+    unsigned int m_uNumFrames;
+    unsigned int m_uNumAccumulateFrames;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/GeoMercatorProjection.h b/inc/engine/internal/GeoMercatorProjection.h
new file mode 100755 (executable)
index 0000000..9c30566
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOMERCATORPROJECTION_H
+#define GEOMERCATORPROJECTION_H
+
+#include <cmath>
+
+#ifdef TIZEN_OSP_BASED
+#include <FGraphics.h>
+#endif
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoProjection.h"
+#include "internal/DoublePoint.h"
+#include "internal/DoublePoint3.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+
+/**
+ * This class encapsulates the normalized mercator projection. In this
+ * projection, the map is represented by a grid of square tiles (bitmap
+ * images). The position of the tile in this grid depends on the map zoom level
+ * and is defined by the x and y coordinates. At the lowest zoom level, there is
+ * only one tile. At the next zoom level, the grid is 2 x 2. With each higher
+ * zoom level the x-size and the y-size of the grid increase by a power of two.
+ * 
+ * \ingroup maps
+ */
+
+class GeoMercatorProjection : public GeoProjection
+{
+public:
+    GeoMercatorProjection();
+
+    virtual void setTileSize(const Tizen::Maps::Dimension& size);
+    virtual void setScreenSize(const Tizen::Maps::Dimension& size);
+    virtual void setLevel(double value);
+    virtual void setGeoCenter(const GeoCoordinates& value);
+    virtual void setHeading(double value);
+    virtual bool setGeoCenterInPx(const Tizen::Maps::Point& value);
+    virtual Tizen::Maps::Point geoToPixel(const GeoCoordinates& geo) const;
+    virtual GeoCoordinates pixelToGeo(const Tizen::Maps::Point &pixel) const;
+    virtual std::vector<GeoProjectionNode*> projectRoot();
+
+protected:
+    virtual GeoProjectionNode* createNodeAt(double left_x, double bottom_y);
+    virtual void filter(GeoProjectionNode& transform,const std::vector<DoublePoint3>& points);
+    virtual DoublePoint3 projectPoint(double x, double y, double z = 0.0) const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMercatorProjection);
+
+    void createProjection();
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOMERCATORPROJECTION_P_H
diff --git a/inc/engine/internal/GeoOpenGlRenderer.h b/inc/engine/internal/GeoOpenGlRenderer.h
new file mode 100755 (executable)
index 0000000..1686353
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOOPENGLRENDERER_H
+#define GEOOPENGLRENDERER_H
+
+#include "common/HereMaps_global.h"
+
+#include <vector>
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/FloatRectangle.h"
+#include "graphic/Color.h"
+#else
+#include <FGraphics.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GlTexture;
+class GeoTiledMap;
+class GeoMapObjectMarker;
+class GeoProjectionNode;
+class DrawableBitmap;
+
+/**
+ * This class encapsulates an Open GL renderer used to render map tiles.
+ * 
+ * \ingroup maps
+ */
+class GeoOpenGlRenderer
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    GeoOpenGlRenderer();
+
+    /**
+     * This method is the default destructor.
+     */
+    ~GeoOpenGlRenderer();
+
+    /**
+     * This method creates an EGL texture from the image associated with the
+     * caller-supplied bitmap drawable.
+     * 
+     * @param rDrawableBitmap A reference to a bitmap object that contains the
+     *        image to be drawn.
+     * 
+     * @return <code>true</code> if the image has been made drawable,
+     *        <code>false</code> if a texture could not be associated with the supplied
+     *        bitmap object.
+     */
+    bool MakeDrawable(DrawableBitmap& rDrawableBitmap);
+
+    /**
+     * This method renders the image(s) provided by the caller. The caller can
+     * specify the size of the area to render (the visible map area).
+     * 
+     * @param nodes A list of objects containing images to render.
+     * 
+     * @param width A value indicating the width of the area to render.
+     * 
+     * @param height A value indicating the height of the area to render.
+     */
+    bool Render(const std::vector<GeoProjectionNode*>& nodes,
+                unsigned int width,
+                unsigned int height);
+
+    /** 
+     * This method renders a square, using the rectangle and texture specified
+     * by the caller. 
+     * 
+     * @param aRect A constant reference to the rectangle to render.
+     * 
+     * @param rTexture A constant reference to the texture object to apply.
+     * 
+     * @param sx0 A value providing the x coordinate of the top left corner of
+     *        the rectangle in the tile grid. 
+     * 
+     * @param sy0 A value providing the y coordinate of the top left corner of
+     *        the rectangle in the tile grid.
+     * 
+     * @param sx1 A value providing the x coordinate of the bottom right corner of
+     *        the rectangle in the tile grid.
+     * 
+     * @param sy1 A value providing the y coordinate of the bottom right corner of
+     *        the rectangle in the tile grid.
+     */
+    bool RenderQuad(const Tizen::Maps::FloatRectangle& aRect, const GlTexture& rTexture, float sx0=0.f, float sy0=1.f, float sx1=1.f, float sy1=0.f);
+
+    /** 
+     * This method renders a square, using the rectangle and texture specified
+     * by the caller. 
+     * 
+     * @param aRect A constant reference to the rectangle to render.
+     * 
+     * @param uTexture A value of the id of the texture object to apply.
+     * 
+     * @param sx0 A value providing the x coordinate of the top left corner of
+     *        the rectangle in the tile grid. 
+     * 
+     * @param sy0 A value providing the y coordinate of the top left corner of
+     *        the rectangle in the tile grid.
+     * 
+     * @param sx1 A value providing the x coordinate of the bottom right corner of
+     *        the rectangle in the tile grid.
+     * 
+     * @param sy1 A value providing the y coordinate of the bottom right corner of
+     *        the rectangle in the tile grid.
+     */
+    bool RenderQuad(const Tizen::Maps::FloatRectangle& aRect, unsigned int uTextureId, float sx0=0.f, float sy0=1.f, float sx1=1.f, float sy1=0.f);
+
+    /**
+     * This method changes the color that will be used by the gl clear method.
+     */
+    void SetClearColor(const Tizen::Maps::Color& color);
+
+    /**
+     * This method clears the screen.
+     */
+    void Clear();
+
+private:
+    bool Initialize();
+    
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoOpenGlRenderer);
+    class GeoOpenGlRendererImpl;
+    GeoOpenGlRendererImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOOPENGLRENDERER_P_H
diff --git a/inc/engine/internal/HereLogo.h b/inc/engine/internal/HereLogo.h
new file mode 100644 (file)
index 0000000..3a377b0
--- /dev/null
@@ -0,0 +1,4631 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+Byte byHERE_logo_blue_transparent_rgb_16px[3146] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a,
+0xf4, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x01,
+0x75, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x95, 0xbd, 0x4b, 0x03, 0x31, 0x1c, 0x86, 0x9f,
+0x68, 0x29, 0x08, 0xa2, 0x0e, 0x8e, 0x72, 0x0e,
+0xce, 0x82, 0x93, 0x8b, 0x28, 0x55, 0x63, 0xa1,
+0x43, 0x37, 0x41, 0x10, 0xf5, 0x5f, 0x90, 0x08,
+0xfe, 0x03, 0x0e, 0x82, 0x53, 0x5c, 0x9d, 0x04,
+0x07, 0x11, 0x14, 0x11, 0x74, 0x33, 0x88, 0x74,
+0x73, 0x10, 0x07, 0x27, 0x41, 0xc1, 0xc6, 0x8f,
+0xc5, 0x49, 0x97, 0x82, 0x50, 0xce, 0x25, 0x95,
+0x70, 0x9c, 0x6d, 0xa1, 0x07, 0x1d, 0xcc, 0xbb,
+0xdd, 0xef, 0xbd, 0xbb, 0x3c, 0xfc, 0xbe, 0x22,
+0xe2, 0x38, 0xa6, 0x9b, 0xea, 0xa1, 0xcb, 0x0a,
+0x00, 0x01, 0x20, 0x00, 0x04, 0x80, 0x00, 0xd0,
+0x75, 0x80, 0x5c, 0x33, 0x53, 0x08, 0x01, 0x40,
+0x24, 0x75, 0x01, 0xb8, 0xb3, 0x46, 0x7d, 0xfa,
+0x7e, 0x24, 0xf5, 0x00, 0x30, 0x01, 0x54, 0xad,
+0x51, 0xd5, 0xb4, 0x7f, 0xb4, 0xba, 0xec, 0x44,
+0xb3, 0x17, 0x84, 0x10, 0x44, 0x52, 0xcf, 0x01,
+0x17, 0xc0, 0x3d, 0x50, 0x6c, 0x40, 0x38, 0xa8,
+0x63, 0x60, 0x18, 0x88, 0x81, 0x3d, 0x60, 0xdd,
+0x1a, 0xf5, 0x9d, 0x19, 0xc0, 0xe8, 0xc2, 0xee,
+0x14, 0x70, 0x09, 0xf4, 0xb9, 0x50, 0x05, 0x28,
+0x01, 0xfd, 0xc0, 0x03, 0x30, 0x94, 0xf8, 0xe4,
+0x1c, 0x58, 0xf4, 0x21, 0x5a, 0x01, 0xb4, 0xea,
+0x81, 0x27, 0xe0, 0xdd, 0x7b, 0x9e, 0x71, 0xd9,
+0x58, 0x4a, 0x39, 0x1c, 0xa0, 0x0c, 0x9c, 0x44,
+0x52, 0xe7, 0xda, 0xed, 0x81, 0x76, 0x4a, 0x30,
+0x02, 0x5c, 0x03, 0x63, 0x9e, 0x55, 0x73, 0x59,
+0x79, 0x06, 0xf6, 0x81, 0x0d, 0x60, 0xd0, 0xf3,
+0x0f, 0x81, 0x35, 0x6b, 0x54, 0xbd, 0xd3, 0x0c,
+0x60, 0x8d, 0x7a, 0x05, 0x66, 0x81, 0x37, 0x2f,
+0xdc, 0x28, 0xc9, 0xb6, 0x35, 0x6a, 0x0b, 0x98,
+0x07, 0xbe, 0x3c, 0x7f, 0x19, 0x38, 0x88, 0xa4,
+0xee, 0xcd, 0x64, 0x0c, 0xad, 0x51, 0x2f, 0x40,
+0x21, 0x01, 0x01, 0xb0, 0x1a, 0x49, 0x9d, 0xb7,
+0x46, 0xdd, 0x02, 0xc5, 0x14, 0x88, 0x72, 0x66,
+0x7b, 0xc0, 0x1a, 0xf5, 0xe8, 0x20, 0x3e, 0xbc,
+0xf0, 0xb4, 0xab, 0x79, 0xde, 0x1a, 0x75, 0xe3,
+0x1a, 0xb4, 0xe6, 0xbc, 0x1d, 0x6b, 0xd4, 0x59,
+0xc7, 0x3d, 0x90, 0x54, 0x24, 0xf5, 0x38, 0x70,
+0xe5, 0xc6, 0xaf, 0xa1, 0x23, 0x60, 0xc5, 0x1a,
+0x55, 0x77, 0x63, 0x5b, 0xb2, 0x46, 0x6d, 0x66,
+0xb2, 0x07, 0xd2, 0xe4, 0x20, 0x2a, 0x89, 0x49,
+0xf8, 0x6d, 0xbc, 0x4c, 0x17, 0xd1, 0x5f, 0x8a,
+0xa4, 0x9e, 0x74, 0x75, 0xf6, 0x75, 0x6a, 0x8d,
+0xaa, 0x64, 0x06, 0x10, 0x6e, 0xc3, 0x00, 0x10,
+0x00, 0xfe, 0x05, 0xc0, 0xcf, 0x00, 0x15, 0x33,
+0x91, 0x07, 0x5a, 0x84, 0x75, 0x7e, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_32px[3589] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71,
+0xde, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x03,
+0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0xdb, 0x4f, 0x68, 0x1d, 0x55, 0x14, 0xc7, 0xf1,
+0xcf, 0x2b, 0x56, 0xac, 0xa2, 0xb5, 0x63, 0x25,
+0xfe, 0xad, 0xa2, 0x48, 0xcd, 0xc2, 0xea, 0x4a,
+0xc4, 0x4d, 0x9d, 0xa2, 0x82, 0x21, 0x88, 0x48,
+0xe9, 0x22, 0x62, 0xed, 0xc2, 0x85, 0x2d, 0xb4,
+0x53, 0x14, 0x75, 0x53, 0x37, 0x2e, 0xc4, 0x85,
+0x88, 0x53, 0x41, 0x4a, 0x41, 0x45, 0x91, 0xe2,
+0xc2, 0xe0, 0xa2, 0x0a, 0x56, 0xa1, 0x77, 0x61,
+0x75, 0x21, 0x28, 0x5a, 0x05, 0x15, 0x51, 0x0b,
+0xfe, 0x29, 0x52, 0x19, 0xad, 0x9a, 0xa2, 0x29,
+0x18, 0x37, 0x37, 0x70, 0x79, 0x34, 0x69, 0xe2,
+0x4b, 0xd2, 0xf7, 0xe7, 0x1e, 0x78, 0x0c, 0x73,
+0xce, 0xdc, 0x3b, 0x73, 0xbe, 0x73, 0xef, 0x3d,
+0xbf, 0x3b, 0xf0, 0x5a, 0x53, 0x53, 0x53, 0x06,
+0xd9, 0x96, 0x19, 0x70, 0xcb, 0x00, 0x32, 0x80,
+0x0c, 0x20, 0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c,
+0x20, 0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20,
+0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20, 0x03,
+0xc8, 0x00, 0x32, 0x80, 0x0c, 0x60, 0xb0, 0xec,
+0xac, 0x4e, 0x1a, 0xb7, 0x5a, 0xad, 0x45, 0x7f,
+0xc0, 0xa2, 0xac, 0x2f, 0xc1, 0x5a, 0x7c, 0xdb,
+0x84, 0xea, 0xc7, 0xf6, 0x78, 0xa7, 0x5f, 0xb5,
+0x5b, 0x9d, 0x74, 0xb0, 0x98, 0x00, 0x8a, 0xb2,
+0x3e, 0x1f, 0x2f, 0xe0, 0x3e, 0x4c, 0xdf, 0xe8,
+0x6d, 0x6c, 0x6d, 0x42, 0xf5, 0x43, 0x5f, 0x03,
+0x28, 0xca, 0x7a, 0x05, 0x0e, 0xe2, 0x96, 0x53,
+0x84, 0x8f, 0xe1, 0xf6, 0x26, 0x54, 0x87, 0x17,
+0x02, 0x40, 0xb7, 0xae, 0x01, 0x8f, 0x26, 0xc9,
+0x7f, 0x8c, 0xe7, 0x31, 0x11, 0xcf, 0x2f, 0xc6,
+0xb6, 0x85, 0xba, 0x51, 0x57, 0x8d, 0x80, 0xa2,
+0xac, 0xcf, 0xc6, 0x08, 0x9e, 0xc2, 0x30, 0x8e,
+0xe2, 0x5a, 0xdc, 0x81, 0x37, 0xb0, 0x1c, 0xfb,
+0xb0, 0x03, 0x7f, 0x37, 0xa1, 0x9a, 0xe8, 0xb7,
+0x11, 0xf0, 0x32, 0xde, 0xc4, 0xf5, 0xd3, 0x53,
+0x3c, 0x02, 0x49, 0x93, 0xdf, 0x8c, 0x67, 0xf0,
+0x4d, 0x51, 0xd6, 0x0f, 0xf6, 0x4d, 0x19, 0x2c,
+0xca, 0xfa, 0x4a, 0x8c, 0x4d, 0x0f, 0xae, 0x78,
+0xbc, 0xec, 0x14, 0xc9, 0x8f, 0x61, 0x0b, 0x2e,
+0xc5, 0xc6, 0xbe, 0x00, 0x50, 0x94, 0xf5, 0x93,
+0xd8, 0x99, 0xb8, 0xf6, 0xb5, 0x5d, 0x32, 0x81,
+0x03, 0x78, 0x0e, 0xaf, 0x46, 0xdf, 0x3f, 0x78,
+0xb8, 0xe7, 0xd7, 0x80, 0xa2, 0xac, 0x9f, 0xc6,
+0xe3, 0x89, 0xeb, 0x8f, 0x26, 0x54, 0x2b, 0x8b,
+0xb2, 0xde, 0x8d, 0xed, 0x33, 0x34, 0xfb, 0x17,
+0x9b, 0x9a, 0x50, 0x8d, 0xf7, 0x74, 0x19, 0x2c,
+0xca, 0x7a, 0x35, 0x3e, 0xc5, 0xe5, 0x6d, 0xa1,
+0x9b, 0x70, 0x18, 0xbb, 0xf0, 0x44, 0x9c, 0x02,
+0xd3, 0x76, 0x14, 0x5b, 0x9a, 0x50, 0xbd, 0xdb,
+0xd3, 0x3a, 0xa0, 0x28, 0xeb, 0x6b, 0x70, 0x35,
+0xce, 0xc1, 0xde, 0x36, 0x08, 0x9f, 0x61, 0x7d,
+0x13, 0xaa, 0xe3, 0x45, 0x59, 0x5f, 0x81, 0xd1,
+0x58, 0xfe, 0xbe, 0xc6, 0x5b, 0x4d, 0xa8, 0x4e,
+0xf4, 0xac, 0x10, 0x2a, 0xca, 0x7a, 0x15, 0x5e,
+0xc2, 0x3d, 0x89, 0xfb, 0x17, 0x0c, 0xb5, 0x5d,
+0xfa, 0x21, 0x46, 0x9a, 0x50, 0x1d, 0x9f, 0xad,
+0xbf, 0x9e, 0x02, 0x10, 0xe5, 0xed, 0x21, 0xac,
+0x9b, 0x63, 0x93, 0x8f, 0x70, 0xe7, 0x6c, 0x10,
+0x7a, 0x4d, 0x07, 0xec, 0x4a, 0x92, 0xff, 0x00,
+0xcf, 0xe2, 0x44, 0x12, 0x7f, 0x0d, 0x3f, 0x25,
+0xe7, 0x37, 0xc7, 0x95, 0xbf, 0x6f, 0xb6, 0xc3,
+0x9b, 0xe2, 0xf1, 0x08, 0x36, 0xe0, 0x93, 0xb8,
+0x06, 0xc0, 0x9e, 0x58, 0xd6, 0x46, 0x13, 0x08,
+0x5f, 0xe0, 0xb1, 0xae, 0xdd, 0x0e, 0xff, 0x0f,
+0xbb, 0x20, 0x11, 0x3a, 0x63, 0x78, 0x31, 0xbe,
+0x84, 0x3d, 0x51, 0xdf, 0xbf, 0x8e, 0xf5, 0x78,
+0x25, 0x8e, 0x94, 0xcd, 0x4d, 0xa8, 0x8e, 0x75,
+0x3d, 0x80, 0xa2, 0xac, 0x6f, 0xc0, 0x56, 0xec,
+0x6c, 0x42, 0x35, 0x99, 0xf8, 0x57, 0xe2, 0xa1,
+0xb8, 0xc2, 0xbf, 0x17, 0x4b, 0xdb, 0x6d, 0xb8,
+0x2a, 0xca, 0x5e, 0x49, 0xf2, 0xdb, 0x92, 0x11,
+0xb2, 0xb6, 0x09, 0xd5, 0x5d, 0x4b, 0xf1, 0x46,
+0x3a, 0x5e, 0x04, 0x63, 0xf2, 0x07, 0xb1, 0x1a,
+0xfb, 0xb1, 0xb1, 0x09, 0xd5, 0x64, 0x51, 0xd6,
+0x43, 0x78, 0x1f, 0xd7, 0x25, 0x4d, 0x7e, 0xc7,
+0x85, 0xc9, 0xf9, 0x9f, 0x78, 0x04, 0xb7, 0x46,
+0x79, 0x0b, 0x7f, 0x61, 0x5d, 0x13, 0xaa, 0xef,
+0xe7, 0xf2, 0x0c, 0x67, 0xb4, 0x0a, 0x5c, 0xb4,
+0x61, 0xf7, 0xb2, 0x38, 0x4f, 0x87, 0x13, 0xf7,
+0xfe, 0xa8, 0xd1, 0xf7, 0xe2, 0x81, 0x79, 0x76,
+0x79, 0x12, 0x77, 0x37, 0xa1, 0x7a, 0x67, 0xae,
+0x0d, 0xce, 0x78, 0x19, 0x6c, 0x1b, 0x01, 0x29,
+0x84, 0x1b, 0xb1, 0x66, 0x1e, 0xdd, 0x1d, 0xc1,
+0xfd, 0x4d, 0xa8, 0x0e, 0xcd, 0xe7, 0x19, 0xba,
+0x42, 0x07, 0xcc, 0x00, 0x61, 0xda, 0x46, 0xe2,
+0x66, 0x66, 0xbc, 0x2d, 0xfe, 0x55, 0xfc, 0xe4,
+0xb5, 0x02, 0x5f, 0xe2, 0x40, 0xba, 0x7e, 0xf4,
+0x14, 0x80, 0x59, 0x20, 0x9c, 0xc4, 0x50, 0x13,
+0xaa, 0xdf, 0x66, 0x88, 0x07, 0x8c, 0xa6, 0xd2,
+0x76, 0xa9, 0x01, 0x2c, 0x98, 0x0e, 0x68, 0x42,
+0xf5, 0x79, 0xac, 0xed, 0xbf, 0x26, 0xee, 0xe5,
+0x18, 0x2f, 0xca, 0xfa, 0xdc, 0x19, 0xe2, 0xe7,
+0xb5, 0x6d, 0x74, 0x96, 0xdc, 0x16, 0x5c, 0x0a,
+0x9f, 0xee, 0x4d, 0x27, 0xf1, 0xef, 0x4e, 0x27,
+0x73, 0x7b, 0x6a, 0x0a, 0xcc, 0x13, 0xc2, 0x30,
+0x7e, 0xee, 0x34, 0xf9, 0xae, 0xde, 0x0c, 0x2d,
+0xd6, 0x9c, 0xef, 0x99, 0xcd, 0x50, 0x9c, 0xf3,
+0x6b, 0xb0, 0x2a, 0xf9, 0xdd, 0x8b, 0x49, 0x5d,
+0x64, 0xad, 0xfc, 0x87, 0x89, 0x01, 0xb7, 0x0c,
+0x20, 0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20,
+0x03, 0xc8, 0x00, 0x32, 0x80, 0x0c, 0x20, 0x03,
+0xc8, 0x00, 0x32, 0x80, 0x81, 0xb4, 0xff, 0x06,
+0x00, 0xa5, 0x46, 0x44, 0x0a, 0xcc, 0xb9, 0x9e,
+0x9a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
+0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_24px[3358] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9,
+0x87, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x02,
+0x49, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0xd9, 0x4b, 0xa8, 0x4d, 0x51, 0x1c, 0xc7, 0xf1,
+0xcf, 0xb9, 0x88, 0xf2, 0xde, 0x94, 0x42, 0x06,
+0x24, 0x45, 0x77, 0x62, 0x60, 0x20, 0xc9, 0xbe,
+0x23, 0xe5, 0x31, 0xc2, 0x48, 0x37, 0x03, 0x49,
+0x26, 0xbb, 0xe4, 0x75, 0x07, 0x22, 0x49, 0x61,
+0x62, 0xcb, 0x4c, 0x49, 0xc8, 0x48, 0x52, 0x06,
+0x26, 0x6a, 0x9b, 0x92, 0xd7, 0x84, 0x99, 0x47,
+0x61, 0x22, 0xf6, 0x40, 0x21, 0xaf, 0xae, 0xc9,
+0x5f, 0x9d, 0xae, 0xeb, 0x71, 0x6e, 0xf7, 0x9c,
+0x7b, 0x6e, 0xad, 0x7f, 0x9d, 0xce, 0xe9, 0xb7,
+0xd6, 0x3e, 0x6b, 0x7d, 0xd7, 0xff, 0xb1, 0xfe,
+0xa7, 0xd3, 0x18, 0x1c, 0x1c, 0x34, 0x9e, 0xad,
+0xc7, 0x38, 0xb7, 0x04, 0x90, 0x00, 0x12, 0x40,
+0x02, 0x48, 0x00, 0x09, 0x20, 0x01, 0x24, 0x80,
+0x04, 0x90, 0x00, 0x12, 0xc0, 0x88, 0x6d, 0x62,
+0x2b, 0x93, 0x1b, 0x8d, 0xc6, 0xa8, 0x2c, 0x9a,
+0xe5, 0xe5, 0x2e, 0x1c, 0xc0, 0x74, 0xdc, 0xc0,
+0x40, 0x5d, 0x15, 0x35, 0xb4, 0xfa, 0x03, 0xab,
+0xd1, 0xca, 0x03, 0xa3, 0x01, 0x90, 0xe5, 0xe5,
+0x00, 0x4e, 0x0c, 0x91, 0x9f, 0x61, 0x5d, 0x5d,
+0x15, 0xaf, 0x5b, 0x05, 0xe8, 0x68, 0x08, 0x65,
+0x79, 0x39, 0x1f, 0x47, 0xf0, 0x1d, 0x5b, 0x71,
+0x29, 0x86, 0x3e, 0xe3, 0x4b, 0x57, 0xe7, 0x40,
+0x84, 0xcd, 0x53, 0x4c, 0xc6, 0x7b, 0x4c, 0xc5,
+0x76, 0x3c, 0xc4, 0x06, 0x5c, 0xcb, 0xf2, 0x72,
+0x47, 0x57, 0x02, 0x64, 0x79, 0x39, 0x05, 0x07,
+0x31, 0x33, 0xa4, 0x79, 0xb8, 0x88, 0xfb, 0x58,
+0x8f, 0xd3, 0x58, 0x1b, 0x40, 0xdd, 0x05, 0x90,
+0xe5, 0xe5, 0x66, 0xbc, 0xc4, 0x02, 0x3c, 0xc1,
+0xd1, 0xa6, 0xe1, 0x79, 0xb8, 0x87, 0x6d, 0xa8,
+0xb1, 0xbb, 0xd5, 0xef, 0x6f, 0x6b, 0x12, 0x67,
+0x79, 0x39, 0x0d, 0x2f, 0x30, 0x37, 0xa4, 0xe7,
+0x58, 0x86, 0xe3, 0xd8, 0xdf, 0x74, 0x80, 0xcf,
+0xb1, 0xa5, 0xae, 0x8a, 0x47, 0x5d, 0x93, 0xc4,
+0x59, 0x5e, 0xae, 0xc2, 0x2e, 0x9c, 0xc7, 0xa7,
+0x90, 0x17, 0xe3, 0x78, 0x5d, 0x15, 0x87, 0xb0,
+0x14, 0xfd, 0x11, 0xff, 0xcb, 0xeb, 0xaa, 0x78,
+0x34, 0x92, 0x75, 0xda, 0xe2, 0x81, 0x2c, 0x2f,
+0x4f, 0xc5, 0x09, 0xff, 0xc9, 0x4e, 0x06, 0xc4,
+0x6f, 0x36, 0xe6, 0x1e, 0xc8, 0xf2, 0x72, 0x5b,
+0x6c, 0xfe, 0x23, 0xae, 0xe3, 0x5b, 0x0c, 0x3d,
+0xc6, 0x87, 0xf8, 0x7c, 0x30, 0xcb, 0xcb, 0x9d,
+0xdd, 0xda, 0x4a, 0x6c, 0x8d, 0xf7, 0x7d, 0xb8,
+0x8d, 0x49, 0x91, 0xa8, 0x3b, 0xb1, 0x37, 0x20,
+0x2a, 0x5c, 0xed, 0x78, 0x2b, 0xd1, 0x74, 0xca,
+0xbd, 0x78, 0x5a, 0x57, 0xc5, 0x8f, 0x26, 0x6d,
+0x71, 0x5c, 0x46, 0xbf, 0x62, 0x60, 0x0f, 0x7a,
+0x63, 0xf3, 0x1b, 0xc3, 0x1b, 0xab, 0x71, 0x18,
+0x67, 0xea, 0xaa, 0xf8, 0x34, 0x26, 0x1e, 0xc8,
+0xf2, 0xb2, 0x0f, 0x77, 0x71, 0x29, 0xcb, 0xcb,
+0x09, 0xa1, 0x9d, 0x8b, 0x76, 0xe0, 0x15, 0x56,
+0xc6, 0xd4, 0x5e, 0x7c, 0xc5, 0x39, 0x5c, 0xc1,
+0x9a, 0x28, 0xa7, 0xe5, 0x68, 0x6d, 0xbe, 0xe5,
+0x24, 0x9e, 0xd3, 0x77, 0xb6, 0x27, 0x62, 0xb9,
+0x37, 0xa4, 0xab, 0xb8, 0x8c, 0x5b, 0xff, 0xf1,
+0xf8, 0x5b, 0xf4, 0xd5, 0x55, 0xf1, 0xe4, 0x6f,
+0x93, 0xda, 0xde, 0xcc, 0x65, 0x79, 0xb9, 0x10,
+0x77, 0xb0, 0x24, 0xe4, 0x77, 0x51, 0xe7, 0x6f,
+0xc4, 0xe9, 0x2f, 0x0a, 0xfd, 0x07, 0x1e, 0x60,
+0x56, 0xcc, 0x3f, 0x56, 0x57, 0xc5, 0x9b, 0x7f,
+0xad, 0xd1, 0x91, 0x6e, 0x74, 0x18, 0x88, 0xc1,
+0xd8, 0xe8, 0x8c, 0x21, 0xfa, 0xcd, 0xb8, 0xa0,
+0xbe, 0xfe, 0xef, 0x1a, 0x1d, 0x29, 0xa3, 0x75,
+0x55, 0xbc, 0xc6, 0xba, 0x88, 0x7b, 0x68, 0x44,
+0x9c, 0xbf, 0x1d, 0xa2, 0x4f, 0x1b, 0x69, 0xa1,
+0x68, 0x7b, 0x19, 0x1d, 0x06, 0x62, 0x13, 0xae,
+0x35, 0x41, 0x5c, 0xc0, 0xc6, 0xd1, 0x4c, 0xd8,
+0xb6, 0xdc, 0xc4, 0xc3, 0x84, 0x53, 0xcb, 0x61,
+0x33, 0xa6, 0x37, 0x71, 0x78, 0x62, 0x05, 0x66,
+0xc7, 0xab, 0x3f, 0x12, 0xb8, 0x23, 0xd6, 0x48,
+0x7f, 0xf2, 0x25, 0x80, 0x04, 0x90, 0x00, 0x12,
+0x40, 0x02, 0x48, 0x00, 0x09, 0x60, 0xe4, 0xf6,
+0x73, 0x00, 0x83, 0x0c, 0xcc, 0x82, 0x48, 0x2a,
+0xcd, 0xea, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
+0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_48px[4042] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xe2, 0x98, 0x77,
+0x38, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x04,
+0xf5, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9b, 0x5d, 0x6c, 0x54, 0x45, 0x18, 0x86, 0x9f,
+0xb5, 0x20, 0x4a, 0x00, 0xf1, 0x14, 0x24, 0x41,
+0x34, 0x1a, 0xb5, 0x9a, 0xc8, 0x85, 0xc1, 0xa4,
+0x18, 0x63, 0x4c, 0x4f, 0x2f, 0x88, 0x31, 0x95,
+0x0b, 0x12, 0x8d, 0xca, 0x8f, 0xa0, 0x31, 0xf1,
+0x0f, 0x26, 0xa1, 0x46, 0x45, 0x13, 0x8b, 0x1a,
+0x7f, 0xa3, 0xe0, 0x41, 0x11, 0x13, 0x2f, 0x94,
+0x46, 0x24, 0x12, 0x04, 0x12, 0xb9, 0xb1, 0xc4,
+0x0e, 0x89, 0xd4, 0xa4, 0x5e, 0xa8, 0x51, 0x2e,
+0x8c, 0x11, 0x8d, 0x3f, 0x90, 0xd8, 0xc2, 0xc4,
+0xaa, 0x54, 0x4b, 0xac, 0xf5, 0xe2, 0x4c, 0xcd,
+0x7a, 0xdc, 0xd3, 0x9e, 0xb6, 0xbb, 0xcb, 0xee,
+0xf6, 0x7d, 0x6f, 0x9a, 0xee, 0xcc, 0xec, 0xd9,
+0x79, 0x9f, 0xce, 0xcc, 0xf7, 0x7d, 0xb3, 0xcd,
+0x0d, 0x0d, 0x0d, 0x21, 0x9d, 0x3e, 0x9d, 0x21,
+0x0b, 0x04, 0x40, 0x00, 0x24, 0x01, 0x10, 0x00,
+0x49, 0x00, 0x04, 0x40, 0x12, 0x00, 0x01, 0x90,
+0x04, 0x40, 0x00, 0x24, 0x01, 0x10, 0x00, 0x49,
+0x00, 0x04, 0x40, 0x12, 0x00, 0x01, 0x90, 0x04,
+0x40, 0x00, 0x24, 0x01, 0x10, 0x00, 0x49, 0x00,
+0x04, 0x40, 0x12, 0x00, 0x01, 0x90, 0x04, 0x40,
+0x00, 0x24, 0x01, 0x10, 0x00, 0x49, 0x00, 0x04,
+0x40, 0x12, 0x00, 0x01, 0x90, 0x26, 0xa6, 0x29,
+0xa5, 0x7c, 0xf3, 0x5c, 0x2e, 0x57, 0x51, 0x93,
+0x0d, 0xc2, 0xe8, 0x22, 0xe0, 0x7e, 0xa0, 0x09,
+0x98, 0x0d, 0x7c, 0x0b, 0xec, 0x06, 0xda, 0x9d,
+0x35, 0x03, 0x85, 0xc6, 0x94, 0xfa, 0x3f, 0x88,
+0x72, 0xa5, 0x7c, 0x40, 0x25, 0x01, 0x08, 0xc2,
+0xe8, 0x1e, 0x60, 0x33, 0x70, 0x56, 0x81, 0xe6,
+0xef, 0x80, 0x55, 0xce, 0x9a, 0x43, 0xe5, 0x06,
+0x30, 0x29, 0xb6, 0xa0, 0x20, 0x8c, 0x36, 0x02,
+0xdb, 0x52, 0xcc, 0x07, 0xb8, 0x18, 0x38, 0x18,
+0x84, 0xd1, 0xdd, 0xe5, 0xfe, 0x6c, 0x35, 0xbf,
+0x02, 0x82, 0x30, 0x6a, 0x01, 0xde, 0x1f, 0xc3,
+0x90, 0x7b, 0x9d, 0x35, 0xaf, 0x6b, 0x05, 0x14,
+0xc7, 0xfc, 0x1c, 0xf0, 0x62, 0xe2, 0xe5, 0xcf,
+0x81, 0x9b, 0x81, 0xd5, 0xc0, 0x0f, 0x89, 0xb6,
+0x3f, 0x80, 0xaf, 0x15, 0x05, 0x15, 0xc7, 0xfc,
+0x05, 0xc0, 0x22, 0xe0, 0xf2, 0xbc, 0x97, 0x8f,
+0x01, 0x4d, 0xce, 0x9a, 0xdd, 0xc0, 0x57, 0xfe,
+0x20, 0xce, 0x37, 0xbf, 0xc5, 0x59, 0xd3, 0x59,
+0x33, 0x51, 0xd0, 0x69, 0x34, 0x7f, 0x39, 0xf0,
+0x26, 0xf0, 0x41, 0xa2, 0xe9, 0x90, 0xb3, 0xa6,
+0x2f, 0x08, 0xa3, 0xc5, 0x40, 0x07, 0x30, 0x2b,
+0x69, 0x7e, 0x10, 0x46, 0x06, 0x38, 0x0f, 0x78,
+0xc1, 0x59, 0xd3, 0xa7, 0x33, 0x60, 0xec, 0xe6,
+0x2f, 0x04, 0x3e, 0x05, 0xa6, 0x16, 0x68, 0x3e,
+0x06, 0xac, 0x00, 0xf6, 0xe5, 0x99, 0xff, 0x2b,
+0x70, 0xa3, 0xb3, 0xa6, 0x2b, 0x08, 0xa3, 0xf9,
+0x7e, 0x65, 0xcc, 0x04, 0x8e, 0x03, 0x1b, 0x4f,
+0x74, 0xae, 0xdb, 0xaa, 0x2d, 0x68, 0x6c, 0xba,
+0x2f, 0xc5, 0x7c, 0x80, 0xf9, 0x40, 0x67, 0xc2,
+0xfc, 0x25, 0xde, 0xfc, 0x33, 0x81, 0x9d, 0xde,
+0x7c, 0x80, 0x39, 0x40, 0xb3, 0xb6, 0xa0, 0xec,
+0x7f, 0xf9, 0xf3, 0x80, 0x1e, 0xe0, 0xea, 0x8c,
+0x43, 0x86, 0xcd, 0xef, 0x0e, 0xc2, 0x68, 0x86,
+0x37, 0xff, 0xfa, 0xbc, 0xf6, 0x41, 0xe0, 0x09,
+0x6d, 0x41, 0xd9, 0xcc, 0xbf, 0x14, 0x38, 0x08,
+0x74, 0x03, 0x0d, 0xc0, 0x42, 0xdf, 0xf4, 0x05,
+0xd0, 0x06, 0xec, 0x2d, 0x30, 0xec, 0x67, 0xe0,
+0x2d, 0xe0, 0x2f, 0xe0, 0x0e, 0x60, 0x41, 0xa2,
+0xfd, 0x71, 0x67, 0xcd, 0x53, 0x0a, 0x43, 0xb3,
+0x9b, 0x7f, 0x3e, 0xb0, 0x2c, 0xcf, 0x7c, 0x80,
+0x57, 0x9c, 0x35, 0xfb, 0x80, 0x4d, 0x05, 0x86,
+0xce, 0x03, 0x1e, 0x06, 0x1e, 0x2b, 0x60, 0xfe,
+0x2e, 0xe0, 0x69, 0x85, 0xa1, 0xd9, 0x6a, 0x3b,
+0xc3, 0xe6, 0x17, 0xd2, 0xb9, 0xfe, 0xe7, 0x43,
+0xfe, 0xaf, 0x3d, 0x8b, 0xde, 0x05, 0x56, 0x3a,
+0x6b, 0xfe, 0x16, 0x80, 0xd1, 0xd5, 0x33, 0x4a,
+0xe2, 0x74, 0x57, 0x10, 0x46, 0xd3, 0x9c, 0x35,
+0x83, 0xce, 0x9a, 0x35, 0xc0, 0x5a, 0xe0, 0xf7,
+0x94, 0xbe, 0xbf, 0x01, 0xeb, 0x81, 0xdb, 0x9c,
+0x35, 0xa7, 0x54, 0x8a, 0xc8, 0xbe, 0x0a, 0xa6,
+0x03, 0xfb, 0x81, 0x30, 0xa5, 0xcb, 0x66, 0x67,
+0xcd, 0xfa, 0xbc, 0xfe, 0x73, 0xfc, 0x56, 0x15,
+0x02, 0x73, 0x3d, 0xc4, 0x8f, 0x81, 0x9d, 0xce,
+0x9a, 0x13, 0xc9, 0xc1, 0xaa, 0x86, 0xfe, 0xdf,
+0xf0, 0x2b, 0x81, 0x75, 0xc4, 0x25, 0xe5, 0xe9,
+0xc0, 0xf7, 0xc0, 0x87, 0xc0, 0x52, 0xe0, 0xaa,
+0x94, 0x61, 0xad, 0xce, 0x9a, 0x4d, 0xe3, 0x79,
+0x9e, 0x00, 0xfc, 0xd7, 0xfc, 0x47, 0x81, 0x27,
+0x81, 0xba, 0x02, 0xcd, 0x03, 0xc0, 0xb4, 0x11,
+0x86, 0x6f, 0x70, 0xd6, 0x3c, 0x27, 0x00, 0xe3,
+0x37, 0x7f, 0xab, 0x4f, 0xb2, 0x26, 0xa2, 0x31,
+0x43, 0x10, 0x80, 0xd8, 0xfc, 0x95, 0x40, 0x7b,
+0x91, 0x3e, 0xd6, 0x98, 0x20, 0x4c, 0xfa, 0x3c,
+0x20, 0x08, 0xa3, 0x29, 0xc0, 0x33, 0x89, 0x97,
+0x3f, 0x02, 0x96, 0x00, 0xb7, 0x03, 0x47, 0x13,
+0x6d, 0xc7, 0x81, 0x6b, 0x00, 0x9b, 0xf2, 0x96,
+0x0f, 0x04, 0x61, 0x34, 0xbb, 0x52, 0xe6, 0x57,
+0x0d, 0x61, 0xe8, 0xb5, 0x89, 0x44, 0xe9, 0x08,
+0x70, 0x83, 0xb3, 0xe6, 0x00, 0x70, 0x92, 0xb8,
+0x72, 0x99, 0x6f, 0x7e, 0xb3, 0xb3, 0xa6, 0x1b,
+0x68, 0x29, 0x00, 0xe1, 0x28, 0x71, 0x39, 0xfa,
+0x97, 0x4a, 0x99, 0x5c, 0x35, 0xd4, 0x82, 0x2e,
+0x49, 0xfc, 0xde, 0xe5, 0xac, 0xe9, 0x0f, 0xc2,
+0x68, 0x29, 0xf1, 0x85, 0xfa, 0xd4, 0x84, 0xf9,
+0x5f, 0x06, 0x61, 0xd4, 0x46, 0x5c, 0x54, 0x5b,
+0x01, 0xbc, 0xed, 0x43, 0xce, 0x61, 0xf3, 0xbf,
+0xa9, 0xa4, 0xc9, 0x55, 0x63, 0x22, 0xd6, 0x14,
+0x84, 0xd1, 0x2d, 0x23, 0x98, 0x7f, 0x19, 0xb0,
+0x01, 0x68, 0x05, 0x0e, 0x03, 0x07, 0x80, 0x1d,
+0x95, 0x68, 0x7e, 0x59, 0x0f, 0xe1, 0x20, 0x8c,
+0xce, 0x01, 0x1e, 0x01, 0xda, 0x46, 0xca, 0x34,
+0x83, 0x30, 0xba, 0x10, 0xb8, 0x0e, 0x38, 0xe5,
+0xb7, 0x90, 0x0b, 0x80, 0xcf, 0x46, 0x78, 0x4c,
+0xbe, 0xf9, 0x33, 0xfc, 0xf9, 0x90, 0x9f, 0x0f,
+0x6c, 0x77, 0xd6, 0xac, 0x1e, 0xef, 0x1c, 0x4a,
+0x7d, 0x08, 0x97, 0x65, 0x0b, 0xf2, 0xe6, 0x77,
+0x00, 0x8d, 0x40, 0x63, 0x10, 0x46, 0x37, 0x39,
+0x6b, 0xfa, 0x13, 0x7d, 0xea, 0xfc, 0x61, 0xdb,
+0x9a, 0x17, 0xe7, 0x0f, 0x00, 0x2f, 0xfb, 0x72,
+0x43, 0xc3, 0x28, 0xe6, 0xd7, 0x03, 0x7b, 0x12,
+0xe6, 0xff, 0xe9, 0xf3, 0x86, 0x8a, 0x55, 0xc9,
+0x57, 0x40, 0xc2, 0xfc, 0x61, 0x59, 0xe2, 0x2b,
+0xc0, 0x7e, 0x6f, 0x7e, 0x0e, 0x78, 0x07, 0xb8,
+0x35, 0xe5, 0xad, 0x06, 0x53, 0x92, 0xaf, 0x5e,
+0xe2, 0x3a, 0xfe, 0x90, 0xdf, 0xef, 0xeb, 0x13,
+0xed, 0x6b, 0x9d, 0x35, 0xaf, 0x4e, 0x64, 0x0e,
+0x55, 0x9d, 0x07, 0xd4, 0x37, 0x6f, 0xa9, 0x03,
+0xba, 0x80, 0xc5, 0x05, 0x9a, 0xff, 0x85, 0x10,
+0x84, 0xd1, 0x32, 0xe0, 0xbd, 0x22, 0x3f, 0x7e,
+0x9b, 0xb3, 0x66, 0xa2, 0x89, 0x5b, 0x75, 0xe7,
+0x01, 0xce, 0x9a, 0x41, 0x60, 0x7b, 0x4a, 0x73,
+0x08, 0xec, 0xf7, 0xc5, 0xb4, 0xe5, 0x45, 0x7e,
+0xf4, 0x6b, 0xc4, 0x95, 0xcf, 0x8a, 0x57, 0x59,
+0x0e, 0xe1, 0x20, 0x8c, 0xee, 0x04, 0xde, 0x48,
+0x01, 0x6e, 0x89, 0xeb, 0xf9, 0x0d, 0x45, 0x78,
+0x64, 0x2f, 0xf0, 0xa0, 0xb3, 0xa6, 0x58, 0x59,
+0x73, 0xed, 0x94, 0x22, 0xfc, 0x57, 0x45, 0xda,
+0x33, 0xac, 0xba, 0x97, 0x80, 0xe7, 0x81, 0x35,
+0xc0, 0xb3, 0x29, 0xfd, 0x7f, 0x04, 0xb6, 0x00,
+0x57, 0x10, 0x5f, 0x9e, 0xf7, 0xf8, 0xe8, 0x67,
+0x8f, 0xb3, 0xe6, 0x64, 0x31, 0xe7, 0x50, 0x53,
+0xb5, 0xa0, 0x0c, 0x10, 0xfa, 0x80, 0x60, 0xf8,
+0x36, 0x6a, 0x94, 0xfe, 0x87, 0x7d, 0x04, 0xd4,
+0x5b, 0x4a, 0x83, 0x6a, 0xaa, 0x16, 0xe4, 0xac,
+0xd9, 0x01, 0xac, 0x02, 0xd2, 0xae, 0xfb, 0x66,
+0x11, 0x7f, 0x51, 0x36, 0x4b, 0xff, 0x85, 0x40,
+0x67, 0x10, 0x46, 0x73, 0xa9, 0x62, 0x95, 0x3d,
+0x13, 0x1e, 0xc5, 0xd4, 0x1c, 0xb0, 0xcb, 0x87,
+0xae, 0x59, 0xfa, 0x9f, 0xcd, 0xc8, 0x77, 0x00,
+0x02, 0x30, 0x0e, 0x08, 0x8b, 0x80, 0x8e, 0x0c,
+0x10, 0x8e, 0xf8, 0xf2, 0xc2, 0x4f, 0x02, 0x50,
+0x7c, 0x08, 0x8d, 0x1e, 0x42, 0x7d, 0x4a, 0xff,
+0x9a, 0x30, 0xbf, 0xec, 0x87, 0x70, 0x4a, 0x99,
+0x62, 0x4c, 0x07, 0xad, 0x4f, 0xda, 0x3e, 0x29,
+0x97, 0xf9, 0x93, 0xe2, 0x46, 0xac, 0x12, 0xa2,
+0x9d, 0x49, 0x11, 0x05, 0x8d, 0x73, 0x3b, 0xaa,
+0x89, 0x68, 0xa7, 0xa2, 0x57, 0x40, 0xde, 0x4a,
+0x98, 0x49, 0xe1, 0xa2, 0x1b, 0x40, 0x7f, 0x39,
+0xbf, 0x30, 0x55, 0x13, 0x5b, 0x90, 0x54, 0x25,
+0x5b, 0x90, 0x00, 0x48, 0x02, 0x20, 0x00, 0x92,
+0x00, 0x08, 0x80, 0x24, 0x00, 0x02, 0x20, 0x09,
+0x80, 0x00, 0x48, 0x02, 0x20, 0x00, 0x92, 0x00,
+0x08, 0x80, 0x24, 0x00, 0x02, 0x20, 0x09, 0x80,
+0x00, 0x48, 0x02, 0x20, 0x00, 0x92, 0x00, 0x08,
+0x80, 0x54, 0x74, 0xfd, 0x33, 0x00, 0xac, 0x57,
+0xf9, 0x90, 0x3b, 0x12, 0x4b, 0x91, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_blue_transparent_rgb_64px[4455] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xc3, 0x3e, 0x61,
+0xcb, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x06,
+0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9c, 0x7b, 0x88, 0x54, 0x55, 0x1c, 0xc7, 0x3f,
+0x9b, 0x9a, 0x89, 0xa5, 0x78, 0xd5, 0x12, 0xcd,
+0x8d, 0x74, 0xc9, 0x08, 0xc4, 0xf2, 0x49, 0x99,
+0xe4, 0x5d, 0xc5, 0x07, 0x24, 0x96, 0x46, 0x96,
+0xa9, 0xf4, 0x8f, 0x19, 0x5b, 0x72, 0x90, 0x10,
+0x93, 0x5e, 0x04, 0x45, 0xf6, 0x80, 0xbc, 0x52,
+0x12, 0x22, 0x41, 0x56, 0xd2, 0xe3, 0x0f, 0x89,
+0x1e, 0x96, 0xa5, 0x67, 0x4b, 0xac, 0x94, 0x20,
+0xa2, 0x87, 0x46, 0x6c, 0x49, 0x66, 0x82, 0xe8,
+0x09, 0xa1, 0x74, 0xb1, 0x7d, 0xf4, 0xc7, 0x9c,
+0xb1, 0x75, 0xbc, 0x33, 0x73, 0x67, 0x1d, 0x77,
+0xef, 0xcc, 0x7e, 0x3f, 0xff, 0xed, 0xcc, 0xb9,
+0x77, 0x66, 0xe7, 0xfb, 0xb9, 0xbf, 0xf3, 0x98,
+0x73, 0xa7, 0xa6, 0xbd, 0xbd, 0x1d, 0xd1, 0x73,
+0xb9, 0x48, 0x1f, 0x81, 0x04, 0x10, 0x12, 0x40,
+0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12,
+0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10,
+0x12, 0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04,
+0x10, 0x12, 0x40, 0x48, 0x00, 0x21, 0x01, 0x84,
+0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21, 0x01,
+0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21,
+0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00,
+0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48,
+0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40,
+0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12,
+0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10,
+0x12, 0x40, 0x48, 0x00, 0xd1, 0xad, 0xf4, 0xee,
+0xce, 0x17, 0xaf, 0xa9, 0xa9, 0xa9, 0xf8, 0x0f,
+0x30, 0x08, 0xa3, 0x01, 0xc0, 0x4c, 0x60, 0x0c,
+0x50, 0x03, 0x1c, 0x00, 0x1a, 0x9d, 0x35, 0x2e,
+0xc9, 0xf1, 0xdd, 0xfd, 0x63, 0xdd, 0x35, 0xdd,
+0xf9, 0x06, 0x2a, 0x59, 0x00, 0x1f, 0xfc, 0x93,
+0xc0, 0x0a, 0xa0, 0x5f, 0xce, 0xd3, 0xa7, 0x81,
+0xb7, 0x80, 0xc7, 0x9c, 0x35, 0xbf, 0x4b, 0x80,
+0x2a, 0x13, 0x20, 0x08, 0xa3, 0xf1, 0xc0, 0x36,
+0xa0, 0xb6, 0x48, 0xd3, 0x66, 0xc0, 0x38, 0x6b,
+0x36, 0x49, 0x80, 0x2a, 0x11, 0x20, 0x08, 0xa3,
+0x29, 0xc0, 0x0e, 0x60, 0x40, 0x09, 0x87, 0xbd,
+0x0a, 0xac, 0x70, 0xd6, 0xb4, 0x48, 0x80, 0x0a,
+0x16, 0x20, 0x08, 0xa3, 0x5a, 0xe0, 0x5b, 0x20,
+0xe8, 0xc4, 0xe1, 0xef, 0x03, 0x77, 0x38, 0x6b,
+0x4e, 0xa7, 0x49, 0x00, 0xcd, 0x02, 0x4a, 0x63,
+0x53, 0x81, 0xf0, 0x5b, 0x8a, 0x1c, 0x3b, 0x0f,
+0x58, 0xab, 0x69, 0x60, 0xe5, 0x0e, 0xfa, 0xa6,
+0x00, 0xb3, 0x63, 0x9e, 0xfa, 0x19, 0x98, 0xea,
+0xac, 0xe9, 0x03, 0x5c, 0x07, 0x7c, 0x5e, 0xa0,
+0x02, 0x3c, 0x27, 0x01, 0x2a, 0x2f, 0xf8, 0xec,
+0x67, 0xb4, 0x30, 0xe6, 0xe9, 0xe3, 0x40, 0xe8,
+0xac, 0xf9, 0xd2, 0xff, 0xfd, 0x2f, 0x50, 0x57,
+0xa0, 0xfc, 0x9f, 0x92, 0x00, 0x95, 0x15, 0xfe,
+0x50, 0x60, 0x67, 0x10, 0x46, 0xcb, 0x81, 0x49,
+0x31, 0x4d, 0x5e, 0x77, 0xd6, 0x1c, 0xf1, 0x6d,
+0xeb, 0x80, 0x46, 0x60, 0x44, 0xbe, 0xbe, 0x3f,
+0x08, 0xa3, 0xc9, 0x41, 0x18, 0x8d, 0x4a, 0xd3,
+0xff, 0xd8, 0x5b, 0x31, 0xe7, 0x0d, 0x3f, 0x00,
+0xbe, 0x00, 0xae, 0x05, 0x6e, 0x02, 0xfe, 0xc9,
+0x77, 0x01, 0x25, 0x0c, 0xbf, 0x2f, 0xb0, 0x15,
+0xa8, 0x0d, 0xc2, 0xe8, 0x25, 0xe0, 0x69, 0x67,
+0xcd, 0x71, 0x55, 0x80, 0xf4, 0xf2, 0xa2, 0x0f,
+0x1f, 0xe0, 0x62, 0x60, 0x50, 0x4c, 0x9b, 0x3b,
+0x83, 0x30, 0xba, 0xbe, 0x58, 0xf8, 0xfe, 0xef,
+0xd5, 0xc0, 0x68, 0xa0, 0x0f, 0xb0, 0x0a, 0x68,
+0x0a, 0xc2, 0x68, 0x95, 0x2a, 0x40, 0x3a, 0xaf,
+0xfe, 0x61, 0xc0, 0x3d, 0x09, 0x9a, 0x0e, 0x03,
+0xbe, 0x01, 0x7a, 0x15, 0x0a, 0x3f, 0x08, 0xa3,
+0xa9, 0xc0, 0x13, 0x39, 0x6d, 0x06, 0x02, 0xe3,
+0x54, 0x01, 0xd2, 0xc9, 0x8d, 0x31, 0xa1, 0xe6,
+0xa3, 0x58, 0xf8, 0x63, 0x81, 0xf7, 0x62, 0x2e,
+0xb6, 0x56, 0x60, 0x9d, 0x04, 0x48, 0xd7, 0x95,
+0xbf, 0x3c, 0x08, 0xa3, 0xab, 0x80, 0xe1, 0x31,
+0x4f, 0x9f, 0x02, 0x0e, 0x15, 0x39, 0x45, 0x63,
+0x4e, 0xf8, 0xf3, 0x81, 0xdd, 0xc0, 0xe0, 0x98,
+0xb6, 0x1b, 0x9c, 0x35, 0x07, 0xba, 0xfb, 0x7f,
+0xd6, 0x4a, 0xe0, 0xff, 0xe1, 0xaf, 0x03, 0xd6,
+0x00, 0x47, 0x81, 0xb7, 0x81, 0x95, 0x39, 0x4d,
+0x6e, 0xf3, 0x12, 0x7c, 0x52, 0xe0, 0x34, 0x2d,
+0xfe, 0xf9, 0x83, 0x7e, 0xe0, 0x78, 0x43, 0x9e,
+0x76, 0x3f, 0x00, 0x93, 0x9c, 0x35, 0xcd, 0x5a,
+0x0a, 0x4e, 0x57, 0xf8, 0xf9, 0x68, 0x72, 0xd6,
+0xd4, 0xf9, 0xb6, 0xeb, 0x01, 0x73, 0x1e, 0x2f,
+0x77, 0x18, 0xb8, 0xd9, 0x59, 0x73, 0x10, 0xb4,
+0x14, 0x5c, 0x09, 0xe1, 0x93, 0x33, 0x05, 0x7c,
+0xc8, 0x4f, 0xe7, 0x3a, 0xc3, 0x31, 0x60, 0x6e,
+0x36, 0xfc, 0x34, 0xd0, 0xa3, 0x2b, 0x40, 0x10,
+0x46, 0x73, 0x80, 0xed, 0x09, 0x9a, 0xb6, 0x02,
+0x23, 0x3b, 0x2c, 0xfa, 0xf4, 0x02, 0x36, 0x00,
+0x0d, 0x25, 0xbc, 0xdc, 0x2f, 0xc0, 0x7c, 0x67,
+0xcd, 0xfe, 0x8e, 0x0f, 0xaa, 0x02, 0x74, 0x23,
+0xce, 0x9a, 0x8f, 0x81, 0x67, 0x13, 0x8e, 0xf4,
+0xd7, 0x74, 0x38, 0xae, 0xd5, 0x59, 0xf3, 0x00,
+0xb0, 0x08, 0x38, 0x92, 0x40, 0x9e, 0x8d, 0xc0,
+0x84, 0xdc, 0xf0, 0x55, 0x01, 0x2a, 0x67, 0x0c,
+0x00, 0xd0, 0x0e, 0xd4, 0x3b, 0x6b, 0x1a, 0x73,
+0x8e, 0xed, 0x07, 0xdc, 0x0d, 0x2c, 0x00, 0x26,
+0xf8, 0xb5, 0x81, 0x93, 0xc0, 0x7e, 0xe0, 0x53,
+0x60, 0x93, 0xb3, 0xe6, 0xb7, 0xbc, 0x27, 0xd5,
+0x20, 0xb0, 0xcb, 0xc3, 0x1e, 0x41, 0xe6, 0x5b,
+0xbd, 0x31, 0x40, 0x9b, 0x2f, 0xcd, 0xbb, 0x80,
+0xfb, 0x13, 0x48, 0x70, 0x02, 0x98, 0xe6, 0xac,
+0xf9, 0xbe, 0x5c, 0xef, 0x47, 0x02, 0x74, 0x5d,
+0xf0, 0xc3, 0x81, 0x17, 0x7c, 0xd9, 0x8e, 0xeb,
+0xfa, 0x3e, 0x03, 0xfa, 0x02, 0xd3, 0x12, 0x8c,
+0xe2, 0x67, 0x3b, 0x6b, 0x7e, 0x94, 0x00, 0x15,
+0x22, 0x40, 0x10, 0x46, 0x33, 0x80, 0x77, 0xe8,
+0xdc, 0x4e, 0x9e, 0x7c, 0xa3, 0xf9, 0xfa, 0x72,
+0x54, 0x02, 0x0d, 0x02, 0x2f, 0x7c, 0xf8, 0xb7,
+0xfa, 0x91, 0x7e, 0x50, 0xc6, 0xd3, 0x0e, 0x01,
+0x76, 0xf9, 0x65, 0xde, 0x8a, 0xa6, 0xaa, 0x2b,
+0x80, 0x0f, 0x68, 0x2f, 0xe7, 0x6e, 0xdb, 0x26,
+0x2d, 0x95, 0x40, 0x15, 0xe0, 0xc2, 0x85, 0x5f,
+0x43, 0x66, 0x37, 0x6e, 0xbe, 0xf0, 0xff, 0x4a,
+0x70, 0x9a, 0xfd, 0xd5, 0x5e, 0x09, 0xaa, 0xb9,
+0x0b, 0x98, 0x0b, 0x4c, 0x8c, 0x79, 0xfc, 0x6b,
+0x60, 0x8c, 0xb3, 0x26, 0x00, 0x46, 0x01, 0x7b,
+0xf2, 0x1c, 0xbf, 0x15, 0x18, 0x9b, 0x60, 0x9d,
+0xa0, 0xbf, 0x17, 0xa1, 0x22, 0xa9, 0xe6, 0xfd,
+0x00, 0x77, 0xc5, 0x3c, 0x76, 0x10, 0x98, 0xe3,
+0xac, 0x39, 0xe1, 0xff, 0xbe, 0xdc, 0x87, 0x1c,
+0x17, 0xfe, 0x32, 0x67, 0x4d, 0x2b, 0xf0, 0x70,
+0x10, 0x46, 0x2d, 0xc0, 0x23, 0x31, 0xed, 0x4e,
+0x01, 0xb7, 0x3a, 0x6b, 0xac, 0x2a, 0x40, 0xfa,
+0x18, 0x1f, 0xf3, 0xd8, 0x6b, 0xd9, 0xf0, 0x0b,
+0xdc, 0xe0, 0x71, 0x26, 0xfc, 0x20, 0x8c, 0x66,
+0x05, 0x61, 0x74, 0x8d, 0xb3, 0xe6, 0x51, 0xce,
+0xdd, 0xd2, 0x9d, 0x0d, 0x7f, 0x57, 0x25, 0x7f,
+0x48, 0xd5, 0x2c, 0xc0, 0xa5, 0x31, 0x8f, 0xf5,
+0x29, 0x12, 0xfe, 0x2b, 0xc0, 0x12, 0x1f, 0xfe,
+0x40, 0xe0, 0x0d, 0xe0, 0xa7, 0x20, 0x8c, 0x5e,
+0xf6, 0xe3, 0x89, 0xb5, 0xd5, 0x14, 0x7e, 0xb5,
+0x0b, 0x10, 0xb7, 0xe1, 0x72, 0x69, 0x10, 0x46,
+0xf5, 0x05, 0xc2, 0x6f, 0x70, 0xd6, 0x64, 0x87,
+0xe5, 0x4f, 0x01, 0x43, 0xc9, 0x7c, 0x0f, 0xd0,
+0x00, 0x34, 0x91, 0xf9, 0xbe, 0x7f, 0x75, 0xb5,
+0x84, 0x9f, 0xba, 0x31, 0x80, 0x1f, 0xb9, 0xaf,
+0x04, 0x36, 0x3b, 0x6b, 0x4e, 0x96, 0x70, 0xdc,
+0x20, 0xe0, 0x0a, 0xe0, 0x68, 0x87, 0xdb, 0xb2,
+0xbf, 0x8b, 0xe9, 0x06, 0x46, 0x02, 0x3b, 0x63,
+0x4e, 0x71, 0x56, 0xf8, 0x7e, 0x27, 0xcf, 0x83,
+0x31, 0x15, 0x65, 0xa4, 0xb3, 0xc6, 0x54, 0xd3,
+0x55, 0x92, 0x9a, 0x75, 0x00, 0x1f, 0xfe, 0x46,
+0x32, 0x6b, 0xf2, 0xbb, 0x81, 0x79, 0x1d, 0x06,
+0x6b, 0xf9, 0x82, 0x1f, 0x47, 0xe6, 0x6e, 0x9b,
+0x99, 0x1d, 0xaa, 0xd9, 0x5e, 0xe0, 0x79, 0x5f,
+0xa6, 0x3f, 0x4c, 0xf0, 0x36, 0x72, 0xc3, 0x9f,
+0x0e, 0x7c, 0x14, 0x33, 0x7d, 0x6c, 0x06, 0xea,
+0x9c, 0x35, 0x87, 0xcb, 0xf9, 0x19, 0x68, 0x29,
+0xf8, 0xdc, 0xf0, 0xb3, 0xec, 0x03, 0x66, 0xe5,
+0x93, 0x20, 0x08, 0xa3, 0x65, 0xc0, 0xe6, 0x6c,
+0xbf, 0x1e, 0xc3, 0x07, 0x64, 0x36, 0x77, 0x0e,
+0x2e, 0xf0, 0x16, 0xb6, 0x01, 0x0b, 0x9d, 0x35,
+0xed, 0xfe, 0x0e, 0xa0, 0xfb, 0xc8, 0x6c, 0x07,
+0xbf, 0x24, 0xa6, 0xed, 0x1a, 0x67, 0x4d, 0xd9,
+0x6f, 0xed, 0xea, 0xf1, 0x02, 0xf8, 0xcd, 0x15,
+0x9b, 0x81, 0x7b, 0x63, 0x9a, 0xc4, 0x4a, 0x10,
+0x84, 0xd1, 0x22, 0x32, 0x3f, 0xc0, 0x70, 0xbe,
+0xb4, 0x91, 0xb9, 0x97, 0xef, 0x4f, 0x32, 0x7b,
+0xf8, 0xae, 0xce, 0xd3, 0xae, 0x11, 0x98, 0xe1,
+0xac, 0x69, 0x93, 0x00, 0x65, 0x64, 0x70, 0xfd,
+0x86, 0x5e, 0xc0, 0x16, 0x60, 0x71, 0x81, 0x66,
+0x67, 0x49, 0x10, 0x84, 0xd1, 0x10, 0xe0, 0x57,
+0xe0, 0xb2, 0x2e, 0x7a, 0x9b, 0x07, 0xc8, 0x7c,
+0x05, 0x7c, 0xec, 0x42, 0x9c, 0x5c, 0x4b, 0xc1,
+0xc5, 0x99, 0x0c, 0xec, 0xf0, 0xd3, 0x32, 0x80,
+0x25, 0x5d, 0x18, 0xfe, 0x41, 0x2f, 0xdf, 0x31,
+0xaa, 0x94, 0xb4, 0x74, 0x01, 0xc5, 0xaa, 0xc0,
+0x99, 0x4a, 0xe0, 0xc7, 0x0a, 0x8b, 0xbb, 0xe0,
+0xed, 0xed, 0x03, 0x16, 0x94, 0x7b, 0xd0, 0xa7,
+0x0a, 0x90, 0x83, 0x5f, 0x6e, 0x5d, 0x46, 0xf1,
+0x9d, 0xb6, 0x93, 0xfd, 0xfc, 0x7d, 0xf8, 0x79,
+0xbe, 0x64, 0xb1, 0x5b, 0xb4, 0x4f, 0x02, 0x8f,
+0x93, 0xd9, 0xba, 0x7d, 0x98, 0x2a, 0x27, 0x4d,
+0xd3, 0xc0, 0xa4, 0x95, 0x20, 0x97, 0x3d, 0x5e,
+0xa0, 0x16, 0x60, 0x3d, 0x70, 0x7b, 0x91, 0xf6,
+0x87, 0xc8, 0xec, 0xe8, 0x9d, 0x48, 0x66, 0x0f,
+0xdf, 0x50, 0xe0, 0x6f, 0x32, 0xdf, 0xfc, 0x6d,
+0x07, 0xb6, 0x74, 0x65, 0xc9, 0xd7, 0x34, 0xf0,
+0xec, 0xd1, 0x7d, 0xa9, 0x12, 0x9c, 0x02, 0x6a,
+0xb3, 0x81, 0xe5, 0x99, 0x4e, 0xc6, 0xd1, 0x04,
+0x4c, 0x77, 0xd6, 0xfc, 0xd1, 0xdd, 0x57, 0xa0,
+0x06, 0x81, 0x9d, 0xeb, 0x0e, 0xb2, 0x1c, 0xee,
+0x78, 0xb5, 0xfa, 0xc5, 0x9c, 0x06, 0xbf, 0xb8,
+0x53, 0x88, 0xd1, 0x40, 0x63, 0x10, 0x46, 0x57,
+0xd2, 0xc3, 0x49, 0xdd, 0x2c, 0xc0, 0x4b, 0xb0,
+0x34, 0x41, 0x88, 0x00, 0x75, 0xfe, 0x37, 0xfb,
+0xe8, 0xa4, 0x04, 0x5f, 0xf9, 0x1f, 0x77, 0x90,
+0x00, 0x29, 0x93, 0xa0, 0x2d, 0x61, 0x88, 0x00,
+0xef, 0xe6, 0x5e, 0xc9, 0x25, 0x48, 0xd0, 0x9f,
+0xf2, 0xee, 0x15, 0x94, 0x00, 0x65, 0x94, 0x20,
+0x69, 0x88, 0xa3, 0xe2, 0xca, 0x79, 0x82, 0xe3,
+0x8f, 0x01, 0xb7, 0x38, 0x6b, 0xf6, 0x49, 0x80,
+0xca, 0x97, 0x60, 0x74, 0x89, 0x12, 0x94, 0x6d,
+0x5b, 0xb7, 0x04, 0xa8, 0x3c, 0x09, 0x14, 0x7e,
+0x5a, 0xa7, 0x81, 0x85, 0x38, 0xdf, 0x29, 0x9e,
+0x3f, 0xfe, 0x19, 0xe0, 0xcd, 0x34, 0x85, 0xaf,
+0x75, 0x80, 0x12, 0x28, 0x51, 0x82, 0xd0, 0x59,
+0x73, 0x28, 0xed, 0x57, 0xa0, 0xd6, 0x01, 0x2e,
+0x5c, 0x77, 0xd0, 0xe3, 0xa7, 0x78, 0x55, 0x27,
+0x40, 0x89, 0x12, 0x8c, 0xf0, 0x63, 0x02, 0x49,
+0x50, 0x2d, 0x5d, 0x40, 0x4c, 0x77, 0x30, 0x30,
+0x41, 0xd3, 0x66, 0x67, 0x4d, 0xb3, 0xba, 0x80,
+0x14, 0x0a, 0x20, 0xd4, 0x05, 0x08, 0x09, 0x20,
+0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08, 0x09,
+0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08,
+0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02,
+0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42,
+0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00,
+0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90,
+0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80,
+0x90, 0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x92,
+0xf2, 0xdf, 0x00, 0x13, 0x6e, 0xb4, 0xce, 0x04,
+0xe4, 0x5d, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x49,
+0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_16px[3066] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a,
+0xf4, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x01,
+0x25, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x97, 0xb1, 0x4a, 0x04, 0x31, 0x14, 0x45, 0xdf,
+0x8c, 0x62, 0x61, 0xb1, 0x6b, 0x65, 0xa5, 0xd8,
+0xd8, 0x5a, 0x09, 0x0a, 0x0a, 0xcb, 0x62, 0x2f,
+0xd8, 0x09, 0xf6, 0xfe, 0x86, 0xb5, 0xe0, 0x07,
+0xf8, 0x05, 0x62, 0xb3, 0x58, 0x88, 0x3f, 0xe0,
+0x76, 0xfe, 0x83, 0x62, 0x23, 0x16, 0x5a, 0xac,
+0x36, 0x76, 0xe7, 0x3e, 0x9b, 0x09, 0x84, 0x30,
+0x3a, 0xee, 0x38, 0xb0, 0x88, 0x09, 0xdc, 0x22,
+0x2f, 0x21, 0x39, 0x79, 0x37, 0x0f, 0x92, 0xc2,
+0xdd, 0x6d, 0x96, 0xad, 0xb4, 0x19, 0xb7, 0x0c,
+0x90, 0x01, 0x32, 0x40, 0x06, 0xc8, 0x00, 0x7f,
+0x03, 0xc0, 0xa5, 0xa1, 0x4b, 0xfd, 0x9a, 0x78,
+0xcf, 0xa5, 0x81, 0x4b, 0x6b, 0xad, 0x09, 0xdc,
+0xfd, 0x5b, 0x09, 0xf6, 0x04, 0x1f, 0x82, 0x3b,
+0x41, 0x3f, 0x8a, 0x0f, 0x05, 0xaf, 0x02, 0x17,
+0x48, 0x70, 0x2e, 0x58, 0x68, 0x5a, 0x2f, 0x55,
+0xd3, 0xe6, 0xbb, 0xd5, 0xe6, 0x5e, 0xe9, 0x56,
+0xb0, 0x28, 0x58, 0x16, 0x4c, 0xa2, 0x78, 0xd0,
+0xf5, 0xb4, 0x10, 0x4d, 0x16, 0x3c, 0x98, 0xd9,
+0x73, 0xd4, 0x1f, 0x98, 0xd9, 0x8d, 0x99, 0x1d,
+0x9a, 0xd9, 0x52, 0xcd, 0xfc, 0x7d, 0x33, 0x1b,
+0xb9, 0x34, 0xdf, 0xa5, 0x05, 0x2b, 0x82, 0xfb,
+0xe4, 0xa4, 0x21, 0x2b, 0x8f, 0x82, 0x13, 0xc1,
+0x5b, 0x32, 0x7e, 0x21, 0x98, 0xfb, 0xb5, 0x05,
+0x11, 0xc4, 0xaa, 0xe0, 0xa9, 0x26, 0xe5, 0xc7,
+0xd5, 0xf8, 0xa6, 0xe0, 0xbd, 0x0d, 0xc4, 0x8f,
+0xbd, 0x12, 0xac, 0xd7, 0x40, 0x8c, 0x83, 0xe7,
+0x82, 0xed, 0x1a, 0x88, 0x83, 0xce, 0x00, 0x22,
+0x88, 0x97, 0xaf, 0x2e, 0x9e, 0x60, 0x27, 0xb2,
+0xe7, 0xb4, 0x33, 0x0b, 0x12, 0x88, 0x8d, 0xa8,
+0xfc, 0x82, 0x2e, 0x43, 0xba, 0xab, 0xb2, 0x3d,
+0xeb, 0xa4, 0x0c, 0x1b, 0x20, 0x26, 0x6d, 0x2f,
+0x5e, 0xac, 0xa2, 0xed, 0xb3, 0xdc, 0xa5, 0x2d,
+0x33, 0x3b, 0x4a, 0xc2, 0x57, 0x45, 0x59, 0x8e,
+0xa7, 0x59, 0xa7, 0xc8, 0xff, 0x82, 0x0c, 0x90,
+0x01, 0xfe, 0x3d, 0xc0, 0xe7, 0x00, 0xd8, 0xf7,
+0x60, 0xce, 0x4d, 0x78, 0xb9, 0xef, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_32px[3475] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71,
+0xde, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x02,
+0xbe, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x99, 0x4f, 0x88, 0x4d, 0x71, 0x14, 0xc7, 0x3f,
+0x6f, 0x64, 0x98, 0x99, 0x26, 0x4d, 0xcd, 0x34,
+0x8a, 0x11, 0x76, 0x16, 0x63, 0xac, 0x64, 0x23,
+0x25, 0x4d, 0x9a, 0x28, 0x65, 0xa3, 0x34, 0x65,
+0xc1, 0x86, 0x8d, 0x94, 0x2c, 0xb0, 0xb1, 0x62,
+0x23, 0x51, 0xa3, 0x2c, 0x10, 0x66, 0xca, 0x42,
+0x09, 0x85, 0xd2, 0x8c, 0x05, 0x8a, 0xb2, 0x60,
+0xca, 0xbf, 0xcd, 0x4c, 0x31, 0x83, 0x86, 0xf4,
+0x30, 0x53, 0x5e, 0xf8, 0x5a, 0x38, 0xb7, 0x7e,
+0xdd, 0x9e, 0x19, 0xd3, 0xdc, 0x7b, 0xdf, 0x9d,
+0x79, 0xe7, 0x5b, 0xaf, 0xd7, 0xef, 0x9c, 0xdb,
+0xbb, 0xf7, 0x7c, 0x7e, 0x7f, 0xce, 0x39, 0xf7,
+0x15, 0x24, 0x51, 0xcd, 0xaa, 0xa1, 0xca, 0xe5,
+0x00, 0x1c, 0x80, 0x03, 0x70, 0x00, 0x0e, 0xc0,
+0x01, 0x38, 0x00, 0x07, 0xe0, 0x00, 0x1c, 0x80,
+0x03, 0x70, 0x00, 0x0e, 0xc0, 0x01, 0x38, 0x00,
+0x07, 0xe0, 0x00, 0x1c, 0x80, 0x03, 0x70, 0x00,
+0x79, 0xd3, 0x62, 0x60, 0x03, 0xb0, 0xb4, 0xda,
+0x00, 0x34, 0x02, 0x97, 0x81, 0x51, 0xe0, 0x3e,
+0xf0, 0x16, 0xb8, 0x05, 0xb4, 0x25, 0x79, 0x93,
+0x42, 0x4e, 0xff, 0x17, 0xa8, 0x03, 0xfa, 0x81,
+0x75, 0x65, 0x7c, 0x63, 0xc0, 0x26, 0xe0, 0xf9,
+0x5c, 0x5e, 0x01, 0x07, 0x83, 0xe0, 0x9f, 0x02,
+0x67, 0x80, 0x71, 0x1b, 0xb7, 0x00, 0x7b, 0xe7,
+0xea, 0x16, 0xa8, 0x05, 0xb6, 0x01, 0x3b, 0x6c,
+0xfc, 0x1e, 0x58, 0x0f, 0xdc, 0x33, 0x1f, 0x40,
+0x1f, 0x70, 0x18, 0x68, 0x48, 0xe4, 0x8e, 0x92,
+0xf2, 0xf4, 0xe9, 0xd5, 0x5f, 0xfd, 0xb6, 0xef,
+0x11, 0x49, 0xdb, 0x25, 0x95, 0x6c, 0xdc, 0x2b,
+0x69, 0x9e, 0xa4, 0x0b, 0x92, 0x46, 0x25, 0xed,
+0x9e, 0xe9, 0x3d, 0xf3, 0x14, 0x7c, 0x9b, 0x26,
+0x57, 0x14, 0x7c, 0x77, 0x60, 0xbb, 0x33, 0xd3,
+0xfb, 0xe6, 0x65, 0x0b, 0x1c, 0x03, 0xf6, 0x07,
+0xe3, 0xbe, 0x98, 0x7f, 0x1c, 0xb8, 0x0b, 0x9c,
+0x02, 0x2e, 0x99, 0xed, 0x07, 0x70, 0x60, 0x2e,
+0x6c, 0x81, 0xe3, 0xb1, 0x99, 0x2e, 0x9a, 0xfd,
+0xf4, 0x24, 0xab, 0xe1, 0x97, 0x6d, 0x0d, 0x66,
+0xfb, 0x16, 0x68, 0x96, 0xf4, 0xae, 0x4c, 0x80,
+0x1d, 0x92, 0x0a, 0x92, 0x8e, 0x06, 0xfb, 0x3f,
+0xd2, 0xa8, 0xa4, 0xce, 0xa4, 0x9e, 0xa1, 0x92,
+0x75, 0xc0, 0x4a, 0x60, 0x39, 0xb0, 0x10, 0x38,
+0x07, 0x2c, 0x09, 0x7c, 0xcf, 0xac, 0xfa, 0x2b,
+0x5a, 0x05, 0xb8, 0xc5, 0xd2, 0xdf, 0x6b, 0x2b,
+0x86, 0x26, 0x66, 0x73, 0x21, 0xd4, 0x04, 0x9c,
+0xb7, 0x74, 0x17, 0xe9, 0x23, 0xd0, 0x1a, 0xbb,
+0xee, 0x11, 0xd0, 0x65, 0x10, 0x52, 0x53, 0xd6,
+0x00, 0x1a, 0x81, 0x07, 0xc0, 0xea, 0xff, 0xbc,
+0xfe, 0x09, 0xd0, 0x99, 0x26, 0x84, 0xac, 0xb3,
+0xc0, 0x91, 0x20, 0xf8, 0x87, 0xc0, 0xc9, 0xd8,
+0x72, 0xbe, 0x02, 0x8c, 0x04, 0xe3, 0xb5, 0x76,
+0xf2, 0xa7, 0xa7, 0x8c, 0x0f, 0xbd, 0x21, 0x3b,
+0xc8, 0x86, 0x24, 0xd5, 0x4a, 0xda, 0x69, 0x27,
+0xba, 0x24, 0x9d, 0x95, 0xd4, 0x22, 0x69, 0x4d,
+0x70, 0x30, 0x0e, 0x9a, 0x2d, 0xb5, 0x67, 0xca,
+0x1a, 0xc0, 0x67, 0x0b, 0x6c, 0x58, 0xd2, 0xae,
+0x58, 0xf0, 0x05, 0x49, 0x57, 0x25, 0x7d, 0x90,
+0x74, 0x42, 0xd2, 0xed, 0xb4, 0x83, 0x4f, 0x12,
+0x40, 0xbb, 0xa4, 0x1e, 0x9b, 0xd5, 0xd0, 0xbe,
+0x48, 0xd2, 0x21, 0xcb, 0xe9, 0x5b, 0x25, 0x0d,
+0x94, 0x49, 0x79, 0x51, 0xf0, 0xfb, 0x02, 0xdb,
+0xf5, 0xac, 0x26, 0x25, 0xa9, 0xe0, 0xc7, 0xec,
+0xc1, 0x6f, 0x04, 0x10, 0x5a, 0x25, 0xbd, 0x89,
+0x05, 0xfb, 0x25, 0x36, 0xfe, 0x2a, 0x69, 0x8f,
+0xd5, 0xf6, 0x91, 0xbe, 0x49, 0x5a, 0x31, 0x5b,
+0x00, 0xd4, 0x48, 0x7a, 0x11, 0x0b, 0x2a, 0x82,
+0x70, 0x51, 0xd3, 0x57, 0x49, 0xd2, 0xe6, 0x2c,
+0xb7, 0x65, 0x12, 0x69, 0xb0, 0xdd, 0x5e, 0x5e,
+0x34, 0x07, 0xb6, 0x9b, 0x40, 0x07, 0xb0, 0x6c,
+0x1a, 0xbf, 0x33, 0x0c, 0x74, 0x5b, 0x9a, 0xcc,
+0x4c, 0x49, 0xd5, 0x01, 0xe5, 0x20, 0x44, 0xea,
+0xb2, 0x66, 0xe6, 0x5a, 0xcc, 0xff, 0x0a, 0xe8,
+0xb1, 0xb7, 0x3f, 0x2f, 0xad, 0xd9, 0x29, 0x65,
+0x5e, 0x8f, 0x26, 0xb8, 0x9c, 0xc2, 0xb3, 0x20,
+0x5c, 0xd2, 0x4d, 0x93, 0xf8, 0xfb, 0x25, 0xd5,
+0x57, 0xb2, 0x1f, 0x49, 0xb2, 0x10, 0x1a, 0x04,
+0x36, 0x02, 0x9f, 0x02, 0xdb, 0x7c, 0x9b, 0xf9,
+0xfa, 0x7f, 0xf8, 0x1b, 0xec, 0x9a, 0xca, 0x29,
+0x05, 0xaa, 0x53, 0xcd, 0x74, 0xe4, 0x7f, 0x6c,
+0x69, 0xb2, 0xa2, 0x1d, 0x69, 0x5a, 0xbd, 0x40,
+0xb9, 0x33, 0x61, 0xc0, 0xba, 0xba, 0x09, 0x60,
+0x95, 0xbd, 0xee, 0x2e, 0x52, 0x61, 0xa5, 0xd9,
+0x0c, 0x4d, 0x05, 0x21, 0x17, 0x4a, 0xbb, 0x1b,
+0xac, 0x03, 0x16, 0xc4, 0x6c, 0xdf, 0x81, 0x9f,
+0xd5, 0x02, 0xc0, 0xff, 0x1b, 0x74, 0x00, 0x0e,
+0xc0, 0x01, 0x38, 0x00, 0x07, 0xe0, 0x00, 0x1c,
+0x80, 0x03, 0x70, 0x00, 0x0e, 0xc0, 0x01, 0x38,
+0x00, 0x07, 0x90, 0x43, 0xfd, 0x19, 0x00, 0xb2,
+0x95, 0x14, 0x60, 0x77, 0x8c, 0x0e, 0x76, 0x00,
+0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
+0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_24px[3266] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30,
+0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9,
+0x87, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x01,
+0xed, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x99, 0x3d, 0x68, 0x14, 0x51, 0x10, 0x80, 0xbf,
+0x8b, 0xd1, 0x68, 0x12, 0x2c, 0x44, 0x1b, 0xbd,
+0x2a, 0xd8, 0x89, 0x45, 0x1a, 0x1b, 0x2d, 0xc4,
+0x4a, 0x10, 0xec, 0x62, 0xa5, 0x90, 0x22, 0xa4,
+0x15, 0xc4, 0x42, 0x6d, 0xd2, 0x46, 0x6b, 0x9b,
+0x14, 0x36, 0x62, 0x02, 0x8a, 0x22, 0xd8, 0x05,
+0x22, 0x16, 0x56, 0x5a, 0x28, 0x88, 0x08, 0x81,
+0x1c, 0x2a, 0x58, 0x18, 0x25, 0x85, 0x3f, 0xa8,
+0x91, 0x24, 0x9f, 0xcd, 0x0b, 0x2c, 0x9b, 0x4b,
+0x30, 0xeb, 0xee, 0x7a, 0x07, 0x33, 0xb0, 0xec,
+0xce, 0xc0, 0xbe, 0x99, 0x6f, 0x76, 0xde, 0xbc,
+0xb7, 0xbb, 0x0d, 0x95, 0x6e, 0x96, 0x1e, 0xba,
+0x5c, 0x02, 0x20, 0x00, 0x02, 0x20, 0x00, 0x02,
+0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x20, 0x00,
+0x02, 0xa0, 0xeb, 0x00, 0xc6, 0x81, 0x05, 0x60,
+0x11, 0x98, 0x02, 0xf6, 0x15, 0x1e, 0x49, 0xad,
+0xfb, 0xb8, 0xea, 0x46, 0x59, 0x50, 0x9b, 0x45,
+0xc6, 0xab, 0xfb, 0x09, 0x1c, 0x04, 0x26, 0x80,
+0x15, 0x60, 0x04, 0xb8, 0x9d, 0xec, 0x3f, 0x81,
+0xe5, 0x4e, 0x2f, 0xa1, 0x71, 0xe0, 0x0d, 0xd0,
+0x07, 0x2c, 0x01, 0x03, 0xc0, 0x79, 0xe0, 0x05,
+0x70, 0x06, 0xb8, 0x0f, 0x8c, 0x76, 0x6a, 0x09,
+0xed, 0x56, 0x5b, 0x6d, 0x4a, 0xe7, 0x99, 0x7a,
+0x40, 0xbd, 0x9b, 0xf4, 0xb9, 0xed, 0x8e, 0x5d,
+0x47, 0xf0, 0x67, 0xd5, 0x8f, 0xea, 0x2f, 0xf5,
+0xb5, 0x3a, 0x91, 0x01, 0x78, 0xa7, 0xbe, 0x4d,
+0xd7, 0x4b, 0xea, 0xe1, 0x4e, 0x03, 0x18, 0x54,
+0x3f, 0x67, 0x02, 0x6e, 0xa9, 0xbd, 0xea, 0xa4,
+0xba, 0x9a, 0xb3, 0x0f, 0x17, 0xf1, 0xd1, 0xa8,
+0xf0, 0xbb, 0xd0, 0x31, 0xe0, 0x04, 0xb0, 0x1f,
+0xb8, 0x08, 0xf4, 0x27, 0xfb, 0x75, 0xe0, 0x0a,
+0x30, 0x04, 0x1c, 0x4f, 0xf3, 0xe1, 0x71, 0xd1,
+0x49, 0x5c, 0x55, 0xe6, 0x6f, 0xb8, 0xb5, 0x4c,
+0x96, 0xe5, 0xab, 0x8a, 0xe0, 0xcf, 0xa5, 0x20,
+0xbf, 0xab, 0x0f, 0xd4, 0xdf, 0x49, 0x7f, 0xa9,
+0x7e, 0xc9, 0x40, 0x8c, 0x95, 0xe1, 0xaf, 0x8a,
+0x36, 0x3a, 0x92, 0xce, 0x97, 0x81, 0x39, 0x60,
+0x27, 0xf0, 0x1c, 0x18, 0x03, 0x2e, 0x01, 0x5f,
+0x81, 0x27, 0xc0, 0x4c, 0x29, 0xde, 0x0a, 0x92,
+0x1f, 0x55, 0x77, 0xe4, 0x6c, 0x43, 0xea, 0x21,
+0xf5, 0x5e, 0xca, 0xf0, 0xab, 0x5c, 0xab, 0x7c,
+0x9a, 0x26, 0xee, 0x35, 0xb5, 0xff, 0x7f, 0x96,
+0xd0, 0x29, 0xf5, 0x87, 0x3a, 0x9d, 0x81, 0xb8,
+0x99, 0x82, 0x5d, 0x4b, 0xdb, 0x82, 0x75, 0x59,
+0x56, 0x2f, 0xa8, 0xb3, 0x99, 0x6e, 0x33, 0x50,
+0x66, 0xc9, 0x6e, 0xf7, 0x86, 0x9e, 0x4c, 0x66,
+0x4d, 0x10, 0xa7, 0xfd, 0x3b, 0x59, 0x54, 0x8f,
+0x94, 0x3d, 0xe7, 0x8a, 0xdc, 0xd4, 0xcc, 0x65,
+0x79, 0xbd, 0xcf, 0x3f, 0x54, 0xdf, 0x67, 0xec,
+0x2b, 0xa9, 0x7c, 0xe6, 0xd5, 0xa9, 0x54, 0x5e,
+0x74, 0x02, 0x40, 0x3b, 0x88, 0x35, 0x75, 0x6f,
+0x1b, 0xfb, 0x23, 0x75, 0x57, 0x95, 0x8b, 0x65,
+0xd1, 0x2e, 0xf4, 0x01, 0x38, 0x09, 0xb4, 0x92,
+0xde, 0x00, 0xee, 0x00, 0x9f, 0x72, 0xf6, 0x41,
+0xa0, 0xb7, 0xd2, 0x2d, 0xe2, 0x3f, 0x66, 0x60,
+0xb3, 0x8c, 0x37, 0xd5, 0x5b, 0x65, 0x76, 0x9b,
+0x2a, 0x17, 0xb2, 0xda, 0xcb, 0xa6, 0x8a, 0xbd,
+0x50, 0x1f, 0xb0, 0x27, 0xa3, 0x7f, 0x03, 0x56,
+0xeb, 0x78, 0xc9, 0x68, 0xc4, 0x4f, 0xbe, 0x00,
+0x08, 0x80, 0x00, 0x08, 0x80, 0x00, 0x08, 0x80,
+0x00, 0x28, 0x2e, 0x7f, 0x06, 0x00, 0x7e, 0x07,
+0xde, 0xa0, 0x65, 0x46, 0xd5, 0x06, 0x00, 0x00,
+0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_48px[3908] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xe2, 0x98, 0x77,
+0x38, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x04,
+0x6f, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9b, 0x5f, 0x8c, 0x5c, 0x53, 0x1c, 0xc7, 0x3f,
+0xdb, 0xad, 0x62, 0xd2, 0x76, 0xb1, 0xaa, 0x49,
+0x35, 0x52, 0xd4, 0x9f, 0xa4, 0x95, 0x34, 0x91,
+0x20, 0x24, 0x62, 0xfb, 0x20, 0x1e, 0x36, 0x12,
+0x1b, 0x84, 0xae, 0x8a, 0xfa, 0x93, 0x50, 0x4a,
+0x82, 0x48, 0xea, 0x85, 0x0a, 0xda, 0x86, 0x6a,
+0x22, 0x94, 0xc4, 0x4b, 0x49, 0x91, 0x4a, 0x79,
+0xe1, 0x05, 0x69, 0xb7, 0xa2, 0x15, 0x4b, 0x84,
+0x20, 0x11, 0x14, 0x29, 0x5d, 0x0f, 0x1d, 0xc4,
+0x16, 0xdd, 0xda, 0x18, 0x5f, 0x0f, 0xf3, 0x9b,
+0xf4, 0xf6, 0x66, 0xee, 0xce, 0x6c, 0x77, 0x76,
+0xf6, 0xce, 0xf8, 0x7e, 0x92, 0xc9, 0x66, 0xcf,
+0x39, 0xf7, 0xce, 0xdd, 0xdf, 0xe7, 0x9c, 0x7b,
+0xce, 0xf9, 0xdd, 0xbb, 0x1d, 0x92, 0x30, 0x53,
+0xc7, 0x34, 0x87, 0xc0, 0x02, 0x2c, 0xc0, 0x58,
+0x80, 0x05, 0x18, 0x0b, 0xb0, 0x00, 0x63, 0x01,
+0x16, 0x60, 0x2c, 0xc0, 0x02, 0x8c, 0x05, 0x58,
+0x80, 0xb1, 0x00, 0x0b, 0x30, 0x16, 0x60, 0x01,
+0xc6, 0x02, 0x2c, 0xc0, 0x58, 0x80, 0x05, 0x18,
+0x0b, 0xb0, 0x00, 0x63, 0x01, 0x16, 0x60, 0x2c,
+0xc0, 0x02, 0x8c, 0x05, 0x58, 0x80, 0xb1, 0x00,
+0x0b, 0x30, 0x16, 0x60, 0x01, 0xc6, 0x02, 0xc6,
+0xc3, 0x02, 0xe0, 0x09, 0xe0, 0x63, 0xe0, 0x5b,
+0xe0, 0x6d, 0xe0, 0x36, 0xe0, 0xd8, 0xa9, 0xba,
+0xa0, 0x8e, 0xff, 0xd1, 0xbf, 0x28, 0xdd, 0x0e,
+0x6c, 0x04, 0x8e, 0xab, 0x52, 0xf7, 0x03, 0x70,
+0x23, 0xb0, 0xcb, 0x23, 0x60, 0x72, 0x78, 0x18,
+0x78, 0x2e, 0x23, 0xf8, 0x00, 0xa7, 0x03, 0x3b,
+0x63, 0x34, 0x78, 0x04, 0x34, 0x98, 0x5e, 0xe0,
+0xcd, 0x71, 0xb4, 0xbf, 0x03, 0x78, 0xde, 0x23,
+0xa0, 0x41, 0x1d, 0x0c, 0x78, 0x32, 0x55, 0xf6,
+0x19, 0x70, 0x0d, 0x70, 0x13, 0xf0, 0x63, 0xaa,
+0x6e, 0x04, 0xf8, 0xa6, 0x99, 0x17, 0x38, 0xbd,
+0x8d, 0x83, 0x3f, 0x1f, 0x98, 0x0b, 0x9c, 0x93,
+0x28, 0xfb, 0x19, 0xb8, 0x0c, 0x18, 0x06, 0x2e,
+0x04, 0x4e, 0x48, 0x05, 0xbf, 0x17, 0xd8, 0xe1,
+0x39, 0x60, 0xe2, 0xf4, 0x03, 0xdf, 0xc7, 0xbd,
+0x3f, 0xc9, 0xae, 0x44, 0xf0, 0xdf, 0x01, 0x66,
+0x57, 0x09, 0xfe, 0x3d, 0xc0, 0x63, 0x40, 0x57,
+0x53, 0xae, 0x54, 0x52, 0xbb, 0x7d, 0x16, 0x4b,
+0x1a, 0x55, 0x75, 0x86, 0x24, 0xf5, 0x48, 0x1a,
+0x4e, 0x94, 0x0d, 0x4b, 0xba, 0x24, 0x8e, 0x9d,
+0x27, 0xe9, 0x40, 0x94, 0x17, 0x25, 0xdd, 0x39,
+0xd9, 0xd7, 0xdb, 0x8e, 0x23, 0x60, 0x25, 0x70,
+0x4c, 0x46, 0xdd, 0xbc, 0xe8, 0xe5, 0x95, 0x9e,
+0x7f, 0x00, 0xb8, 0x1c, 0xd8, 0x0d, 0xcc, 0x00,
+0x5e, 0x05, 0x66, 0x45, 0xdd, 0xc9, 0xc0, 0x52,
+0xdf, 0x82, 0xea, 0x67, 0x6e, 0x4c, 0xba, 0xe7,
+0xd7, 0xd9, 0xbe, 0x12, 0xfc, 0x41, 0x60, 0x26,
+0xf0, 0x3a, 0x70, 0x69, 0xa2, 0xbe, 0x04, 0xac,
+0xb1, 0x80, 0xfa, 0x58, 0x08, 0x7c, 0x02, 0x6c,
+0x03, 0x0a, 0x89, 0xf2, 0xcf, 0x81, 0xab, 0x32,
+0x8e, 0x19, 0x89, 0xba, 0x47, 0x81, 0xaf, 0x62,
+0x0e, 0x48, 0xb2, 0x26, 0x8e, 0xf7, 0x1c, 0x50,
+0xe3, 0xb3, 0x50, 0xd2, 0xbe, 0x8c, 0x7b, 0xfe,
+0xad, 0xd1, 0x66, 0x83, 0xc6, 0xc7, 0x56, 0x49,
+0xd3, 0x9a, 0x71, 0xfd, 0xad, 0x3e, 0x02, 0x16,
+0xc4, 0x0e, 0xf6, 0xd4, 0x8c, 0xfa, 0x13, 0xe3,
+0xe7, 0x03, 0xc0, 0xe6, 0x3a, 0xcf, 0xb9, 0x15,
+0x58, 0x0e, 0xfc, 0xeb, 0x65, 0x68, 0x6d, 0xf6,
+0xd7, 0xd8, 0x38, 0xdd, 0x12, 0x89, 0xb6, 0x12,
+0xb0, 0x02, 0x58, 0x05, 0xfc, 0x99, 0xd1, 0xf6,
+0x0f, 0xe0, 0x5e, 0xe0, 0x7a, 0x60, 0xd4, 0xa9,
+0x88, 0xfa, 0x29, 0x00, 0x6f, 0x01, 0x3d, 0x19,
+0xf5, 0x1b, 0x23, 0xb0, 0x24, 0x56, 0x37, 0x7d,
+0xd1, 0x7e, 0x4e, 0x48, 0xfc, 0x20, 0x56, 0x40,
+0xbf, 0x3a, 0x17, 0x54, 0x9b, 0x45, 0xc0, 0xdd,
+0xb1, 0xa3, 0x2d, 0x00, 0x7b, 0x81, 0xed, 0xc0,
+0x95, 0xc0, 0x92, 0x8c, 0x63, 0xee, 0x03, 0x9e,
+0xca, 0x65, 0xae, 0xa4, 0xc5, 0x04, 0x3c, 0x08,
+0x3c, 0x02, 0x74, 0x56, 0xa9, 0xfb, 0x9b, 0xb1,
+0xf3, 0xfa, 0xab, 0x81, 0x75, 0x16, 0x70, 0xf4,
+0x3c, 0x1b, 0x9b, 0xac, 0x89, 0x90, 0x3b, 0x09,
+0xad, 0x22, 0x60, 0x39, 0xf0, 0x52, 0x83, 0xce,
+0x95, 0x2b, 0x09, 0xad, 0xb0, 0x0a, 0x9a, 0x0e,
+0x3c, 0x9e, 0x2a, 0x7b, 0x3f, 0x76, 0xb1, 0xcb,
+0x80, 0xa1, 0x54, 0xdd, 0x2f, 0xc0, 0x45, 0xc0,
+0x40, 0xc6, 0xf9, 0xee, 0xe2, 0xc8, 0x2c, 0xa8,
+0x05, 0xd4, 0xe0, 0x62, 0xca, 0xa9, 0xe5, 0x0a,
+0xdf, 0x01, 0x57, 0x00, 0xef, 0x02, 0x7f, 0x01,
+0xa7, 0xa4, 0x82, 0xbf, 0x34, 0xd2, 0x0b, 0xbd,
+0x55, 0x24, 0x0c, 0xc5, 0xe4, 0xfd, 0x7b, 0x9e,
+0x7a, 0x57, 0xde, 0x39, 0x33, 0xf5, 0xfb, 0x6e,
+0xe0, 0x60, 0xac, 0x7a, 0xb6, 0x71, 0x38, 0xf1,
+0x56, 0x09, 0xfe, 0x17, 0xc0, 0x43, 0x94, 0x93,
+0x6a, 0x37, 0x00, 0x5b, 0x62, 0xc9, 0x59, 0x09,
+0xfe, 0x9e, 0x5c, 0xfd, 0x75, 0x2d, 0x90, 0x6a,
+0x58, 0x91, 0x4a, 0x13, 0xec, 0x95, 0x74, 0x6d,
+0x2a, 0xe5, 0x5c, 0x94, 0x74, 0x5e, 0xb4, 0x3f,
+0x4b, 0xd2, 0xa1, 0x28, 0xff, 0x4d, 0xd2, 0x6a,
+0x49, 0x5b, 0x22, 0x65, 0x91, 0xbb, 0xbf, 0xaf,
+0x99, 0x5f, 0xd6, 0x25, 0x69, 0xad, 0xa4, 0x19,
+0x35, 0xda, 0x9d, 0x26, 0x69, 0x99, 0xa4, 0xab,
+0x25, 0x75, 0x4b, 0x5a, 0x52, 0x23, 0x6f, 0x93,
+0x0c, 0xfe, 0x4c, 0x49, 0x9f, 0xa6, 0xea, 0x37,
+0xe7, 0xb9, 0x83, 0x35, 0x33, 0xf8, 0x83, 0x11,
+0x90, 0xed, 0x92, 0x0a, 0x55, 0xda, 0x74, 0x4a,
+0x5a, 0x2f, 0xe9, 0x9f, 0x44, 0xf0, 0x0e, 0x49,
+0x5a, 0x27, 0xe9, 0xeb, 0x3a, 0x82, 0xdf, 0x2d,
+0xe9, 0xbd, 0x54, 0xfd, 0x88, 0xa4, 0x33, 0xf2,
+0x2c, 0xa0, 0x19, 0xcb, 0xd0, 0x2e, 0xca, 0x8f,
+0xff, 0x2e, 0x48, 0x94, 0x0d, 0xc4, 0x24, 0x79,
+0xb0, 0xb2, 0x1c, 0x06, 0x5e, 0x01, 0xae, 0xcb,
+0x38, 0x47, 0x29, 0x63, 0xf3, 0x55, 0x8c, 0x14,
+0x82, 0xe2, 0x7e, 0xdf, 0x9d, 0xaa, 0x5f, 0x05,
+0x3c, 0x93, 0xeb, 0x19, 0x6e, 0x92, 0x0d, 0x77,
+0x4a, 0xfa, 0x30, 0xa3, 0xf7, 0xee, 0x48, 0x8c,
+0x84, 0x3e, 0x35, 0x9e, 0x4d, 0xad, 0x90, 0x4e,
+0x9f, 0xec, 0x65, 0x68, 0x09, 0x78, 0x31, 0xa3,
+0xae, 0x27, 0x92, 0x68, 0x05, 0xca, 0x0f, 0xd1,
+0x1b, 0xc9, 0xa6, 0xe8, 0xfd, 0xb9, 0xa7, 0x59,
+0x3b, 0xe1, 0x9b, 0x81, 0x17, 0x32, 0xf6, 0x1d,
+0x03, 0x94, 0xf3, 0xf9, 0x67, 0x37, 0xe0, 0x7b,
+0x8a, 0xc0, 0xfd, 0x0d, 0xdc, 0x35, 0xb7, 0x55,
+0x2a, 0xa2, 0x3f, 0x02, 0x53, 0x6b, 0xd4, 0x6d,
+0x00, 0xd6, 0x53, 0xce, 0xdf, 0xaf, 0xcd, 0x68,
+0xff, 0x13, 0xf0, 0x34, 0x70, 0x6e, 0xa4, 0x97,
+0xf7, 0xc7, 0xee, 0xf8, 0x8d, 0xd8, 0x9c, 0x61,
+0x01, 0x47, 0x27, 0x61, 0x18, 0x38, 0x89, 0xc3,
+0x4f, 0xa3, 0xc6, 0x6a, 0xff, 0x65, 0x6c, 0xbc,
+0x8a, 0xb4, 0x30, 0xcd, 0x4e, 0x45, 0xbc, 0x4c,
+0xf9, 0x2d, 0xe4, 0xac, 0xc7, 0x7d, 0xb3, 0x29,
+0xbf, 0x28, 0x5b, 0x4f, 0xfb, 0xc5, 0x94, 0x5f,
+0x31, 0x99, 0x63, 0x01, 0x8d, 0x93, 0xd0, 0x01,
+0xbc, 0xc6, 0x91, 0x6f, 0xa5, 0x8d, 0xd5, 0xfe,
+0x78, 0xa6, 0xf0, 0xdd, 0xfe, 0x56, 0x4f, 0x45,
+0xf4, 0x4b, 0x2a, 0x65, 0x2c, 0x21, 0x07, 0x63,
+0xf3, 0x36, 0x56, 0xfb, 0x3d, 0x92, 0xe6, 0xb7,
+0xfa, 0x5b, 0x1d, 0x53, 0x7d, 0x01, 0xb5, 0x24,
+0x74, 0x67, 0xb4, 0x6f, 0x8b, 0xe0, 0x37, 0x6b,
+0x27, 0x3c, 0x91, 0x89, 0xb9, 0xda, 0x44, 0xdb,
+0x07, 0x7c, 0x04, 0xec, 0xa3, 0x0d, 0xc8, 0xcb,
+0x13, 0xb1, 0xb6, 0x5f, 0xed, 0xe4, 0xfd, 0x81,
+0x4c, 0xdb, 0xaf, 0x76, 0xf2, 0x3e, 0x02, 0x2a,
+0xcc, 0xca, 0x48, 0xba, 0x11, 0x89, 0xbb, 0x51,
+0x0b, 0x30, 0x6d, 0x79, 0x0b, 0xb2, 0x00, 0x63,
+0x01, 0x16, 0x60, 0x2c, 0xc0, 0x02, 0x8c, 0x05,
+0x58, 0x80, 0xb1, 0x00, 0x0b, 0x30, 0x16, 0x60,
+0x01, 0xc6, 0x02, 0x2c, 0xc0, 0x58, 0x80, 0x05,
+0x18, 0x0b, 0xb0, 0x00, 0x63, 0x01, 0x16, 0x60,
+0x2c, 0xc0, 0x02, 0x4c, 0x63, 0xf9, 0x6f, 0x00,
+0xc5, 0x56, 0x3d, 0x4a, 0xf2, 0xbc, 0x47, 0xe8,
+0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
+0xae, 0x42, 0x60, 0x82,
+};
+
+Byte byHERE_logo_white_transparent_rgb_64px[4279] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
+0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+0x08, 0x06, 0x00, 0x00, 0x00, 0xc3, 0x3e, 0x61,
+0xcb, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
+0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e,
+0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00,
+0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68,
+0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20,
+0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66,
+0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
+0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7,
+0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b,
+0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b,
+0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10,
+0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1,
+0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88,
+0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c,
+0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2,
+0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1,
+0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd,
+0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
+0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48,
+0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e,
+0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4,
+0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10,
+0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01,
+0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0,
+0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08,
+0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87,
+0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80,
+0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08,
+0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
+0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26,
+0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63,
+0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27,
+0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99,
+0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01,
+0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44,
+0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a,
+0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b,
+0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49,
+0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0,
+0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
+0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b,
+0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84,
+0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1,
+0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78,
+0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81,
+0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e,
+0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36,
+0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79,
+0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3,
+0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0,
+0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
+0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea,
+0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe,
+0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1,
+0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a,
+0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25,
+0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7,
+0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0,
+0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c,
+0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5,
+0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61,
+0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
+0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7,
+0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d,
+0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4,
+0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62,
+0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff,
+0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9,
+0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e,
+0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89,
+0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64,
+0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35,
+0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
+0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10,
+0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2,
+0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80,
+0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f,
+0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49,
+0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e,
+0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00,
+0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4,
+0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05,
+0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42,
+0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
+0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42,
+0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f,
+0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86,
+0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e,
+0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1,
+0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08,
+0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a,
+0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8,
+0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20,
+0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35,
+0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
+0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c,
+0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82,
+0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2,
+0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8,
+0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64,
+0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0,
+0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7,
+0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43,
+0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4,
+0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38,
+0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
+0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03,
+0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04,
+0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77,
+0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c,
+0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24,
+0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84,
+0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4,
+0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32,
+0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12,
+0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4,
+0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
+0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12,
+0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c,
+0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9,
+0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c,
+0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3,
+0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b,
+0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53,
+0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5,
+0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32,
+0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1,
+0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
+0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34,
+0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b,
+0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17,
+0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11,
+0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2,
+0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4,
+0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88,
+0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67,
+0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19,
+0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31,
+0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
+0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca,
+0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a,
+0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa,
+0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9,
+0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53,
+0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa,
+0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9,
+0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54,
+0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59,
+0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0,
+0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
+0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab,
+0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd,
+0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d,
+0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43,
+0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94,
+0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c,
+0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3,
+0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29,
+0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c,
+0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48,
+0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
+0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59,
+0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c,
+0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7,
+0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16,
+0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b,
+0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e,
+0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e,
+0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa,
+0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa,
+0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c,
+0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
+0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb,
+0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5,
+0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9,
+0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f,
+0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d,
+0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21,
+0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52,
+0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b,
+0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6,
+0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7,
+0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
+0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8,
+0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee,
+0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5,
+0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d,
+0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11,
+0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6,
+0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9,
+0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae,
+0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17,
+0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd,
+0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
+0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d,
+0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a,
+0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5,
+0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10,
+0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29,
+0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67,
+0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b,
+0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e,
+0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a,
+0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5,
+0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
+0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc,
+0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33,
+0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5,
+0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf,
+0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5,
+0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad,
+0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61,
+0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3,
+0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59,
+0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb,
+0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
+0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1,
+0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89,
+0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a,
+0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65,
+0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9,
+0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5,
+0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad,
+0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69,
+0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07,
+0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27,
+0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
+0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77,
+0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44,
+0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39,
+0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e,
+0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f,
+0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d,
+0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a,
+0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed,
+0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b,
+0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1,
+0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
+0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e,
+0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16,
+0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a,
+0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1,
+0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e,
+0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec,
+0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5,
+0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc,
+0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16,
+0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd,
+0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
+0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6,
+0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe,
+0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07,
+0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d,
+0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28,
+0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66,
+0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e,
+0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90,
+0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2,
+0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57,
+0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
+0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15,
+0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8,
+0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed,
+0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d,
+0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5,
+0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85,
+0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58,
+0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d,
+0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb,
+0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78,
+0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
+0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf,
+0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e,
+0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e,
+0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56,
+0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97,
+0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9,
+0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9,
+0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4,
+0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5,
+0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b,
+0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
+0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01,
+0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49,
+0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9,
+0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d,
+0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07,
+0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d,
+0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb,
+0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef,
+0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c,
+0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9,
+0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
+0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f,
+0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a,
+0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b,
+0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6,
+0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f,
+0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54,
+0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67,
+0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e,
+0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b,
+0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef,
+0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
+0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8,
+0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8,
+0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74,
+0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb,
+0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9,
+0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9,
+0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79,
+0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d,
+0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7,
+0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd,
+0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
+0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41,
+0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe,
+0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77,
+0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85,
+0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43,
+0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86,
+0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f,
+0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64,
+0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb,
+0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb,
+0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
+0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea,
+0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6,
+0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4,
+0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d,
+0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20,
+0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53,
+0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff,
+0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d,
+0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52,
+0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80,
+0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
+0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea,
+0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17,
+0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x05,
+0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec,
+0x9c, 0x6b, 0x88, 0x15, 0x65, 0x18, 0xc7, 0x7f,
+0x67, 0x37, 0x0b, 0xb3, 0x5a, 0xda, 0x34, 0x64,
+0xb7, 0x35, 0x2a, 0xc9, 0x08, 0x96, 0xca, 0xd4,
+0x28, 0x13, 0xd4, 0x22, 0x33, 0x0a, 0x2b, 0x03,
+0x2b, 0x4c, 0xfa, 0x22, 0x89, 0xdd, 0x88, 0x20,
+0x93, 0x2c, 0xe8, 0x43, 0x64, 0xd1, 0x87, 0xe8,
+0xa2, 0x22, 0x11, 0xac, 0xd5, 0xd2, 0x05, 0x94,
+0xf2, 0x43, 0xd9, 0x65, 0xdb, 0x0c, 0x49, 0x85,
+0x8a, 0xe8, 0xa2, 0x21, 0xd6, 0xd2, 0xba, 0x09,
+0xb1, 0x5d, 0x16, 0x6a, 0x77, 0xb1, 0xdd, 0x7d,
+0xfa, 0xf0, 0xbe, 0x4b, 0xc3, 0x38, 0xe7, 0xcc,
+0x9c, 0xb3, 0xeb, 0x9e, 0x99, 0x39, 0xff, 0x1f,
+0x9c, 0x0f, 0x67, 0xe6, 0x9d, 0x73, 0x7b, 0x7e,
+0xf3, 0xbc, 0x97, 0x79, 0xe6, 0x14, 0xcc, 0x0c,
+0x51, 0xbb, 0xd4, 0xe9, 0x27, 0x90, 0x00, 0x42,
+0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00,
+0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90,
+0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80,
+0x90, 0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0x24,
+0x80, 0x90, 0x00, 0x42, 0x02, 0x08, 0x09, 0x20,
+0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08, 0x09,
+0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02, 0x08,
+0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42, 0x02,
+0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00, 0x42,
+0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90, 0x00,
+0x42, 0x02, 0x08, 0x09, 0x20, 0x24, 0x80, 0x90,
+0x00, 0x42, 0x02, 0x08, 0x09, 0x20, 0xaa, 0xca,
+0x49, 0xfa, 0x09, 0xc6, 0xcc, 0x19, 0xc0, 0xb5,
+0xc0, 0x2c, 0xa0, 0x00, 0x1c, 0x04, 0x3a, 0x81,
+0x3f, 0x24, 0x40, 0xfe, 0x03, 0xff, 0x24, 0x70,
+0x0f, 0x30, 0x39, 0xb4, 0xef, 0x18, 0xf0, 0x26,
+0xf0, 0x38, 0xf0, 0x4b, 0x9a, 0xbf, 0x44, 0x41,
+0x7f, 0x17, 0x5f, 0x11, 0xb3, 0x81, 0x1d, 0xc0,
+0x8c, 0x98, 0x76, 0x83, 0xc0, 0x83, 0xc0, 0x56,
+0x09, 0x90, 0x1f, 0xae, 0x00, 0x3e, 0xf4, 0x19,
+0x20, 0x29, 0xaf, 0xfa, 0x4c, 0x31, 0x24, 0x01,
+0xb2, 0xcd, 0x0c, 0xe0, 0x6b, 0xa0, 0xb1, 0x82,
+0x63, 0x77, 0x02, 0xb7, 0xf9, 0xee, 0x41, 0xb3,
+0x80, 0x8c, 0xb2, 0xb5, 0x44, 0xf0, 0xe3, 0xce,
+0xee, 0x9b, 0x80, 0xf5, 0x9a, 0x06, 0x66, 0x3b,
+0xf5, 0x2f, 0x89, 0xd8, 0xfe, 0x23, 0x30, 0x1f,
+0x98, 0x04, 0x5c, 0x0c, 0x7c, 0x56, 0x22, 0x03,
+0x3c, 0xab, 0x59, 0x40, 0xf6, 0xa8, 0x03, 0x46,
+0x80, 0xe5, 0x11, 0xfb, 0x7e, 0x07, 0x16, 0x01,
+0x47, 0xfd, 0xf3, 0x7f, 0x81, 0x99, 0x59, 0x49,
+0xff, 0xca, 0x00, 0xf1, 0x4c, 0x03, 0x3e, 0x01,
+0x56, 0x03, 0x73, 0x23, 0xf6, 0xbf, 0x16, 0x08,
+0xfe, 0x4c, 0x3f, 0xff, 0x6f, 0x2e, 0x11, 0xfc,
+0x79, 0xc0, 0xf9, 0xca, 0x00, 0xd9, 0xa0, 0x11,
+0xd8, 0x0d, 0x5c, 0x04, 0x5c, 0x05, 0xfc, 0x53,
+0xe2, 0x04, 0x4a, 0x12, 0xfc, 0x53, 0x80, 0x76,
+0x3f, 0x90, 0x7c, 0x09, 0x78, 0xca, 0x67, 0x90,
+0xea, 0x62, 0x66, 0x7a, 0x44, 0x3f, 0xda, 0x2c,
+0x9e, 0xa3, 0x66, 0x76, 0xa9, 0x99, 0x1d, 0x89,
+0xd8, 0xf7, 0x9e, 0x99, 0x9d, 0x1c, 0x78, 0xbd,
+0x0d, 0xa1, 0xfd, 0x7f, 0x99, 0xd9, 0x43, 0xd5,
+0xfe, 0x9e, 0x9a, 0x06, 0x46, 0x33, 0x1d, 0x38,
+0x02, 0xd4, 0x27, 0x68, 0x3b, 0x1c, 0xd1, 0x2e,
+0xdc, 0xe7, 0xcf, 0xf7, 0x19, 0x22, 0x9c, 0x71,
+0xdb, 0x80, 0xbb, 0x35, 0x06, 0x48, 0x1f, 0x57,
+0x26, 0x0c, 0x3e, 0x09, 0x82, 0xdf, 0x0a, 0xbc,
+0x1b, 0x11, 0xfc, 0x61, 0x60, 0xa3, 0x06, 0x81,
+0xe9, 0x62, 0x35, 0x70, 0x2e, 0xd0, 0x14, 0xb1,
+0x6f, 0x00, 0xe8, 0x8e, 0x39, 0xbe, 0x33, 0x14,
+0xfc, 0x65, 0xc0, 0xe7, 0xc0, 0x59, 0x11, 0x6d,
+0x5f, 0xc0, 0x5d, 0x38, 0xaa, 0x2a, 0xea, 0x02,
+0xfe, 0x67, 0x23, 0xb0, 0x0e, 0xf8, 0x0d, 0x78,
+0x0b, 0xb8, 0x3f, 0xb4, 0xff, 0x66, 0x2f, 0xc1,
+0xae, 0x12, 0xaf, 0x31, 0xe4, 0xf7, 0x77, 0xf9,
+0x81, 0xe3, 0x65, 0x45, 0xda, 0x7d, 0xe7, 0x67,
+0x15, 0x83, 0x12, 0x20, 0x5d, 0xc1, 0x2f, 0xc6,
+0xe1, 0xc0, 0xfc, 0xfe, 0x79, 0xdc, 0x05, 0x9e,
+0x4a, 0xe9, 0x01, 0xae, 0xf6, 0x92, 0x68, 0x1d,
+0x20, 0x03, 0xc1, 0x27, 0x34, 0x05, 0x7c, 0xd8,
+0x4f, 0xe7, 0x2a, 0xa1, 0x17, 0x58, 0x9a, 0x96,
+0xe0, 0x2b, 0x03, 0xc0, 0xf5, 0xc0, 0xfb, 0x09,
+0x47, 0xfa, 0x2d, 0x81, 0x45, 0x9f, 0x7a, 0xdf,
+0x87, 0xaf, 0x2d, 0xe3, 0xbd, 0x0e, 0xf9, 0x31,
+0xc1, 0x81, 0x34, 0xfd, 0x00, 0xb5, 0x9e, 0x01,
+0x3e, 0x00, 0x9e, 0x49, 0x38, 0xd2, 0x5f, 0x17,
+0x12, 0xe2, 0x5e, 0x60, 0x45, 0x40, 0x8a, 0x52,
+0xf2, 0x6c, 0x02, 0x2e, 0x4f, 0x5b, 0xf0, 0x95,
+0x01, 0xca, 0xeb, 0x06, 0x0c, 0x58, 0xec, 0x47,
+0xfa, 0x41, 0x26, 0x03, 0x77, 0x00, 0xb7, 0xfa,
+0x20, 0x4f, 0x07, 0xfa, 0x7d, 0xb0, 0x3f, 0xc2,
+0x5d, 0x41, 0xfc, 0x39, 0xad, 0x5f, 0xbc, 0x16,
+0x05, 0x68, 0xc6, 0x5d, 0xd5, 0x9b, 0x85, 0xbb,
+0xc8, 0x73, 0x08, 0xe8, 0x00, 0xd6, 0x24, 0x90,
+0xa0, 0x0f, 0x58, 0x00, 0x7c, 0x9b, 0x97, 0x1f,
+0xa3, 0x96, 0x04, 0x68, 0x02, 0x9e, 0xf3, 0x69,
+0x3b, 0xaa, 0xeb, 0xfb, 0x18, 0xb7, 0x5e, 0xbf,
+0x20, 0xc1, 0x28, 0x7e, 0x09, 0xf0, 0xbd, 0x04,
+0xc8, 0x0e, 0xd7, 0x00, 0x6f, 0x53, 0x59, 0x25,
+0x4f, 0xb1, 0xd1, 0xfc, 0xe2, 0x3c, 0x64, 0x82,
+0x5a, 0x10, 0xe0, 0x46, 0x60, 0x3b, 0xae, 0x60,
+0x63, 0x3c, 0xc9, 0x85, 0x04, 0x79, 0x17, 0xa0,
+0x15, 0xd8, 0xc7, 0xf1, 0x65, 0xdb, 0x92, 0xa0,
+0x06, 0xa6, 0x81, 0x05, 0x5c, 0x35, 0x6e, 0xb1,
+0xe0, 0xff, 0x99, 0xe0, 0x35, 0xe2, 0xa6, 0x6d,
+0x53, 0xfd, 0x00, 0xb2, 0x55, 0x02, 0xa4, 0x8f,
+0xa5, 0xc0, 0x9c, 0x88, 0xed, 0x7b, 0xfd, 0x0c,
+0xa0, 0x11, 0x57, 0x9d, 0xb3, 0xa7, 0xc8, 0xf1,
+0xed, 0x3e, 0xb0, 0x71, 0xeb, 0x04, 0x53, 0xbc,
+0x08, 0x99, 0x24, 0xcf, 0x15, 0x41, 0xb7, 0x47,
+0x6c, 0xeb, 0xc2, 0xad, 0xfe, 0xf5, 0xf9, 0xe7,
+0x67, 0x17, 0x39, 0x7b, 0xdb, 0x81, 0x55, 0xb8,
+0x45, 0x9c, 0x47, 0x71, 0x17, 0x79, 0x1e, 0x8b,
+0x68, 0x37, 0xe0, 0xc7, 0x18, 0x9f, 0x2a, 0x03,
+0xa4, 0x8f, 0xd9, 0x11, 0xdb, 0xda, 0x02, 0xc1,
+0x2f, 0x76, 0x83, 0x47, 0x30, 0xf8, 0xd7, 0x01,
+0x17, 0x02, 0x1b, 0x38, 0xbe, 0xa4, 0x7b, 0x34,
+0xf8, 0x1d, 0x59, 0xfe, 0x91, 0xf2, 0x2c, 0xc0,
+0x69, 0x11, 0xdb, 0x26, 0xc5, 0x04, 0x7f, 0x0b,
+0xb0, 0xd2, 0x07, 0xbf, 0x01, 0x78, 0x1d, 0xf8,
+0x01, 0x78, 0xd9, 0x8f, 0x27, 0xd6, 0xe7, 0x29,
+0xf8, 0x79, 0x9f, 0x05, 0x7c, 0x19, 0x91, 0x05,
+0xba, 0x71, 0x25, 0x58, 0x3b, 0x8a, 0x04, 0x7f,
+0x2d, 0x6e, 0xc9, 0x17, 0xe0, 0x45, 0xe0, 0xbe,
+0xc0, 0xfe, 0xbf, 0x71, 0x37, 0x83, 0x02, 0x7c,
+0x95, 0x87, 0xe0, 0xa7, 0x31, 0x03, 0x14, 0x80,
+0x07, 0x80, 0x53, 0xcb, 0x3c, 0xee, 0x4c, 0x5c,
+0xf5, 0x6e, 0x70, 0xa1, 0xe7, 0x9b, 0x88, 0x76,
+0x2d, 0xb8, 0x32, 0xef, 0xb8, 0xe0, 0x2f, 0x0b,
+0x05, 0x7f, 0x34, 0xa3, 0xb4, 0xe0, 0x56, 0x13,
+0x3b, 0x72, 0x73, 0x9a, 0xa4, 0xa8, 0x0a, 0xb7,
+0x60, 0x66, 0x9b, 0x7d, 0xc5, 0xec, 0x6e, 0x33,
+0x6b, 0x48, 0x70, 0xcc, 0x25, 0x66, 0xb6, 0xcb,
+0xcc, 0x86, 0x03, 0xd5, 0xb6, 0x7b, 0xcd, 0x6c,
+0xb9, 0x99, 0xdd, 0x60, 0xc9, 0xd8, 0xec, 0xdf,
+0x7b, 0xf4, 0x35, 0x17, 0x9a, 0x59, 0x7f, 0x44,
+0xbb, 0x01, 0x33, 0x6b, 0xce, 0x5b, 0xf5, 0x73,
+0x1a, 0x83, 0x3f, 0xca, 0xbe, 0x18, 0x09, 0x56,
+0x99, 0xd9, 0xb1, 0x12, 0x81, 0xdd, 0x69, 0x66,
+0xbd, 0x31, 0xc1, 0xdf, 0x1e, 0x08, 0x7e, 0x9d,
+0x99, 0xad, 0xf1, 0x81, 0x8e, 0xe2, 0x91, 0x3c,
+0x96, 0xbf, 0xa7, 0x61, 0x0c, 0x50, 0x0f, 0xbc,
+0x42, 0x74, 0x79, 0xf4, 0x7e, 0x3f, 0x12, 0xef,
+0x0b, 0x6d, 0x5f, 0x81, 0xfb, 0x03, 0x86, 0xb1,
+0x32, 0x82, 0xbb, 0x97, 0xef, 0x57, 0x5c, 0x0d,
+0xdf, 0x79, 0x45, 0xda, 0x75, 0xe2, 0xae, 0x27,
+0x8c, 0xe4, 0x6e, 0xb5, 0xac, 0xca, 0x02, 0xd4,
+0x03, 0xdb, 0x80, 0x3b, 0x4b, 0xb4, 0x09, 0x4b,
+0x30, 0x15, 0xf8, 0x09, 0x38, 0x7d, 0x82, 0x3e,
+0xe3, 0x41, 0xdc, 0x15, 0xc2, 0xde, 0x3c, 0x8e,
+0x94, 0xb3, 0x30, 0x0d, 0x9c, 0xe7, 0xa7, 0x6c,
+0x0d, 0xfe, 0xf9, 0xca, 0x09, 0x0c, 0x7e, 0x97,
+0x97, 0x2f, 0x97, 0xc1, 0x4f, 0x83, 0x00, 0xc3,
+0x7e, 0xd1, 0xa5, 0xbd, 0x0c, 0x09, 0xe6, 0x4e,
+0xd0, 0x67, 0xdb, 0x8f, 0xab, 0xde, 0xed, 0x26,
+0xc7, 0xa4, 0x21, 0x03, 0x94, 0x2b, 0x41, 0xd3,
+0x18, 0xdf, 0x6f, 0x20, 0x66, 0x7f, 0x3f, 0xf0,
+0x84, 0x0f, 0x7e, 0x0f, 0x39, 0x27, 0x4d, 0x0b,
+0x41, 0x49, 0xc6, 0x03, 0x51, 0xec, 0xf1, 0x02,
+0x0d, 0xe1, 0x6a, 0xf6, 0x6f, 0x89, 0x69, 0xdf,
+0x8d, 0xab, 0xe8, 0x9d, 0x83, 0xab, 0xe1, 0x9b,
+0xe6, 0x17, 0x79, 0x0e, 0xe0, 0x2a, 0x84, 0xb7,
+0xe5, 0x39, 0xe5, 0xa7, 0x7d, 0x25, 0xb0, 0x5c,
+0x09, 0x06, 0x70, 0xb7, 0x5b, 0xf7, 0x06, 0x16,
+0x92, 0x36, 0xe1, 0xea, 0xfb, 0x4a, 0x71, 0x18,
+0x58, 0x88, 0xbb, 0x01, 0xb4, 0xa6, 0x49, 0xdb,
+0x20, 0x30, 0x69, 0x77, 0x30, 0x4a, 0x4f, 0xe8,
+0x6c, 0x35, 0xbf, 0xa2, 0xb7, 0x25, 0xe6, 0xb8,
+0x0b, 0xfc, 0xd4, 0xee, 0x1c, 0x09, 0x90, 0x3e,
+0x86, 0x81, 0xbb, 0x12, 0x04, 0x11, 0xdc, 0xed,
+0x5a, 0xe1, 0xf5, 0xfe, 0x72, 0x24, 0xf8, 0x82,
+0xe8, 0xbf, 0x74, 0x91, 0x00, 0x55, 0x66, 0x24,
+0x61, 0x10, 0x01, 0xde, 0x89, 0x38, 0x93, 0x93,
+0x4a, 0x30, 0x85, 0xf1, 0x2b, 0x14, 0xd5, 0x18,
+0xe0, 0x44, 0x7c, 0xbe, 0x31, 0xf6, 0xe9, 0xa5,
+0x8e, 0xcf, 0x4d, 0x65, 0x6f, 0x1e, 0x33, 0xc0,
+0x78, 0xf5, 0xe9, 0xc5, 0x8e, 0x57, 0xf0, 0x33,
+0x22, 0xc0, 0x89, 0x90, 0x40, 0xc1, 0xcf, 0x50,
+0x17, 0x30, 0xde, 0xdd, 0xc1, 0xd3, 0xc0, 0x1b,
+0x0a, 0x7e, 0x36, 0x05, 0x28, 0x57, 0x82, 0x45,
+0xe4, 0x7c, 0x19, 0xb7, 0x56, 0xba, 0x00, 0x4d,
+0xf1, 0x24, 0x40, 0x45, 0x12, 0x34, 0xfb, 0x31,
+0x81, 0x24, 0xc8, 0x51, 0x17, 0x10, 0xee, 0x0e,
+0x1a, 0x12, 0xb4, 0x1b, 0x24, 0x05, 0x7f, 0xc6,
+0x24, 0x01, 0x84, 0xba, 0x00, 0x21, 0x01, 0x84,
+0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21, 0x01,
+0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00, 0x21,
+0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48, 0x00,
+0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40, 0x48,
+0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12, 0x40,
+0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10, 0x12,
+0x40, 0x48, 0x00, 0x21, 0x01, 0x84, 0x04, 0x10,
+0x12, 0x40, 0x48, 0x00, 0x21, 0x01, 0xc4, 0x18,
+0xf8, 0x6f, 0x00, 0xae, 0xb1, 0x18, 0x25, 0xd7,
+0x66, 0x43, 0x37, 0x00, 0x00, 0x00, 0x00, 0x49,
+0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+
+HERE_MAPS_END_NAMESPACE
diff --git a/inc/engine/internal/JsonParser.h b/inc/engine/internal/JsonParser.h
new file mode 100755 (executable)
index 0000000..7fa4c40
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef JSON_PARSER_H_
+#define JSON_PARSER_H_
+
+#include "common/HereMaps_global.h"
+#include "finder/Category.h"
+#include "finder/ContactDetails.h"
+#include "finder/ExtendedAttribute.h"
+#include "finder/ImageContent.h"
+#include "finder/ReviewContent.h"
+#include "finder/EditorialContent.h"
+#include "finder/PlaceItem.h"
+#include "finder/SearchItem.h"
+#include "finder/PlaceDetails.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBase.h>
+#include <FWeb.h>
+#endif
+#include <vector>
+#include <map>
+
+#ifdef TIZEN_MIGRATION
+#include "base/BaseByteBuffer.h"
+#include <json.h>
+
+#define JsonArray  json_object
+#define JsonNumber json_object
+#define JsonObject json_object
+#define IJsonValue json_object
+#define JsonBool   json_object
+
+using namespace Tizen::Maps;
+#else
+using namespace Tizen::Base;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Web::Json;
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DiscoveryReply;
+class BaseContent;
+class Address;
+class GeoCoordinates;
+class BaseQuery;
+class GeoLocation;
+class LinkObject;
+class Ratings;
+class GeoBoundingBox;
+class SearchContext;
+class FinderError;
+
+/**
+ * Parses Places API Json data.
+ *
+ * @ingroup Search / Online / Parser
+ */
+class JsonParser
+{
+public:
+
+    /**
+     * Parse discover search results.
+     * @param json_stream ByteBuffer.
+     * @param results_page Parsed Discovery query.
+     * @param error A pointer to an object that is populated
+     *        with error information should parsing fail.
+     */
+    static bool ParseDiscoverySearch( ByteBuffer& buf, DiscoveryReply& results_page, FinderError*& error);
+
+    /**
+     * Parse place result.
+     * @param json_stream ByteBuffer.
+     * @param place_data Parsed place data.
+     * @param error A pointer to an object that is populated
+     *        with error information should parsing fail.
+     */
+    static bool ParsePlaceResult( ByteBuffer& buf, PlaceDetails& place_data, FinderError*& error);
+
+private:
+
+    static void ParseGeocodeSearch( ByteBuffer& json_stream,
+                                           std::vector< GeoLocation >& results );
+
+    static void ParseReverseGeocodeSearch( ByteBuffer& json_stream, Address& address );
+
+
+    static void ParseTextSuggestions( ByteBuffer& json, std::vector< String >& suggestions );
+
+
+    static void ParseDiscoverySearch( IJsonValue* json, DiscoveryReply& results_page );
+
+    static void ParsePlaceResult( IJsonValue* json, PlaceDetails& place_data );
+
+    static void ParseAlternativeNames( JsonArray* json_data,
+                                         PlaceDetails::AlternativeNames& alternative_names );
+
+    static void ParsePlaceLocation( JsonObject* json_data, GeoLocation& location );
+
+    static void ParsePosition( JsonObject* json_data, GeoCoordinates& position );
+
+    static void ParseAddress( JsonObject* json_data, Address& address );
+
+    static void ParseContacts( JsonArray* json_data, const String& key,
+                               ContactDetailsList& contacts );
+#ifndef TIZEN_MIGRATION
+    static void ParseLinkObject( IJsonValue* json_data,
+                                   const char* object_name,
+                                   LinkObject& link_object );
+#endif
+    static void ParseLinkObject( JsonObject* json_data, LinkObject& link_object );
+#ifndef TIZEN_MIGRATION
+    static void ParseLinkObject( JsonObject* json_data,
+                                   const char* object_name,
+                                   LinkObject& link_object );
+#endif
+    static void ParseRatings( JsonObject* json_data, Ratings& ratings );
+
+    static void ParseCategories( JsonArray* json_data, CategoryList& categories );
+
+    static void ParseCategory( JsonObject* json_data, Category& category );
+
+    static void ParseAttributes( JsonObject* json_data, ExtendedAttributeList& attributes );
+
+    static void ParseSearchContext( JsonObject* json_data, SearchContext& results_context );
+
+    static void ParseBbox( JsonObject* json_data, GeoBoundingBox& bbox );
+
+    static void ParseResultsItemPlace( JsonObject* json_data, PlaceItem& place_result );
+
+    static void ParseResultsItemSearch( JsonObject* json_data, SearchItem& search_result );
+
+    static void ParsePlaceRelated( JsonObject* json_data, PlaceDetails& place_data );
+
+    static void ParsePlaceMedia( JsonObject* json_data, PlaceDetails& place_data );
+
+    static void ParsePlaceEditorials( JsonObject* json_data, EditorialContentList& editorials );
+
+    static void ParsePlaceImages( JsonObject* json_data, ImageContentList& images );
+
+    static void ParsePlaceReviews( JsonObject* json_data, ReviewContentList& reviews );
+
+    static void ParsePlaceEditorial( JsonObject* json_data, EditorialContent& editorial );
+
+    static void ParsePlaceImage( JsonObject* json_data, ImageContent& image );
+
+    static void ParsePlaceReview( JsonObject* json_data, ReviewContent& review );
+
+    static void ParsePlaceBaseContent( JsonObject* json_data, BaseContent& media );
+
+    static void TraverseRootNode( ByteBuffer& json_stream, IJsonValue* root );
+    static void ParseCoordinates( IJsonValue* json_location, GeoLocation& loc );
+    static void ParseBoundingBox( IJsonValue* json_location, GeoLocation& loc );
+    static void ParseAddress( IJsonValue* json_location, GeoLocation& loc );
+
+    static void ParsePlaceResults(JsonArray* pObject, PlaceItemList&, SearchItemList& );
+
+private:
+    static void GetStringValue(JsonObject* pObject, const String& sKey, String& value );
+    static void GetUriValue(JsonObject* pObject, const String& sKey, Uri& uri );
+    static bool GetValuePtr(JsonObject* pObject, const String& sKey, IJsonValue*& pValue );
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // JSON_PARSER_H_
diff --git a/inc/engine/internal/Logger.h b/inc/engine/internal/Logger.h
new file mode 100644 (file)
index 0000000..27a6fc3
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef LOGGER_H
+#define LOGGER_H
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Result;
+class Address;
+class GeoLocation;
+
+/**
+ * This class encapsulates logging utility methods which allow you to output
+ * debug, error and warning messages as well as specific data objects.
+ */
+class Logger
+{
+public:
+    /** 
+     * This method obtains a instance of <code>Logger</code>.
+     * 
+     * @return A static reference to <code>Logger</code>.
+     */
+    static Logger& getInstance();
+
+    /**
+     * This method writes a debug message to standard output (and to a file if
+     * writing to a file is enabled).
+     * 
+     * @param pFile A constant pointer to a character string containing the name
+     *        of the file where the message originates.
+     * 
+     * @param uLine A value indicating the line number in the file named by
+     *        <code>pFile</code>. 
+     * 
+     * @param pMsg A constant pointer to a character buffer containing the
+     *        format string of the message to output.
+     * 
+     * @param ... A variable list of arguments that are used to complete the
+     *        message on the basis of the format string specified by
+     *        <code>pMsg</code>.
+     */
+    void debug(const char* pFile, unsigned int uLine, const char* pMsg, ...);
+
+    /**
+     * This method writes an error message to standard output (and to a file if
+     * writing to a file is enabled).
+     * 
+     * @param pFile A constant pointer to a character string containing the name
+     *        of the file where the message originates.
+     * 
+     * @param uLine A value indicating the line number in the file named by
+     *        <code>pFile</code>. 
+     * 
+     * @param pMsg A constant pointer to a character buffer containing the
+     *        format string of the message to output.
+     * 
+     * @param ... A variable list of arguments that are used to complete the
+     *        message on the basis of the format string specified by
+     *        <code>pMsg</code>.
+     */
+    void error(const char* pFile, unsigned int uLine, const char* pMsg, ...);
+
+    /**
+     * This method writes a warning message to standard output (and to a file if
+     * writing to a file is enabled).
+     * 
+     * @param pFile A constant pointer to a character string containing the name
+     *        of the file where the message originates.
+     * 
+     * @param uLine A value indicating the line number in the file named by
+     *        <code>pFile</code>. 
+     * 
+     * @param pMsg A constant pointer to a character buffer containing the
+     *        format string of the message to output.
+     * 
+     * @param ... A variable list of arguments that are used to complete the
+     *        message on the basis of the format string specified by
+     *        <code>pMsg</code>.
+     */
+    void warning(const char* pFile, unsigned int uLine, const char* pMsg, ...);
+
+    /**
+     * This method prints the object provided by the caller to standard output
+     * and to a file (if writing to a file is enabled).
+     * 
+     * @param rResult A constant reference to the object to output.  
+     */
+    void print(const Result& rResult);
+
+    /**
+     * This method prints the object provided by the caller to standard output
+     * and to a file (if writing to a file is enabled).
+     * 
+     * @param rResult A constant reference to the object to output.  
+     */
+    void print(const Address& rResult);
+
+    /**
+     * This method prints the object provided by the caller to standard output
+     * and to a file (if writing to a file is enabled).
+     * 
+     * @param rResult A constant reference to the object to output.  
+     */
+    void print(const GeoLocation& rResult);
+
+private:
+    //HERE_MAPS_NO_COPY_NO_ASSIGN(Logger);
+
+    Logger();
+    ~Logger();
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/Opt.h b/inc/engine/internal/Opt.h
new file mode 100644 (file)
index 0000000..f20d599
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef OPT_H
+#define OPT_H
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This is a template helper class for optional parameters.
+ */
+template<class T>
+class Opt
+{
+public:
+    /** 
+     * This is the default constructor.
+     */
+    Opt();
+
+    //flag management
+    /**
+     * This method retrieves a Boolean value indicating if the property is available
+     * (set).
+     * 
+     * @return <code>true</code> if the property is set, otherwise <code>false</code>.
+     */
+    bool IsAvailable() const;
+
+    /**
+     * This method resets a Boolean value indicating if the property is available
+     * (set).
+     */ 
+    void Reset();
+
+    //access implicit
+    /**
+     * This operator returns a reference to the property.
+     */
+    operator T&();
+
+    /**
+     * This operator returns a constant reference to the property.
+     */
+    operator const T&() const;
+
+    //access explicit
+    /**
+     * This method retrieves a reference to the property.
+     * 
+     * @return A reference to the property.
+     */
+    T& Get();
+
+    /**
+     * This method retrieves a constant reference to the property.
+     * 
+     * @return A constant reference to the property.
+     */
+    const T& Get() const;
+
+    //assignment
+    /**
+     * This is the assignment operator.
+     * 
+     * @param t A constant reference to a property whose value is to be copied
+     *        to the given instance. 
+     */
+    void operator=(const T& t);
+
+private:
+    bool m_bAvailable;
+    T    m_aValue;
+};
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline Opt<T>::Opt()
+: m_bAvailable(false)
+{
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline bool Opt<T>::IsAvailable() const
+{
+    return m_bAvailable;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+void Opt<T>::Reset()
+{
+    m_bAvailable = false;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline Opt<T>::operator T&()
+{
+    return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline Opt<T>::operator const T&() const
+{
+    return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline T& Opt<T>::Get()
+{
+    return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline const T& Opt<T>::Get() const
+{
+    return m_aValue;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline void Opt<T>::operator=(const T& t)
+{
+    m_aValue = t;
+    m_bAvailable = true;
+}
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/Proximity.h b/inc/engine/internal/Proximity.h
new file mode 100644 (file)
index 0000000..b767e41
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef PROXIMITY_H_
+#define PROXIMITY_H_
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+#include "internal/Distance.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Proximity
+{
+public:
+    Proximity() : __center(0,0) {}
+    Proximity(const GeoCoordinates& center, const Distance& radius);
+
+    GeoCoordinates GetCenter() const;
+    Distance GetRadius() const;
+    bool IsValid() const;
+
+private:
+    GeoCoordinates __center;
+    Distance __radius;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // PROXIMITY_H_
diff --git a/inc/engine/internal/RestCurl.h b/inc/engine/internal/RestCurl.h
new file mode 100755 (executable)
index 0000000..5e5598b
--- /dev/null
@@ -0,0 +1,68 @@
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef REST_CURL_H
+#define REST_CURL_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <vector>
+#include <glib.h>
+#include <curl/curl.h>
+#include <curl/easy.h>
+
+#include "common/HereMaps_global.h"
+
+#include "common/RestItemHandle.h"
+#include "base/BaseByteBuffer.h"
+#include "base/EventDrivenThread.h"
+
+#define RESTCURL_CRYPTO_LOCK
+
+TIZEN_MAPS_BEGIN_NAMESPACE
+
+using namespace Tizen::Maps;
+
+typedef struct MemoryStruct {
+       char *memory;
+       size_t size;
+       long http_code;
+} MemoryStruct_s;
+
+class RestCurl
+{
+public:
+       RestCurl();
+       virtual ~RestCurl();
+       bool Commit(void *pArgs);
+       void Clear();
+       void Shutdown();
+       void Abort(const Here::Maps::RestItemHandle::RequestId aRequestId);
+       int EasyCurl(String sUrl, MemoryStruct_s* pChunk);
+       String UrlEncode(String sStr);
+       static RestCurl& GetInstance();
+
+private:
+       static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp);
+       static void *ThreadFunc(void *pArgs);
+
+       class RestCurlImpl;
+       RestCurlImpl* m_pImpl;
+};
+
+TIZEN_MAPS_END_NAMESPACE
+
+#endif /* REST_CURL_H */
diff --git a/inc/engine/internal/RestEngine.h b/inc/engine/internal/RestEngine.h
new file mode 100755 (executable)
index 0000000..62127ec
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESTENGINE_H
+#define RESTENGINE_H
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FBaseObject.h>
+#include <FBaseRtEventDrivenThread.h>
+#include <FNetHttpIHttpTransactionEventListener.h>
+#endif
+
+#include "common/QueryListener.h"
+#include "common/RestItemHandle.h"
+
+#ifdef TIZEN_MIGRATION
+#include "base/BaseObject.h"
+#include "base/BaseByteBuffer.h"
+#include "base/EventDrivenThread.h"
+#include "internal/RestCurl.h"
+
+using namespace Tizen::Maps;
+#else
+using namespace Tizen::Base::Runtime;
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class RestItem;
+class BaseReply;
+class QueryListener;
+
+class RestEngineArgument
+: public Tizen::Maps::Object
+{
+public:
+    RestEngineArgument(const String& sUrl, RestItem* pRestItem)
+    : m_sUrl(sUrl)
+    , m_pRestItem(pRestItem)
+    {
+    }
+
+    RestEngineArgument(RestItemHandle::RequestId aRequestId)
+    : m_aRequestId(aRequestId)
+    {
+    }
+
+    RestEngineArgument(RestItem* pRestItem)
+    : m_pRestItem(pRestItem)
+    {
+    }
+
+    ~RestEngineArgument()
+    {
+    }
+
+    String m_sUrl;
+    RestItem* m_pRestItem;
+    RestItemHandle::RequestId m_aRequestId;
+    #ifdef TIZEN_MIGRATION
+    Tizen::Maps::MemoryStruct_s m_Chunk;
+    #endif
+};
+
+//this is an internal class and should not be used outside
+class RestEngine
+: public EventDrivenThread
+#ifndef TIZEN_MIGRATION
+, public Tizen::Net::Http::IHttpTransactionEventListener
+#endif
+{
+public:
+    static RestEngine& GetInstance();
+
+    RestItemHandle::RequestId OpenRequest(const String& sUrl, QueryListener* pListener, BaseReplyPtr pReply);
+    size_t GetNumPendingRequests() const;
+    void ShutdownEngine();
+    void AbortRequest(RestItemHandle::RequestId aRequestId);
+    void AbortListenerRequests(QueryListener* pListener);
+    void AbortAllRequests();
+    void UnregisterListener(QueryListener* pListener);
+
+    int  CountListeners() const;
+
+    static unsigned int GetMaxPendingRequests();
+
+#ifdef TIZEN_MIGRATION
+    void FireImpl(void* pArgs);
+#endif
+
+private:
+    enum RequestType
+    {
+        RT_OpenRequest = 0,
+        RT_CloseRestItem,
+        RT_DeleteRestItem
+    };
+    bool CheckRequestIn(RestItem* pRestItem);
+    RestItem* GetChechedInRequest(RestItemHandle::RequestId aRequestId) const;
+
+    void CloseRestItemLater(RestItemHandle::RequestId aRequestId);
+    void CloseRestItem(RestItemHandle::RequestId aRequestId, bool bDeleteLater = false);
+    void DeleteRestItemLater(RestItem* pRestItem);
+
+#ifdef TIZEN_MIGRATION
+    void OnUserEventReceivedN(int requestType, void *pArgs);
+#else
+    void OnTransactionAborted(Tizen::Net::Http::HttpSession& httpSession,
+                              Tizen::Net::Http::HttpTransaction& httpTransaction, result r);
+
+    void OnTransactionCertVerificationRequiredN(Tizen::Net::Http::HttpSession& httpSession,
+                                                Tizen::Net::Http::HttpTransaction& httpTransaction,
+                                                Tizen::Base::String* pCert);
+
+    void OnTransactionCompleted(Tizen::Net::Http::HttpSession& httpSession,
+                                Tizen::Net::Http::HttpTransaction& httpTransaction);
+
+    void OnTransactionHeaderCompleted(Tizen::Net::Http::HttpSession& httpSession,
+                                      Tizen::Net::Http::HttpTransaction& httpTransaction,
+                                      int headerLen,
+                                      bool bAuthRequired);
+
+    void OnTransactionReadyToRead(Tizen::Net::Http::HttpSession& httpSession,
+                                  Tizen::Net::Http::HttpTransaction& httpTransaction,
+                                  int availableBodyLen);
+
+    void OnTransactionReadyToWrite(Tizen::Net::Http::HttpSession& httpSession,
+                                   Tizen::Net::Http::HttpTransaction& httpTransaction,
+                                   int recommendedChunkSize);
+
+    void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList *pArgs);
+#endif
+
+    RestEngine();
+    ~RestEngine();
+
+    void Begin();
+
+    void LockPendingRequests() const;
+    void UnlockPendingRequests() const;
+
+    void LockListenersRegistery() const;
+    void UnlockListenersRegistery() const;
+
+    bool OnStart();
+    void OnStop();
+
+    void RegisterListener(QueryListener* rListener);
+
+    bool DoOpenRequest(const String& sUrl, RestItem* pRestItem);
+    void DoCloseRestItemLater(RestItemHandle::RequestId aRequestId);
+    void DoDeleteRestItemLater(RestItem* pRestItem);
+
+    //classes allowed to access this internal instance
+    friend class RestItem;
+    friend class QueryListener;
+
+    //members
+    class RestEngineImpl;
+    RestEngineImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/RestItem.h b/inc/engine/internal/RestItem.h
new file mode 100755 (executable)
index 0000000..8b13f77
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef RESTITEM_H
+#define RESTITEM_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+#include "common/RestItemHandle.h"
+
+#ifdef TIZEN_MIGRATION
+#include "internal/RestCurl.h" // MemoryStruct_s
+#else
+#include <FNet.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ErrorBase;
+class BaseReply;
+class QueryListener;
+#ifndef TIZEN_MIGRATION
+class RestEngine;
+#endif
+
+//this class is for internal use only - do not rely on this outside
+class RestItem
+#ifdef TIZEN_MIGRATION
+: public Tizen::Maps::Object
+#endif
+{
+public:
+    enum RestItemStatus
+    {
+        RIS_Created = 0,
+        RIS_RequestIssued,
+        RIS_Completed
+    };
+
+    RestItem(QueryListener* rListener, BaseReplyPtr pBaseReply);
+    ~RestItem();
+
+    bool Run(const String& rUri);
+    void Stop();
+
+    void OnError(ErrorBase& rError);
+    void OnResponseData(const Tizen::Maps::ByteBuffer& rBuff);
+
+#ifndef TIZEN_MIGRATION
+    bool OwnsTransaction(Tizen::Net::Http::HttpTransaction* pTransaction) const;
+#endif
+    QueryListener* GetListener() const;
+
+    RestItemHandle::RequestId GetRequestId() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(RestItem);
+    friend class RestEngine;
+
+    class RestItemImpl;
+    RestItemImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/internal/ServerStringBuilder.h b/inc/engine/internal/ServerStringBuilder.h
new file mode 100644 (file)
index 0000000..8bb0fd0
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef SERVERSTRINGBUILDER_H_
+#define SERVERSTRINGBUILDER_H_
+
+#include <iostream>
+
+#include "common/HereMaps_global.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoCoordinates;
+class GeoBoundingBox;
+class Distance;
+class Proximity;
+
+class ServerStringBuilder
+{
+public:
+    virtual ~ServerStringBuilder();
+
+    std::string ToString(const GeoCoordinates& coords) const;
+    std::string ToString(const GeoBoundingBox& box) const;
+    std::string ToString(const Distance& distance) const;
+    std::string ToString(const Proximity& proximity) const;
+
+    static ServerStringBuilder& GetInstance();
+
+private:
+    ServerStringBuilder();
+
+    std::string CoordinateToString(double d) const;
+    std::string ToString(double d, int percision) const;
+
+    void removeTrailingZeros(std::string& s) const;
+
+private:
+    static ServerStringBuilder* m_instance;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* SERVERSTRINGBUILDER_H_ */
diff --git a/inc/engine/internal/StringHelper.h b/inc/engine/internal/StringHelper.h
new file mode 100755 (executable)
index 0000000..3cb1366
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef STRINGHELPER_H
+#define STRINGHELPER_H
+
+#include "common/HereMaps_global.h"
+#ifdef TIZEN_MIGRATION
+#include "common/GeoCoordinates.h"
+#include "common/GeoBoundingBox.h"
+#include "common/GeoBoundingCircle.h"
+#else
+//#include "common/GeoCoordinates.h"
+//#include "common/GeoBoundingBox.h"
+#endif
+
+#include <sstream>
+#ifndef TIZEN_MIGRATION
+#include <string>
+#endif
+#include <algorithm>
+#ifndef TIZEN_MIGRATION
+#include <iomanip>      // std::setprecision
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+struct TSPredicate
+{
+   bool operator()(const String& key, const String& value)
+   {
+      return key.compare(value) < 0;
+   }
+};
+
+class StringHelper
+{
+public:
+    static void ToLower(std::string& sStr);
+
+    template<class T>
+    static T ToNumber(const std::wstring& sStd);
+
+    template<class T>
+    static T ToNumber(const std::string& sStd);
+
+#ifndef TIZEN_MIGRATION
+    template<class T>
+    static T ToNumber(const Tizen::Base::String& sStd);
+#endif
+
+    template<class T>
+    static void ToString(T aNumber, std::wstring& sDst);
+
+    template<class T>
+    static void ToString(T aNumber, std::string& sDst);
+
+#ifndef TIZEN_MIGRATION
+    template<class T>
+    static void ToString(T aNumber, Tizen::Base::String& rDst);
+#endif
+
+#ifdef TIZEN_MIGRATION
+    /**
+     * This method retrieves a string representation of an object containing the
+     * geographic coordinates of a location.
+     *
+     * @param rCoordinate A constant reference to an object containing
+     *        geographic coordinates of a location; the object to be converted.
+     *
+     * @param sDst A reference to a string object to which the result of the
+     *        conversion is to be copied.
+     */
+    static void ToString(const GeoCoordinates& rCoordinate, String& sDst);
+
+    /**
+     * This method converts a bounding box object to string.
+     *
+     * @param rBoundingBox A constant reference to the object whose string
+     *        representation is to be obtained.
+     *
+     * @param sDst A reference to a string object to which the result of the
+     *        conversion is to be copied.
+     */
+    static void ToString(const GeoBoundingBox& rBoundingBox, String& sDst);
+
+    static void ToString(const GeoBoundingCircle& rBoundingCircle, String& sDst);
+#endif
+};
+
+#ifdef TIZEN_MIGRATION
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoCoordinates& rCoordinate, String& sDst)
+{
+    String sLatitude;
+    ToString(rCoordinate.GetLatitude(), sLatitude);
+
+    String sLongitude;
+    ToString(rCoordinate.GetLongitude(), sLongitude);
+
+    sDst = sLatitude + "," + sLongitude;
+}
+
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoBoundingBox& rBoundingBox, String& sDst)
+{
+    String sTopLeft;
+    ToString(rBoundingBox.GetTopLeft(), sTopLeft);
+
+    String sBottomRight;
+    ToString(rBoundingBox.GetBottomRight(), sBottomRight);
+
+    sDst = sTopLeft + ";" + sBottomRight;
+}
+
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoBoundingCircle& rBoundingCircle, String& sDst)
+{
+    String sCenter;
+    ToString(rBoundingCircle.GetCenter(), sCenter);
+
+    String sRadius;
+    ToString(rBoundingCircle.GetRadius(), sRadius);
+
+    sDst = sCenter + ";r=" + sRadius;
+}
+#else
+/*
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToString(const GeoBoundingBox& rBoundingBox, Tizen::Base::String& sDst)
+{
+    Tizen::Base::String sTopLeft;
+    ToString(rBoundingBox.GetTopLeft(), sTopLeft);
+
+    Tizen::Base::String sBottomRight;
+    ToString(rBoundingBox.GetBottomRight(), sBottomRight);
+
+    sDst = sTopLeft + ";" + sBottomRight;
+}
+*/
+#endif
+
+//-----------------------------------------------------------------------------
+inline void StringHelper::ToLower(String& sStr)
+{
+    std::transform(sStr.begin(), sStr.end(), sStr.begin(), ::tolower);
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline T StringHelper::ToNumber(const std::wstring& sStr)
+{
+    T t;
+    std::wstringstream aStream;
+    aStream << sStr;
+    aStream >> t;
+    return t;
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline T StringHelper::ToNumber(const std::string& sStr)
+{
+    T t;
+    std::stringstream aStream;
+    aStream << sStr;
+    aStream >> t;
+    return t;
+}
+
+
+//-----------------------------------------------------------------------------
+#ifndef TIZEN_MIGRATION
+template<class T>
+inline T StringHelper::ToNumber(const Tizen::Base::String& sStd)
+{
+    std::wstring sTmp = sStd.GetPointer();
+    return ToNumber<T>(sTmp);
+}
+#endif
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline void StringHelper::ToString(T aNumber, std::wstring& sDst)
+{
+    std::wstringstream aStream;
+    aStream << aNumber;
+    sDst = aStream.str();
+}
+
+//-----------------------------------------------------------------------------
+template<class T>
+inline void StringHelper::ToString(T aNumber, std::string& sDst)
+{
+    std::stringstream aStream;
+    aStream << aNumber;
+    sDst = aStream.str();
+}
+
+//-----------------------------------------------------------------------------
+#ifndef TIZEN_MIGRATION
+template<class T>
+inline void StringHelper::ToString(T aNumber, Tizen::Base::String& rDst)
+{
+    std::wstring sTemp;
+    ToString(aNumber, sTemp);
+    rDst = sTemp.c_str();
+}
+#endif
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/DrawableBitmap.h b/inc/engine/maps/DrawableBitmap.h
new file mode 100755 (executable)
index 0000000..3819e7c
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef DRAWABLE_BITMAP_H
+#define DRAWABLE_BITMAP_H
+
+#include "common/HereMaps_global.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Bitmap.h"
+#else
+#include <FGraphics.h>
+#endif
+
+#include <tr1/memory>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a bitmap that can be drawn on the map.
+ */
+class DrawableBitmap
+{
+public:
+    /**
+     * This typedef defines a rendering handle as a type.
+     */
+    typedef UInt RenderHandle;
+
+    /**
+     * This is a copy constructor. It creates a new instance of the class, using
+     * an existing bitmap.
+     * 
+     * @param bitmap A pointer to an existing bitmap.
+     */
+#ifdef TIZEN_MIGRATION
+    DrawableBitmap(std::unique_ptr<Tizen::Maps::Bitmap>& bitmap);
+#else
+    DrawableBitmap(std::auto_ptr<Tizen::Graphics::Bitmap>& bitmap);
+#endif
+    /**
+     * This is the destructor.
+     */
+    ~DrawableBitmap();
+
+    /**
+     * This method retrieves a pointer to the bitmap encapsulated in the given
+     * instance of the class.
+     */
+#ifdef TIZEN_MIGRATION
+    Tizen::Maps::Bitmap* GetBitmap() const;
+#else
+    Tizen::Graphics::Bitmap* GetBitmap() const;
+#endif
+    /**
+     * This method sets the rendering handle.
+     *
+     * @param aRenderHandle A value representing the rendering handle to set.
+     */
+    void SetRenderHandle(RenderHandle aRenderHandle);
+
+    /**
+     * This method retrieves the rendering handle.
+     * 
+     * @return A value representing the rendering handle to set.
+     */
+    RenderHandle GetRenderHandle() const;
+
+    /**
+     * This method resets the rendering handle on the given object.
+     */
+    void ResetRenderHandle();
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(DrawableBitmap);
+
+    class DrawableBitmapImpl;
+    DrawableBitmapImpl* m_pImpl;
+};
+
+typedef std::tr1::shared_ptr<DrawableBitmap> DrawableBitmapPtr;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoMapObject.h b/inc/engine/maps/GeoMapObject.h
new file mode 100644 (file)
index 0000000..17507e6
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOMAPOBJECT_H
+#define GEOMAPOBJECT_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoBoundingBox.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoTiledMap;
+class GeoCoordinates;
+
+/**
+ * This class encapsulates the common aspects of objects such as markers,
+ * polygons and polylines (or groups of such objects) that can be placed on the
+ * map. 
+ *
+ * \ingroup maps
+ */
+class GeoMapObject
+{
+public:
+    /**
+     * This enumeration defines identifiers for types of objects that can be
+     * placed on the map.
+     */
+    enum Type
+    {
+        GMO_Marker,   ///< Indicates a marker.
+        GMO_Polyline, ///< Indicates a polyline.
+        GMO_Polygon,  ///< Indicates a polygon.
+    };
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoMapObject();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoMapObject();
+
+    /**
+     * This method retrieves the object type.
+     * 
+     * @return A member of the enumerated data type indicating the type of the
+     *        given object.
+     */
+    virtual Type GetType() const = 0;
+
+    /**
+     * This method retrieves the object bounding box.
+     * 
+     * @return An object encapsulating the bounding box of the given object.
+     */
+    virtual GeoBoundingBox GetBoundingBox() const = 0;
+
+    /**
+     * This method checks if the given object is visible.
+     * 
+     * @return <code>true</code> if the object is visible, otherwise
+     *        <code>false</code>. 
+     */
+    bool IsVisible() const;
+    /**
+     * This method sets a flag to indicate if the given object is visible.
+     * 
+     * @return visible A Boolean, <code>true</code> if the object is visible,
+     *        otherwise <code>false</code>.
+     */
+    virtual void SetVisible(bool visible);
+
+   /**
+    * This method checks if the object can be rendered on the map.
+    *
+    * @return A Boolean, <code>true</code> if the object can be rendered,
+    *        otherwise <code>false</code>.
+    */
+    virtual bool IsValid() const = 0;
+
+protected:
+
+   /**
+    * This method updates the map.
+    */
+    void UpdateMap();
+
+   /**
+    * This method retrieves the parent object of the map, which is in effect the
+    * GL context in which the map is drawn.
+    * 
+    * @return A pointer to an object encapsulating the parent map.  
+    */
+    GeoTiledMap* GetParentMap() const;
+
+private:
+    friend class GeoTiledMap;
+    friend class GeoMapObjectGroup;
+    void SetParentMap(GeoTiledMap& rMap);
+    void ResetParentMap();
+
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObject);
+
+    class GeoMapObjectImpl;
+    std::auto_ptr<GeoMapObjectImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOMAPOBJECT_H
diff --git a/inc/engine/maps/GeoMapObjectMarker.h b/inc/engine/maps/GeoMapObjectMarker.h
new file mode 100755 (executable)
index 0000000..d25a7d5
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MAPOBJECTMARKER_H
+#define MAPOBJECTMARKER_H
+
+#include "common/HereMaps_global.h"
+#ifndef TIZEN_MIGRATION
+#include <FGraphics.h>
+#endif
+
+#include "maps/GeoMapObject.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#include "graphic/Bitmap.h"
+#include "graphic/FloatPoint.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GlTexture;
+class GeoCoordinates;
+
+/**
+ * This class encapsulates a map marker object that indicates a location 
+ * with an image (icon).
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoMapObjectMarker : public GeoMapObject
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoMapObjectMarker();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoMapObjectMarker();
+
+    /**
+     * This method retrieves the object type.
+     * 
+     * @return A member of the enumerated data type indicating the type of the
+     *        given object.
+     */
+    virtual Type GetType() const;
+
+    /**
+     * This method retrieves the object bounding box.
+     * 
+     * @return An object encapsulating the bounding box of the given object.
+     */
+    virtual GeoBoundingBox GetBoundingBox() const;
+
+    /**
+     * This method sets the position of the given object.
+     *
+     * @param rCoord A constant reference to an object containing the geographic
+     *        coordinates of the position of the given object.
+     */
+    virtual void SetPosition(const GeoCoordinates& rCoord);
+
+    /**
+     * This method retrieves the position of the given object.
+     *
+     * @return A constant reference to an object containing the geographic
+     *        coordinates of the position of the given object.
+     */
+    const GeoCoordinates& GetPosition() const;
+
+    /**
+     * This method sets the marker image (icon).
+     * 
+     * @param rBitmap A constant reference to an object encapsulating the icon
+     *        image.  
+     */
+    void SetBitmap(const Tizen::Maps::Bitmap& rBitmap);
+
+    /**
+     * This method retrieves the width of the bitmap (icon). 
+     * 
+     * @return A value indicating the width of the bitmap (icon) in pixels.
+     */
+    unsigned int GetWidth() const;
+
+    /**
+     * This method retrieves the height of the bitmap (icon). 
+     * 
+     * @return A value indicating the height of the bitmap (icon) in pixels.
+     */
+    unsigned int GetHeight() const;
+
+    /**
+     * This method sets a value that defines the point on the marker bitmap that
+     * touches the map. The point is calculated relative to the top-left corner
+     * of the bitmap.
+     * 
+     * @param rOrigin A floating point value defining the origin.
+     */
+    void SetMarkerOrigin(const Tizen::Maps::FloatPoint& rOrigin);
+
+    /**
+     * This method retrieves a value that represents the point on the marker
+     * bitmap that "touches" the map. The point is calculated relative to the
+     * top-left corner of the bitmap.
+     * 
+     * @return A floating point value defining the bitmap origin.
+     */
+    Tizen::Maps::FloatPoint GetMarkerOrigin() const;
+
+    /**
+     * This method retrieves a value that represents the point on the marker
+     * bitmap that "touches" the map. The point is calculated relative to the
+     * top-left corner of the bitmap.
+     * 
+     * @return An object containing the pixel coordinates of the bitmap origin
+     *        relative to the top-left corner of the bitmap.
+     */
+    Tizen::Maps::Point GetMarkerOriginInPx() const;
+
+    /**
+     * This method retrieves the marker bitmap as a GL texture.
+     * 
+     * @return A pointer to the GL texture of the bitmap.
+     */
+    GlTexture* GetGlTexture() const;
+
+    /**
+     * This method checks if the object is valid (it geographic location is
+     * defined). 
+     *
+     * @return visible A Boolean, <code>true</code> if the object is valid,
+     *        otherwise <code>false</code>.
+     */
+    virtual bool IsValid() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObjectMarker);
+
+    class GeoMapObjectMarkerImpl;
+    GeoMapObjectMarkerImpl* m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoMapObjectPolygon.h b/inc/engine/maps/GeoMapObjectPolygon.h
new file mode 100755 (executable)
index 0000000..eaa2b5f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MAPOBJECTPOLYGON_H
+#define MAPOBJECTPOLYGON_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoMapObject.h"
+#include "common/GeoCoordinates.h"
+#include <tr1/functional>
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/Color.h"
+#else
+namespace Tizen { namespace Graphics { class Color; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a map polygon object. A polygon is a closed polyline,
+ * therefore, in addition to a polyline, its properties include a fill color.
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoMapObjectPolygon : public GeoMapObject
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoMapObjectPolygon();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoMapObjectPolygon();
+
+    /**
+     * This method sets the path of the polygon, which is a list of locations
+     * that the path (line) connects. 
+     * 
+     * @param path A constant reference to an object containing a list of
+     *        locations defined in terms of their geographic coordinates.
+     *        Paths representing self-intersecting polygons are not supported.
+     *        Such paths are not rendered on the map.
+     */
+    void SetPath(const GeoCoordinateList& path);
+
+    /**
+     * This method appends the location of a new vertex to the polyline path.
+     *
+     * Note that self-intersecting polygons are not supported, therefore, if the
+     * given polygon should become self-intersecting as a result of this
+     * operation, it cannot be rendered on the map.
+     * 
+     * @param rCoord A constant reference to an object specifying the geographic
+     *        coordinates of a new vertex to be added to the path.
+     */
+    void AppendToPath(const GeoCoordinates& rCoord);
+
+    /**
+     * This method retrieves the path of the polygon, which is a list of
+     * objects containing the geographic coordinates of its vertices.
+     * 
+     * @return A reference to an object containing a list of vertices defined
+     *        in terms of their geographic coordinates.
+     */
+    GeoCoordinateList GetPath() const;
+
+    /**
+     * This typedef defines a function object as a type. The function object can
+     * be called when the path of the polygon has changed. A function object of
+     * this type returns <code>void</code> and receives a constant reference to
+     * a <code>GeoMapObject</code> as an argument.
+     */
+    typedef std::tr1::function<void (const GeoMapObject&)> PathChangedFunctor;
+
+    /**
+     * This method sets a callback to be invoked when the polygon path has
+     * changed. 
+     * 
+     * @param pathChanged A function object to be called when the path has
+     *        changed. 
+     */
+    void SetPathChangedNotifier(PathChangedFunctor pathChanged);
+
+    /**
+     * This method retrieves the bounding box of the polygon.
+     * 
+     * @return An object encapsulating the bounding box of the given polygon
+     *        object. 
+     */
+    GeoBoundingBox GetBoundingBox() const;
+
+    /**
+     * This method retrieves the current value of the polygon fill color.
+     * 
+     * @return An object encapsulating the fill color.
+     */
+    Tizen::Maps::Color GetFillColor() const;
+
+    /**
+     * This method sets the current value of the polygon fill color.
+     * 
+     * @param fillColor An object encapsulating the fill color.
+     */
+    void SetFillColor(const Tizen::Maps::Color& fillColor);
+
+    /**
+     * This typedef defines a fill-color-changed function object as a
+     * type. The function object can be called when the polygon fill color
+     * has changed. A function object of this type returns <code>void</code> and
+     * receives a constant reference to a <code>GeoMapObject</code> as an
+     * argument.
+     */
+    typedef std::tr1::function<void (const GeoMapObject&)> FillColorChangedFunctor;
+
+    /**
+     * This method sets a callback to be invoked when the polygon fill color
+     * has changed.
+     * 
+     * @param fillColorChanged A function object to be called when the polygon
+     *        fill color has changed.
+     */
+    void SetFillColorChangedNotifier(FillColorChangedFunctor fillColorChanged);
+
+    /**
+     * This method retrieves the object type of the given polygon.
+     * 
+     * @return A member of the enumerated data type indicating the type of the
+     *        given polygon object.
+     */
+    Type GetType() const;
+
+    /**
+     * This method sets a flag to indicate if the given object is visible.
+     *
+     * @return visible A Boolean, <code>true</code> if the object is visible,
+     *        otherwise <code>false</code>.
+     */
+   virtual void SetVisible(bool visible);
+
+   /**
+    * This method checks if the object can be rendered on the map.
+    *
+    * @return A Boolean, <code>true</code> if the object can be rendered,
+    *        otherwise <code>false</code>.
+    */
+   virtual bool IsValid() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObjectPolygon);
+
+    class GeoMapObjectPolygonImpl;
+    GeoMapObjectPolygonImpl* m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoMapObjectPolyline.h b/inc/engine/maps/GeoMapObjectPolyline.h
new file mode 100755 (executable)
index 0000000..105064b
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MAPOBJECTPOLYLINE_H
+#define MAPOBJECTPOLYLINE_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoMapObject.h"
+#include "common/GeoCoordinates.h"
+#include <tr1/functional>
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/Color.h"
+#else
+namespace Tizen { namespace Graphics { class Color; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a map polyline object. A polyline is a line that
+ * connects a number of points on the map. Its properties include stroke color
+ * and thickness.
+ *
+ * \ingroup maps
+ */
+class EXPORT_API GeoMapObjectPolyline : public GeoMapObject
+{
+public:
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoMapObjectPolyline();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoMapObjectPolyline();
+
+    /**
+     * This method sets the path of the polyline, which is a list of locations
+     * that the polyline connects. 
+     * 
+     * @param path A constant reference to an object containing a list of
+     *        locations defined in terms of their geographic coordinates.
+     */
+    void SetPath(const GeoCoordinateList& path);
+
+    /**
+     * This method appends the location of a new vertex to the polyline path.
+     * 
+     * @param aCoord A constant reference to an object specifying the geographic
+     *        coordinates of a new vertex to be added to the path.
+     */
+    void AppendToPath(const GeoCoordinates& aCoord);
+
+    /**
+     * This method retrieves the path of the polyline, which is a list of
+     * locations that the polyline connects.
+     * 
+     * @return A reference to an object containing a list of locations defined
+     *        in terms of their geographic coordinates.
+     */
+    GeoCoordinateList GetPath() const;
+
+    /**
+     * This typedef defines a function object as a type. The function object can
+     * be called when the polyline path has changed. A function object of this
+     * type returns <code>void</code> and receives a constant reference to a
+     * <code>GeoMapObject</code> as an argument.
+     */
+    typedef std::tr1::function<void (const GeoMapObject&)> PathChangedFunctor;
+
+    /**
+     * This method sets a callback to be invoked when the polyline path has
+     * changed. 
+     * 
+     * @param pathChanged A function object to be called when the path has
+     *        changed. 
+     */
+    void SetPathChangedNotifier(PathChangedFunctor pathChanged);
+
+    /**
+     * This method retrieves the current value of the polyline stroke color.
+     * 
+     * @return An object encapsulating the stroke color.
+     */
+    Tizen::Maps::Color GetStrokeColor() const;
+
+    /**
+     * This method sets the value of the polyline stroke color.
+     * 
+     * @param strokeColor A constant reference to an object encapsulating the
+     *        stroke color. 
+     */
+    void SetStrokeColor(const Tizen::Maps::Color& strokeColor);
+
+    /**
+     * This typedef defines a function object as a type. The function object can
+     * be called when the polyline stroke color has changed. A function object
+     * of this type returns <code>void</code> and receives a constant reference
+     * to a <code>GeoMapObject</code> as an argument.
+     */
+    typedef std::tr1::function<void (const GeoMapObject&)> StrokeColorChangedFunctor;
+
+    /**
+     * This method sets a callback to be invoked when the polyline stroke color
+     * has changed.
+     * 
+     * @param strokeColorChanged A function object to be called when the polyline
+     *        stroke color has changed.
+     */
+    void SetStrokeColorChangedNotifier(StrokeColorChangedFunctor strokeColorChanged);
+    
+    /**
+     * This method retrieves a value indicating the polyline stroke thickness in
+     * pixels.
+     * 
+     * @return A value indicating the stroke thickness in pixels.
+     */
+    int GetStrokeThickness() const;
+    
+    /**
+     * This method sets a value indicating the polyline stroke thickness in
+     * pixels.
+     * 
+     * @strokeThickness A value indicating the stroke thickness in pixels.
+     */
+    void SetStrokeThickness(int strokeThickness);
+
+    /**
+     * This typedef defines a function object as a type. The function object can
+     * be called when the polyline stroke thickness has changed. A function
+     * object of this type returns <code>void</code> and receives a constant
+     * reference to a <code>GeoMapObject</code> as an argument.
+     */
+    typedef std::tr1::function<void (const GeoMapObject&)> StrokeThicknessChangedFunctor;
+
+    /**
+     * This method sets a callback to be invoked when the polyline stroke
+     * thickness has changed.
+     * 
+     * @param strokeThicknessChanged A function object to be called when the polyline
+     *        stroke thickness has changed.
+     */
+    void SetStrokeThicknessChangedNotifier(StrokeThicknessChangedFunctor strokeThicknessChanged);
+
+    /**
+     * This method retrieves the bounding box of the polyline.
+     * 
+     * @return An object encapsulating the bounding box of the given polyline
+     *        object. 
+     */
+    GeoBoundingBox GetBoundingBox() const;
+
+    /**
+     * This method retrieves the object type of the given polyline.
+     * 
+     * @return A member of the enumerated data type indicating the type of the
+     *        given polyline object.
+     */
+    Type GetType() const;
+
+    /**
+     * This method sets a flag to indicate if the given object is visible.
+     *
+     * @return visible A Boolean, <code>true</code> if the object is visible,
+     *        otherwise <code>false</code>.
+     */
+   virtual void SetVisible(bool visible);
+
+   /**
+    * This method checks if the object was built with legal input. A valid
+    *  polyline must have a path that contains of at least two vertices.
+    *
+    * @return visible A Boolean, <code>true</code> if the object is valid,
+    *        otherwise <code>false</code>.
+    */
+    virtual bool IsValid() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoMapObjectPolyline);
+
+    class GeoMapObjectPolylineImpl;
+    std::auto_ptr<GeoMapObjectPolylineImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoObjectProvider.h b/inc/engine/maps/GeoObjectProvider.h
new file mode 100755 (executable)
index 0000000..b742203
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOOBJECTPROVIDER_H
+#define GEOOBJECTPROVIDER_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoProvider.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoMapObject;
+class GeoProjection;
+
+/**
+ * This class encapsulates a map object provider which manages all the objects
+ * to be displayed in any of the tiles that make up the visible map. The
+ * provider object can load tiles, add and remove objects to them, and retrieve
+ * objects from a specific pixel location.
+ *
+ * \ingroup maps
+ */
+class GeoObjectProvider: public GeoProvider
+{
+public:
+    
+    /**
+     * This method is a constructor.
+     * 
+     * @param projection A Pointer to the projection to use.
+     * 
+     * @param tileSize a value indicating the size of the map tile to use. 
+     */
+    GeoObjectProvider(GeoProjection* projection, int tileSize);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoObjectProvider();
+
+    /**
+     * This method loads the tile specified by the caller.
+     * 
+     * @param tileKey A constant reference to an object that specifies a tile
+     *        key. 
+     *
+     * @return A value representing the identifier of the issued request.
+     */
+    RestItemHandle::RequestId LoadTile(const TileKey& tileKey);
+
+    /**
+     * This method aborts loading of the tile specified by the caller.
+     * 
+     * @param tile A constant reference to an object encapsulating the tile
+     *        whose loading is to be aborted.
+     */
+    void AbortTile(const TilePtr& tile);
+    
+    /**
+     * This method sets a function to be invoked when the tile has loaded.
+     * 
+     * @param signal A constant reference to a function to be invoked when the
+     *        tile has loaded; the function accepts a reference to a
+     *        <code>TileKey</code> object and a pointer to the tile bitmap (see
+     *        also <code>GeoProvider</code>).
+     */
+    void TileLoaded(const TileLoadedFunc& signal);
+
+    /**
+     * This method sets function to be invoked when loading the tile failed.
+     *
+     * @param signal A constant reference to a function to be invoked when the
+     *        tile load failed; the function accepts a reference to the
+     *        corresponding <code>ErrorBase</code> object
+     *        <code>GeoProvider</code>). 
+     */
+    void TileFailed(const TileFailedFunc& signal);
+
+    /**
+     * This method adds an object specified by the caller.
+     * 
+     * @param obj A pointer to the object to add. 
+     */
+    void AddObject(GeoMapObject* obj, bool transferOwnership);
+
+    /**
+     * This method removes an object specified by the caller. The objects
+     * are also deleted if we have ownership (see AddObject)
+     * 
+     * @param obj A pointer to the object to remove. 
+     * @return Boolean value indicating if the removal of the object was successful
+     */
+    bool RemoveObject(GeoMapObject* obj);
+
+    /**
+     * This method removes all objects specified by the caller. The objects
+     * are also deleted if we have ownership (see AddObject)
+     *
+     * @param obj A pointer to the object to remove.
+     * @return Boolean value indicating if the removal of the object was successful
+     */
+    bool RemoveAllObjects();
+
+    /**
+     * This method retrieves an object at the screen position specified by the
+     * caller. 
+     * 
+     * @param point A constant reference to an object specifying the screen
+     *        coordinates of a location from which to retrieve an object.
+     */
+    GeoMapObject* GetObjectAtScreenPosition(const Tizen::Maps::Point& point);
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoObjectProvider);
+
+    class GeoObjectProviderImpl;
+    std::auto_ptr<GeoObjectProviderImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOOBJECTPROVIDER_H
diff --git a/inc/engine/maps/GeoProjection.h b/inc/engine/maps/GeoProjection.h
new file mode 100755 (executable)
index 0000000..b7dbb5b
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROJECTION_H
+#define GEOPROJECTION_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/DoubleMatrix4.h"
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#else
+#include <FGraphics.h>
+#include <FBaseDoubleMatrix4.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DoublePoint;
+class DoublePoint3;
+class GeoCoordinates;
+class GeoProjectionNode;
+
+class GeoProjection
+{
+public:
+    GeoProjection();
+    virtual ~GeoProjection();
+
+    virtual Tizen::Maps::Point geoToPixel(const GeoCoordinates& geo) const = 0;
+    virtual GeoCoordinates pixelToGeo(const Tizen::Maps::Point& pixel) const = 0;
+
+    virtual std::vector<GeoProjectionNode*> projectRoot();
+    virtual GeoProjectionNode* projectQuad(GeoProjectionNode* parent, int quad);
+
+    virtual void setTileSize(const Tizen::Maps::Dimension& size);
+    Tizen::Maps::Dimension tileSize() const;
+
+    virtual void setScreenSize(const Tizen::Maps::Dimension& size);
+    Tizen::Maps::Dimension screenSize() const;
+
+    virtual void setLevel(double value);
+    double level() const;
+
+    virtual void setMaximumLevel(double value);
+    double maximumLevel() const;
+
+    virtual void setMinimumLevel(double value);
+    double minimumLevel() const;
+
+    virtual void setHeading(double value);
+    double heading() const;
+
+    virtual void setGeoCenter(const GeoCoordinates& value);
+    GeoCoordinates geoCenter() const;
+
+    virtual bool setGeoCenterInPx(const Tizen::Maps::Point& value);
+    Tizen::Maps::Point screenCenter() const;
+
+    DoublePoint projectPoint(const DoublePoint& point) const;
+
+protected:
+    virtual void filter(GeoProjectionNode& transform,const std::vector<DoublePoint3>& points) = 0;
+    virtual DoublePoint3 projectPoint(double x, double y, double z=0) const = 0;
+
+    Tizen::Maps::DoubleMatrix4& GetMatrix();
+    const Tizen::Maps::DoubleMatrix4& GetMatrix() const;
+    Tizen::Maps::DoubleMatrix4& GetInverse();
+    const Tizen::Maps::DoubleMatrix4& GetInverse() const;
+
+    Tizen::Maps::Dimension& GetTileSize();
+    Tizen::Maps::Dimension& GetScreenSize();
+    GeoCoordinates& GetGeoCenter();
+    double& GetLevel();
+    double& GetHeading();
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProjection);
+    friend class TestGeoProjection;
+
+    class GeoProjectionImpl;
+    GeoProjectionImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOPROJECTION_P_H
diff --git a/inc/engine/maps/GeoProjectionNode.h b/inc/engine/maps/GeoProjectionNode.h
new file mode 100755 (executable)
index 0000000..74e9c02
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROJECTIONNODE_P_H
+#define GEOPROJECTIONNODE_P_H
+
+#include <vector>
+#include <tr1/memory>
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FGraphics.h>
+#include <FMediaImage.h>
+#endif
+
+#include "internal/DoublePoint.h"
+#include "internal/DoublePoint3.h"
+#ifdef TIZEN_MIGRATION
+// chanywa #include "base/BaseByteBuffer.h"
+#endif
+
+#include "maps/GeoTile.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoProjectionNode
+{
+public:
+    GeoProjectionNode();
+    GeoProjectionNode(const DrawableBitmapPtr& image);
+    ~GeoProjectionNode();
+
+    std::vector<DoublePoint3> m_points;
+    std::vector<DoublePoint3> m_subPoints;
+
+    DrawableBitmapPtr m_image;
+    DrawableBitmapPtr m_layer;
+    double m_r;
+    double m_x;
+    double m_y;
+    bool m_clipped;
+    bool m_culled;
+    bool m_split;
+    bool m_requestImage;
+    bool m_peekImage;
+    bool m_postdrawing;
+    bool m_drawing;
+    bool m_predrawing;
+    int m_splitCount;
+    int m_tx;
+    int m_ty;
+    int m_stx;
+    int m_sty;
+    int m_rtx;
+    int m_rty;
+    int m_rlevel;
+    int m_level;
+    float m_opacity;
+
+    enum{ NUM_OF_CHILDREN = 4 };
+    GeoProjectionNode* m_children[NUM_OF_CHILDREN];
+
+    void setImage(const DrawableBitmapPtr& image);
+    void applyImage(const DrawableBitmapPtr& image,const float opacity);
+
+    bool requestImage(){ return m_requestImage; }
+    bool peekImage(){ return m_peekImage; }
+    bool split(){ return m_split; }
+    bool postdrawing(){ return m_postdrawing && m_image != 0; }
+    bool drawing(){ return m_drawing && m_image != 0; }
+    bool predrawing(){ return m_predrawing && m_image != 0; }
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProjectionNode);
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // QGEOPROJECTED_P_H
diff --git a/inc/engine/maps/GeoProvider.h b/inc/engine/maps/GeoProvider.h
new file mode 100755 (executable)
index 0000000..938593e
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROVIDER_P_H_
+#define GEOPROVIDER_P_H_
+
+#include <tr1/functional>
+
+#include "common/HereMaps_global.h"
+#include "common/RestItemHandle.h"
+#include "maps/GeoTile.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileKey;
+class ErrorBase;
+class DrawableBitmap;
+
+/**
+ * This class is the base class for provider classes in the Maps API. An example
+ * of a derived class is <code>GeoObjectProvider</code>.
+ * 
+ * \ingroup maps
+ */
+class GeoProvider
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    GeoProvider() {}
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoProvider() {}
+
+    /**
+     * This method loads the map tile specified by the caller. The method must
+     * be implemented by the derived classes.
+     * 
+     * @param tileKey A constant reference to an object that specifies a tile
+     *        key. 
+     *
+     * @return A value representing the identifier of the tile request.
+     */
+    virtual RestItemHandle::RequestId LoadTile(const TileKey& tileKey) = 0;
+
+    /**
+     * This method aborts loading of the map tile specified by the caller. The
+     * method must be implemented by the derived classes.
+     * 
+     * @param tile The tile whose loading is to be aborted.
+     */
+    virtual void AbortTile(const TilePtr& tile) = 0;
+
+    /**
+     * This typedef defines a function as a type. The function can be called
+     * when the map tile has been loaded. A function of this type accepts a
+     * reference to a <code>TileKey</code> object, a pointer to the tile
+     * bitmap and a reference to an instance of <code>GeoProvider</code>.
+     */
+    typedef std::tr1::function<void (const TileKey&, DrawableBitmapPtr, GeoProvider&)> TileLoadedFunc;
+    
+    /**
+     * This method registers a function to be invoked when the tile has loaded.
+     * 
+     * @param signal A constant reference to a function to be invoked when the
+     *        tile has loaded; the function accepts a reference to a
+     *        <code>TileKey</code> object and a pointer to the tile bitmap.
+     */
+    virtual void TileLoaded(const TileLoadedFunc& signal) = 0;
+    
+    /**
+     * This typedef defines a function as a type. The function can be called
+     * when an attempt to load a map tile has failed. A function of this type
+     * accepts a reference to a <code>TileKey</code> object and a reference to
+     * an object containing information about the error that occurred (an
+     * instance of <code>ErrorBase</code>).
+     */
+    typedef std::tr1::function<void (const TileKey&, const ErrorBase&)> TileFailedFunc;
+
+    /**
+     * This method sets function to be invoked when an attempt to load a tile
+     * has failed.
+     *
+     * @param signal A constant reference to a function to be invoked when the
+     *        tile load has failed; the callback function accepts a reference to
+     *        a <code>TileKey</code> object and a reference to an object
+     *        encapsulating information about the error that occurred (an
+     *        instance of <code>ErrorBase</code>).
+     */
+    virtual void TileFailed(const TileFailedFunc& signal) = 0;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProvider);
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOPROVIDER_P_H_ */
diff --git a/inc/engine/maps/GeoProviderManager.h b/inc/engine/maps/GeoProviderManager.h
new file mode 100755 (executable)
index 0000000..316f485
--- /dev/null
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOPROVIDERMANAGER_P_H_
+#define GEOPROVIDERMANAGER_P_H_
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+
+#include "maps/GeoTile.h"
+#include "maps/GeoProvider.h"
+
+#ifdef TIZEN_MIGRATION
+#include "base/Timer.h"
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoTiledMap;
+class QueryListener;
+
+/**
+ * This class encapsulates management of all the providers of tiles and map
+ * objects. It registers providers and requests tiles and objects on their
+ * behalf, eventually compositing each tile in the map to ensure the tiles
+ * contain not only the map tile bitmaps, but also any markers, polylines and
+ * polygons that must be drawn on top of the bitmaps.
+ * 
+ * The virtual methods defined on this class require implementation by derived
+ * classes. 
+ * 
+ * \ingroup maps
+ */
+class GeoProviderManager : public Tizen::Maps::ITimerEventListener
+{
+public:
+    /**
+     * This method retrieves an object representing the key for a tile on the
+     * basis of the zoom level and coordinates of the tile in the tile grid at
+     * that zoom level.
+     * 
+     * @param level A value indicating the zoom level.
+     * 
+     * @param x A value representing the x-coordinate in the tile grid.
+     * 
+     * @param y A value representing the y-coordinate in the tile grid.
+     * 
+     * @return An object representing the tile key.
+     */
+    TileKey GetKey(int level, int x, int y);
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoProviderManager();
+
+    /**
+     * This method is a constructor.
+     *
+     * @param rMap A reference to the tile map whose tiles are processed by the
+     *        given manager object.
+     */
+    GeoProviderManager(GeoTiledMap& rMap);
+
+    /**
+     * This method is the (virtual) destructor.  
+     */
+    virtual ~GeoProviderManager();
+
+    /**
+     * This method is invoked when the timer expires.
+     * 
+     * @param timer A reference to the timer object.
+     */
+    virtual void OnTimerExpired(Tizen::Maps::Timer& timer);
+
+    /**
+     * This method checks if a previously requested tile is available.  
+     * 
+     * @param level A value indicating the zoom level.
+     * 
+     * @param x A value representing the x-coordinate in the tile grid.
+     * 
+     * @param y A value representing the y-coordinate in the tile grid.
+     * 
+     * @return A pointer to the tile object (which is <code>NULL</code> if the
+     *         tile is not available). 
+     */
+    TilePtr PeekTile(int level, int x, int y);
+
+    /**
+     * This method checks if a previously requested tile is available.  
+     * 
+     * @param key An object representing the key that identifies the tile to check.
+     * 
+     * @return A pointer to the tile object (which is <code>NULL</code> if the
+     *         tile is not available). 
+     */
+    TilePtr PeekTile(const TileKey& key);
+
+    /**
+     * This method requests a tile.
+     * 
+     * @param level A value indicating the zoom level.
+     * 
+     * @param x A value representing the x-coordinate in the tile grid.
+     * 
+     * @param y A value representing the y-coordinate in the tile grid.
+     * 
+     * @return A pointer to the tile object (which is <code>NULL</code> if the
+     *         tile is not available). 
+     */
+    TilePtr RequestTile(int level, int x, int y);
+
+    /**
+     * This method removes the tile specified by the caller from the cache.
+     * 
+     * @param tile A constant reference to the tile object to remove from the cache. 
+     */
+    void RemoveCachedTile(const TilePtr& tile);
+
+    /**
+     * This method clears the map tile cache.
+     */
+    void ClearCache();
+
+    /**
+     * This method clears any map objects from the cache.
+     * 
+     * @param bClearAndRequest A Boolean indicating if the map objects should be
+     *        rerequested when they have been cleared (<code>true</code>,
+     *        default) or not <code>fault</code>.
+     */
+    void ClearCachedMapObjectsOnly(bool bClearAndRequest=true);
+
+    /**
+     * This method retrieves a count of cached map tiles.
+     * 
+     * @return A value indicating the number of cached map tiles.
+     */
+    size_t GetNumCachedTiles() const;
+
+    /**
+     * This method adds a provider to those managed by the given manager instance.
+     * 
+     * @param provider A pointer to a provider object to add.
+     */
+    void AddProvider(GeoProvider* provider);
+
+    /**
+     * This method removes the provider identified by the caller to those
+     * managed by the given manager instance.
+     * 
+     * @param provider A pointer to a provider object to remove.
+     */
+    bool RemoveProvider(GeoProvider* pProvider);
+
+    /**
+     * This method retrieves a provider matching the index supplied by the caller.
+     * 
+     * @param idx A value of the index from which to retrieve the provider. 
+     * 
+     * @return A pointer to the provider object or <code>NULL</code> if the
+     *         supplied index is invalid. 
+     */
+    GeoProvider* GetProvider(size_t idx) const;
+
+    /**
+     * This method obtains the count of providers managed by the given
+     * instance of <code>GeoProviderManager</code>.
+     * 
+     * @return A value representing the count of providers.
+     */
+    size_t GetNumProviders() const;
+    
+    /**
+     * This method is invoked when a tile has been loaded. It adds the
+     * tile to the list of loaded files, removes it from the list of loading
+     * tiles and the cache, and ensures it is displayed. 
+     * 
+     * @param rKey A constant reference to a key object that identifies the
+     *        loaded tile.  
+     * 
+     * @param image A pointer to the tile image object.
+     *
+     * @param rProvider The provider for which the tile has been acquired.
+     */
+    void HandleTileLoaded(const TileKey& rKey, DrawableBitmapPtr image, GeoProvider& rProvider);
+
+    /**
+     * This method is invoked when a tile has been loaded. It adds the
+     * tile to the list of loaded files, removes it from the list of loading
+     * tiles and the cache, and ensures it is displayed. 
+     * 
+     * @param rKey A constant reference to a key object that identifies the
+     *        tile.  
+     * 
+     * @param rError A constant reference to an object containing information
+     *        about the error that occurred.
+     */
+    void HandleTileFailed(const TileKey& rKey, const ErrorBase& rError);
+
+    /**
+     * This method starts the process of loading the next requested file. 
+     */
+    void StartNextTileLoad();
+
+    /**
+     * This method sets a value indicating the maximum number of pending
+     * requests.
+     * 
+     * @param uLimit A value indicating the maximum number of pending requests.
+     */
+    void SetPendingRequestsLimit(size_t uLimit);
+
+    /**
+     * This method retrieves a value indicating the maximum number of pending
+     * requests.
+     * 
+     * @return A value indicating the maximum number of pending requests.
+     */
+    size_t GetPendingRequestsLimit() const;
+
+    /**
+     * This method retrieves a value indicating the count of pending
+     * requests.
+     * 
+     * @return A value indicating how many requests are pending.
+     */
+    size_t GetNumPendingRequests() const;
+
+    /**
+     * This method sets a value indicating the maximum number of tiles that can
+     * be cached.
+     * 
+     * @param uLimit A value indicating the maximum number of cached tiles.
+     */
+    void SetCachedTilesLimit(size_t uLimit);
+
+    /**
+     * This method retrieves a value indicating the maximum number of tiles that
+     * can be cached.
+     * 
+     * @return A value indicating the maximum number of cached tiles.
+     */
+    size_t GetCachedTilesLimit() const;
+
+private:
+    void LoadTile(const TilePtr tile, unsigned int uProviderLevel);
+    void AbortTile(const TilePtr tile);
+    void LogTile(const String& text,const TilePtr& tile);
+    void LogTile(const String& text,int level,int x,int y);
+
+    void BeginMarking();
+    void EndMarking();
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoProviderManager);
+    friend class GeoTiledMap;
+    friend class TestGeoProviderManager;
+    class GeoProviderManagerImpl;
+    GeoProviderManagerImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoTile.h b/inc/engine/maps/GeoTile.h
new file mode 100755 (executable)
index 0000000..8b325b2
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOTILE_H
+#define GEOTILE_H
+
+#include <tr1/memory>
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FGraphics.h>
+#include <FGraphicsOpengl2.h>
+#endif
+
+#include "common/RestItemHandle.h"
+#include "maps/DrawableBitmap.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoProviderManager;
+
+#if 0 //note: this class has been moved to a separate file
+/**
+ * This class encapsulates a bitmap that can be drawn in a graphics context (on
+ * the map, whether the bitmap can represent a tile). 
+ *
+ * A map tile supports two layers, the map tile layer and a map objects layer,
+ * (which overlays the map tile layer). The latter may be
+ * <code>NULL</code> if no objects have been added to the map. 
+ * 
+ * \ingroup maps
+ */
+class DrawableBitmap
+{
+public:
+    /**
+     * This typedef defines a render handle as a type.
+     */
+    typedef UInt RenderHandle;
+
+    
+    /**
+     * This method is a constructor. It initiates a new instance using the
+     * bitmap pointer supplied by the caller.
+     * 
+     * @param bitmap A pointer to a bitmap object.
+     */
+    DrawableBitmap(std::auto_ptr<Tizen::Graphics::Bitmap>& bitmap)
+    : m_bitmap(bitmap)
+    , m_renderHandle(0)
+    {
+    }
+
+    /**
+     * This method is the destructor. It destroys the given instance and rests
+     * the render handle.
+     */
+    ~DrawableBitmap()
+    {
+        ResetRenderHandle();
+    }
+
+    /**
+     * This method resets the render handle for the given bitmap instance. 
+     */
+    void ResetRenderHandle()
+    {
+        if (m_renderHandle)
+        {
+            Tizen::Graphics::Opengl::glDeleteTextures(1, &m_renderHandle);
+        }
+        m_renderHandle = 0;
+    }
+
+    /**
+     * This method obtains a pointer to the bitmap.
+     * 
+     * @return A pointer to the bitmap.
+     */
+    Tizen::Graphics::Bitmap* GetBitmap() const
+    {
+        return m_bitmap.get();
+    }
+
+    /**
+     * This method sets the render handle for the given bitmap instance to the
+     * value provided by the caller.
+     * 
+     * @param aRenderHandle A new value for the render handle.
+     */
+    void SetRenderHandle(RenderHandle aRenderHandle)
+    {
+        m_renderHandle = aRenderHandle;
+    }
+
+    /**
+     * This method retrieves the current render handle.
+     * 
+     * @return A unsigned integer representing the render handle.
+     */
+    RenderHandle GetRenderHandle() const
+    {
+        return m_renderHandle;
+    }
+
+private:
+    std::auto_ptr<Tizen::Graphics::Bitmap> m_bitmap;
+    RenderHandle m_renderHandle;
+};
+
+//-----------------------------------------------------------------------------
+
+typedef std::tr1::shared_ptr<DrawableBitmap> DrawableBitmapPtr;
+
+#endif
+
+class TileKey;
+
+
+/**
+ * This class encapsulates a map tile. A map tile is a square bitmap that is
+ * fetched from a grid representing the normalized Mercator projection. The
+ * position of the tile in this grid depends on the map zoom level and is
+ * defined by the x and y coordinates. At the lowest zoom level, there is only
+ * one tile. At the next higher zoom level, the grid is 2 x 2. With each zoom
+ * level above that, the x-size and the y-size of the grid increase by a power
+ * of two.
+ * 
+ * \ingroup maps
+ */
+class GeoTile
+{
+public:
+
+    /**
+     * This enumeration defines identifiers for event types.
+     */
+    enum EventType
+    {
+        ET_OnTileFetcherReply = 0, ///< Indicates an event fired when a reply to
+                                   ///  a tile fetch request arrives.
+        ET_OnFailure               ///< Indicates an event fired on failure.
+    };
+
+    
+    /**
+     * This property holds a value representing the tile size. 
+     */
+    static int size;
+
+    /**
+     * This method is a contructor. It initializes a new instance of the class
+     * using the manager reference and the tile key provided by the caller.
+     * 
+     * @param rKey A constant reference to a key object that identifies the tile.
+     */
+    GeoTile(const TileKey& rKey);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoTile();
+
+    /**
+     * This method retrieves the tile key.
+     * 
+     * @return A constant reference to the tile key object for the given tile.
+     */
+    const TileKey& GetKey() const;
+
+    /**
+     * This method sets a flag to indicate whether the given map tile has been
+     * requested for display.
+     * 
+     * @param b A Boolean indcating if the given map tile has been requested
+     *(       <code>true</code>) or not (<code>false</code>).
+     */
+    void SetMarked(bool b);
+
+    /**
+     * This method checks whether the given map tile has been
+     * requested for display.
+     * 
+     * @return A Boolean indcating if the given map tile has been requested
+     *(       <code>true</code>) or not (<code>false</code>).
+     */
+    bool IsMarked() const;
+
+    /**
+     * This method retrieves a point to the tile image.
+     * 
+     * @return A pointer to the tile image.
+     */
+    DrawableBitmapPtr GetImage() const;
+
+    /**
+     * This method sets the tile image.
+     * 
+     * @param image A pointer to the tile image.
+     */
+    void SetImage(DrawableBitmapPtr image);
+
+    /**
+     * This method retrieves an object that represents a pending tile request to
+     * the REST server.
+     * 
+     * @return A value representing the identifier of the issued request.
+     */
+    const RestItemHandle::RequestId GetPendingRequest() const;
+
+    /**
+     * This method marks a tile request to the REST server as pending.
+     * 
+     * @aRequestId An identifier representing a tile request.
+     */
+    void SetPendingRequest(RestItemHandle::RequestId aRequestId);
+
+    /**
+     * This method sets/creates the map object layer. 
+     * 
+     * A tile supports two layers, the map tile layer on which the tile is
+     * drawn, and a layer superimposed on top of the map tile layer, which
+     * contains the map objects that may have been added/created. If no objects
+     * have been added/created, the map object layer is <code>NULL</code>.
+     * 
+     * @param layer A pointer to an instance of <code>DrawableBitmap</code> that
+     *        constitutes the object layer.
+     */
+    void SetMapObjectLayer(DrawableBitmapPtr layer);
+
+    /**
+     * This method retrieves a pointer to the map object layer. 
+     * 
+     * A tile supports two layers, the map tile layer on which the tile is
+     * drawn, and a layer superimposed on top of the map tile layer, which
+     * contains the map objects that may have been added/created. If no objects
+     * have been added/created, the map object layer is <code>NULL</code>.
+     * 
+     * @return A pointer to an instance of <code>DrawableBitmap</code> that
+     *        constitutes the object layer.
+     */
+    DrawableBitmapPtr GetMapObjectLayer() const;
+
+    /**
+     * This method removes the map object layer. 
+     * 
+     * A tile supports two layers, the map tile layer on which the tile is
+     * drawn, and a layer superimposed on top of the map tile layer, which
+     * contains the map objects that may have been added/created. If no objects
+     * have been added/created, the map object layer is <code>NULL</code>.
+     */
+    void RemoveMapObjectLayer();
+
+    /**
+     * This methods aborts loading of the given tile.
+     */
+    void AbortLoading();
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoTile);
+
+    class GeoTileImpl;
+    GeoTileImpl* m_pImpl;
+};
+
+typedef std::tr1::shared_ptr<GeoTile> TilePtr;
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/maps/GeoTileProvider.h b/inc/engine/maps/GeoTileProvider.h
new file mode 100755 (executable)
index 0000000..b3531fe
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOTILEPROVIDER_H
+#define GEOTILEPROVIDER_H
+
+#include "common/HereMaps_global.h"
+#include "maps/GeoProvider.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class DrawableBitmap;
+class TileKey;
+
+/**
+ * This class encapsulates a map tile provider which is responsible
+ * for loading map tiles.
+ *
+ * \ingroup maps
+ */
+class GeoTileProvider : public GeoProvider
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    GeoTileProvider();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoTileProvider();
+
+    /**
+     * This method loads the map tile specified by the caller.
+     * 
+     * @param tileKey A constant reference to an object that specifies a tile
+     *        key. 
+     *
+     * @return A value representing the identifier of request to load the tile.
+     */
+    RestItemHandle::RequestId LoadTile(const TileKey& tileKey);
+
+    /**
+     * This method aborts loading of the map tile specified by the caller. 
+     * 
+     * @param tile A constant reference to an object representing the tile whose
+     *        loading is to be aborted.
+     */
+    void AbortTile(const TilePtr& tile);
+    
+    /**
+     * This method registers a callback function to be invoked when the tile has loaded.
+     * 
+     * @param signal A constant reference to a function to be invoked when the
+     *        tile has loaded; the function accepts a reference to a
+     *        <code>TileKey</code> object and a pointer to the tile bitmap (see
+     *        also \ref GeoProvider).
+     */
+    void TileLoaded(const TileLoadedFunc &signal);
+
+    /**
+     * This method registers a callback function to be invoked when an attempt
+     * to load a map tile has failed.
+     * 
+     * @param signal A constant reference to a function to be invoked when an
+     *        attempt to load a tile has failed; the function accepts a
+     *        reference to a <code>TileKey</code> object and a reference to an
+     *        object containing information about the error that occurred (an
+     *        instance of <code>ErrorBase</code>).
+     */
+    void TileFailed(const TileFailedFunc& signal);
+
+private:
+    class GeoTileProviderImpl;
+    std::auto_ptr<GeoTileProviderImpl> m_impl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOTILEPROVIDER_H
diff --git a/inc/engine/maps/GeoTiledMap.h b/inc/engine/maps/GeoTiledMap.h
new file mode 100755 (executable)
index 0000000..304ad22
--- /dev/null
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOTILEDMAP_H
+#define GEOTILEDMAP_H
+
+#include <vector>
+#include <tr1/functional>
+
+#include "common/HereMaps_global.h"
+
+#ifndef TIZEN_MIGRATION
+#include <FUi.h>
+#include <FGraphics.h>
+#include <FGrpColor.h>
+#endif
+
+#include "maps/DrawableBitmap.h"
+#ifdef TIZEN_MIGRATION
+#include "graphic/Dimension.h"
+#include "graphic/Point.h"
+#include "graphic/Color.h"
+#include <Evas_GL.h>
+
+using namespace Tizen::Maps;
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoTile;
+class ErrorBase;
+class GeoMapObject;
+class GeoCoordinates;
+class TileFetcherReply;
+class GeoProjectionNode;
+class GeoMapObjectMarker;
+class GeoProviderManager;
+
+
+/**
+ * This class encapsulates a tiled map. The map is composed of square bitmap
+ * tiles retrieved from a grid that represents the normalized Mercator
+ * projection (see also <code>GeoTile</code>). The class supports a number of
+ * map types (for example normal, terrain, satellite, etc.) and provides methods
+ * to control the map size, orientation (heading), zoom level, and managing
+ * objects such as markers, polylines and polygons that can be superimposed on
+ * the map.
+ * 
+ * \ingroup maps
+ */
+class EXPORT_API GeoTiledMap
+{
+public:
+
+    /**
+     * This enumeration defines identifiers for supported map types.
+     */
+    enum MapType
+    {
+        MT_Normal_Day = 0,              ///< Indicates a normal (street/physical
+                                        ///  day map.
+        MT_Satellite_Day,               ///< Indicates a satellite day map.
+        MT_Terrain_Day,                 ///< Indicates a terrain day map.
+        MT_Hybrid_Day,                  ///< Indicates a hybrid day map        
+                                        ///  (satellite, with roads and labels).
+        MT_Last_Entry_Undefined         ///< Indicates that the map type is not
+                                        ///  defined. 
+    };
+
+    /**
+     * This enumeration defines identifiers for logo color.
+     */
+    enum LogoColor
+    {
+        LC_Blue = 0,  ///< Indicates that the color is blue.
+        LC_White      ///< Indicates that the color is white.
+    };
+
+    /**
+     * This method is the default constructor.
+     */
+    GeoTiledMap();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~GeoTiledMap();
+
+    /**
+     * This method sets the size of the map.
+     * 
+     * @param size A constant reference to an object specifying the size of the
+     *        map in pixels (width and height).
+     */
+    void SetMapSize(const Tizen::Maps::Dimension& size);
+
+    /**
+     * This method retrieves the map size.
+     *
+     * @return A constant reference to an object containing the width and height
+     *        of the map in pixels.
+     */
+    const Tizen::Maps::Dimension& GetMapSize() const;
+
+    /**
+     * This method sets the map zoom level.
+     * 
+     * @param zoomLevel A value indicating the new zoom level.
+     */
+    void SetZoomLevel(double zoomLevel);
+    
+    /**
+     * This method retrieves the map zoom level.
+     * 
+     * @return A value indicating the new zoom level.
+     */
+    double GetZoomLevel() const;
+    
+    /**
+     * This method retrieves the minimum map zoom level.
+     * 
+     * @return A value indicating the minimum map zoom level.
+     */
+    double GetMinimumZoomLevel() const;
+    
+    /**
+     * This method retrieves the maximum map zoom level.
+     * 
+     * @return A value indicating the maximum map zoom level.
+     */
+    double GetMaximumZoomLevel() const;
+   
+    /**
+     * This method pans the map the caller-specified number of pixels
+     * horizontally and vertically.
+     *
+     * @param dx A value indicating the number of pixels to move the map along
+     *        the horizontal axis.
+     *
+     * @param dy A value indicating the number of pixels to move the map along
+     *        the vertical axis.
+     */
+    void Pan(int dx, int dy);
+
+    /**
+     * This method sets the coordinates of the map center. 
+     * 
+     * @param center A constant reference to an object containing the new
+     *        geographic coordinates of the map center.
+     */
+    void SetCenter(const GeoCoordinates& center);
+
+    /**
+     * This method retrieves the coordinates of the map center. 
+     * 
+     * @return A constant reference to an object containing the
+     *        geographic coordinates of the map center.
+     */
+    GeoCoordinates GetCenter() const;
+
+    /**
+     * This method renders the given object invalid by resetting the drawable
+     * object representing the map and resetting and reinitializing the tile
+     * cache.
+     */
+    void Invalidate();
+
+    /**
+     * This method invalidates (discards) all the map objects, including
+     * markers. 
+     */
+    void InvalidateMapObjects();
+
+    /**
+     * This method invalidates (clears) the cache.
+     */
+    void ClearCache();
+
+    /**
+     * This method clears all the map objects associated with the given tiled
+     * map object. 
+     */
+    void ClearMapObjects();
+
+    /**
+     * This method converts the geographic location specified by the caller to
+     * screen coordinates, taking into consideration the current zoom level and
+     * the view area.
+     * 
+     * @param coordinate A constant reference to an object containing the
+     *        coordinates to convert.
+     * 
+     * @return An object containing the x and y coordinates defining the screen
+     *        location.
+     */
+    Tizen::Maps::Point CoordinateToScreenPosition(const GeoCoordinates& coordinate) const;
+
+    /**
+     * This method converts the screen position specified by the caller to
+     * geographic coordinates. The method is called, for example, when a marker
+     * is being added to the map.
+     * 
+     * @param screenPosition An object containing the x and y coordinates
+     *        defining the screen location to convert.
+     * 
+     * @return An object containing the geographic coordinates of corresponding
+     *        to the received screen position.
+     */
+    GeoCoordinates ScreenPositionToCoordinate(const Tizen::Maps::Point& screenPosition) const;
+
+    //map objects support
+    /**
+     * This method adds an object to the map. The object is a marker, a polygon
+     * or polyline, or a group of objects.
+     * 
+     * @param obj A pointer to an object to add to the map. If the object does
+     *        not exist (is <code>NULL</code>), the method has no effect.
+     * 
+     * @param bTransferOwnership A Boolean value indicating if the ownership of
+     *        the map object given in the first parameter should be transferred
+     *        to this map instance (<code>true</code>, default) or not
+     *        (<code>false</code>). The default behavior transfers the
+     *        ownership, which means that the map object becomes responsible for
+     *        deleting the markers.
+     */
+    void AddObject(GeoMapObject* obj, bool bTransferOwnership=true);
+
+    /**
+     * This method removes the object specified by the caller from the map. 
+     * 
+     * @param obj A pointer to the object to remove from the map. If the object
+     *        does not exist (is <code>NULL</code>), the method has no effect.
+     * 
+     * @return Boolean value indicating if the removal of the object was
+     *        successful (<code>true</code>) or not (<code>false</code>).
+     */
+    bool RemoveObject(GeoMapObject* obj);
+
+    /**
+     * This method obtains a pointer to the map object located at the screen
+     * position indicated by the caller.
+     * 
+     * @param point A constant reference to an object containing the pixel
+     *        coordinates of the screen position from which to get the map object.
+     * 
+     * @return A pointer to the map object at the specified screen location,
+     *        otherwise <code>NULL</code> if no map object is found.
+     */
+    GeoMapObject* GetObjectAtScreenPosition(const Tizen::Maps::Point& point) const;
+
+    /**
+     * This method obtains a count of marker objects in the given tiled map.
+     * 
+     * @return A value that indicates the number of marker objects.
+     */
+    size_t GetNumMarkerObjects() const;
+
+    /**
+     * This method retrieves a pointer to a marker object at the index specified
+     * by the caller.
+     * 
+     * @param idx A value specifying the index of the marker object to
+     *        retrieve. 
+     * 
+     * @return A pointer to the marker object at the specified index or
+     *        <code>NULL</code> if the index is invalid.
+     */
+    GeoMapObjectMarker* GetMarkerObject(size_t idx) const;
+
+    //draws the map into the current OpenGl context
+    /**
+     * This method draws (renders and displays) a map image of the size
+     * specified by the caller. The displayed map includes the required map
+     * tiles as well as any objects such as markers, polygons and polylines.
+     * 
+     * @param uWidth A value specifying the width of the map image.
+     * 
+     * @param uHeight A value specifying the height of the map image. 
+     * 
+     * @return A Boolean, <code>true</code> if the map has been successfully
+     *        pained, otherwise <code>false</code>.
+     */
+    bool PaintMap(unsigned int uWidth, unsigned int uHeight);
+
+    /**
+     * This typedef defines a function object as a type. The function object can
+     * be called when the map has been updated. A function object of this type
+     * returns <code>void</code> and receives no arguments.
+     */
+#ifdef TIZEN_MIGRATION
+    typedef std::tr1::function<void (void *)> UpdateMapSignalFunctor;
+#else
+    typedef std::tr1::function<void ()> UpdateMapSignalFunctor;
+#endif
+
+    /**
+     * This method sets a callback to be invoked when the map has
+     * been updated. 
+     * 
+     * @param slot A function object to be called when the map has
+     *        been updated. 
+     */
+#ifdef TIZEN_MIGRATION
+     void SetUpdateMapSignal(UpdateMapSignalFunctor slot, void *data);
+#else
+     void SetUpdateMapSignal(UpdateMapSignalFunctor slot);
+#endif
+
+     /**
+      * This method sets the map type.
+      * 
+      * @param aMapType A value indicating the new map type.
+      */
+    void SetMapType(MapType aMapType);
+
+     /**
+      * This method retrieves the map type.
+      * 
+      * @return A value indicating the current map type.
+      */
+    MapType GetMapType() const;
+
+    /*
+     * Available language options are:
+     * L"ara", L"chi", L"cht", L"dut", L"eng", L"ger", L"gle", L"fre", L"ita", L"spa", L"rus", L"pol", L"gre", L"wel"
+     */
+    /**
+     * This method sets the language of the map. 
+     * 
+     * @param aMapLanguage A constant reference to a string containing a
+     *        language code. The value of the string must be one of "ara"
+     *        (Arabic), "chi" (Chinese), "cht" (Chinese-Taiwan), "dut" (Dutch),
+     *        "eng" (English), "ger" (German), "gle" (Irish), "fre" (French),
+     *        "ita" (Italian), "spa" (Spanish), "rus" (Russian), "pol" (Polish),
+     *        "gre" (Greek), "wel" (Welsh)
+     */
+    void SetMapLanguage(const String& aMapLanguage);
+
+    /**
+     * This method retrieves the current language of the map. 
+     * 
+     * @return A constant reference to a string containing the language code,
+     *        which is one of "ara" (Arabic), "chi" (Chinese), "cht"
+     *        (Chinese-Taiwan), "dut" (Dutch), "eng" (English), "ger" (German),
+     *        "gle" (Irish), "fre" (French), "ita" (Italian), "spa" (Spanish),
+     *        "rus" (Russian), "pol" (Polish), "gre" (Greek), "wel" (Welsh)
+     */
+    const String& GetMapLanguage() const;
+
+    /**
+     * This method sets the size of the tiles used for rendering the map.
+     *
+     * @param uTileSizeInPX Specifies the width and the height of the tiles. Note that
+     *        only 128 and 256 are supported as valid values.
+     */
+    void SetTileSize(unsigned int uTileSizeInPx);
+
+    /**
+     * This method retrieves the size of the tiles, used for rendering the map.
+     * 
+     * @return An unsigned integer indicating the size of the map tiles.
+     */
+    unsigned int GetTileSize() const;
+
+    /**
+     * This method changes the background color of the map.
+     * The background color is updated after refreshing the map.
+     * 
+     * @param color A constant reference to an object representing the new map
+     *        background color.
+     */
+    void SetBackgroundColor(const Tizen::Maps::Color& color);
+
+#ifdef TIZEN_CUSTOMIZATION
+    /**
+     * This method retrieves the root tile, used for rendering the map.
+     * 
+     * @return An pointer indicating the bitmap of the root tile.
+     */
+    DrawableBitmapPtr GetRootPixmap();
+
+    /**
+     * This method sets a pointer of a structure of the Evas GL API object that
+     *        contains the GL APIs to be used in Evas GL.
+     * 
+     * @param __glapi A pointer to a structure of the Evas GL API object. 
+     */
+    void SetEvasGlApi(Evas_GL_API *__glapi);
+#endif
+
+private:
+    bool HandleTileReady(int level, int x, int y, unsigned int uLevelProvider);
+    bool DrawLogo(UInt uWidth, UInt uHeight, UInt aMapX = 0, UInt aMapY = 0);
+
+    void UpdateMapSignal();
+    void UpdateProjectionNodes();
+    float CreateProjectionTree(std::vector<GeoProjectionNode*>& result, GeoProjectionNode* node);
+    void InitializeCache();
+    void SortMarkers();
+    int GetDisplayDPI() const;
+    void ClearMarkers();
+    void SetRootPixmap(DrawableBitmapPtr rootPixmap);
+
+private:
+    friend class GeoMapObject;
+    friend class GeoMapObjectMarker;
+    friend class GeoProviderManager;
+    friend class TestGeoTiledMap;
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoTiledMap);
+
+    class GeoTiledMapImpl;
+    std::auto_ptr<GeoTiledMapImpl> m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOTILEDMAPDATA_H
diff --git a/inc/engine/maps/GlTexture.h b/inc/engine/maps/GlTexture.h
new file mode 100755 (executable)
index 0000000..1552142
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GLTEXTURE_H
+#define GLTEXTURE_H
+
+#include "common/HereMaps_global.h"
+
+#ifdef TIZEN_MIGRATION
+#include "graphic/Bitmap.h"
+#else
+#include <FGraphics.h>
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a GL texture that is a container for map tile bitmaps.
+ * 
+ * \ingroup maps
+ */
+class GlTexture
+{
+public:
+    
+    /**
+     * This method is a constructor that initializes a new texture instance with
+     * the bitmap object provided by the caller.
+     * 
+     * @param rBitmap A constant reference to a bitmap object.
+     */
+    GlTexture(const Tizen::Maps::Bitmap& rBitmap);
+
+    /**
+     * This method is the destructor.
+     */
+    ~GlTexture();
+    
+    /**
+     * This method retrieves the texture id.
+     * 
+     * @return A value representing the texture id.
+     */
+    unsigned int GetTextureId() const;
+    
+    /**
+     * This method sets the texture id.
+     * 
+     * @param uId A value representing the texture id.
+     */
+    void SetTextureId(unsigned int uId);
+
+    /**
+     * This method checks if the called instance wraps a valid GL texture
+     *
+     */
+    bool IsValid() const;
+
+    /**
+     * This method checks if the passed texture handle is a valid GL texture
+     *
+     */
+    static bool IsValid(unsigned int uId);
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GlTexture);
+
+    class GlTextureImpl;
+    GlTextureImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/routes/GeoRoute.h b/inc/engine/routes/GeoRoute.h
new file mode 100755 (executable)
index 0000000..26266cf
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTE_H
+#define GEOROUTE_H
+
+#include <vector>
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+#include "routes/GeoRouteQuery.h"
+#include "routes/RouteSegment.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class RouteSegment;
+class GeoBoundingBox;
+
+class GeoRoute;
+
+/** 
+ * This typedef defines a list (vector) of instances of <code>GeoRoute</code> as
+ * a type.
+ * 
+ * \ingroup routes
+ */
+typedef std::vector<GeoRoute> GeoRouteList;
+
+/**
+ * This class encapsulates a route. Instances of the class are data objects. The
+ * information they contain can be used to draw routes on the map. 
+ * 
+ * A route object contains member variables that represent:
+ * <ul>
+ * 
+ * <li> route segments - sections of the route encapsulated as instances of
+ *      <code>RouteSegment</code></li> 
+ * 
+ * <li> maneuvers - instances of <code>Maneuver</code></li> that contain
+ *      navigation instructions for the person following the route, indicating
+ *      how to continue from one section of the route to the next</li>
+ * 
+ * <li> route geometry - a list of instances of <code>GeoCoordinates</code></li>
+ *      that contains the point objects with the coordinates of the geographical
+ *      locations through which the route passes</li>
+ * 
+ * <li> duration - the length of time required to travel the route from start
+ *      to finish</li>
+ * 
+ * </ul>
+ * 
+ * Note that the above list is indicative, rather than comprehensive. 
+ */
+class EXPORT_API GeoRoute
+{
+public:
+
+   /**
+    * This is the default constructor.
+    */
+    GeoRoute();
+
+   /**
+    * This method is the copy constructor.
+    * 
+    * @param rRhs An object whose contents are to be copied to the instance
+    *        being created.
+    */
+    GeoRoute(const GeoRoute& rRhs);
+
+   /**
+    * This method is the destructor.
+    */
+    ~GeoRoute();
+
+    /**
+     * This method sets the id of the route object.
+     * 
+     * @param rId A constant reference to a string containing the unique id of
+     *        the route object.
+     */
+    void SetRouteId(const String& rId);
+
+    /**
+     * This method retrieves the id of the route object.
+     * 
+     * @return A string containing the unique id of
+     *        the route object.
+     */
+    String GetRouteId() const;
+
+    /**
+     * This method sets class property holding the request used to obtain the
+     * route data. 
+     * 
+     * @param rRequest A constant reference to an object that encapsulates the
+     *        query used to obtain the route data.
+     */
+    void SetRequest(const GeoRouteQuery& rRequest);
+
+    /**
+     * This method retrieves the value class property holding the request used
+     * to obtain the route data.
+     * 
+     * @return An object that encapsulates the query used to obtain the route
+     *       data.
+     */
+    GeoRouteQuery GetRequest() const;
+
+    /**
+     * This method sets a property that holds the bounding box enclosing
+     * the route. The bounding box is defined by the geographic coordinates of
+     * its top-left and bottom-right corners.  
+     * 
+     * @param rBounds A constant reference to an object containing the bounding
+     *        box.
+     */
+    void SetBounds(const GeoBoundingBox& rBounds);
+
+    /**
+     * This method retrieves the value of a class property that holds the
+     * bounding box enclosing the route. The bounding box is defined by the
+     * geographic coordinates of its top-left and bottom-right corners.
+     * 
+     * @return An object containing the bounding box. 
+     */
+    GeoBoundingBox GetBounds() const;
+
+    /**
+     * This method sets a class property that holds the list of segments of the
+     * route.
+     * 
+     * @param vRouteSegmentList A constant reference to an object that defines
+     *        the first segment of the route.
+     */
+    void SetRouteSegmentList(const RouteSegmentList& vRouteSegmentList);
+
+    /**
+     * This method retrieves the value of a class property that holds the list of
+     * segments of the route.  
+     * 
+     * @return An object that defines the list of segments of the route.
+     */
+     RouteSegmentList GetRouteSegmentList() const;
+
+    /**
+     * This method sets a class property that holds the time required to travel
+     * the length of the route. 
+     * 
+     * @param aSecs An integer value specifying the time required to travel the
+     *        length of the route in seconds.
+     */
+    void SetTravelTime(int aSecs);
+
+    /**
+     * This method retrieves the value of a class property that holds the time
+     * required to travel the length of the route.
+     * 
+     * @return An integer value specifying the time required to travel the
+     *        length of the route in seconds.
+     */
+    int GetTravelTime() const;
+
+    /**
+     * This method sets a class property that holds the length of the route --
+     * the total distance to travel between the start and end points of the
+     * route.
+     * 
+     * @param aDistance A value specifying the length of the route in meters. 
+     */
+    void SetDistance(double aDistance);
+
+    /**
+     * This method retrieves the value of a class property that holds the length
+     * of the route -- the total distance to travel between the start and end
+     * points of the route.
+     * 
+     * @return A value specifying the length of the route in meters. 
+     */
+    double GetDistance() const;
+
+    /**
+     * This method sets a class property indicating the travel mode for which
+     * the route was calculated.
+     * 
+     * @param aTravelMode A value indicating the mode of travel for the route. 
+     */
+    void SetTravelMode(GeoRouteQuery::TravelMode aTravelMode);
+
+    /**
+     * This method retrieves the value of a class property indicating the travel
+     * mode for which the route was calculated.
+     * 
+     * @return A value indicating the mode of travel for the route. 
+     */
+    GeoRouteQuery::TravelMode GetTravelMode() const;
+
+    /**
+     * This method sets a class property that defines the geometry of the route
+     * (it holds the coordinates of the points through which the route passes,
+     * the vertices of the route).
+     * 
+     * @param rPath A constant reference to an object containing the geographic
+     *       coordinates of the points through which the route passes (the route
+     *       vertices).
+     */
+    void SetPath(const GeoCoordinateList& rPath);
+
+    /**
+     * This method retrieves the value of a class property that defines the
+     * geometry of the route (it holds the coordinates of the points through
+     * which the route passes, the vertices of the route).
+     * 
+     * @return An object containing the geographic coordinates of the points
+     *       through which the route passes (the route vertices).
+     */
+    GeoCoordinateList GetPath() const;
+
+    /** 
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an object whose properties are to be
+     *       copied to the given instance of the class.
+     * 
+     * @return A reference to the given instance of the class after its member
+     *       elements have been updated.
+     */ 
+    GeoRoute& operator = (const GeoRoute& rRhs);
+
+private:
+    class GeoRouteImpl;
+    GeoRouteImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOROUTE_H */
diff --git a/inc/engine/routes/GeoRouteQuery.h b/inc/engine/routes/GeoRouteQuery.h
new file mode 100755 (executable)
index 0000000..f3af232
--- /dev/null
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTEQUERY_H
+#define GEOROUTEQUERY_H
+
+#include <map>
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+#include "common/GeoCoordinates.h"
+#include "common/GeoBoundingBox.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoRouteReply;
+class QueryListener;
+class GeoRouteQueryListener;
+
+/**
+ * This class encapsulates a query that requests a route calculation. The
+ * required calculation is specified in terms of route features, including the
+ * start and end points, waypoints (the locations through which the route must
+ * pass), areas to include and to avoid, mode of travel, route features with
+ * weighting, required optimization, etc.
+ * 
+ * \ingroup routes
+ */
+class EXPORT_API GeoRouteQuery : public BaseQuery
+{
+public:
+
+    /**
+     * This enumeration defines identifiers for the supported modes of travel. 
+     */
+    enum TravelMode {
+        TM_CarTravel = 0x0001,           ///< Indicates that the route is to be
+                                         ///  traveled by car.
+        TM_PedestrianTravel = 0x0002,    ///< Indicates that the route is for a pedestrian.
+        TM_PublicTransitTravel = 0x0008, ///< Indicates that the route is to be
+                                         ///  traveled using public transport.
+    };
+
+    /**
+     * This enumeration defines identifiers for the supported route feature
+     * types, feature types that can be favored or excluded by the route
+     * calculation.  
+     */
+    enum FeatureType {
+        FT_NoFeature = 0x00000000,            ///< Indicates no route features (are selected).
+        FT_TollFeature = 0x00000001,          ///< Indicates toll roads (toll gates/booths).
+        FT_MotorwayFeature = 0x00000002,      ///< Indicates motorway(s).
+        FT_BoatFerryFeature = 0x00000004,     ///< Indicates a boat ferry.
+        FT_RailFerryFeature = 0x00000008,     ///< Indicates rail (train) ferry.
+        FT_PublicTransitFeature = 0x00000010, ///< Indicates public transport.
+        FT_TunnelFeature = 0x00000020,        ///< Indicates tunnel.   
+        FT_DirtRoadFeature = 0x00000040,      ///< Indicates dirt road.
+        FT_ParksFeature = 0x00000080,         ///< Indicates park. 
+        FT_HOVLane = 0x00000100,              ///< Indicates a high-occupancy vehicle lane. 
+        FT_Stairs = 0x00000200                ///< Indicates stairs.
+    };                                             
+
+    /** 
+     * This enumeration defines identifiers for the supported route feature weighting. 
+     */
+    enum FeatureWeight {
+        FW_NormalFeatureWeight = 0x00000000,       ///< Indicates normal weighting.
+        FW_PreferFeatureWeight = 0x00000001,       ///< Indicates that a feature is preferred.
+        FW_AvoidFeatureWeight = 0x00000002,        ///< Indicates that a feature is to be avoided. 
+        FW_SoftExcludeFeatureWeight = 0x00000004,  ///< Indicates that soft-exclude applies to the feature.
+        FW_StrictExcludeFeatureWeight = 0x00000008 ///< Indicates that the feature is to be strictly excluded. 
+    };
+
+    /**
+     * This typedef defines a map of route feature types and weighting as a type.
+     */
+    typedef std::map< GeoRouteQuery::FeatureType, GeoRouteQuery::FeatureWeight > FeaturesMap;
+
+    /** 
+     * This enumeration defines identifiers for the supported route optimizations. 
+     */
+    enum RouteOptimization {
+        RO_ShortestRoute = 0x0001,    ///< Indicates the shortest route.
+        RO_FastestRoute = 0x0002,     ///< Indicates the fastest route.
+    };
+
+    /** 
+     * This enumeration defines identifiers for route segment detail specifiers. 
+     */
+    enum SegmentDetail {
+        SD_NoSegmentData = 0x0000,    ///< Indicates that no route segment data are to be included.
+        SD_BasicSegmentData = 0x0001  ///< Indicates that basic route segment data are to be included.
+    };
+
+    /** 
+     * This enumeration defines identifiers for route maneuver specifiers. 
+     */
+    enum ManeuverDetail {
+        MD_NoManeuvers = 0x0000,      ///< Indicates that manuevers are to be included int he route.
+        MD_BasicManeuvers = 0x0001    ///< Indicates that basic maneuvers are to be included in the route calculation.
+    };
+
+#ifdef TIZEN_CUSTOMIZATION
+    /** 
+     * This enumeration defines identifiers for route MetricSystem specifiers.
+     */
+    enum MetricSystem {
+        DIST_imperial = 0x0000,      ///< Indicates that MetricSystem is miles
+        DIST_metric = 0x0001         ///< Indicates that MetricSystem is m & km
+    };
+#endif
+
+    /**
+     * This method is a constructor that initializes a new instance of the
+     * class, using the list of waypoints supplied by the caller.
+     * 
+     * @param rWaypoints A constant reference to a vector of instances of
+     *        <code>GeoCoordinates</code> that define the route waypoints.
+     */
+    GeoRouteQuery(const GeoCoordinateList &rWaypoints = GeoCoordinateList());
+
+    /**
+     * This method is a constructor that initializes a new instance of the
+     * class, using the objects representing the route origin and destination
+     * supplied by the caller.
+     * 
+     * @param rOrigin A constant reference to an object that defines the point
+     *        of origin for the route.
+     * 
+     * @param rDestination A constant reference to an object that defines the 
+     *        destination for the route.
+     */
+    GeoRouteQuery(const GeoCoordinates &rOrigin, const GeoCoordinates &rDestination);
+
+    /**
+     * This method is a copy constructor that initializes a new instance of the
+     * class by copying the values of the properties of the object supplied by
+     * the caller.
+     * 
+     * @param rRhs A constant reference to an object whose property values are
+     *        to be used to initialize a new instance of the class.
+     */
+    GeoRouteQuery(const GeoRouteQuery &rRhs);
+
+    /** 
+     * This method is the destructor for objects of this class.
+     */
+    ~GeoRouteQuery();
+
+    /** 
+     * This is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an object whose property values are
+     *        to be copied to the given instance.
+     */
+    GeoRouteQuery& operator = (const GeoRouteQuery &rRhs);
+
+    /**
+     * This method sets route waypoints, using the list of objects supplied by
+     * the caller.
+     * 
+     * @param rWaypoints A constant reference to a vector of instances of
+     *        <code>GeoCoordinates</code> that define the route waypoints.
+     */
+    void SetWaypoints(const GeoCoordinateList &rWaypoints);
+
+    /**
+     * This method retrieves the route waypoints.
+     * 
+     * @return A vector of instances of <code>GeoCoordinates</code> that define
+     *        the route waypoints.
+     */
+    GeoCoordinateList GetWaypoints() const;
+
+    /** 
+     * This method sets areas through which the route must not pass, using a
+     * list of bounding box objects supplied by the caller.
+     * 
+     * @param rAreas A constant reference to a list of bounding box objects that
+     *        define the areas the route must avoid.
+     */
+    void SetExcludeAreas(const GeoBoundingBoxList &rAreas);
+
+    /** 
+     * This method retrieves a list of bounding boxes that defines areas through
+     * which the route must not pass. 
+     * 
+     * @return A list of bounding box objects that define the areas the route
+     *        must avoid.
+     */
+    GeoBoundingBoxList GetExcludeAreas() const;
+
+    // defaults to TravelByCar
+    /**
+     * This method sets the travel mode to be used in the route query.
+     * 
+     * @param aTravelModes A value indicating the travel mode to use in the
+     *        query.
+     */
+    void SetTravelModes(TravelMode aTravelModes);
+
+    /**
+     * This method retrieves the travel mode used in the route query.
+     * 
+     * @return A value indicating the travel mode used in the
+     *        query.
+     */
+    TravelMode GetTravelModes() const;
+
+    /**
+     * This method associates weighting with a feature to be used in the route
+     * query.  
+     * 
+     * @param aFeatureType A value indicating the feature type to which the
+     *        weighting is to apply.
+     *  
+     * @param aFeatureWeight A value indicating the weighting to apply.
+     */
+    void SetFeatureWeight(FeatureType aFeatureType, FeatureWeight aFeatureWeight);
+
+    /**
+     * This method retrieves the weighting for the feature type specified by the
+     * caller.  
+     * 
+     * @param aFeatureType A value indicating the feature type for which to 
+     *        retrieve weighting.
+     *  
+     * @return A value indicating the weighting associated with the named route
+     *        feature.
+     */
+    FeatureWeight GetFeatureWeight(FeatureType aFeatureType) const;
+
+    /**
+     * This method retrieves a map of route feature types specified for the
+     * given query.
+     * 
+     * @return An object containing a map of route feature types specified for
+     *         the given query.
+     */
+    FeaturesMap GetFeatureTypes() const;
+
+    // defaults to OptimizeFastes)
+    /**
+     *  This method sets the route optimization option for the given query.
+     * 
+     * @param aOptimization A value indicating the route optimization option to
+     *        set for the given query.
+     */
+    void SetRouteOptimization(RouteOptimization aOptimization);
+
+    /**
+     *  This method retrieves the route optimization selector set for the given
+     *  query.
+     * 
+     * @return A value indicating the route optimization selector set for the
+     *        given query.
+     */
+    RouteOptimization GetRouteOptimization() const;
+
+    // defaults to BasicSegmentData
+    /**
+     * This method sets the segment detail selector for the given query.
+     * 
+     * @param aSegmentDetail A value indicating the segment detail selector for
+     *        the given query.
+     */
+    void SetSegmentDetail(SegmentDetail aSegmentDetail);
+
+    /**
+     * This method retrieves the segment detail selector for the given query.
+     * 
+     * @return A value indicating the segment detail selector set for the given
+     *        query.
+     */
+    SegmentDetail GetSegmentDetail() const;
+
+    // defaults to BasicManeuvers
+    /**
+     * This method sets the maneuver detail selector for the given
+     * query. 
+     * 
+     * @param aManeuverDetail A value indicating the maneuver detail selector for
+     *        the given query.
+     */
+    void SetManeuverDetail(ManeuverDetail aMneuverDetail);
+
+    /**
+     * This method retrieves the maneuver detail selector set for the given
+     * query. 
+     * 
+     * @return A value indicating the maneuver detail selector for
+     *        the given query.
+     */
+    ManeuverDetail GetManeuverDetail() const;
+
+#ifdef TIZEN_CUSTOMIZATION
+    /**
+     * This method sets the MetricSystem selector for the given
+     * query. 
+     *
+     * @param aMetricSystem A value indicating the MetricSystemselector for
+     *        the given query.
+     */
+    void SetMetricSystem(GeoRouteQuery::MetricSystem aMetricSystem);
+
+    /**
+     * This method retrieves the MetricSystem selector set for the given query.
+     *
+     * @return A value indicating the MetricSystem selector for
+     *        the given query.
+     */
+    GeoRouteQuery::MetricSystem GetMetricSystem(void);
+
+    /**
+     * This method sets the bounding area for the given query.
+     *
+     * @param aMetricSystem A value indicating the bounding area for
+     *        the given query.
+     */
+    void SetViewBounds(GeoBoundingBox aViewBounds);
+
+    /**
+     * This method retrieves the bounding area set for the given query.
+     *
+     * @return A value indicating the bounding area for
+     *        the given query.
+     */
+    GeoBoundingBox GetViewBounds(void);
+#endif
+
+    /**
+     * This method attempts to establish a connection with the server and then,
+     * if the connection has been established, it builds and submits a query.
+     * 
+     * @rListener rListener A reference to an object that is to be notified when
+     *        the reply to the query has arrived from the server.
+     * 
+     * @param pUserData A pointer to user data to be passed back within the
+     *        corresponding reply object.
+     *
+     * @return A vaur representing the identifier of issued request.
+     */
+    RestItemHandle::RequestId Execute(GeoRouteQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+    /**
+     * This static method returns the base URI to be used for all subsequent
+     * geo route queries.
+     *
+     * @return A string containing the base URI.
+     */
+    static String GetBaseUri();
+
+    /**
+     * This static method returns the base URI to be used for all subsequent
+     * geo route queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    static void SetBaseUri(const String& sUri);
+
+private:
+    bool CreateBaseUrl(const String& sService, String& sDst) const;
+
+    String CreateUri() const;
+
+private:
+    class GeoRouteQueryImpl;
+    GeoRouteQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOROUTEQUERY_H */
diff --git a/inc/engine/routes/GeoRouteQueryListener.h b/inc/engine/routes/GeoRouteQueryListener.h
new file mode 100755 (executable)
index 0000000..a3540f3
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTEQUERYLISTENER_H
+#define GEOROUTEQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+
+#include "routes/GeoRouteReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoRouteReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to provide handling of the replies from the server.
+ * 
+ * \ingroup routes
+ */
+class EXPORT_API GeoRouteQueryListener : public QueryListener
+{
+public:
+
+    /**
+     * This is the default constructor.
+     */
+    GeoRouteQueryListener();
+
+    /**
+     * This method is the destructor.
+     */
+    ~GeoRouteQueryListener();
+
+    /**
+     * This method is a callback invoked when data have arrived in response to a
+     * route request.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnRouteReply(const GeoRouteReply& rReply) = 0;
+
+    #ifdef TIZEN_MIGRATION
+    /**
+     * This method is a callback invoked when geocoding request is failed.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnRouteFailure(const GeoRouteReply& rReply) = 0;
+    #endif
+
+private:
+
+    void OnReplySuccess(BaseReply& rReply);
+
+    #ifdef TIZEN_MIGRATION
+    void OnFailure(const BaseReply& rReply);
+    #endif
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/routes/GeoRouteReply.h b/inc/engine/routes/GeoRouteReply.h
new file mode 100755 (executable)
index 0000000..50bcf9e
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTEREPLY_H
+#define GEOROUTEREPLY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+#include "routes/GeoRoute.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class GeoRouteQuery;
+
+/**
+ * This class encapsulates a response to a route calculation request query. 
+ * 
+ * \ingroup routes
+ */
+class EXPORT_API GeoRouteReply : public BaseReply
+{
+public:
+
+    /**
+     * This is the default constructor. 
+     */
+    GeoRouteReply();
+
+    /**
+     * This is the (virtual) destructor.
+     */
+    virtual ~GeoRouteReply();
+
+    /** 
+     * This method retrieves the original route query request.
+     * 
+     * @return An object that encapsulates the original route query request.
+     */
+    GeoRouteQuery GetRequest() const;
+
+    /**
+     * This method retrieves a list of routes calculated in response to the
+     * request (see <code>GetRequest</code>).
+     * 
+     * @return A reference a an object containing the calculated routes.
+     */
+    GeoRouteList& GetRoutes() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoRouteReply);
+    friend class TestGeoRouteReply;
+
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+    void SetRequest(const GeoRouteQuery& aGeoRouteQuery);
+    void SetRoutes(const GeoRouteList& rRoutes);
+
+private:
+    class GeoRouteReplyImpl;
+    GeoRouteReplyImpl* m_pImpl;
+
+    friend class GeoRouteReplyImpl;
+    friend class GeoRouteQuery;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* GEOROUTEREPLY_H */
diff --git a/inc/engine/routes/GeoRouterReplyParser.h b/inc/engine/routes/GeoRouterReplyParser.h
new file mode 100755 (executable)
index 0000000..b07b99c
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef GEOROUTERREPLYPARSER_H
+#define GEOROUTERREPLYPARSER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/GeoCoordinates.h"
+#include "common/GeoBoundingBox.h"
+#include "routes/RouteSegment.h"
+
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class ErrorBase;
+class ParserError;
+class GeoRoute;
+
+
+/**
+ * This class encapsulates a parser of replies to routing requests.  It provides
+ * methods dedicated to parsing specific nodes of the reply data and populating
+ * a destination object supplied by the caller.
+ * 
+ * \ingroup routes
+ */
+class GeoRouterReplyParser
+{
+public:
+
+    /**
+     * This method retrieves the route details held in the XML node supplied by
+     * the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseRouteEntry(xmlNodePtr pNode, GeoRoute& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves a route summary entry held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseSummary(xmlNodePtr pNode, GeoRoute& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves a route travel mode held in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseMode(xmlNodePtr pNode, GeoRoute& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves the route shape definition from the XML node
+     * supplied by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseShape(xmlNodePtr pNode, GeoCoordinateList& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves a route bounding box from the XML node
+     * supplied by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseBoundingBox(xmlNodePtr pNode, GeoBoundingBox& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves a route waypoint defined in the XML node supplied
+     * by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseCoordinate(xmlNodePtr pNode, GeoCoordinates& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves a route leg defined in the XML node supplied by the
+     * caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseLeg(xmlNodePtr pNode, RouteSegment& rDst, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+    /**
+     * This method retrieves the details of a maneuver defined in the XML node
+     * supplied by the caller.
+     * 
+     * @param pNode A pointer to the XML node to parse. 
+     * 
+     * @param rDst A reference to an object which is to receive the results.
+     * 
+     * @param pCtx A pointer to the XPath context.
+     * 
+     * @param pError A pointer to an object that is populated
+     *        with error information should parsing fail.
+     * 
+     * @return <code>true</code> on success, otherwise <code>false</code> (in
+     *        which case the last argument to the method can be used to retrieve
+     *        the error information.
+     */
+    static bool ParseManeuver(xmlNodePtr pNode, Maneuver& rDst, GeoCoordinateList& vSegmentPath, xmlXPathContextPtr pCtx, ParserError*& pError);
+
+private:
+    static bool ExtractContent(xmlNodePtr pNode, String& sDst, ParserError*& pError);
+    static xmlNodePtr FindChildNode(xmlNodePtr pNode, const char* pUTF8Literal);
+
+    static void AppendOrSet(ParserError*& pError, ParserError* pLoc);
+
+    HERE_MAPS_NO_COPY_NO_ASSIGN(GeoRouterReplyParser);
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif // GEOROUTERREPLYPARSER_H
diff --git a/inc/engine/routes/Maneuver.h b/inc/engine/routes/Maneuver.h
new file mode 100755 (executable)
index 0000000..d4e2bee
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef MANEUVER_H
+#define MANEUVER_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Maneuver;
+typedef std::vector<Maneuver> ManeuverList;
+
+
+/** 
+ * This class represents a route maneuver. A route maneuver contains information
+ * that allows for navigation instructions to be generated, which explain how
+ * the person following a route is to proceed from one segment of the route to
+ * another. A <code>Maneuver</code> instance contains instruction text for the
+ * person following the route, the geographic coordinates of the waypoint to
+ * which it applies, an indication of the direction of travel, as well
+ * as time and distance to the next instruction. 
+ * 
+ * Maneuvers are tightly coupled to the <code>Route</code> instance for which
+ * they are generated.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API Maneuver
+{
+
+public:
+    /**
+     * This enumeration defines identifiers for route maneuver directions.  
+     */
+    enum InstructionDirection {
+        ID_NoDirection,          ///< Indicates that no directional instruction
+                                 ///  is set/specified; this is the default
+                                 ///  direction set by the default constructor. 
+        ID_DirectionForward,     ///< Indicates instruction to travel forward.
+        ID_DirectionBearRight,   ///< Indicates instruction to bear right.
+        ID_DirectionLightRight,  ///< Indicates instruction to turn slightly to
+                                 ///  the right.
+        ID_DirectionRight,       ///< Indicates instruction to turn right.
+        ID_DirectionHardRight,   ///< Indicates instruction to turn hard to the
+                                 ///  right. 
+        ID_DirectionUTurnRight,  ///< Indicates instruction to make a right
+                                 ///  u-turn. 
+        ID_DirectionUTurnLeft,   ///< Indicates instruction to make a left
+                                 ///  u-turn. 
+        ID_DirectionHardLeft,    ///< Indicates instruction to turn hard to the
+                                 ///  left. 
+        ID_DirectionLeft,        ///< Indicates instruction to turn left.
+        ID_DirectionLightLeft,   ///< Indicates instruction to turn slightly to
+                                 ///  the left.
+        ID_DirectionBearLeft     ///< Indicates instruction to bear left. 
+    };
+
+    /**
+     * This method is the default constructor. It creates an invalid instance,
+     * with direction set to ID_NoDirection.
+     */
+    Maneuver();
+
+    /**
+     * This method is the copy constructor. 
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        copied to the new instance of the class.
+     */
+    Maneuver(const Maneuver& rRhs);
+
+    /**
+     * This method is the destructor.
+     */
+    ~Maneuver();
+
+    /**
+     * This method is the assignment operator.
+     * 
+     * @param rRhs A constant reference to an object whose contents are to be
+     *        copied to the given instance of the class.
+     * 
+     * @return A reference to the given instance after the assignment.
+     */
+    Maneuver& operator = (const Maneuver& rRhs);
+
+    /**
+     * This method checks if the given maneuver object is valid. The object is
+     * valid if at least its position property holds valid coordinates and
+     * direction is set to a value other than <code>ID_NoDirection</code>.
+     * 
+     * @return <code>true</code> if the given object is valid, otherwise
+     *        <code>false</code>. 
+     */
+    bool IsValid() const;
+
+    /**
+     * This method sets the position (location) of the maneuver.
+     * 
+     * @param rPosition A constant reference to an object containing the
+     *        geographic coordinates of the location at which the maneuver is to
+     *        be executed.
+     */
+    void SetPosition(const GeoCoordinates& rPosition);
+
+    /**
+     * This method retrieves the position (location) of the maneuver.
+     * 
+     * @return An object containing the geographic coordinates of the location
+     *        at which the maneuver is to be executed.
+     */
+    GeoCoordinates GetPosition() const;
+
+    /**
+     * This method sets the maneuver instruction text.
+     * 
+     * @param sInstructionText A constant reference to a string containing the
+     *        maneuver instruction text.
+     */
+    void SetInstructionText(const String& sInstructionText);
+
+    /**
+     * This method retrieves the maneuver instruction text.
+     * 
+     * @return A constant reference to a string containing the maneuver
+     *        instruction text.
+     */
+    String GetInstructionText() const;
+
+    /**
+     * This method sets the maneuver direction.
+     * 
+     * @param aDirection A value indicating the maneuver direction.
+     */
+    void SetDirection(InstructionDirection aDirection);
+
+    /**
+     * This method retrieves the maneuver direction.
+     * 
+     * @return A value indicating the maneuver direction.
+     */
+    InstructionDirection GetDirection() const;
+
+    /**
+     * This method sets the time to next instruction in the given maneuver.
+     * 
+     * @param aSecs A value specifying the time to the next instruction in
+     *        seconds.
+     */
+    void SetTimeToNextInstruction(int aSecs);
+
+    /**
+     * This method retrieves the time to next instruction in the given maneuver.
+     * 
+     * @return A value specifying the time to the next instruction in seconds.
+     */
+    int GetTimeToNextInstruction() const;
+
+    /**
+     * This method sets the distance to next instruction in the given maneuver.
+     * 
+     * @param aDistance A value specifying the distance to the next instruction
+     *        in meters.
+     */
+    void SetDistanceToNextInstruction(double aDistance);
+
+    /**
+     * This method retrieves the distance to next instruction in the given
+     * maneuver.
+     * 
+     * @return A value specifying the distance to the next instruction
+     *        in meters.
+     */
+    double GetDistanceToNextInstruction() const;    
+
+private:
+    class ManeuverImpl;
+    ManeuverImpl* m_pImpl;
+
+    friend class ManeuverImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* MANEUVER_H */
diff --git a/inc/engine/routes/RouteSegment.h b/inc/engine/routes/RouteSegment.h
new file mode 100755 (executable)
index 0000000..6835f07
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ROUTESEGMENT_H
+#define ROUTESEGMENT_H
+
+#include "common/HereMaps_global.h"
+#include "common/GeoCoordinates.h"
+#include "routes/Maneuver.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class Maneuver;
+class RouteSegmentImpl;
+
+class RouteSegment;
+
+/**
+ * This typedef defines a vector of instances of <code>RouteSegment</code> as a
+ * type.  
+ * 
+ * \ingroup routes
+ */
+typedef std::vector<RouteSegment> RouteSegmentList;
+
+
+/**
+ * This class encapsulates a route segment which is a section of a route between
+ * two waypoints. A number of properties define a route segment, including the
+ * time required to travel it, its length, path (geometry), and maneuvers.
+ * 
+ * \ingroup routes
+ */
+class EXPORT_API RouteSegment
+{
+
+public:
+    /**
+     * This method is the default constructor. It creates an invalid object,
+     * with both travel time and distance set to zero. 
+     */
+    RouteSegment();
+
+    /**
+     * This method is a copy constructor that initializes a new instance of the
+     * class, using the property values from the object supplied by the caller.
+     * 
+     * @param rRhs A constant reference to an object whose property values are to
+     *        be used to initialize a new instance of <code>RouteSegment</code>.
+     */
+    RouteSegment(const RouteSegment& rRhs);
+
+    /**
+     * This method is the destructor. 
+     */
+    ~RouteSegment();
+
+    /**
+     * This is the assignment operator. 
+     * 
+     * @param rRhs A constant reference to an object whose property values are to
+     *        be copied to the given instance of <code>RouteSegment</code>.
+     * 
+     * @return A reference to the given instance of the class after the
+     *        assignment.
+     */
+    RouteSegment& operator = (const RouteSegment& rRhs);
+
+    
+    /**
+     * This method checks if the given instance of the class is valid. A segment
+     * is valid if, at a minimum, its path property is defined.
+     * 
+     * @return <code>true</code> if the object is valid, otherwise
+     *        <code>false</code>. 
+     */
+    bool IsValid() const;
+
+    /**
+     * This method sets the route segment travel time. 
+     * 
+     * @param aSecs A value indicating the length of time required to travel the
+     *        length of the route segment in seconds.
+     */
+    void SetTravelTime(int aSecs);
+
+    /**
+     * This method retrieves the route segment travel time. 
+     * 
+     * @return A value indicating time required to travel the
+     *        length of the route segment in seconds.
+     */
+    int GetTravelTime() const;
+
+    /**
+     * This method sets the route segment length. 
+     * 
+     * @param aDistance A value indicating the length of the
+     *        the route segment in meters.
+     */
+    void SetDistance(double aDistance);
+
+    /**
+     * This method retrieves the length of the route segment. 
+     * 
+     * @return A value indicating the length of the
+     *        the route segment in meters.
+     */
+    double GetDistance() const;
+
+    /**
+     * This method sets the path (geometry) of the route segment. 
+     * 
+     * @param rPath A constant reference to a vector of instances of
+     *        <code>GeoCoordinates</code> which defines the path (geometry) of
+     *        the route segment.
+     */
+    void SetPath(const GeoCoordinateList& rPath);
+
+    /**
+     * This method retrieves the path (geometry) of the route segment. 
+     * 
+     * @return A vector of instances of <code>GeoCoordinates</code> which
+     *        defines the path (geometry) of the route segment.
+     */
+    GeoCoordinateList GetPath() const;
+
+    /**
+     * This method adds a maneuver to the given route segment.
+     * 
+     * @param rManeuver A constant reference to an object that defines a route
+     *        maneuver.
+     */
+    void addManeuver(const Maneuver& rManeuver);
+
+    /**
+     * This method associates a list of maneuvers with the given route segment.
+     * 
+     * @param vManeuverList A constant reference to a vector of route maneuver
+     *        objects.
+     */
+    void SetManeuverList(const ManeuverList& vManeuverList);
+
+    /**
+     * This method retrieves a list of maneuvers associated with the given route
+     * segment. 
+     * 
+     * @return A vector of route maneuver objects.
+     */
+    ManeuverList GetManeuverList() const;
+
+private:
+    RouteSegmentImpl* m_pImpl;
+
+    friend class RouteSegmentImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif /* ROUTESEGMENT_H */
diff --git a/inc/engine/routes/RouterError.h b/inc/engine/routes/RouterError.h
new file mode 100755 (executable)
index 0000000..7d9b2c0
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef ROUTERERROR_H
+#define ROUTERERROR_H
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+
+/**
+ * This class encapsulates an error condition that may arise when processing a
+ * routing request.
+ *
+ * \ingroup routes
+ */
+class EXPORT_API RouterError : public ErrorBase
+{
+public:
+
+    /**
+     * This enumeration defines identifiers for the recognized error types.
+     */
+    enum ErrorCode
+    {
+        EC_ParseError,             ///< Indicates a parsing error.
+        EC_UnsupportedOptionError, ///< Indicates that an attempt to use an
+                                   ///  unsupported option was detected. 
+        EC_UnknownError            ///< Indicates an unknown error.
+    };
+
+    /**
+     * This method is a constructor that initializes a new instance of the class
+     * using the error code value supplied by the caller.
+     * 
+     * @param aErrorCode A value indicating the error type to use when
+     *        initializing the new instance of the class.
+     */
+    RouterError(ErrorCode aErrorCode);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~RouterError();
+
+    /**
+     * This method retrieves the error code.
+     * 
+     * @return A value indicating the error type. 
+     */
+    ErrorCode GetErrorCode() const;
+
+    /**
+     * This method obtains a string representation of the given instance.
+     * The method must be implemented by derived classes.
+     * 
+     * @return A string containing the text representation of the given instance
+     *        of the class.
+     */
+    virtual String ToString() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(RouterError);
+
+    class RouterErrorImpl;
+    RouterErrorImpl* m_pImpl;
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherError.h b/inc/engine/tilefetcher/TileFetcherError.h
new file mode 100755 (executable)
index 0000000..8a14411
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERERROR_H
+#define TILEFETCHERERROR_H
+
+#include "common/HereMaps_global.h"
+#include "common/ErrorBase.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates information related to an error condition that may
+ * arise when requesting map tiles from the server.
+ * 
+ * \ingroup tilefetcher
+ */
+class EXPORT_API TileFetcherError : public ErrorBase
+{
+public:
+
+    /**
+     * This enumeration defines identifiers for error conditions related to the
+     * tile fetcher.
+     */
+    enum ErrorEntity
+    {
+        TFE_COULD_NOT_DECODE_SRC_IMAGE, ///< Indicates that the source image
+                                        ///  could not be decoded.
+        TFE_COULD_NOT_RETRIEVE_HASH     ///< Indicates that the hash could not
+                                        ///  be retrieved.
+    };
+
+    /**
+     * This method is a constructor.
+     * 
+     * @param aItem A value rerpresenting an error condition; a value with which
+     *       to initialize the given instance of the class.
+     */
+    TileFetcherError(ErrorEntity aItem);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~TileFetcherError();
+
+    /**
+     * This method produces a string representation of the given instance of
+     * the class. The method must be implemented by derived classes.
+     *
+     * @return A string containing a text representation of the given instance
+     *        of the class.
+     */
+    virtual String ToString() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherError);
+
+    class TileFetcherErrorImpl;
+    TileFetcherErrorImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherMetaQuery.h b/inc/engine/tilefetcher/TileFetcherMetaQuery.h
new file mode 100644 (file)
index 0000000..2244746
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERMETAQUERY_H
+#define TILEFETCHERMETAQUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherMetaQueryListener;
+
+/**
+ * This class encapsulates a query representing a map tile metadata request.
+ * 
+ * \ingroup tilefetcher
+ */
+class TileFetcherMetaQuery : public BaseQuery
+{
+public:
+    /**
+     * This method is the constructor.
+     *
+     * @param sUri A constant reference to a string containing the base URL
+     *        which is used in the query.
+     */
+    TileFetcherMetaQuery( const String& sUri );
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~TileFetcherMetaQuery();
+
+    /**
+     * This method attempts to establish a connection with the server and then,
+     * if the connection has been established, it builds and submits a query.
+     *
+     * @param rListener A reference to a an object that is to be notified when
+     *        the reply to the query has arrived from the server.
+     *
+     * @param pUserData A pointer to user passed data that will be received
+     *        back through the reply object.
+     *
+     * @return <code>NULL</code> if a connection to the server cannot be
+     *        established, a pointer to the request object handle if the query
+     *        has been submitted successfully. Note that <code>true</code> does
+     *        not indicate that a reply is available.
+     */
+    RequestId Execute(TileFetcherMetaQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+    /**
+     * This static method obrains the base URI to be used for all subsequent
+     * tile fetcher queries.
+     *
+     * @return A string containing the base URI.
+     */
+    static String GetBaseUri();
+
+    /**
+     * This static method obtains the base URI to be used for all subsequent
+     * tile fetcher queries.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+    static void SetBaseUri(const String& sUri);
+
+private:
+    /**
+     * This method creates the URI for the request.
+     *
+     * @return URI request string.
+     */
+    String CreateUri() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherMetaQuery);
+
+    String m_sBaseUri;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherMetaQueryListener.h b/inc/engine/tilefetcher/TileFetcherMetaQueryListener.h
new file mode 100644 (file)
index 0000000..0fb9ff1
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERMETAQUERYLISTENER_H
+#define TILEFETCHERMETAQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherMetaReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to provide handling of the replies from the server.
+ * 
+ * \ingroup tilefetcher
+ */
+class TileFetcherMetaQueryListener : public QueryListener
+{
+public:
+
+    /**
+     * This is the default constructor.
+     */
+    TileFetcherMetaQueryListener();
+
+    /**
+     * This method is the destructor.
+     */
+    ~TileFetcherMetaQueryListener();
+
+    /**
+     * This method is a callback invoked when data have arrived in response to a
+     * tile fetch meta request.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnTileFetcherMetaReply(const TileFetcherMetaReply& rReply) = 0;
+
+private:
+
+    void OnReplySuccess(BaseReply& rReply);
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherMetaReply.h b/inc/engine/tilefetcher/TileFetcherMetaReply.h
new file mode 100644 (file)
index 0000000..e357b7f
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERMETAREPLY_H
+#define TILEFETCHERMETAREPLY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a reply to a map tile metadata request.
+ * 
+ * 
+ * \ingroup tilefetcher
+ */
+class TileFetcherMetaReply : public BaseReply
+{
+public:
+    /** 
+     * This method is a constructor that initialize the class instance.
+     */
+    TileFetcherMetaReply();
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~TileFetcherMetaReply();
+
+    /**
+     * This method retrieves the hash key which should be used for map tile
+     * requests.
+     * 
+     * @return  A string representing the hash key.
+     */
+    String GetHash() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherMetaReply);
+
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+    class TileFetcherMetaReplyImpl;
+    TileFetcherMetaReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherQuery.h b/inc/engine/tilefetcher/TileFetcherQuery.h
new file mode 100755 (executable)
index 0000000..9a6adfd
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERQUERY_H
+#define TILEFETCHERQUERY_H
+
+#include "common/HereMaps_global.h"
+#include "common/BaseQuery.h"
+#include "common/TileKey.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherQueryListener;
+
+/**
+ * This class encapsulates a query representing a request for a map tile. 
+ * 
+ * Map tiles form a grid reflecting the normalized Mercator projection, which
+ * represents the surface of the globe as a set of squares. The size of the grid
+ * depends on the map zoom level. At the lowest zoom level, the entire globe is
+ * shown in one square, which means that the tile grid consists of one row and
+ * one column. At the next higher zoom level, the tile grid contains two rows
+ * and two columns per row, at the next, four rows and four columns per row, and
+ * so on -- in other words, the number of rows and columns doubles at each
+ * higher zoom level.
+ * 
+ * The map tiles are available in resolutions of 128 x 128 pixels or 256 x 256
+ * pixels, depending on the size of the available memory on the target device.
+ * 
+ * \ingroup tilefetcher
+ */
+class TileFetcherQuery : public BaseQuery
+{
+public:
+    /**
+     * This method is the default constructor.
+     */
+    TileFetcherQuery();
+
+    /**
+     * This method is a constructor that sets the class attributes using the
+     * arguments provided by the caller.
+     * 
+     * @param rKey A constant reference to an object that specifies the map tile
+     *        row, column and zoom level.
+     * 
+     * @param uSize A value indicating the tile size.
+     */
+    TileFetcherQuery(const TileKey& rKey, size_t uSize);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~TileFetcherQuery();
+
+    /**
+     * This method sets the hash key which is used for the query.
+     * If not set or string is empty, "newest" will be used.
+     *
+     * @param hash A string containing the hash key to be used.
+     */
+    void SetHash(String hash);
+
+    /**
+     * This method retrieves an object specifying the map tile row, column and
+     * zoom level.
+     * 
+     * @return  A constant reference to an object that specifies the map tile
+     *        row, column and zoom level.
+     */
+    const TileKey& GetKey() const;
+
+    /**
+     * This method sets an object specifying the map tile row, column and zoom
+     * level.
+     * 
+     * @return rKey A constant reference to an object that specifies the map tile
+     *        row, column and zoom level.
+     */
+    void SetKey(const TileKey& rKey);
+
+    /**
+     * This method sets the size of the map tile (resolution) in pixels.
+     * 
+     * @param uTileSize A value indicating the tile size.
+     */
+    void SetTileSize(size_t uTileSize);
+
+    /**
+     * This method retrieves the size of the map tile (resolution) in pixels.
+     * 
+     * @param uTileSize A value indicating the tile size.
+     */
+    size_t GetTileSize() const;
+
+    /**
+     * This method attempts to establish a connection with the server and then,
+     * if the connection has been established, it builds and submits a query.
+     *
+     * @param rListener A reference to a an object that is to be notified when
+     *        the reply to the query has arrived from the server.
+     *
+     * @param pUserData A pointer to an object containing user passed, which is
+     *        to be echoed back through the reply object.
+     *
+     * @return A value representing the identifier of issued request.
+     */
+    virtual RestItemHandle::RequestId Execute(TileFetcherQueryListener& rListener, Tizen::Maps::HereObject* pUserData = NULL) const;
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * tile fetcher queries based on the current setting of map type in the
+     * <code>TileKey</code> object.
+     *
+     * @return A string containing the base URI.
+     */
+#ifdef TIZEN_MIGRATION
+    String GetBaseUri();
+#else
+    static String GetBaseUri();
+#endif
+
+    /**
+     * This method returns the base URI to be used for all subsequent
+     * tile fetcher queries based on the current setting of map type in the
+     * <code>TileKey</code> object.
+     *
+     * @param sUri A constant reference to a string containing the base URI.
+     */
+#ifdef TIZEN_MIGRATION
+    void SetBaseUri(const String& sUri);
+#else
+    static void SetBaseUri(const String& sUri);
+#endif
+
+private:
+    /**
+     * This method creates the URI for the request.
+     *
+     * @return URI request string.
+     */
+    String CreateUri() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherQuery);
+
+    class TileFetcherQueryImpl;
+    TileFetcherQueryImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherQueryListener.h b/inc/engine/tilefetcher/TileFetcherQueryListener.h
new file mode 100644 (file)
index 0000000..f4675f2
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERQUERYLISTENER_H
+#define TILEFETCHERQUERYLISTENER_H
+
+#include "common/HereMaps_global.h"
+#include "common/QueryListener.h"
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+class TileFetcherReply;
+
+/**
+ * This class encapsulates an object that is notified when a response to a query
+ * has become available. The derived classes must implement the methods defined
+ * on this class to provide handling of the replies from the server.
+ * 
+ * \ingroup tilefetcher
+ */
+class TileFetcherQueryListener : public QueryListener
+{
+public:
+
+    /**
+     * This is the default constructor.
+     */
+    TileFetcherQueryListener();
+
+    /**
+     * This method is the destructor.
+     */
+    ~TileFetcherQueryListener();
+
+    /**
+     * This method is a callback invoked when data have arrived in response to a
+     * tile fetch request.
+     *
+     * @param rReply A Constant reference to an object containing the response data.
+     */
+    virtual void OnTileFetcherReply(const TileFetcherReply& rReply) = 0;
+
+private:
+
+    void OnReplySuccess(BaseReply& rReply);
+
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/engine/tilefetcher/TileFetcherReply.h b/inc/engine/tilefetcher/TileFetcherReply.h
new file mode 100755 (executable)
index 0000000..93e5a4b
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2013 HERE Global B.V. All rights reserved.
+ * This software, including documentation, is protected by copyright controlled by
+ * HERE Global B.V. (“Software”). All rights are reserved. Copying, including reproducing,
+ * storing, adapting or translating, any or all of this material requires the prior
+ * written consent of HERE Global B.V. You may use this
+ * Software in accordance with the terms and conditions defined in the
+ * HERE Location Platform Services Terms and Conditions, available at
+ * http://developer.here.com/terms-conditions-base
+ *
+ * As an additional permission to the above, you may distribute Software,
+ * in object code format as part of an Application, according to, and subject to, terms and
+ * conditions defined in the Tizen Software Development kit (“SDK”) License Agreement.
+ * You may distribute such object code format Application under terms of your choice,
+ * provided that the header and source files of the Software have not been modified.
+ */
+
+#ifndef TILEFETCHERREPLY_H
+#define TILEFETCHERREPLY_H
+
+#include <tr1/memory>
+
+#include "common/HereMaps_global.h"
+#include "common/BaseReply.h"
+#include "common/TileKey.h"
+
+#include "maps/GeoTile.h"
+
+#ifndef TIZEN_MIGRATION
+namespace Tizen{ namespace Graphics{ class Bitmap; } }
+#endif
+
+HERE_MAPS_BEGIN_NAMESPACE
+
+/**
+ * This class encapsulates a reply to a request for a map tile. 
+ * 
+ * \ingroup tilefetcher
+ */
+class TileFetcherReply : public BaseReply
+{
+public:
+    /** 
+     * This method is a constructor that initialize the class instance, using
+     * an object that specifies the map tile row, column, zoom level, map
+     * language and map type.
+     * 
+     * @param rKey A constant reference to a tile key object.
+     */
+    TileFetcherReply(const TileKey& rKey);
+
+    /**
+     * This method is the (virtual) destructor.
+     */
+    virtual ~TileFetcherReply();
+
+    /**
+     * This method retrieves the map tile as a bitmap from the reply to the
+     * query.
+     * 
+     * @return A bitmap that contains the map tile.
+     */
+    DrawableBitmapPtr GetTile() const;
+
+    /**
+     * This method retrieves an object specifying the map tile
+     * row, column and zoom level.
+     * 
+     * @return A constant reference to an object that contains the map tile row,
+     *        column, zoom level, map language and map type.
+     */
+    const TileKey& GetKey() const;
+
+private:
+    HERE_MAPS_NO_COPY_NO_ASSIGN(TileFetcherReply);
+    friend class TestTileFetcher;
+
+    virtual bool OnDataReceived(const unsigned char* pBuffer, size_t uSize);
+
+    class TileFetcherReplyImpl;
+    TileFetcherReplyImpl* m_pImpl;
+};
+
+HERE_MAPS_END_NAMESPACE
+
+#endif
diff --git a/inc/here_api.h b/inc/here_api.h
new file mode 100644 (file)
index 0000000..61694ef
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef _LOCATION_HERE_API_H_
+#define _LOCATION_HERE_API_H_
+
+#include <maps_plugin.h>
+
+int HerePluginInit(maps_plugin_h *hPlugin);
+
+int HerePluginShutdown(maps_plugin_h hPlugin);
+
+int HerePluginSetProviderKey(const char* szKey);
+
+int HerePluginGetProviderKey(char** szKey);
+
+int HerePluginSetPreference(maps_preference_h hPref);
+
+int HerePluginGetPreference(maps_preference_h *hPref);
+
+int HerePluginGeocode(const char* szAddr,
+       maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId);
+
+int HerePluginGeocodeByStructuredAddress(const maps_address_h hAddr,
+       maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId);
+
+int HerePluginGeocodeInsideArea(const char* szAddr, maps_area_h hArea,
+       maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId);
+
+int HerePluginReverseGeocode(double dLatitude, double dLongitude,
+       maps_item_hashtable_h hPref, maps_service_reverse_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId);
+
+int HerePluginSearchPlace(maps_coordinates_h hPos, int nDistance,
+       maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+       void * pUserData, int *nReqId);
+
+int HerePluginSearchPlaceByArea(maps_area_h hArea,
+       maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+       void * pUserData, int *nReqId);
+
+int HerePluginSearchPlaceByAddress(const char* szAddr, maps_area_h hArea,
+       maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+       void * pUserData, int *nReqId);
+
+int HerePluginSearchPlaceDetails(const char* szUrl,
+       maps_item_hashtable_h hPref, maps_service_search_place_cb pCbFunc,
+       void * pUserData, int *nReqId);
+
+int HerePluginSearchRoute(maps_coordinates_h hOrigin, maps_coordinates_h hDestination,
+       maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+       void *pUserData, int *nReqId);
+
+int HerePluginSearchRouteWaypoints(const maps_coordinates_h* hWaypointList, int nWaypointNum,
+       maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+       void* pUserData, int *nReqId);
+
+int HerePluginCancelRequest(int nReqId);
+
+#endif //_LOCATION_HERE_API_H_
\ No newline at end of file
diff --git a/inc/here_base.h b/inc/here_base.h
new file mode 100644 (file)
index 0000000..6d91848
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_BASE_H_
+#define _LOCATION_HERE_BASE_H_
+
+//plug-in header
+#include "here_utils.h"
+#include <common/BaseReply.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+class HereBase
+{
+public:
+       /**
+        *This is the default constructor for Geocoder.
+        */
+
+       HereBase();
+
+       /**
+        *This is the default destructor for Geocoder.
+        */
+
+       virtual ~HereBase();
+
+       void TerminateService(void);
+
+       gint GetReqId(void);
+       gint GetRestReqId(void);
+       gint GetErrorCode(const BaseReply& Reply);
+
+protected:
+       gint m_nReqId;
+       gint m_nRestReqId;
+       void* m_pCbFunc;
+       void* m_pUserData;
+       gboolean m_bCanceled;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_BASE_H_
+
diff --git a/inc/here_geocode.h b/inc/here_geocode.h
new file mode 100644 (file)
index 0000000..33567de
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_GEOCODER_H_
+#define _LOCATION_HERE_GEOCODER_H_
+
+//plug-in header
+#include "here_manager.h"
+
+// maps-service header
+#include <maps_address.h>
+#include <maps_coordinates.h>
+#include <maps_area.h>
+
+//map engine header
+#include <geocoder/GeoCoderQuery.h>
+#include <geocoder/GeoCoderQueryListener.h>
+#include <geocoder/GeoCoderReply.h>
+#include <geocoder/Result.h>
+#include <common/GeoLocation.h>
+#include <common/Address.h>
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereGeocode
+: public HereBase
+, public GeoCoderQueryListener
+{
+public:
+       /**
+        *This is the default constructor for Geocoder.
+        */
+
+       HereGeocode(void *pCbFunc, void *pUserData, int nReqId);
+
+       /**
+        *This is the default destructor for Geocoder.
+        */
+
+       ~HereGeocode();
+
+       here_error_e PrepareQuery();
+       here_error_e PreparePreference(maps_preference_h hPref);
+
+       here_error_e StartGeocode(const char* szAddr);
+       here_error_e StartGeocodeInsideArea(const char* szAddr, const maps_area_h hArea);
+       here_error_e StartGeocodeByStructuredAddress(const maps_address_h hAddr);
+
+       virtual void OnGeoCoderReply(const GeoCoderReply& Reply);
+       virtual void OnGeoCoderFailure(const GeoCoderReply& Reply);
+
+private:
+       GeoCoderQuery* m_pQuery;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_GEOCODER_H_
diff --git a/inc/here_manager.h b/inc/here_manager.h
new file mode 100644 (file)
index 0000000..8984392
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_MANAGER_H_
+#define _LOCATION_HERE_MANAGER_H_
+
+//common header
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
+#include <vector>
+
+//platform header
+#include <net_connection.h>
+#include <app_manager.h>
+
+//plug-in header
+#include "here_base.h"
+#include "here_api.h"
+#include "here_types.h"
+#include "here_utils.h"
+
+//map engine header
+#include <common/ApplicationContext.h>
+#include <common/HereConfig.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+class HereManager;
+
+typedef std::vector<HereBase*> HereSvcList;
+
+class HereManager
+{
+public:
+       /**
+        *This is the default constructor for Geocoder.
+        */
+
+       HereManager();
+
+       /**
+        *This is the default destructor for Geocoder.
+        */
+
+       virtual ~HereManager();
+
+       enum HereSvcType {
+               HERE_SVC_GEOCODE,
+               HERE_SVC_REV_GEOCODE,
+               HERE_SVC_PLACE,
+               HERE_SVC_ROUTE
+       };
+
+       void* CreateInstance(HereSvcType nHereSvc, void* pCbFunc, void* pUserData, int *nReqId);
+       here_error_e CloseInstance(int nReqId);
+       here_error_e CancelInstance(int nReqId);
+       here_error_e SetCredentials(const char* provider_key);
+       here_error_e GetCredentials(char** provider_key);
+       void TerminateAllServices(void);
+
+       here_error_e SetProxyAddress();
+       here_error_e SetPreference(maps_preference_h hPref);
+       here_error_e GetPreference(maps_preference_h *hPref);
+       maps_preference_h GetPreference();
+
+       static bool Create();
+       static HereManager* GetHandler();
+       static void Close();
+
+private:
+       here_error_e SetCredentials();
+       static bool AppInfoMetadataCb(const char *metadata_key, const char *metadata_value, void *user_data);
+       static void NetworkStateChangedIndCb(connection_type_e type, void *user_data);
+       static here_error_e ConvertNetworkErrorCode(const int nErrorCode);
+       connection_h m_hConnection;
+       static int m_nRefCnt;
+       static HereManager *m_pHereManager;
+
+protected:
+       HereSvcList m_HereList;
+       gint m_nNextReqId;
+       maps_preference_h m_hPref;
+       pthread_mutex_t m_mtxHereList;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_MANAGER_H_
diff --git a/inc/here_place.h b/inc/here_place.h
new file mode 100644 (file)
index 0000000..2ba5fba
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_PLACE_H_
+#define _LOCATION_HERE_PLACE_H_
+
+#include <deque>
+
+//plug-in header
+#include "here_manager.h"
+
+//maps-service header
+#include <maps_place_plugin.h>
+#include <maps_place_rating_plugin.h>
+#include <maps_place_contact_plugin.h>
+#include <maps_place_image_plugin.h>
+#include <maps_place_link_object_plugin.h>
+#include <maps_place_editorial_plugin.h>
+#include <maps_place_review_plugin.h>
+
+//map engine header
+#include <finder/DiscoveryQuery.h>
+#include <finder/PlaceDetailsQuery.h>
+#include <finder/FinderQueryListener.h>
+#include <finder/DiscoveryReply.h>
+#include <finder/PlaceDetailsReply.h>
+#include <finder/PlaceDetails.h>
+#include <finder/CategoryId.h>
+#include <finder/LinkObject.h>
+#include <finder/Ratings.h>
+#include <finder/RelatedItem.h>
+#include <common/GeoLocation.h>
+#include <common/Address.h>
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HerePlace
+: public HereBase
+, public FinderQueryListener
+{
+public:
+       typedef std::deque<maps_place_h> PlaceList;
+
+       /**
+        *This is the default constructor for Place.
+        */
+
+       HerePlace(void *pCbFunc, void *pUserData, int nReqId);
+
+       /**
+        *This is the default destructor for Place.
+        */
+
+       ~HerePlace();
+
+       here_error_e PrepareDiscoveryQuery();
+       here_error_e PrepareDiscoveryPreference(maps_preference_h hPref);
+       here_error_e PrepareDiscoveryFilter(maps_place_filter_h hFilter);
+
+       here_error_e StartDiscoveryPlace(maps_coordinates_h hCoord, int nDistance);
+       here_error_e StartDiscoveryPlaceByArea(maps_area_h hArea);
+       here_error_e StartDiscoveryPlaceByAddress(const char *szAddr, maps_area_h hArea);
+
+       here_error_e PreparePlaceDetailsQuery();
+       here_error_e PreparePlaceDetailsPreference(maps_preference_h hPref);
+       
+       here_error_e StartPlaceDetails(const char* szPlaceId);
+       here_error_e StartPlaceDetailsInternal(const char* szUrl);
+
+       virtual void OnDiscoverReply(const DiscoveryReply &Reply);
+       virtual void OnDiscoverFailure(const DiscoveryReply& Reply);
+
+       virtual void OnPlaceDetailsReply(const PlaceDetailsReply &Reply);
+       virtual void OnPlaceDetailsFailure(const PlaceDetailsReply& Reply);
+
+private:
+       void ProcessPlaceLocation(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceContact(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceCategory(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceImage(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceDetails(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceReviews(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceRatings(PlaceDetails herePlace, maps_place_h mapsPlace);
+       void ProcessPlaceRated(PlaceDetails herePlace, maps_place_h mapsPlace);
+
+       void __sortList(PlaceList &list);
+       static bool __compareWithTitle(const maps_place_h &item1, const maps_place_h &item2);
+       static bool __compareWithId(const maps_place_h &item1, const maps_place_h &item2);
+       static bool __compareWithType(const maps_place_h &item1, const maps_place_h &item2);
+       static bool __compareWithDistance(const maps_place_h &item1, const maps_place_h &item2);
+       static bool __compareWithRating(const maps_place_h &item1, const maps_place_h &item2);
+       static bool __compareWithCategory(const maps_place_h &item1, const maps_place_h &item2);
+       static bool __compareWithCategoryCb(int index, int total, maps_place_category_h category,
+                                        void *user_data);
+
+       DiscoveryQuery* m_pDiscoveryQuery;
+       PlaceDetailsQuery* m_pPlaceDetailsQuery;
+       int m_nReplyCnt;
+       int m_nReplyIdx;
+       char *m_szSortBy;
+
+       PlaceList m_PlaceList;
+
+       static const bool __sending_place_details_query_automatically = TRUE;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_PLACE_H_
diff --git a/inc/here_revgeocode.h b/inc/here_revgeocode.h
new file mode 100644 (file)
index 0000000..43507a1
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_REV_GEOCODER_H_
+#define _LOCATION_HERE_REV_GEOCODER_H_
+
+//plug-in header
+#include "here_manager.h"
+
+#include <maps_extra_types.h>
+#include <maps_coordinates.h>
+
+//map engine header
+#include <geocoder/ReverseGeoCoderQuery.h>
+#include <geocoder/GeoCoderQueryListener.h>
+#include <geocoder/GeoCoderReply.h>
+#include <geocoder/Result.h>
+#include <common/GeoLocation.h>
+#include <common/Address.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereRevGeocode
+: public HereBase
+, public GeoCoderQueryListener
+{
+public:
+       /**
+        *This is the default constructor for reverse Geocoder.
+        */
+
+       HereRevGeocode(void *pCbFunc, void *pUserData, int nReqId);
+
+       /**
+        *This is the default destructor for reverse Geocoder.
+        */
+
+       ~HereRevGeocode();
+
+
+       here_error_e PrepareQuery();
+       here_error_e PreparePreference(maps_preference_h hPref);
+       here_error_e PreparePosition(double dLat, double dLng);
+
+       here_error_e StartRevGeocode(maps_item_hashtable_h hPref);
+
+       virtual void OnGeoCoderReply(const GeoCoderReply& Reply);
+       virtual void OnGeoCoderFailure(const GeoCoderReply& Reply);
+
+private:
+       ReverseGeoCoderQuery* m_pQuery;
+       GeoCoordinates m_geoCoord;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_REV_GEOCODER_H_
diff --git a/inc/here_route.h b/inc/here_route.h
new file mode 100644 (file)
index 0000000..0aab609
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_ROUTE_H_
+#define _LOCATION_HERE_ROUTE_H_
+
+//plug-in header
+#include "here_manager.h"
+
+//maps-service header
+#include <maps_route_plugin.h>
+#include <maps_route_segment_plugin.h>
+#include <maps_route_maneuver_plugin.h>
+
+//map engine header
+#include <routes/GeoRouteQuery.h>
+#include <routes/GeoRouteQueryListener.h>
+#include <routes/GeoRouteReply.h>
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereRoute
+: public HereBase
+, public GeoRouteQueryListener
+{
+public:
+       /**
+        *This is the default constructor for Route.
+        */
+
+       HereRoute(void *pCbFunc, void *pUserData, int nReqId);
+
+       /**
+        *This is the default destructor for Route.
+        */
+
+       ~HereRoute();
+
+       here_error_e PrepareQuery();
+       here_error_e PrepareWaypoint(maps_coordinates_h hOrigin, maps_coordinates_h hDestination);
+       here_error_e PrepareWaypoint(const maps_coordinates_h* hWaypointList, int nWaypointNum);
+       here_error_e PreparePreference(maps_preference_h hPref);
+
+       here_error_e StartRoute(void);
+
+       virtual void OnRouteReply(const GeoRouteReply& Reply);
+       virtual void OnRouteFailure(const GeoRouteReply& Reply);
+
+private:
+       maps_error_e ProcessSegments(maps_route_h mapsRoute, const RouteSegmentList& hereSegmList);
+       maps_error_e ProcessManeuver(maps_route_segment_h mapsSegm, const ManeuverList& hereManeList);
+
+       GeoRouteQuery* m_pQuery;
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_ROUTE_H_
diff --git a/inc/here_types.h b/inc/here_types.h
new file mode 100644 (file)
index 0000000..32899ad
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_TYPES_H_
+#define _LOCATION_HERE_TYPES_H_
+
+#include <glib.h>
+
+typedef enum {
+    HERE_ERROR_NONE = 0,                /**< Successful */
+    HERE_ERROR_PERMISSION_DENIED,       /**< Permission Denied */
+    HERE_ERROR_OUT_OF_MEMORY,           /**< Out of memory */
+    HERE_ERROR_INVALID_PARAMETER,       /**< Invalid parameter */
+    HERE_ERROR_NOT_SUPPORTED,           /**< Not supported */
+    HERE_ERROR_CONNECTION_TIME_OUT,     /**< Timeout error, no answer */
+    HERE_ERROR_NETWORK_UNREACHABLE,     /**< Network unavailable */
+    HERE_ERROR_INVALID_OPERATION,       /**< Opeartion is not valid */
+    HERE_ERROR_KEY_NOT_AVAILABLE,       /**< Invalid key */
+    HERE_ERROR_RESOURCE_BUSY,           /**< Resource busy */
+    HERE_ERROR_CANCELED,                /**< Service canceled */
+    HERE_ERROR_UNKNOWN,                 /**< Unknown error */
+    HERE_ERROR_SERVICE_NOT_AVAILABLE,   /**< Service unavailabe*/
+    HERE_ERROR_NOT_FOUND,               /**< Result not found */
+} here_error_e;
+
+#endif //_LOCATION_HERE_TYPES_H_
diff --git a/inc/here_utils.h b/inc/here_utils.h
new file mode 100644 (file)
index 0000000..ff47926
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _LOCATION_HERE_UTILS_H_
+#define _LOCATION_HERE_UTILS_H_
+
+//common header
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <math.h>
+#include <vector>
+
+//maps-service header
+#include <maps_extra_types.h>
+#include <maps_plugin_types.h>
+#include <maps_area.h>
+#include <maps_preference.h>
+#include <maps_route_maneuver.h>
+#include <maps_service.h>
+
+//plug-in header
+#include "here_types.h"
+
+//map engine header
+#include <geocoder/GeoCoderQuery.h>
+#include <finder/DiscoveryQuery.h>
+#include <routes/GeoRouteQuery.h>
+#include <routes/Maneuver.h>
+#include <common/GeoCoordinates.h>
+
+#define HERE_PLUGIN_BEGIN_NAMESPACE  namespace Here { namespace PlugIn {
+#define HERE_PLUGIN_END_NAMESPACE    }}
+#define HERE_PLUGIN_NAMESPACE_PREFIX Here::PlugIn
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "HERE_PLUGIN"
+
+/*
+* Internal Macros
+*/
+#define MAPS_LOGD(fmt,args...)  LOGD(fmt, ##args)
+#define MAPS_LOGW(fmt,args...)  LOGW(fmt, ##args)
+#define MAPS_LOGI(fmt,args...)  LOGI(fmt, ##args)
+#define MAPS_LOGE(fmt,args...)  LOGE(fmt, ##args)
+#define MAPS_SECLOG(fmt,args...)  SECURE_LOGD(fmt, ##args)
+
+#define MAPS_CHECK_CONDITION(condition, error, msg)    \
+       do { \
+               if (condition) { \
+               } else { \
+                       MAPS_LOGE("%s(0x%08x)", msg, error); \
+                       return error; \
+               } \
+       } while (0)
+
+#define MAPS_NULL_ARG_CHECK_RETURN_FALSE(arg)\
+       do { \
+               if(arg != NULL) { \
+               } else  { \
+                       MAPS_LOGE("MAPS_ERROR_INVALID_PARAMETER");  \
+                       return false; };        \
+       } while (0)
+
+#define MAPS_NULL_ARG_CHECK(arg)       \
+       MAPS_CHECK_CONDITION(arg != NULL,MAPS_ERROR_INVALID_PARAMETER,"MAPS_ERROR_INVALID_PARAMETER")
+
+#define MAPS_PRINT_ERROR_CODE_RETURN(code) \
+       do{ \
+               MAPS_LOGE("%s(0x%08x)", #code, code); \
+               return code;    \
+       } while (0)
+
+#ifndef TIZEN_MIGRATION
+typedef std::string String;
+typedef std::string Uri;
+typedef std::wstring WString;
+#endif
+
+#define maps_item_list_items(item_list) g_list_length((GList*)(*(unsigned long*)item_list)  )
+
+extern "C"
+{
+       int ConvertToMapsError(int nRet);
+       int ConvertToHereError(int nRet);
+       const char* ConverHereErrorToString(int nErr);
+       const char* ConvertMapsErrorToChar(int nErr);
+}
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+using namespace HERE_MAPS_NAMESPACE_PREFIX;
+
+class HereUtils
+{
+public:
+       /**
+        *This is the default constructor for Geocoder.
+        */
+
+       HereUtils();
+
+       /**
+        *This is the default destructor for Geocoder.
+        */
+
+       ~HereUtils();
+
+       static GeoRouteQuery::TravelMode Convert(maps_route_transport_mode_e nVal);
+       static maps_route_transport_mode_e Convert(GeoRouteQuery::TravelMode nVal);
+       static GeoRouteQuery::FeatureType Convert(maps_route_feature_e nVal);
+       static GeoRouteQuery::FeatureWeight Convert(maps_route_feature_weight_e nVal);
+       static Maneuver::InstructionDirection Convert(maps_route_turn_type_e nVal);
+       static maps_route_turn_type_e Convert(Maneuver::InstructionDirection nVal);
+       static GeoBoundingBox& Convert(maps_area_h hArea, GeoBoundingBox& Box);
+       static maps_area_h& Convert(GeoBoundingBox Box, maps_area_h& hArea);
+       static void Convert(String strUtf8, WString& strUtf16);
+       static void Convert(WString strUtf16, String& strUtf8);
+       static GeoBoundingBox& Convert(const char *src, GeoBoundingBox &box);
+       static maps_error_e ConvertHttpCodeToMapsError(int nVal);
+
+       static bool IsValid(GeoCoordinates geoCoord);
+       static bool IsValid(maps_coordinates_s geoCoord);
+       static bool IsValidCoord(double dLat, double dLng);
+       static bool IsValid(maps_area_s hArea);
+
+private:
+};
+
+HERE_PLUGIN_END_NAMESPACE
+
+#endif //_LOCATION_HERE_UTILS_H_
diff --git a/lib/aarch64/libheremaps-engine.so.1 b/lib/aarch64/libheremaps-engine.so.1
new file mode 120000 (symlink)
index 0000000..9345673
--- /dev/null
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7
\ No newline at end of file
diff --git a/lib/aarch64/libheremaps-engine.so.1.0.6_7 b/lib/aarch64/libheremaps-engine.so.1.0.6_7
new file mode 100755 (executable)
index 0000000..56cc739
Binary files /dev/null and b/lib/aarch64/libheremaps-engine.so.1.0.6_7 differ
diff --git a/lib/arm/libheremaps-engine.so.1 b/lib/arm/libheremaps-engine.so.1
new file mode 120000 (symlink)
index 0000000..9345673
--- /dev/null
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7
\ No newline at end of file
diff --git a/lib/arm/libheremaps-engine.so.1.0.6_7 b/lib/arm/libheremaps-engine.so.1.0.6_7
new file mode 100755 (executable)
index 0000000..3602a23
Binary files /dev/null and b/lib/arm/libheremaps-engine.so.1.0.6_7 differ
diff --git a/lib/i586/libheremaps-engine.so.1 b/lib/i586/libheremaps-engine.so.1
new file mode 120000 (symlink)
index 0000000..9345673
--- /dev/null
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7
\ No newline at end of file
diff --git a/lib/i586/libheremaps-engine.so.1.0.6_7 b/lib/i586/libheremaps-engine.so.1.0.6_7
new file mode 100755 (executable)
index 0000000..7973594
Binary files /dev/null and b/lib/i586/libheremaps-engine.so.1.0.6_7 differ
diff --git a/lib/x86_64/libheremaps-engine.so.1 b/lib/x86_64/libheremaps-engine.so.1
new file mode 120000 (symlink)
index 0000000..9345673
--- /dev/null
@@ -0,0 +1 @@
+libheremaps-engine.so.1.0.6_7
\ No newline at end of file
diff --git a/lib/x86_64/libheremaps-engine.so.1.0.6_7 b/lib/x86_64/libheremaps-engine.so.1.0.6_7
new file mode 100755 (executable)
index 0000000..cd43eb7
Binary files /dev/null and b/lib/x86_64/libheremaps-engine.so.1.0.6_7 differ
diff --git a/maps-plugin-here.changes b/maps-plugin-here.changes
new file mode 100644 (file)
index 0000000..1087dc3
--- /dev/null
@@ -0,0 +1,29 @@
+[Version]   maps-plugin-here_0.1.5
+[Date]      06 Oct 2015
+[Title]     Fixed to return more proper error codes
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version]   maps-plugin-here_0.1.4
+[Date]      24 Sep 2015
+[Title]     Fixed to use reference count of handler
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version]   maps-plugin-here_0.1.3
+[Date]      21 Sep 2015
+[Title]     Get here_key from metadata of application manifest
+[Developer] Young-Ae Kang <youngae.kang@samsung.com>
+
+[Version]   maps-plugin-here_0.1.2
+[Date]      18 Oct 2015
+[Title]     Fixed route query bugs
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version]   maps-plugin-here_0.1.1
+[Date]      09 Jun 2015
+[Title]     Fixed memory leaks
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
+[Version]   maps-plugin-here_0.1.0
+[Date]      01 July 2015
+[Title]     Initialize version
+[Developer] Seechan Kim <cbible.kim@samsung.com>
diff --git a/maps-plugin-here.pc.in b/maps-plugin-here.pc.in
new file mode 100644 (file)
index 0000000..599cd78
--- /dev/null
@@ -0,0 +1,14 @@
+#Package Information for pkg-config
+
+prefix=@PREFIX@
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=@PC_INCLUDE@
+
+Name: @PC_NAME@
+Description: @PC_DESCRIPTION@
+Version: @VERSION@
+Requires: @PC_REQUIRED@
+Libs: -L${libdir} @PC_LDFLAGS@
+Cflags: -I${includedir}
+
index fcdce18..5a94839 100644 (file)
@@ -25,6 +25,9 @@ BuildRequires: pkgconfig(capi-system-info)
 BuildRequires: pkgconfig(cairo)
 BuildRequires: pkgconfig(evas)
 BuildRequires: boost-devel
+#
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
 
 %ifarch %arm
 %define ARCH arm
@@ -49,8 +52,15 @@ This packages provides Plugin APIs capsulating HERE Maps Engine Library for Maps
 %setup -q
 
 %build
-cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCH=%{ARCH}
-#make %{?_smp_mflags}
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE -g"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE -g"
+export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
+%endif
+
+MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DMAJORVER=${MAJORVER} -DFULLVER=%{version} -DLIBDIR=%{_libdir} -DARCH=%{ARCH}
+make %{?jobs:-j%jobs}
 
 %install
 rm -rf %{buildroot}
@@ -58,14 +68,17 @@ rm -rf %{buildroot}
 
 mkdir -p %{buildroot}/usr/share/license
 cp LICENSE %{buildroot}/usr/share/license/%{name}
+cp -a lib/%{ARCH}/libheremaps-engine.so* %{buildroot}%{_prefix}/lib/
+
+%post
+/sbin/ldconfig
 
-mkdir -p %{buildroot}%{_prefix}/lib/maps/plugins/
-cp -a %{ARCH}/libmaps-plugin-here.so* %{buildroot}%{_prefix}/lib/maps/plugins/
-cp -a %{ARCH}/libheremaps-engine.so* %{buildroot}%{_prefix}/lib/
+%postun
+/sbin/ldconfig
 
 %files
 %manifest maps-plugin-here.manifest
 %defattr(-,root,root,-)
-%{_prefix}/lib/maps/plugins/libmaps-plugin-here.so*
+%{_libdir}/maps/plugins/libmaps-plugin-here.so*
 %{_prefix}/lib/libheremaps-engine.so*
 /usr/share/license/maps-plugin-here
diff --git a/src/here_api.cpp b/src/here_api.cpp
new file mode 100644 (file)
index 0000000..f6cf4d2
--- /dev/null
@@ -0,0 +1,538 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_api.h"
+#include "here_types.h"
+#include "here_geocode.h"
+#include "here_revgeocode.h"
+#include "here_place.h"
+#include "here_route.h"
+#include <common/HereConfig.h>
+
+
+using namespace HERE_PLUGIN_NAMESPACE_PREFIX;
+
+int HerePluginInit(maps_plugin_h *hPlugin)
+{
+       if (!hPlugin)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       HereManager::Create();
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       HereManager::GetHandler()->SetProxyAddress();
+
+       return HERE_ERROR_NONE;
+}
+
+int HerePluginShutdown(maps_plugin_h hPlugin)
+{
+       if (!hPlugin)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (HereManager::GetHandler())
+               HereManager::GetHandler()->Close();
+
+       return HERE_ERROR_NONE;
+}
+
+int HerePluginSetProviderKey(const char* szKey)
+{
+       if (!szKey)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       here_error_e error = HereManager::GetHandler()->SetCredentials(szKey);
+
+       return error;
+}
+
+int HerePluginGetProviderKey(char** szKey)
+{
+       if (!szKey)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       here_error_e error = HereManager::GetHandler()->GetCredentials(szKey);
+
+       return error;
+}
+
+int HerePluginSetPreference(maps_preference_h hPref)
+{
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       here_error_e error = HereManager::GetHandler()->SetPreference(hPref);
+
+       return error;
+}
+
+int HerePluginGetPreference(maps_preference_h *hPref)
+{
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       here_error_e error = HereManager::GetHandler()->GetPreference(hPref);
+
+       return error;
+}
+
+int HerePluginGeocode(const char* szAddr,
+       maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!szAddr || (szAddr && *szAddr == '\0') || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HereGeocode *pGeocode =
+               (HereGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_GEOCODE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pGeocode)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pGeocode->PrepareQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pGeocode->PreparePreference(hPref);
+
+               error = pGeocode->StartGeocode(szAddr);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pGeocode->TerminateService();
+
+       return error;
+}
+
+int HerePluginGeocodeByStructuredAddress(const maps_address_h hAddr,
+       maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!hAddr || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HereGeocode *pGeocode =
+               (HereGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_GEOCODE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pGeocode)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pGeocode->PrepareQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pGeocode->PreparePreference(hPref);
+
+               error = pGeocode->StartGeocodeByStructuredAddress(hAddr);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pGeocode->TerminateService();
+
+       return error;
+}
+
+int HerePluginGeocodeInsideArea(const char* szAddr, maps_area_h hArea,
+       maps_item_hashtable_h hPref, maps_service_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!szAddr || (szAddr && *szAddr == '\0') || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!hArea || !HereUtils::IsValid(*(maps_area_s*)hArea))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HereGeocode *pGeocode =
+               (HereGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_GEOCODE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pGeocode)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pGeocode->PrepareQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pGeocode->PreparePreference(hPref);
+
+               error = pGeocode->StartGeocodeInsideArea(szAddr, hArea);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pGeocode->TerminateService();
+
+       return error;
+}
+
+int HerePluginReverseGeocode(double dLatitude, double dLongitude,
+       maps_item_hashtable_h hPref, maps_service_reverse_geocode_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!HereUtils::IsValidCoord(dLatitude, dLongitude))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HereRevGeocode *pRevGeocode =
+               (HereRevGeocode*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_REV_GEOCODE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pRevGeocode)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_UNKNOWN;
+
+       do {
+               error = pRevGeocode->PrepareQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pRevGeocode->PreparePreference(hPref);
+
+               error = pRevGeocode->PreparePosition(dLatitude, dLongitude);
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pRevGeocode->StartRevGeocode(hPref);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pRevGeocode->TerminateService();
+
+       return error;
+}
+
+int HerePluginSearchPlace(maps_coordinates_h hPos, int nDistance,
+       maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!hPos || !HereUtils::IsValid(*(maps_coordinates_s*)hPos) || nDistance <= 0)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!hFilter || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HerePlace *pPlace =
+               (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pPlace)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pPlace->PrepareDiscoveryQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->PrepareDiscoveryPreference(hPref);
+
+               error = pPlace->PrepareDiscoveryFilter(hFilter);
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->StartDiscoveryPlace(hPos, nDistance);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pPlace->TerminateService();
+
+       return error;
+}
+
+int HerePluginSearchPlaceByArea(maps_area_h hArea,
+       maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!hArea || !HereUtils::IsValid(*(maps_area_s*)hArea))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!hFilter || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HerePlace *pPlace =
+               (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pPlace)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pPlace->PrepareDiscoveryQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->PrepareDiscoveryPreference(hPref);
+
+               error = pPlace->PrepareDiscoveryFilter(hFilter);
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->StartDiscoveryPlaceByArea(hArea);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pPlace->TerminateService();
+
+       return error;
+}
+
+int HerePluginSearchPlaceByAddress(const char* szAddr, maps_area_h hArea,
+       maps_item_hashtable_h hPref, maps_place_filter_h hFilter, maps_service_search_place_cb pCbFunc,
+       void * pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!szAddr || (szAddr && *szAddr == '\0') || !hFilter || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!hArea || !HereUtils::IsValid(*(maps_area_s*)hArea))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HerePlace *pPlace =
+               (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pPlace)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pPlace->PrepareDiscoveryQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->PrepareDiscoveryPreference(hPref);
+
+               error = pPlace->PrepareDiscoveryFilter(hFilter);
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->StartDiscoveryPlaceByAddress(szAddr, hArea);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pPlace->TerminateService();
+
+       return error;
+}
+
+int HerePluginSearchPlaceDetails(const char* szUrl,
+       maps_item_hashtable_h hPref, maps_service_search_place_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!szUrl || (szUrl && *szUrl == '\0') || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HerePlace *pPlace =
+               (HerePlace*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_PLACE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pPlace)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pPlace->PreparePlaceDetailsQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pPlace->PreparePlaceDetailsPreference(hPref);
+
+               error = pPlace->StartPlaceDetails(szUrl);
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pPlace->TerminateService();
+
+       return error;
+}
+
+int HerePluginSearchRoute(maps_coordinates_h hOrigin, maps_coordinates_h hDestination,
+       maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+       void *pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!hOrigin || !hDestination || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereUtils::IsValid(*(maps_coordinates_s*)hOrigin) ||
+               !HereUtils::IsValid(*(maps_coordinates_s*)hDestination))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HereRoute *pRoute =
+               (HereRoute*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_ROUTE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pRoute)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pRoute->PrepareQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pRoute->PreparePreference(hPref);
+
+               error = pRoute->PrepareWaypoint(hOrigin, hDestination);
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pRoute->StartRoute();
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pRoute->TerminateService();
+
+       return error;
+}
+
+int HerePluginSearchRouteWaypoints(const maps_coordinates_h* hWaypointList, int nWaypointNum,
+       maps_item_hashtable_h hPref, maps_service_search_route_cb pCbFunc,
+       void* pUserData, int *nReqId)
+{
+       /* checking parmaters */
+       if (!hWaypointList || nWaypointNum < 2 || !pCbFunc || !nReqId)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       for (int i=0; i<nWaypointNum; i++)
+       {
+               if (!HereUtils::IsValid(*(maps_coordinates_s*)hWaypointList[i]))
+                       return HERE_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       /* creating instance */
+       HereRoute *pRoute =
+               (HereRoute*)(HereManager::GetHandler()->CreateInstance(HereManager::HERE_SVC_ROUTE,
+               (void*)pCbFunc, pUserData, nReqId));
+
+       if(!pRoute)
+               return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+
+       /* sending request */
+       here_error_e error = HERE_ERROR_NONE;
+
+       do {
+               error = pRoute->PrepareQuery();
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pRoute->PrepareWaypoint(hWaypointList, nWaypointNum);
+               if (error != HERE_ERROR_NONE) break;
+
+               error = pRoute->PreparePreference(hPref);
+
+               error = pRoute->StartRoute();
+       } while(0);
+
+       /* finishing task */
+       if(error != HERE_ERROR_NONE)
+               pRoute->TerminateService();
+
+       return error;
+}
+
+int HerePluginCancelRequest(int nReqId)
+{
+       if (nReqId <= 0)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!HereManager::GetHandler())
+               return HERE_ERROR_INVALID_OPERATION;
+
+       return (HereManager::GetHandler()->CancelInstance(nReqId));
+}
diff --git a/src/here_base.cpp b/src/here_base.cpp
new file mode 100644 (file)
index 0000000..c3589f3
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_base.h"
+#include "here_manager.h"
+#include <common/CommunicationError.h>
+#include <common/ParserError.h>
+#include <finder/FinderError.h>
+#include <routes/RouterError.h>
+#include <tilefetcher/TileFetcherError.h>
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereBase::HereBase()
+{
+       m_nRestReqId = 0;
+       m_bCanceled = 0;
+       m_nReqId = 0;
+}
+
+HereBase::~HereBase()
+{
+       if (HereManager::GetHandler())
+               HereManager::GetHandler()->CloseInstance(m_nReqId);
+}
+
+void HereBase::TerminateService(void)
+{
+       if(m_nRestReqId)
+       {
+               m_bCanceled = 1;
+               return;
+       }
+       delete this;
+}
+
+gint HereBase::GetReqId(void)
+{
+       return m_nReqId;
+}
+
+gint HereBase::GetRestReqId(void)
+{
+       return m_nRestReqId;
+}
+
+gint HereBase::GetErrorCode(const BaseReply& Reply)
+{
+       ErrorBase *pError = (ErrorBase*)Reply.GetError();
+       maps_error_e error = MAPS_ERROR_UNKNOWN;
+       CommunicationError *commErr;
+       FinderError *finderErr;
+       String errMsg = "";
+
+
+       if (pError)
+       {
+               ErrorBase::ErrorCategory category = pError->GetErrorCategory();
+
+               switch(category)
+               {
+               case ErrorBase::ErrorCategory::EC_CommunicationsError:
+                       commErr = (CommunicationError*)pError;
+                       errMsg = commErr->ToString();
+
+                       if (commErr->GetErrorCode() == CommunicationError::ErrorCode::CE_NetworkError)
+                               error = MAPS_ERROR_NETWORK_UNREACHABLE;
+                       else if (commErr->GetErrorCode() == CommunicationError::ErrorCode::CE_RestEngineError)
+                               error = MAPS_ERROR_INVALID_OPERATION;
+                       else
+                               error = HereUtils::ConvertHttpCodeToMapsError(commErr->GetHttpStatusCode());
+                       break;
+
+               case ErrorBase::ErrorCategory::EC_ParserError:
+                       errMsg = ((ParserError*)pError)->ToString();
+                       error = MAPS_ERROR_INVALID_OPERATION;
+                       break;
+
+               case ErrorBase::ErrorCategory::EC_RouterError:
+                       errMsg = ((RouterError*)pError)->ToString();
+                       error = MAPS_ERROR_INVALID_OPERATION;
+                       break;
+
+               case ErrorBase::ErrorCategory::EC_TileMapError:
+                       errMsg = ((TileFetcherError*)pError)->ToString();
+                       error = MAPS_ERROR_INVALID_OPERATION;
+                       break;
+
+               case ErrorBase::ErrorCategory::EC_FinderError:
+                       finderErr = (FinderError*)pError;
+                       //errMsg = finderErr->ToString();
+
+                       if (finderErr->GetErrorType() == FinderError::ErrorType::ET_InvalidQueryArguments)
+                               error = MAPS_ERROR_INVALID_PARAMETER;
+                       else if (finderErr->GetErrorType() == FinderError::ErrorType::ET_InvalidCredentials)
+                               error = MAPS_ERROR_KEY_NOT_AVAILABLE;
+                       else
+                               error = MAPS_ERROR_INVALID_OPERATION;
+                       break;
+               default:
+                       error = MAPS_ERROR_INVALID_OPERATION;
+                       break;
+               }
+       }
+
+       if (error != MAPS_ERROR_NONE) {
+               if (errMsg.size() > 0) errMsg += ". ";
+               MAPS_LOGE("ERROR: %s%s (%s, %ld)", errMsg.data(),
+                       ConverHereErrorToString(ConvertToHereError(error)),
+                       ConvertMapsErrorToChar(error), error);
+       }
+
+       return error;
+}
+
+HERE_PLUGIN_END_NAMESPACE
diff --git a/src/here_geocode.cpp b/src/here_geocode.cpp
new file mode 100644 (file)
index 0000000..f7464d7
--- /dev/null
@@ -0,0 +1,284 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_geocode.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereGeocode::HereGeocode(void *pCbFunc, void *pUserData, int nReqId)
+{
+       m_pQuery = NULL;
+
+       m_pCbFunc = pCbFunc;
+       m_pUserData = pUserData;
+       m_nReqId = nReqId;
+}
+
+HereGeocode::~HereGeocode()
+{
+       if (m_pQuery)
+       {
+               delete m_pQuery;
+               m_pQuery = NULL;
+       }
+}
+
+here_error_e HereGeocode::PrepareQuery()
+{
+       if (m_pQuery)
+               return HERE_ERROR_PERMISSION_DENIED;
+
+       m_pQuery = new GeoCoderQuery();
+
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+       else
+               return HERE_ERROR_NONE;
+}
+
+here_error_e HereGeocode::PreparePreference(maps_preference_h hPref)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       int ret;
+       char *szLanguage = NULL;
+       ret = maps_preference_get_language(hPref, &szLanguage);
+       if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+       {
+               m_pQuery->AppendPreferredLanguage(szLanguage);
+               g_free(szLanguage);
+       }
+
+       int nMaxResults;
+       ret = maps_preference_get_max_results(hPref, &nMaxResults);
+       if (ret == MAPS_ERROR_NONE)
+       {
+               m_pQuery->SetMaxResults((size_t)nMaxResults);
+       }
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereGeocode::StartGeocode(const char* szAddr)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!szAddr || (szAddr && strlen(szAddr) <= 0))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       String sSearch(szAddr);
+       m_pQuery->SetSearchtext(sSearch);
+
+
+       m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HereGeocode::StartGeocodeInsideArea(const char* szAddr, const maps_area_h hArea)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!szAddr || (szAddr && strlen(szAddr) <= 0) || !hArea)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       String sSearch(szAddr);
+       m_pQuery->SetSearchtext(sSearch);
+
+       maps_area_s *pArea = (maps_area_s *)hArea;
+       if (pArea->type == MAPS_AREA_RECTANGLE)
+       {
+               double dLatTL = pArea->rect.top_left.latitude;
+               double dLngTL = pArea->rect.top_left.longitude;
+               GeoCoordinates geoCoordTL(dLatTL, dLngTL);
+
+               double dLatBR = pArea->rect.bottom_right.latitude;
+               double dLngBR = pArea->rect.bottom_right.longitude;
+               GeoCoordinates geoCoordBR(dLatBR, dLngBR);
+
+               GeoBoundingBox BoundingBox(geoCoordTL, geoCoordBR);
+
+               m_pQuery->SetBoundingBox(BoundingBox);
+       }
+       else if (pArea->type == MAPS_AREA_CIRCLE)
+       {
+               MAPS_LOGD("HERE Maps is not supported circle type in GeocoderQuery");
+               return HERE_ERROR_NOT_SUPPORTED;
+       }
+       else {
+               return HERE_ERROR_INVALID_PARAMETER;
+       }
+
+
+       m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HereGeocode::StartGeocodeByStructuredAddress(const maps_address_h hAddr)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hAddr)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       Address rAddress;
+
+       int ret;
+       char *szCountry = NULL;
+       ret = maps_address_get_country(hAddr, &szCountry);
+       if (ret == MAPS_ERROR_NONE && szCountry && *szCountry)
+               rAddress.SetCountry(String(szCountry));
+       g_free(szCountry);
+
+       char *szCountryCode = NULL;
+       ret = maps_address_get_country_code(hAddr, &szCountryCode);
+       if (ret == MAPS_ERROR_NONE && szCountryCode && *szCountryCode)
+               rAddress.SetCountryCode(String(szCountryCode));
+       g_free(szCountryCode);
+
+       char *szCounty = NULL;
+       ret = maps_address_get_county(hAddr, &szCounty);
+       if (ret == MAPS_ERROR_NONE && szCounty && *szCounty)
+               rAddress.SetCounty(String(szCounty));
+       g_free(szCounty);
+
+       char *szState = NULL;
+       ret = maps_address_get_state(hAddr, &szState);
+       if (ret == MAPS_ERROR_NONE && szState && *szState)
+               rAddress.SetState(String(szState));
+       g_free(szState);
+
+       char *szCity = NULL;
+       ret = maps_address_get_city(hAddr, &szCity);
+       if (ret == MAPS_ERROR_NONE && szCity && *szCity)
+               rAddress.SetCity(String(szCity));
+       g_free(szCity);
+
+       char *szDistrict = NULL;
+       ret = maps_address_get_district(hAddr, &szDistrict);
+       if (ret == MAPS_ERROR_NONE && szDistrict && *szDistrict)
+               rAddress.SetDistrict(String(szDistrict));
+       g_free(szDistrict);
+
+       char *szStreet = NULL;
+       ret = maps_address_get_street(hAddr, &szStreet);
+       if (ret == MAPS_ERROR_NONE && szStreet && *szStreet)
+               rAddress.SetStreet(String(szStreet));
+       g_free(szStreet);
+
+       char *szBuildingNumber = NULL;
+       ret = maps_address_get_building_number(hAddr, &szBuildingNumber);
+       if (ret == MAPS_ERROR_NONE && szBuildingNumber && *szBuildingNumber)
+               rAddress.SetHouseNumber(String(szBuildingNumber));
+       g_free(szBuildingNumber);
+
+       char *szPostalCode = NULL;
+       ret = maps_address_get_postal_code(hAddr, &szPostalCode);
+       if (ret == MAPS_ERROR_NONE && szPostalCode && *szPostalCode)
+               rAddress.SetPostalCode(String(szPostalCode));
+       g_free(szPostalCode);
+
+       //not defined in maps-service
+       //rAddress.SetLabel(String(sLabel));
+       //rAddress.SetFloor(String(sFloor));
+       //rAddress.SetSuite(String(sSuite));
+
+       m_pQuery->SetAddress(rAddress);
+
+
+
+       m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HereGeocode::OnGeoCoderReply(const GeoCoderReply& Reply)
+{
+       if (m_bCanceled) // ignore call back if it was cancelled.
+       {
+               delete this;
+               return;
+       }
+
+       Result* pResult;
+       size_t nResults = Reply.GetNumResults();
+       GeoCoordinates hereCoord;
+       maps_coordinates_h mapsCoord;
+
+       if (nResults == 0)
+       {
+               ((maps_service_geocode_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId,
+                       0, 1, NULL, m_pUserData);
+               delete this;
+               return;
+       }
+
+       for (size_t i = 0 ; i < nResults; i++)
+       {
+               pResult = (Result*)Reply.GetResult(i);
+
+               if (pResult)
+               {
+                       hereCoord = (pResult->GetLocation()).GetDisplayPosition();
+               }
+               else
+               {
+                       hereCoord.SetLatitude(0.0);
+                       hereCoord.SetLongitude(0.0);
+               }
+
+               maps_error_e error = (maps_error_e)maps_coordinates_create(
+                                    hereCoord.GetLatitude(), hereCoord.GetLongitude(), &mapsCoord);
+
+               if (m_bCanceled)
+               {
+                       if (mapsCoord) maps_coordinates_destroy(mapsCoord);
+                       break;
+               }
+               else
+               {
+                       if (((maps_service_geocode_cb)m_pCbFunc)(error, m_nReqId, i,
+                               nResults, mapsCoord, m_pUserData) == FALSE)
+                       {
+                               delete this;
+                               return;
+                       }
+               }
+       }
+
+       delete this;
+}
+
+void HereGeocode::OnGeoCoderFailure(const GeoCoderReply& Reply)
+{
+       if (!m_bCanceled)
+               ((maps_service_geocode_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+       delete this;
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_manager.cpp b/src/here_manager.cpp
new file mode 100644 (file)
index 0000000..2f08b7e
--- /dev/null
@@ -0,0 +1,481 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <libxml/xpath.h>
+
+#include "here_manager.h"
+#include "here_base.h"
+#include "here_geocode.h"
+#include "here_revgeocode.h"
+#include "here_place.h"
+#include "here_route.h"
+#include "here_utils.h"
+#include <common/HereConfig.h>
+
+using namespace HERE_PLUGIN_NAMESPACE_PREFIX;
+using namespace TIZEN_MAPS_NAMESPACE_PREFIX;
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereManager *HereManager::m_pHereManager = NULL;
+int HereManager::m_nRefCnt = 0;
+pthread_mutex_t g_mtxRef;
+
+HereManager::HereManager()
+: m_nNextReqId(1),
+  m_hPref(NULL)
+{
+       xmlInitParser();
+       m_hConnection = NULL;
+       pthread_mutex_init(&m_mtxHereList, NULL);
+       pthread_mutex_init(&g_mtxRef, NULL);
+}
+
+HereManager::~HereManager()
+{
+       if (m_hConnection)
+       {
+               connection_unset_type_changed_cb(m_hConnection);
+               connection_destroy(m_hConnection);
+               m_hConnection = NULL;
+       }
+
+       pthread_mutex_destroy(&m_mtxHereList);
+       pthread_mutex_destroy(&g_mtxRef);
+       xmlCleanupParser();
+}
+
+bool HereManager::Create()
+{
+       bool result = false;
+
+       if (!m_pHereManager)
+       {
+               m_pHereManager = new HereManager();
+       }
+
+       pthread_mutex_lock(&g_mtxRef);
+       if (m_pHereManager)
+       {
+               m_nRefCnt++;
+               result = true;
+               MAPS_LOGD("Created a HereManager instance (%d).", m_nRefCnt);
+       }
+       pthread_mutex_unlock(&g_mtxRef);
+
+       m_pHereManager->SetCredentials();
+       return result;
+}
+
+void HereManager::Close()
+{
+       pthread_mutex_lock(&g_mtxRef);
+       if (--m_nRefCnt == 0 && m_pHereManager)
+       {
+               m_pHereManager->TerminateAllServices();
+               HereConfig::Shutdown();
+
+               delete m_pHereManager;
+               m_pHereManager = NULL;
+       }
+       MAPS_LOGD("Closed a HereManager instance (%d).", m_nRefCnt);
+       pthread_mutex_unlock(&g_mtxRef);
+}
+
+HereManager* HereManager::GetHandler()
+{
+       return m_pHereManager;
+}
+
+void* HereManager::CreateInstance(HereSvcType nHereSvc, void* pCbFunc,
+       void* pUserData, int *nReqId)
+{
+       HereBase *pHere = NULL;
+
+       *nReqId = m_nNextReqId++;
+
+       switch(nHereSvc)
+       {
+       case HERE_SVC_GEOCODE:
+               pHere = (HereBase*)new HereGeocode(pCbFunc, pUserData, *nReqId);
+               break;
+
+       case HERE_SVC_REV_GEOCODE:
+               pHere = (HereBase*)new HereRevGeocode(pCbFunc, pUserData, *nReqId);
+               break;
+
+       case HERE_SVC_PLACE:
+               pHere = (HereBase*)new HerePlace(pCbFunc, pUserData, *nReqId);
+               break;
+
+       case HERE_SVC_ROUTE:
+               pHere = (HereBase*)new HereRoute(pCbFunc, pUserData, *nReqId);
+               break;
+
+       default:
+               return NULL;
+       }
+
+       pthread_mutex_lock(&m_mtxHereList);
+       m_HereList.push_back(pHere);
+       pthread_mutex_unlock(&m_mtxHereList);
+
+       return pHere;
+}
+
+here_error_e HereManager::CloseInstance(int nReqId)
+{
+       HereSvcList::iterator it;
+
+       pthread_mutex_lock(&m_mtxHereList);
+       for (it = m_HereList.begin(); it != m_HereList.end(); it++)
+       {
+               if ((*it)->GetReqId() == nReqId)
+               {
+                       m_HereList.erase(it);
+                       break;
+               }
+       }
+       pthread_mutex_unlock(&m_mtxHereList);
+       
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::CancelInstance(int nReqId)
+{
+       HereSvcList::iterator it;
+
+       pthread_mutex_lock(&m_mtxHereList);
+       for (it = m_HereList.begin(); it != m_HereList.end(); it++)
+       {
+               if ((*it)->GetReqId() == nReqId)
+               {
+                       m_HereList.erase(it);
+                       RestItemHandle::Cancel((*it)->GetRestReqId());
+                       (*it)->TerminateService();
+                       pthread_mutex_unlock(&m_mtxHereList);
+                       return HERE_ERROR_NONE;
+               }
+       }
+       pthread_mutex_unlock(&m_mtxHereList);
+
+       return HERE_ERROR_NOT_FOUND;
+}
+
+bool HereManager::AppInfoMetadataCb(const char *metadata_key, const char *metadata_value, void *user_data)
+{
+       if (!metadata_key || !metadata_value)
+               return false;
+
+       if (!strncmp(metadata_key, "http://tizen.org/metadata/here_key", 35) && strlen(metadata_value) > 0 )
+       {
+               if (m_pHereManager->SetCredentials(metadata_value) == HERE_ERROR_NONE)
+               {
+                       MAPS_LOGD("Succeeded getting credential from metadata");
+               }
+
+               return false;
+       }
+
+       return true;
+}
+
+here_error_e HereManager::SetCredentials(void)
+{
+       int nRet = 0;
+       app_info_h hAppInfo;
+       pid_t nProcessId = -1;
+       char *strAppId = NULL;
+
+       nProcessId = getpid();
+       nRet = app_manager_get_app_id(nProcessId, &strAppId);
+       if (nRet != APP_MANAGER_ERROR_NONE)
+       {
+               MAPS_LOGI("Get app_id [%ld]. nRet[%d]", nProcessId, nRet);
+               return HERE_ERROR_NONE;
+       }
+
+       nRet = app_info_create(strAppId, &hAppInfo);
+       if (nRet != APP_MANAGER_ERROR_NONE)
+       {
+               MAPS_LOGI("Get appinfo of [%s]. nRet[%d]", strAppId, nRet);
+               if (strAppId) free(strAppId);
+               return HERE_ERROR_NONE;
+       }
+
+       if (strAppId) free(strAppId);
+
+       nRet = app_info_foreach_metadata(hAppInfo, AppInfoMetadataCb, NULL);
+       if (nRet != APP_MANAGER_ERROR_NONE)
+       {
+               MAPS_LOGI("Get metadata. nRet[%d]", nRet);
+       }
+
+       nRet = app_info_destroy(hAppInfo);
+       if (nRet != APP_MANAGER_ERROR_NONE)
+       {
+               MAPS_LOGI("Destroy app_info. nRet[%d]", nRet);
+       }
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::SetCredentials(const char *szKey)
+{
+       if (!szKey)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       String strKey(szKey);
+       String strAppId, strAppCode;
+       size_t nCodeStart;
+
+       nCodeStart = strKey.find("/");
+
+       if(nCodeStart == 0 || nCodeStart >= (strKey.length()-1))
+       {
+               MAPS_LOGE("[error] Key type fault : Key type should be as like XXXXX/YYYYY");
+               return HERE_ERROR_INVALID_PARAMETER;
+       }
+
+       strAppId = strKey.substr(0, nCodeStart);
+       strAppCode = strKey.substr(nCodeStart+1, std::string::npos);
+
+       if(!ApplicationContext::GetInstance().Initialize(strAppCode, strAppId))
+               return HERE_ERROR_INVALID_OPERATION;
+
+       //MAPS_LOGD("[success] credential setted to 'XXXXX/XXXXX'");
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::GetCredentials(char **szKey)
+{
+       if (!szKey)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!ApplicationContext::GetInstance().IsInitialized())
+               return HERE_ERROR_NOT_FOUND;
+
+       String strCredentials = ApplicationContext::GetInstance().GetAppId() + "/" +
+                               ApplicationContext::GetInstance().GetAppCode();
+
+       *szKey = g_strndup(strCredentials.c_str(), strCredentials.length());
+
+       if (*szKey == NULL)
+               return HERE_ERROR_INVALID_OPERATION;
+
+       //MAPS_LOGD("current credential : %s", *szKey);
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereManager::SetPreference(maps_preference_h hPref)
+{
+       int error = HERE_ERROR_NONE;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (m_hPref)
+       {
+               if (maps_preference_destroy(m_hPref) != MAPS_ERROR_NONE)
+                       return HERE_ERROR_INVALID_OPERATION;
+       }
+
+       do {
+               error = maps_preference_clone(hPref, &m_hPref);
+               if (error != MAPS_ERROR_NONE) break;
+
+               char *szLanguage = NULL;
+               error = maps_preference_get_language(hPref, &szLanguage);
+               if (error == MAPS_ERROR_NONE && szLanguage && strlen(szLanguage) > 0)
+                       ApplicationContext::GetInstance().SetPreferredLanguage(String(szLanguage));
+       } while(0);
+
+       return (here_error_e)ConvertToHereError(error);
+}
+
+here_error_e HereManager::GetPreference(maps_preference_h *hPref)
+{
+       int ret = HERE_ERROR_NONE;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       if (!m_hPref)
+               return HERE_ERROR_NOT_FOUND;
+
+       ret = maps_preference_clone(m_hPref, hPref);
+
+       return (here_error_e)ConvertToHereError(ret);
+}
+
+maps_preference_h HereManager::GetPreference()
+{
+       return m_hPref;
+}
+
+void HereManager::TerminateAllServices(void)
+{
+       HereSvcList::iterator it;
+
+       while (1)
+       {
+               pthread_mutex_lock(&m_mtxHereList);
+               if (m_HereList.empty())
+               {
+                       pthread_mutex_unlock(&m_mtxHereList);
+                       break;
+               }
+               it = m_HereList.begin();
+               pthread_mutex_unlock(&m_mtxHereList);
+
+               try {
+                       if (*it) (*it)->TerminateService();
+                       m_HereList.erase(it);
+               }
+               catch (std::exception &e) {
+               }
+       };
+
+       if (m_hPref)
+       {
+               maps_preference_destroy(m_hPref);
+               m_hPref = NULL;
+       }
+}
+
+here_error_e HereManager::ConvertNetworkErrorCode(const int nErrorCode)
+{
+       here_error_e err = HERE_ERROR_NONE;
+
+       switch (nErrorCode)
+       {
+       case CONNECTION_ERROR_NONE:
+               //MAPS_LOGD("No error");
+               err = HERE_ERROR_NONE;
+               break;
+       case CONNECTION_ERROR_INVALID_PARAMETER:
+               MAPS_LOGD("Invalid parameter");
+               err = HERE_ERROR_INVALID_PARAMETER;
+               break;
+       case CONNECTION_ERROR_OUT_OF_MEMORY:
+               MAPS_LOGD("Out of memory error");
+               err = HERE_ERROR_OUT_OF_MEMORY;
+               break;
+       case CONNECTION_ERROR_INVALID_OPERATION:
+               MAPS_LOGD("Invalid Operation");
+               err = HERE_ERROR_INVALID_OPERATION;
+               break;
+       case CONNECTION_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+               MAPS_LOGD("Address family not supported");
+               err = HERE_ERROR_NOT_SUPPORTED;
+               break;
+       case CONNECTION_ERROR_PERMISSION_DENIED:
+               MAPS_LOGD("Permission denied");
+               err = HERE_ERROR_PERMISSION_DENIED;
+               break;
+       case CONNECTION_ERROR_OPERATION_FAILED:
+               MAPS_LOGD("Operation failed");
+               err = HERE_ERROR_INVALID_OPERATION;
+               break;
+       case CONNECTION_ERROR_ITERATOR_END:
+               MAPS_LOGD("End of iteration");
+               break;
+       case CONNECTION_ERROR_NO_CONNECTION:
+               MAPS_LOGD("There is no connection");
+               err = HERE_ERROR_NETWORK_UNREACHABLE;
+               break;
+       case CONNECTION_ERROR_NOW_IN_PROGRESS:
+               MAPS_LOGD("Now in progress");
+               err = HERE_ERROR_RESOURCE_BUSY;
+               break;
+       case CONNECTION_ERROR_ALREADY_EXISTS:
+               MAPS_LOGD("Already exists");
+               break;
+       case CONNECTION_ERROR_OPERATION_ABORTED:
+               MAPS_LOGD("Operation is aborted");
+               err = HERE_ERROR_CANCELED;
+               break;
+       case CONNECTION_ERROR_DHCP_FAILED:
+               MAPS_LOGD("DHCP failed");
+               break;
+       case CONNECTION_ERROR_INVALID_KEY:
+               MAPS_LOGD("Invalid key");
+               err = HERE_ERROR_KEY_NOT_AVAILABLE;
+               break;
+       case CONNECTION_ERROR_NO_REPLY:
+               MAPS_LOGD("No Reply");
+               err = HERE_ERROR_RESOURCE_BUSY;
+               break;
+       case CONNECTION_ERROR_NOT_SUPPORTED:
+               MAPS_LOGD("Not Supported");
+               err = HERE_ERROR_NOT_SUPPORTED;
+               break;
+       default:
+               MAPS_LOGD("Unknown");
+               break;
+       }
+       //MAPS_LOGD("nErrorCode = 0x%08X", nErrorCode);
+
+       return err;
+}
+
+here_error_e HereManager::SetProxyAddress()
+{
+       int errorCode = CONNECTION_ERROR_NONE;
+
+       char *proxy_address = NULL;
+
+       if (!m_hConnection)
+       {
+               errorCode = connection_create(&m_hConnection);
+               if (errorCode == CONNECTION_ERROR_NONE)
+               {
+                       errorCode = connection_set_type_changed_cb(m_hConnection, NetworkStateChangedIndCb, this);
+
+               }
+       }
+       if (errorCode != CONNECTION_ERROR_NONE)
+               return ConvertNetworkErrorCode(errorCode);
+
+       errorCode = connection_get_proxy(m_hConnection, CONNECTION_ADDRESS_FAMILY_IPV4, &proxy_address);
+       if (errorCode == CONNECTION_ERROR_NONE)
+       {
+               MAPS_LOGD("Proxy = %s", (proxy_address ? proxy_address : "(null)"));
+               Tizen::Maps::HereConfig::SetProxyAddress(proxy_address);
+       }
+       g_free(proxy_address);
+
+       return ConvertNetworkErrorCode(errorCode);
+}
+
+void HereManager::NetworkStateChangedIndCb(connection_type_e type, void *user_data)
+{
+       MAPS_LOGD("Network state is changed. type=%d", type);
+
+       if (!user_data) return;
+
+       HereManager *pManager = (HereManager*)user_data;
+
+       if ((type != CONNECTION_TYPE_DISCONNECTED) && (type != CONNECTION_TYPE_BT))
+               pManager->SetProxyAddress();
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_place.cpp b/src/here_place.cpp
new file mode 100644 (file)
index 0000000..297a811
--- /dev/null
@@ -0,0 +1,1316 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_place.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HerePlace::HerePlace(void *pCbFunc, void *pUserData, int nReqId)
+{
+       m_pDiscoveryQuery = NULL;
+       m_pPlaceDetailsQuery = NULL;
+
+       m_pCbFunc = pCbFunc;
+       m_pUserData = pUserData;
+       m_nReqId = nReqId;
+
+       m_nReplyCnt = 0;
+       m_nReplyIdx = 0;
+       m_szSortBy = NULL;
+}
+
+HerePlace::~HerePlace()
+{
+       if (m_pDiscoveryQuery)
+       {
+               delete m_pDiscoveryQuery;
+               m_pDiscoveryQuery = NULL;
+       }
+
+       if (m_pPlaceDetailsQuery)
+       {
+               delete m_pPlaceDetailsQuery;
+               m_pPlaceDetailsQuery = NULL;
+       }
+
+       while(!m_PlaceList.empty())
+       {
+               maps_place_destroy(m_PlaceList.front());
+               m_PlaceList.pop_front();
+       }
+}
+
+here_error_e HerePlace::PrepareDiscoveryQuery()
+{
+       if (m_pDiscoveryQuery)
+               return HERE_ERROR_PERMISSION_DENIED;
+
+        m_pDiscoveryQuery = new DiscoveryQuery();
+
+       if (!m_pDiscoveryQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+       else
+               return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::PrepareDiscoveryPreference(maps_preference_h hPref)
+{
+       if (!m_pDiscoveryQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       int ret;
+       char *szLanguage = NULL;
+       ret = maps_preference_get_language(hPref, &szLanguage);
+       if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+               m_pDiscoveryQuery->SetLanguage(szLanguage);
+       g_free(szLanguage);
+
+       int nMaxResults;
+       ret = maps_preference_get_max_results(hPref, &nMaxResults);
+       if (ret == MAPS_ERROR_NONE)
+               m_pDiscoveryQuery->SetMaxResults((size_t)nMaxResults);
+
+       char *szSortBy;
+       ret = maps_preference_get(hPref, MAPS_PLACE_FILTER_SORT_BY, &szSortBy);
+       if (ret == MAPS_ERROR_NONE)
+               m_szSortBy = szSortBy;
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::PrepareDiscoveryFilter(maps_place_filter_h hFilter)
+{
+       if (!m_pDiscoveryQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hFilter)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       int ret;
+       maps_place_category_h mapsCate = NULL;
+       if (maps_place_filter_get_category(hFilter, &mapsCate) == MAPS_ERROR_NONE)
+       {
+               CategoryList hereCateList;
+               Category hereCate;
+               char *szId = NULL, *szName = NULL, *szUrl = NULL;
+
+               ret = maps_place_category_get_name(mapsCate, &szName);
+               if (ret == MAPS_ERROR_NONE && szName && *szName)
+                       hereCate.SetTitle(szName);
+               g_free(szName);
+
+               ret = maps_place_category_get_url(mapsCate, &szUrl);
+               if (ret == MAPS_ERROR_NONE && szUrl && *szUrl)
+                       hereCate.SetHref(szUrl);
+               g_free(szUrl);
+
+               ret = maps_place_category_get_id(mapsCate, &szId);
+               if (ret == MAPS_ERROR_NONE && szId && *szId)
+               {
+                       hereCate.SetCategoryId(CategoryId(szId));
+                       hereCateList.push_back(hereCate);
+                       m_pDiscoveryQuery->SetCategoriesFilter(hereCateList);
+               }
+               g_free(szId);
+
+               maps_place_category_destroy(mapsCate);
+       }
+
+       char *szName = NULL;
+       ret = maps_place_filter_get_place_name(hFilter, &szName);
+       if (ret == MAPS_ERROR_NONE && szName && *szName)
+               m_pDiscoveryQuery->SetSearchText(szName);
+       g_free(szName);
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::StartDiscoveryPlace(maps_coordinates_h hCoord, int nDistance)
+{
+       if (!m_pDiscoveryQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hCoord)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       if (m_pDiscoveryQuery->GetSearchText().empty())
+       {
+               m_pDiscoveryQuery->SetType(DiscoveryQuery::QT_EXPLORE);
+
+               double dLat, dLon;
+               maps_coordinates_get_latitude(hCoord, &dLat);
+               maps_coordinates_get_longitude(hCoord, &dLon);
+               GeoCoordinates geoCoord(dLat, dLon);
+
+               if (nDistance > 0)
+               {
+                       GeoBoundingCircle geoCircle(geoCoord, nDistance);
+                       m_pDiscoveryQuery->SetArea(geoCircle);
+               }
+               else if (nDistance == 0)
+               {
+                       m_pDiscoveryQuery->SetProximity(geoCoord);
+               }
+               else
+                       return HERE_ERROR_INVALID_PARAMETER;
+
+               m_nRestReqId = m_pDiscoveryQuery->Execute(*this, NULL);
+
+               return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+       }
+       else
+       {
+               here_error_e error;
+               maps_area_h hArea = NULL;
+               maps_area_create_circle(hCoord, nDistance, &hArea);
+               error = StartDiscoveryPlaceByAddress(m_pDiscoveryQuery->GetSearchText().data(), hArea);
+               maps_area_destroy(hArea);
+               return error;
+       }
+}
+
+here_error_e HerePlace::StartDiscoveryPlaceByArea(maps_area_h hArea)
+{
+       if (!m_pDiscoveryQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hArea)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       if (m_pDiscoveryQuery->GetSearchText().empty())
+       {
+               m_pDiscoveryQuery->SetType(DiscoveryQuery::QT_EXPLORE);
+
+               maps_area_s *pArea = (maps_area_s*)hArea;
+               if (pArea->type == MAPS_AREA_RECTANGLE)
+               {
+                       GeoBoundingBox box(pArea->rect.top_left.longitude, pArea->rect.bottom_right.longitude,
+                                          pArea->rect.bottom_right.latitude, pArea->rect.top_left.latitude);
+                       m_pDiscoveryQuery->SetArea(box);
+               }
+               else if (pArea->type == MAPS_AREA_CIRCLE)
+               {
+                       GeoCoordinates coord(pArea->circle.center.latitude, pArea->circle.center.longitude);
+                       GeoBoundingCircle circle(coord, pArea->circle.radius);
+                       m_pDiscoveryQuery->SetArea(circle);
+               }
+               else
+                       return HERE_ERROR_INVALID_PARAMETER;
+
+
+               m_nRestReqId = m_pDiscoveryQuery->Execute(*this, NULL);
+
+               return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+       }
+       else
+       {
+               return StartDiscoveryPlaceByAddress(m_pDiscoveryQuery->GetSearchText().data(), hArea);
+       }
+}
+
+here_error_e HerePlace::StartDiscoveryPlaceByAddress(const char *szAddr, maps_area_h hArea)
+{
+       if (!m_pDiscoveryQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!szAddr || (szAddr && strlen(szAddr) <= 0) || !hArea)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       m_pDiscoveryQuery->SetType(DiscoveryQuery::QT_SEARCH);
+
+       String szSearchText = szAddr;
+       if (m_pDiscoveryQuery->GetSearchText().size() > 0 &&
+               szSearchText != m_pDiscoveryQuery->GetSearchText())
+       {
+               szSearchText += " " + m_pDiscoveryQuery->GetSearchText();
+       }
+       m_pDiscoveryQuery->SetSearchText(szSearchText);
+
+       maps_area_s *pArea = (maps_area_s*)hArea;
+       if (pArea->type == MAPS_AREA_RECTANGLE)
+       {
+               double dLat1 = pArea->rect.top_left.latitude;
+               double dLng1 = pArea->rect.top_left.longitude;
+               double dLat2 = pArea->rect.bottom_right.latitude;
+               double dLng2 = pArea->rect.bottom_right.longitude;
+               double dLat = (dLat1 + dLat2) / 2;
+               double dLng = (dLng1 + dLng2) / 2;
+
+               GeoCoordinates geoCoord(dLat, dLng);
+               m_pDiscoveryQuery->SetProximity(geoCoord);
+       }
+       else if(pArea->type == MAPS_AREA_CIRCLE)
+       {
+               double dLat = pArea->circle.center.latitude;
+               double dLng = pArea->circle.center.longitude;
+               GeoCoordinates geoCoord(dLat, dLng);
+               m_pDiscoveryQuery->SetProximity(geoCoord);
+       }
+
+
+       m_nRestReqId = m_pDiscoveryQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HerePlace::PreparePlaceDetailsQuery()
+{
+       if (m_pPlaceDetailsQuery)
+               return HERE_ERROR_PERMISSION_DENIED;
+
+       m_pPlaceDetailsQuery = new PlaceDetailsQuery();
+
+       if (!m_pPlaceDetailsQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+       else
+               return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::PreparePlaceDetailsPreference(maps_preference_h hPref)
+{
+       if (!m_pPlaceDetailsQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       int ret;
+       char *szLanguage = NULL;
+       ret = maps_preference_get_language(hPref, &szLanguage);
+       if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+               m_pPlaceDetailsQuery->SetLanguage(szLanguage);
+       g_free(szLanguage);
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HerePlace::StartPlaceDetails(const char *szPlaceId)
+{
+       if (!m_pPlaceDetailsQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!szPlaceId || (szPlaceId && strlen(szPlaceId) <= 0))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       m_pPlaceDetailsQuery->SetPlaceId(szPlaceId);
+
+
+       m_nRestReqId = m_pPlaceDetailsQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+here_error_e HerePlace::StartPlaceDetailsInternal(const char *szUrl)
+{
+       if (!szUrl || (szUrl && strlen(szUrl) <= 0))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       std::unique_ptr<PlaceDetailsQuery> pPlaceDetailsQuery (new (std::nothrow)PlaceDetailsQuery());
+
+
+       bool bExcuted = (int)(pPlaceDetailsQuery->Execute(*this, NULL, szUrl) > 0);
+
+       return (bExcuted ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HerePlace::OnDiscoverReply (const DiscoveryReply &Reply)
+{
+       if (m_bCanceled) /* ignore call back if it was cancelled. */
+       {
+               delete this;
+               return;
+       }
+
+       maps_place_h mapsPlace;
+       PlaceItemList herePlaceList = Reply.GetPlaceItems();
+       PlaceItemList::iterator herePlaceIt;
+       SearchItemList hereSearchList = Reply.GetSearchItems();
+       SearchItemList::iterator hereSearchIt;
+       LinkObject hereLinkObj;
+       GeoCoordinates hereCoord;
+       maps_coordinates_h mapsCoord;
+       Category hereCate;
+       maps_place_category_h mapsCate;
+       maps_place_rating_h mapsRating;
+       int error = MAPS_ERROR_UNKNOWN, sub_error;
+       bool is_valid, isPending;
+
+
+       m_nReplyIdx = 0;
+       m_nReplyCnt = herePlaceList.size() + hereSearchList.size();
+
+       if (m_nReplyCnt == 0)
+       {
+               ((maps_service_search_place_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId,
+                       0, 1, NULL, m_pUserData);
+               delete this;
+               return;
+       }
+
+       for (herePlaceIt = herePlaceList.begin();
+               herePlaceIt != herePlaceList.end() && !m_bCanceled;
+               herePlaceIt++)
+       {
+               isPending = false;
+
+               if ((error = maps_place_create(&mapsPlace)) == MAPS_ERROR_NONE)
+               {
+                       /* title, uri, id */
+                       hereLinkObj = herePlaceIt->GetLinkObject();
+
+                       if (!hereLinkObj.GetTitle().empty())
+                               maps_place_set_name(mapsPlace, (char*)hereLinkObj.GetTitle().c_str());
+
+                       if (!hereLinkObj.GetHref().empty())
+                               maps_place_set_uri(mapsPlace, (char*)hereLinkObj.GetHref().c_str());
+
+                       if (!hereLinkObj.GetId().empty())
+                               maps_place_set_id(mapsPlace, (char*)hereLinkObj.GetId().c_str());
+
+                       /* icon */
+                       /* type */
+
+                       /* position */
+                       hereCoord = herePlaceIt->GetPosition();
+                       if (maps_coordinates_create(hereCoord.GetLatitude(), hereCoord.GetLongitude(),
+                               &mapsCoord) == MAPS_ERROR_NONE)
+                       {
+                               maps_place_set_location(mapsPlace, mapsCoord);
+                               maps_coordinates_destroy(mapsCoord);
+                       }
+
+                       /* rating (optional) */
+                       if (maps_place_rating_create(&mapsRating) == MAPS_ERROR_NONE)
+                       {
+                               maps_place_rating_set_average(mapsRating, herePlaceIt->GetAverageRating());
+                               maps_place_set_rating(mapsPlace, mapsRating);
+                               maps_place_rating_destroy(mapsRating);
+                       }
+
+                       /* category (optional) */
+                       hereCate = herePlaceIt->GetCategory();
+
+                       maps_item_list_h mapsCateList;
+                       if (maps_item_list_create(&mapsCateList) == MAPS_ERROR_NONE)
+                       {
+                               if (maps_place_category_create(&mapsCate) == MAPS_ERROR_NONE)
+                               {
+                                       is_valid = false;
+
+                                       if (!hereCate.GetCategoryId().ToString().empty())
+                                       {
+                                               sub_error = maps_place_category_set_id(mapsCate,
+                                                               (char*)hereCate.GetCategoryId().ToString().c_str());
+                                               is_valid |= (sub_error == MAPS_ERROR_NONE);
+                                       }
+
+                                       if (!hereCate.GetTitle().empty())
+                                       {
+                                               sub_error = maps_place_category_set_name(mapsCate,
+                                                               (char*)hereCate.GetTitle().c_str());
+                                               is_valid |= (sub_error == MAPS_ERROR_NONE);
+                                       }
+
+                                       if (!hereCate.GetHref().empty())
+                                       {
+                                               sub_error = maps_place_category_set_url(mapsCate,
+                                                               (char*)hereCate.GetHref().c_str());
+                                               is_valid |= (sub_error == MAPS_ERROR_NONE);
+                                       }
+
+                                       if (is_valid)
+                                       {
+                                               maps_item_list_append(mapsCateList, mapsCate, maps_place_category_clone);
+                                               maps_place_set_categories(mapsPlace, mapsCateList);
+                                               maps_item_list_remove_all(mapsCateList, maps_place_category_destroy);
+                                       }
+                                       maps_place_category_destroy(mapsCate);
+                               }
+                               maps_item_list_destroy(mapsCateList);
+                       }
+
+                       /* distance */
+                       maps_place_set_distance(mapsPlace, (int)herePlaceIt->GetDistance());
+
+                       /* sponser */
+                       /* herePlaceList.GetIsSponsored() */
+
+                       /* vicinity */
+
+                       /* If needed PlaceDetails information, postpone to send a reply */
+                       if(__sending_place_details_query_automatically)
+                       {
+                               hereLinkObj = herePlaceIt->GetLinkObject();
+                               if (!hereLinkObj.GetHref().empty() && !hereLinkObj.GetId().empty())
+                               {
+                                       m_PlaceList.push_back(mapsPlace);
+                                       isPending = true;
+                                       StartPlaceDetailsInternal(hereLinkObj.GetHref().c_str());
+                                       MAPS_LOGD("Add maps_place_h to the pending list. id=%s", hereLinkObj.GetId().data());
+                               }
+                       }
+               }
+
+               if (!isPending) {
+                       m_nReplyIdx++;
+                       m_PlaceList.push_back(mapsPlace);
+               }
+       }
+
+       for (hereSearchIt = hereSearchList.begin();
+               hereSearchIt != hereSearchList.end() && !m_bCanceled;
+               hereSearchIt++)
+       {
+               error = maps_place_create(&mapsPlace);
+
+               if(error == MAPS_ERROR_NONE)
+               {
+                       is_valid = false;
+
+                       // title, uri, szId
+                       hereLinkObj = hereSearchIt->GetLinkObject();
+
+                       if (!hereLinkObj.GetTitle().empty())
+                       {
+                               sub_error = maps_place_set_name(mapsPlace,
+                                               (char*)hereLinkObj.GetTitle().c_str());
+                               is_valid |= (sub_error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereLinkObj.GetHref().empty())
+                       {
+                               sub_error = maps_place_set_uri(mapsPlace,
+                                               (char*)hereLinkObj.GetHref().c_str());
+                               is_valid |= (sub_error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereLinkObj.GetId().empty())
+                       {
+                               sub_error = maps_place_set_id(mapsPlace,
+                                               (char*)hereLinkObj.GetId().c_str());
+                               is_valid |= (sub_error == MAPS_ERROR_NONE);
+                       }
+                       /* icon */
+                       /* type */
+
+                       if (!is_valid)
+                               error = MAPS_ERROR_NOT_FOUND;
+               }
+
+               m_PlaceList.push_back(mapsPlace);
+               m_nReplyIdx++;
+       }
+
+
+       if (m_nReplyIdx == m_nReplyCnt)
+       {
+               m_nReplyIdx = 0;
+               __sortList(m_PlaceList);
+       
+               while (m_nReplyIdx < m_nReplyCnt && !m_bCanceled && !m_PlaceList.empty())
+               {
+                       mapsPlace = m_PlaceList.front();
+                       m_PlaceList.pop_front();
+
+                       /* callback function */
+                       if (((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)error, m_nReqId,
+                               m_nReplyIdx++, m_nReplyCnt, mapsPlace, m_pUserData) == FALSE)
+                       {
+                               break;
+                       }
+               }
+               delete this;
+       }
+}
+
+void HerePlace::OnDiscoverFailure(const DiscoveryReply& Reply)
+{
+       if (!m_bCanceled)
+               ((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+       delete this;
+}
+
+void HerePlace::OnPlaceDetailsReply (const PlaceDetailsReply &Reply)
+{
+       if (m_bCanceled) /* ignore call back if it was cancelled. */
+       {
+               delete this;
+               return;
+       }
+
+       if (m_nReplyCnt == 0)
+               m_nReplyCnt = 1;
+
+       PlaceDetails herePlace = Reply.GetPlaceDetails();
+       maps_place_h mapsPlace = NULL;
+       int error = MAPS_ERROR_NONE, sub_error;
+       bool is_valid, isPending = false;
+       char *placeId;
+       int placeIdLen;
+
+       /* Finding maps_place_h which is already pending since DiscoverReply */
+       PlaceList::iterator it;
+       for (it = m_PlaceList.begin(); it != m_PlaceList.end(); it++)
+       {
+               if (maps_place_get_id(*it, &placeId) == MAPS_ERROR_NONE)
+               {
+                       placeIdLen = strlen(placeId);
+                       if(!herePlace.GetPlaceId().compare(0, placeIdLen, placeId))
+                       {
+                               mapsPlace = *it;
+                               isPending = true;
+                               MAPS_LOGD("Found maps_place_h in the pending list. id=%s", placeId);
+                               g_free(placeId);
+                               break;
+                       }
+               }
+               g_free(placeId);
+       }
+
+       /* If not found, create new handle */
+       if (!mapsPlace)
+               error = maps_place_create(&mapsPlace);
+
+       if (error == MAPS_ERROR_NONE)
+       {
+               is_valid = false;
+
+               /* name */
+               if (!herePlace.GetName().empty())
+               {
+                       sub_error = maps_place_set_name(mapsPlace, (char*)herePlace.GetName().c_str());
+                       is_valid |= (sub_error == MAPS_ERROR_NONE);
+               }
+
+               /* id */
+               if (!herePlace.GetPlaceId().empty())
+               {
+                       sub_error = maps_place_set_id(mapsPlace, (char*)herePlace.GetPlaceId().c_str());
+                       is_valid |= (sub_error == MAPS_ERROR_NONE);
+               }
+
+               /* view */
+               if (!herePlace.GetView().empty())
+               {
+                       sub_error = maps_place_set_uri(mapsPlace, (char*)herePlace.GetView().c_str());
+                       is_valid |= (sub_error == MAPS_ERROR_NONE);
+               }
+
+               if (is_valid)
+               {
+                       /* icon */
+                       /* maps not supported // herePlace.GetIconPath(); */
+
+                       /* location */
+                       ProcessPlaceLocation(herePlace, mapsPlace);
+
+                       ProcessPlaceContact(herePlace, mapsPlace);
+
+                       ProcessPlaceCategory(herePlace, mapsPlace);
+
+                       /* tags */
+                       /* maps & here not supported */
+
+                       ProcessPlaceImage(herePlace, mapsPlace);
+
+                       ProcessPlaceDetails(herePlace, mapsPlace);
+
+                       ProcessPlaceReviews(herePlace, mapsPlace);
+
+                       ProcessPlaceRatings(herePlace, mapsPlace);
+
+                       ProcessPlaceRated(herePlace, mapsPlace);
+               }
+               else
+               {
+                       error = MAPS_ERROR_NOT_FOUND;
+               }
+       }
+
+       if (!isPending)
+               m_PlaceList.push_back(mapsPlace);
+
+       m_nReplyIdx++;
+
+
+       if (m_nReplyIdx == m_nReplyCnt)
+       {
+               m_nReplyIdx = 0;
+               __sortList(m_PlaceList);
+       
+               while (m_nReplyIdx < m_nReplyCnt && !m_bCanceled && !m_PlaceList.empty())
+               {
+                       mapsPlace = m_PlaceList.front();
+                       m_PlaceList.pop_front();
+
+                       /* callback function */
+                       if (((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)error, m_nReqId,
+                               m_nReplyIdx++, m_nReplyCnt, mapsPlace, m_pUserData) == FALSE)
+                       {
+                               break;
+                       }
+               }
+               delete this;
+       }
+}
+
+void HerePlace::OnPlaceDetailsFailure(const PlaceDetailsReply& Reply)
+{
+       if (!m_bCanceled)
+               ((maps_service_search_place_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+       delete this;
+}
+
+void HerePlace::ProcessPlaceLocation(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       GeoLocation hereLocation = herePlace.GetLocation();
+
+       /* position */
+       GeoCoordinates hereCoord = hereLocation.GetDisplayPosition();
+       maps_coordinates_h mapsCoord;
+
+       if (maps_coordinates_create(hereCoord.GetLatitude(),
+               hereCoord.GetLongitude(), &mapsCoord) == MAPS_ERROR_NONE)
+       {
+               maps_place_set_location(mapsPlace, mapsCoord);
+               maps_coordinates_destroy(mapsCoord);
+       }
+
+       /* address */
+       Address hereAddr = hereLocation.GetAddress();
+       maps_address_h mapsAddr;
+       int error;
+       bool is_valid;
+
+       if (maps_address_create(&mapsAddr) == MAPS_ERROR_NONE)
+       {
+               is_valid = false;
+
+               if (!hereAddr.GetHouseNumber().empty())
+               {
+                       error = maps_address_set_building_number(mapsAddr,
+                                       hereAddr.GetHouseNumber().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetStreet().empty())
+               {
+                       error = maps_address_set_street(mapsAddr, hereAddr.GetStreet().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetDistrict().empty())
+               {
+                       error = maps_address_set_district(mapsAddr, hereAddr.GetDistrict().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetCity().empty())
+               {
+                       error = maps_address_set_city(mapsAddr, hereAddr.GetCity().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetState().empty())
+               {
+                       error = maps_address_set_state(mapsAddr, hereAddr.GetState().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetCountry().empty())
+               {
+                       error = maps_address_set_country(mapsAddr, hereAddr.GetCountry().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetCountryCode().empty())
+               {
+                       error = maps_address_set_country_code(mapsAddr, hereAddr.GetCountryCode().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetCounty().empty())
+               {
+                       error = maps_address_set_county(mapsAddr, hereAddr.GetCounty().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetPostalCode().empty())
+               {
+                       error = maps_address_set_postal_code(mapsAddr, hereAddr.GetPostalCode().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereAddr.GetLabel().empty())
+               {
+                       error = maps_address_set_freetext(mapsAddr, hereAddr.GetLabel().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (is_valid)
+               {
+                       maps_place_set_address(mapsPlace, mapsAddr);
+               }
+               maps_address_destroy(mapsAddr);
+       }
+}
+
+
+void HerePlace::ProcessPlaceContact(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       /* contact */
+       ContactDetailsList hereContList = herePlace.GetContactDetails();
+       ContactDetailsList::iterator hereCont;
+       maps_item_list_h mapsContList;
+       maps_place_contact_h mapsCont;
+       int error;
+       bool is_valid;
+
+       if (hereContList.empty()) return;
+
+       if (maps_item_list_create(&mapsContList) != MAPS_ERROR_NONE) return;
+
+       for (hereCont = hereContList.begin(); hereCont != hereContList.end(); hereCont++)
+       {
+               if (maps_place_contact_create(&mapsCont) != MAPS_ERROR_NONE) continue;
+
+               is_valid = false;
+
+               if (!hereCont->GetLabel().empty())
+               {
+                       error = maps_place_contact_set_label(mapsCont,
+                               (char*)hereCont->GetLabel().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereCont->GetValue().empty())
+               {
+                       error = maps_place_contact_set_value(mapsCont,
+                               (char*)hereCont->GetValue().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereCont->GetContactType().empty())
+               {
+                       error = maps_place_contact_set_type(mapsCont,
+                               (char*)hereCont->GetContactType().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (is_valid)
+               {
+                       maps_item_list_append(mapsContList, mapsCont,
+                               maps_place_contact_clone);
+               }
+               maps_place_contact_destroy(mapsCont);
+       }
+
+       if (maps_item_list_items(mapsContList))
+       {
+               maps_place_set_contacts(mapsPlace, mapsContList);
+               maps_item_list_remove_all(mapsContList, maps_place_contact_destroy);
+       }
+       maps_item_list_destroy(mapsContList);
+}
+
+void HerePlace::ProcessPlaceCategory(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       CategoryList hereCateList = herePlace.GetCategories();
+       CategoryList::iterator hereCate;
+       maps_item_list_h mapsCateList;
+       maps_place_category_h mapsCate;
+       int error;
+       bool is_valid = false;
+
+       if (hereCateList.empty()) return;
+
+       if (maps_item_list_create(&mapsCateList) != MAPS_ERROR_NONE) return;
+
+       // maps-service supports only one category
+       hereCate = hereCateList.begin();
+       if (maps_place_category_create(&mapsCate) == MAPS_ERROR_NONE)
+       {
+               if (!hereCate->GetCategoryId().ToString().empty())
+               {
+                       error = maps_place_category_set_id(mapsCate,
+                               hereCate->GetCategoryId().ToString().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereCate->GetTitle().empty())
+               {
+                       error = maps_place_category_set_name(mapsCate,
+                               hereCate->GetTitle().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereCate->GetHref().empty())
+               {
+                       error = maps_place_category_set_url(mapsCate,
+                               hereCate->GetHref().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (is_valid)
+               {
+                       maps_item_list_append(mapsCateList, mapsCate, maps_place_category_clone);
+               }
+               maps_place_category_destroy(mapsCate);
+       }
+
+       if (maps_item_list_items(mapsCateList))
+       {
+               maps_place_set_categories(mapsPlace, mapsCateList);
+               maps_item_list_remove_all(mapsCateList, maps_place_category_destroy);
+       }
+       maps_item_list_destroy(mapsCateList);
+}
+
+void HerePlace::ProcessPlaceImage(PlaceDetails herePlace, maps_place_h mapsPlace)
+{ 
+       ImageContentList hereImageList = herePlace.GetImageContent();
+       ImageContentList::iterator hereImage;
+       maps_item_list_h mapsImageList;
+       maps_place_image_h mapsImage;
+       maps_place_link_object_h mapsImageUser;
+       LinkObject hereImageUser;
+       int error;
+       bool is_valid, is_valid2;
+
+       if (hereImageList.empty()) return;
+
+       if (maps_item_list_create(&mapsImageList) != MAPS_ERROR_NONE) return;
+
+       for (hereImage = hereImageList.begin(); hereImage != hereImageList.end(); hereImage++)
+       {
+               if (maps_place_image_create(&mapsImage) != MAPS_ERROR_NONE) continue;
+
+               is_valid = false;
+
+               /* here not supported
+               // maps_place_image_set_height(maps_place_image_h mapsPlace, const int height); */
+
+               /* here not supported
+               // maps_place_image_set_media(maps_place_image_h mapsPlace, maps_place_media_h media); */
+
+               if (!hereImage->GetSource().empty())
+               {
+                       error = maps_place_image_set_url(mapsImage, (char*)hereImage->GetSource().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereImage->GetImageId().empty())
+               {
+                       error = maps_place_image_set_id(mapsImage, (char*)hereImage->GetImageId().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               hereImageUser = hereImage->GetUser();
+               if (maps_place_link_object_create(&mapsImageUser) == MAPS_ERROR_NONE)
+               {
+                       is_valid2 = false;
+
+                       if (!hereImageUser.GetId().empty())
+                       {
+                               error = maps_place_link_object_set_id(mapsImageUser,
+                                               (char*)hereImageUser.GetId().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereImageUser.GetTitle().empty())
+                       {
+                               error = maps_place_link_object_set_name(mapsImageUser,
+                                               (char*)hereImageUser.GetTitle().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereImageUser.GetHref().empty())
+                       {
+                               error = maps_place_link_object_set_string(mapsImageUser,
+                                               (char*)hereImageUser.GetHref().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereImageUser.GetType().empty())
+                       {
+                               error = maps_place_link_object_set_type(mapsImageUser,
+                                               (char*)hereImageUser.GetType().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (is_valid2)
+                       {
+                               maps_place_image_set_user_link(mapsImage, mapsImageUser);
+                               is_valid |= is_valid2;
+                       }
+                       maps_place_link_object_destroy(mapsImageUser);
+               }
+
+               if (is_valid)
+               {
+                       maps_item_list_append(mapsImageList, mapsImage, maps_place_image_clone);
+               }
+               maps_place_image_destroy(mapsImage);
+       }
+
+       if (maps_item_list_items(mapsImageList))
+       {
+               maps_place_set_images(mapsPlace, mapsImageList);
+               maps_item_list_remove_all(mapsImageList, maps_place_image_destroy);
+       }
+       maps_item_list_destroy(mapsImageList);
+}
+
+void HerePlace::ProcessPlaceDetails(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       EditorialContentList hereEditList = herePlace.GetEditorialContent();
+       EditorialContentList::iterator hereEdit;
+       maps_item_list_h mapsEditList;
+       maps_place_editorial_h mapsEdit;
+       int error;
+       bool is_valid;
+
+       if (hereEditList.empty()) return;
+
+       if (maps_item_list_create(&mapsEditList) != MAPS_ERROR_NONE) return;
+
+       for (hereEdit = hereEditList.begin(); hereEdit != hereEditList.end(); hereEdit++)
+       {
+               if (maps_place_editorial_create(&mapsEdit) != MAPS_ERROR_NONE) continue;
+
+               is_valid = false;
+
+               if (!hereEdit->GetDescription().empty())
+               {
+                       error = maps_place_editorial_set_description(mapsEdit,
+                               (char*)hereEdit->GetDescription().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereEdit->GetLanguage().empty())
+               {
+                       error = maps_place_editorial_set_language(mapsEdit,
+                               (char*)hereEdit->GetLanguage().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               /* maps_place_editorial_set_media(mapsEdit, maps_place_media_h media); */
+
+               if (is_valid)
+               {
+                       maps_item_list_append(mapsEditList, mapsEdit, maps_place_editorial_clone);
+               }
+               maps_place_editorial_destroy(mapsEdit);
+       }
+
+       if (maps_item_list_items(mapsEditList))
+       {
+               maps_place_set_editorials(mapsPlace, mapsEditList);
+               maps_item_list_remove_all(mapsEditList, maps_place_editorial_destroy);
+       }
+       maps_item_list_destroy(mapsEditList);
+}
+
+void HerePlace::ProcessPlaceReviews(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       ReviewContentList hereReviewList = herePlace.GetReviewContent();
+       ReviewContentList::iterator hereReview;
+       maps_place_review_h mapsReview;
+       maps_item_list_h mapsReviewList;
+       LinkObject hereReviewUser;
+       maps_place_link_object_h mapsReviewUser;
+       int error;
+       bool is_valid, is_valid2;
+
+       if (hereReviewList.empty()) return;
+
+       if (maps_item_list_create(&mapsReviewList) != MAPS_ERROR_NONE) return;
+
+       for (hereReview = hereReviewList.begin(); hereReview != hereReviewList.end(); hereReview++)
+       {
+               if (maps_place_review_create(&mapsReview) != MAPS_ERROR_NONE) continue;
+
+               is_valid = false;
+
+               if (!hereReview->GetDateTime().empty())
+               {
+                       error = maps_place_review_set_date(mapsReview,
+                               (char*)hereReview->GetDateTime().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereReview->GetDescription().empty())
+               {
+                       error = maps_place_review_set_description(mapsReview,
+                               (char*)hereReview->GetDescription().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               if (!hereReview->GetLanguage().empty())
+               {
+                       error = maps_place_review_set_language(mapsReview,
+                               (char*)hereReview->GetLanguage().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               /* maps_place_review_set_media(mapsReview, maps_place_media_h media) */
+
+               maps_place_review_set_rating(mapsReview, hereReview->GetRating());
+
+               if (!hereReview->GetTitle().empty())
+               {
+                       error = maps_place_review_set_title(mapsReview,
+                               (char*)hereReview->GetTitle().c_str());
+                       is_valid |= (error == MAPS_ERROR_NONE);
+               }
+
+               hereReviewUser = hereReview->GetUser();
+               if (maps_place_link_object_create(&mapsReviewUser) == MAPS_ERROR_NONE)
+               {
+                       is_valid2 = false;
+
+                       if (!hereReviewUser.GetId().empty())
+                       {
+                               error = maps_place_link_object_set_id(mapsReviewUser,
+                                       (char*)hereReviewUser.GetId().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereReviewUser.GetTitle().empty())
+                       {
+                               error = maps_place_link_object_set_name(mapsReviewUser,
+                                       (char*)hereReviewUser.GetTitle().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereReviewUser.GetHref().empty())
+                       {
+                               error = maps_place_link_object_set_string(mapsReviewUser,
+                                       (char*)hereReviewUser.GetHref().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (!hereReviewUser.GetType().empty())
+                       {
+                               error = maps_place_link_object_set_type(mapsReviewUser,
+                                       (char*)hereReviewUser.GetType().c_str());
+                               is_valid2 |= (error == MAPS_ERROR_NONE);
+                       }
+
+                       if (is_valid2)
+                       {
+                               maps_place_review_set_user_link(mapsReview, mapsReviewUser);
+                               is_valid |= is_valid2;
+                       }
+                       maps_place_link_object_destroy(mapsReviewUser);
+               }
+
+               if (is_valid)
+               {
+                       maps_item_list_append(mapsReviewList, mapsReview, maps_place_review_clone);
+               }
+               maps_place_review_destroy(mapsReview);
+       }
+
+       if (maps_item_list_items(mapsReviewList))
+       {
+               maps_place_set_reviews(mapsPlace, mapsReviewList);
+               maps_item_list_remove_all(mapsReviewList, maps_place_review_destroy);
+       }
+       maps_item_list_destroy(mapsReviewList);
+}
+
+void HerePlace::ProcessPlaceRatings(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       Ratings hereRating = herePlace.GetRatings();
+       maps_place_rating_h mapsRating;
+
+       if (maps_place_rating_create(&mapsRating) != MAPS_ERROR_NONE) return;
+
+       maps_place_rating_set_average(mapsRating, hereRating.GetAverage());
+       maps_place_rating_set_count(mapsRating, hereRating.GetCount());
+       maps_place_set_rating(mapsPlace, mapsRating);
+       maps_place_rating_destroy(mapsRating);
+}
+
+void HerePlace::ProcessPlaceRated(PlaceDetails herePlace, maps_place_h mapsPlace)
+{
+       RelatedItem hereRelated = herePlace.GetRelatedItem();
+       maps_place_link_object_h mapsRelated;
+       int error;
+       bool is_valid = false;
+
+       if (maps_place_link_object_create(&mapsRelated) != MAPS_ERROR_NONE) return;
+
+       //need to check if GetId() exist
+       //maps_place_link_object_set_id(mapsRelated, hereRelated.GetId());
+
+       if (!hereRelated.GetTitle().empty())
+       {
+               error = maps_place_link_object_set_name(mapsRelated,
+                       (char*)hereRelated.GetTitle().c_str());
+               is_valid |= (error == MAPS_ERROR_NONE);
+       }
+
+       if (!hereRelated.GetHref().empty())
+       {
+               error = maps_place_link_object_set_string(mapsRelated,
+                       (char*)hereRelated.GetHref().c_str());
+               is_valid |= (error == MAPS_ERROR_NONE);
+       }
+
+       if (!hereRelated.GetType().empty())
+       {
+               error = maps_place_link_object_set_type(mapsRelated,
+                       (char*)hereRelated.GetType().c_str());
+               is_valid |= (error == MAPS_ERROR_NONE);
+       }
+
+       if (is_valid)
+       {
+               maps_place_set_related_link(mapsPlace, mapsRelated);
+       }
+       maps_place_link_object_destroy(mapsRelated);
+}
+
+bool HerePlace::__compareWithTitle(const maps_place_h &item1, const maps_place_h &item2)
+{
+       bool result = false;
+       char *str1 = NULL, *str2 = NULL;
+
+       if (maps_place_get_name(item1, &str1) == MAPS_ERROR_NONE &&
+               maps_place_get_name(item2, &str2) == MAPS_ERROR_NONE)
+       {
+               result = (strcmp(str1, str2) < 0);
+       }
+       g_free(str1);
+       g_free(str2);
+       return result;
+}
+
+bool HerePlace::__compareWithId(const maps_place_h &item1, const maps_place_h &item2)
+{
+       bool result = false;
+       char *str1 = NULL, *str2 = NULL;
+
+       if (maps_place_get_id(item1, &str1) == MAPS_ERROR_NONE &&
+               maps_place_get_id(item2, &str2) == MAPS_ERROR_NONE)
+       {
+               result = (strcmp(str1, str2) < 0);
+       }
+       g_free(str1);
+       g_free(str2);
+       return result;
+}
+
+bool HerePlace::__compareWithDistance(const maps_place_h &item1, const maps_place_h &item2)
+{
+       bool result = false;
+       int num1 = 0, num2 = 0;
+
+       if (maps_place_get_distance(item1, &num1) == MAPS_ERROR_NONE &&
+               maps_place_get_distance(item2, &num2) == MAPS_ERROR_NONE)
+       {
+               result = (num1 < num2);
+       }
+       return result;
+}
+
+bool HerePlace::__compareWithRating(const maps_place_h &item1, const maps_place_h &item2)
+{
+       bool result = false;
+       maps_place_rating_h rat1 = NULL, rat2 = NULL;
+       double num1 = 0, num2 = 0;      
+
+       if (maps_place_get_rating(item1, &rat1) == MAPS_ERROR_NONE &&
+               maps_place_get_rating(item2, &rat2) == MAPS_ERROR_NONE)
+       {
+               if (maps_place_rating_get_average(rat1, &num1) == MAPS_ERROR_NONE &&
+                       maps_place_rating_get_average(rat2, &num2) == MAPS_ERROR_NONE)
+               {
+                       result = (num1 > num2);
+               }
+       }
+       maps_place_rating_destroy(rat1);
+       maps_place_rating_destroy(rat2);
+       return result;
+}
+
+bool HerePlace::__compareWithCategoryCb(int index, int total,
+                                        maps_place_category_h category,
+                                        void *user_data)
+{
+       user_data = category;
+       return false;
+}
+
+bool HerePlace::__compareWithCategory(const maps_place_h &item1, const maps_place_h &item2)
+{
+       bool result = false;
+       maps_place_category_h cat1 = NULL, cat2 = NULL;
+       char *str1 = NULL, *str2 = NULL;
+
+       maps_place_foreach_category(item1, __compareWithCategoryCb, &cat1);
+       maps_place_foreach_category(item2, __compareWithCategoryCb, &cat2);
+
+       if (maps_place_category_get_id(item1, &str1) == MAPS_ERROR_NONE &&
+               maps_place_category_get_id(item2, &str2) == MAPS_ERROR_NONE)
+       {
+               result = (strcmp(str1, str2) < 0);
+       }
+       maps_place_category_destroy(item1);
+       maps_place_category_destroy(item2);
+       g_free(str1);
+       g_free(str2);
+       return result;
+}
+
+void HerePlace::__sortList(PlaceList &list)
+{
+       if (!m_szSortBy) return;
+
+       if (!strcmp(m_szSortBy, "name") || !strcmp(m_szSortBy, "title"))
+       {
+               std::sort(list.begin(), list.end(), __compareWithTitle);
+       }
+       else if (!strcmp(m_szSortBy, "id"))
+       {
+               std::sort(list.begin(), list.end(), __compareWithId);
+       }
+       else if (!strcmp(m_szSortBy, "distance"))
+       {
+               std::sort(list.begin(), list.end(), __compareWithDistance);
+       }
+       else if (!strcmp(m_szSortBy, "rate") || !strcmp(m_szSortBy, "rating"))
+       {
+               std::sort(list.begin(), list.end(), __compareWithRating);
+       }
+       else if (!strcmp(m_szSortBy, "category"))
+       {
+               std::sort(list.begin(), list.end(), __compareWithCategory);
+       }
+}
+
+HERE_PLUGIN_END_NAMESPACE
diff --git a/src/here_plugin.cpp b/src/here_plugin.cpp
new file mode 100644 (file)
index 0000000..43e3c77
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <maps_plugin.h>
+#include "here_api.h"
+#include "here_types.h"
+#include "here_utils.h"
+
+extern "C"
+{
+
+EXPORT_API int maps_plugin_init(maps_plugin_h *plugin)
+{
+       if (!plugin)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginInit(plugin);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_shutdown(maps_plugin_h plugin)
+{
+       if (!plugin)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginShutdown(plugin);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_get_info(maps_plugin_info_h* info)
+{
+       if (!info)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       maps_plugin_info_create(info);
+       maps_plugin_info_set_provider_name(*info, "HERE");
+
+       return MAPS_ERROR_NONE;
+}
+
+EXPORT_API int maps_plugin_set_provider_key(const char* provider_key)
+{
+       if (!provider_key)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSetProviderKey(provider_key);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_get_provider_key(char** provider_key)
+{
+       if (!provider_key)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginGetProviderKey(provider_key);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_set_preference(maps_preference_h preference)
+{
+       if (!preference)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSetPreference(preference);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_get_preference(maps_preference_h* preference)
+{
+       if (!preference)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginGetPreference(preference);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_is_service_supported(maps_service_e service, bool *supported)
+{
+       if (!supported)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       switch(service)
+       {
+               case MAPS_SERVICE_GEOCODE:
+               case MAPS_SERVICE_GEOCODE_INSIDE_AREA:
+               case MAPS_SERVICE_GEOCODE_BY_STRUCTURED_ADDRESS:
+               case MAPS_SERVICE_REVERSE_GEOCODE:
+               case MAPS_SERVICE_SEARCH_PLACE:
+               case MAPS_SERVICE_SEARCH_PLACE_BY_AREA:
+               case MAPS_SERVICE_SEARCH_PLACE_BY_ADDRESS:
+               case MAPS_SERVICE_SEARCH_ROUTE:
+               case MAPS_SERVICE_SEARCH_ROUTE_WAYPOINTS:
+               case MAPS_SERVICE_CANCEL_REQUEST:
+                       *supported = TRUE;
+                       return MAPS_ERROR_NONE;
+               default:
+                       *supported = FALSE;
+                       return MAPS_ERROR_NOT_SUPPORTED;
+       }
+}
+
+EXPORT_API int maps_plugin_is_data_supported(maps_service_data_e service, bool *supported)
+{
+       if (!supported)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       switch(service)
+       {
+               case MAPS_PLACE_ADDRESS:
+               case MAPS_PLACE_RATING:
+               case MAPS_PLACE_CATEGORIES:
+               case MAPS_PLACE_ATTRIBUTES:
+               case MAPS_PLACE_CONTACTS:
+               case MAPS_PLACE_EDITORIALS:
+               case MAPS_PLACE_REVIEWS:
+               case MAPS_PLACE_IMAGE:
+               case MAPS_PLACE_SUPPLIER:
+               case MAPS_PLACE_RELATED:
+               case MAPS_ROUTE_PATH:
+               case MAPS_ROUTE_SEGMENTS_PATH:
+               case MAPS_ROUTE_SEGMENTS_MANEUVERS:
+                       *supported = TRUE;
+                       return MAPS_ERROR_NONE;
+               default:
+                       *supported = FALSE;
+                       return MAPS_ERROR_NOT_SUPPORTED;
+       }
+}
+
+EXPORT_API int maps_plugin_geocode(const char* address, const maps_preference_h preference,
+       maps_service_geocode_cb callback, void *user_data, int* request_id)
+{
+       if (!address || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginGeocode(address, preference, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_geocode_inside_area(const char* address, const maps_area_h bounds,
+       const maps_preference_h preference, maps_service_geocode_cb callback,
+       void* user_data, int* request_id)
+{
+       if (!bounds || !address || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginGeocodeInsideArea(address, bounds, preference, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_geocode_by_structured_address(const maps_address_h address,
+       const maps_preference_h preference, maps_service_geocode_cb callback,
+       void *user_data, int* request_id)
+{
+       if (!address || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginGeocodeByStructuredAddress(address, preference, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_reverse_geocode(double latitude, double longitude,
+       const maps_preference_h preference, maps_service_reverse_geocode_cb callback,
+       void *user_data, int* request_id)
+{
+       if (!callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginReverseGeocode(latitude, longitude, preference, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_place(const maps_coordinates_h position, int distance,
+       const maps_place_filter_h filter, maps_preference_h preference, maps_service_search_place_cb callback,
+       void* user_data, int* request_id)
+{
+       if (!position || !filter || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSearchPlace(position, distance, preference, filter, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_place_by_area(const maps_area_h boundary,
+       const maps_place_filter_h filter, maps_preference_h preference, maps_service_search_place_cb callback,
+       void* user_data, int* request_id)
+{
+       if (!boundary || !filter || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSearchPlaceByArea(boundary, preference, filter, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_place_by_address(const char* address, const maps_area_h boundary,
+       const maps_place_filter_h filter, maps_preference_h preference, maps_service_search_place_cb callback,
+       void* user_data, int* request_id)
+{
+       if (!address || !boundary || !filter || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSearchPlaceByAddress(address, boundary, preference, filter, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_route(const maps_coordinates_h origin, const maps_coordinates_h destination,
+       maps_preference_h preference, maps_service_search_route_cb callback,
+       void* user_data, int* request_id)
+{
+       if (!origin || !destination || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSearchRoute(origin, destination, preference, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_search_route_waypoints(const maps_coordinates_h* waypoint_list, int waypoint_num,
+       maps_preference_h preference, maps_service_search_route_cb callback,
+       void* user_data, int* request_id)
+{
+       if (!waypoint_list || waypoint_num <= 0 || !callback || !request_id)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginSearchRouteWaypoints(waypoint_list, waypoint_num, preference, callback, user_data, request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+EXPORT_API int maps_plugin_cancel_request(int request_id)
+{
+       if (request_id < 0)
+               return MAPS_ERROR_INVALID_PARAMETER;
+
+       int ret = HerePluginCancelRequest(request_id);
+
+       MAPS_LOGD("here_error_e = %d", ret);
+
+       return ConvertToMapsError(ret);
+}
+
+} // end of extern "C"
+
diff --git a/src/here_revgeocode.cpp b/src/here_revgeocode.cpp
new file mode 100644 (file)
index 0000000..914108e
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_revgeocode.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereRevGeocode::HereRevGeocode(void* pCbFunc, void* pUserData, int nReqId)
+: m_geoCoord(0,0,0)
+{
+       m_pQuery = NULL;
+       m_pCbFunc = pCbFunc;
+       m_pUserData = pUserData;
+       m_nReqId = nReqId;
+}
+
+HereRevGeocode::~HereRevGeocode()
+{
+       if (m_pQuery)
+       {
+               delete m_pQuery;
+               m_pQuery = NULL;
+       }
+}
+
+here_error_e HereRevGeocode::PrepareQuery()
+{
+       if (m_pQuery)
+               return HERE_ERROR_PERMISSION_DENIED;
+
+       m_pQuery = new ReverseGeoCoderQuery();
+
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+       else
+               return HERE_ERROR_NONE;
+}
+
+here_error_e HereRevGeocode::PreparePreference(maps_preference_h hPref)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       int ret;
+       char *szLanguage;
+       ret = maps_preference_get_language(hPref, &szLanguage);
+       if (ret == MAPS_ERROR_NONE && szLanguage && *szLanguage)
+               m_pQuery->AppendPreferredLanguage(szLanguage);
+       g_free(szLanguage);
+
+       int nMaxResults;
+       ret = maps_preference_get_max_results(hPref, &nMaxResults);
+       if (ret == MAPS_ERROR_NONE)
+               m_pQuery->SetMaxResults((size_t)nMaxResults);
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereRevGeocode::PreparePosition(double dLat, double dLng)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       GeoCoordinates geoCoord(dLat, dLng);
+       if (!HereUtils::IsValid(geoCoord))
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       m_pQuery->SetProximity(geoCoord, 0);
+       m_pQuery->SetMode(ReverseGeoCoderQuery::RM_RetrieveAddresses);
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereRevGeocode::StartRevGeocode(maps_item_hashtable_h hPref)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HereRevGeocode::OnGeoCoderReply(const GeoCoderReply& Reply)
+{
+       if (m_bCanceled) // ignore call back if it was cancelled.
+       {
+               delete this;
+               return;
+       }
+
+
+       int nResults = Reply.GetNumResults();
+       Result* pResult;
+       float fDistance, fShortestDistance = 0;
+       int nShortestIdx = -1;
+
+       for (size_t i = 0; i < (size_t)nResults; i++)
+       {
+               pResult = (Result*)Reply.GetResult(i);
+
+               if(pResult)
+               {
+                       fDistance = pResult->GetDistance();
+
+                       if (nShortestIdx < 0 || fDistance < fShortestDistance)
+                       {
+                               fShortestDistance = fDistance;
+                               nShortestIdx = i;
+                       }
+               }
+       }
+
+
+       if (nShortestIdx < 0)
+       {
+               ((maps_service_reverse_geocode_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND,
+                       m_nReqId, 0, 1, NULL, m_pUserData);
+               delete this;
+               return;
+       }
+
+       maps_address_h hAddr = NULL;
+       maps_error_e error = (maps_error_e)maps_address_create(&hAddr);
+
+       if(error == MAPS_ERROR_NONE)
+       {
+               pResult = (Result*)Reply.GetResult(nShortestIdx);
+
+               if (pResult)
+               {
+                       Address tmpAddr = (pResult->GetLocation()).GetAddress();
+
+                       if(!tmpAddr.GetHouseNumber().empty())
+                               maps_address_set_building_number(hAddr, tmpAddr.GetHouseNumber().c_str());
+
+                       if(!tmpAddr.GetStreet().empty())
+                               maps_address_set_street(hAddr, tmpAddr.GetStreet().c_str());
+
+                       if(!tmpAddr.GetDistrict().empty())
+                               maps_address_set_district(hAddr, tmpAddr.GetDistrict().c_str());
+
+                       if(!tmpAddr.GetCity().empty())
+                               maps_address_set_city(hAddr, tmpAddr.GetCity().c_str());
+
+                       if(!tmpAddr.GetCounty().empty())
+                               maps_address_set_county(hAddr, tmpAddr.GetCounty().c_str());
+
+                       if(!tmpAddr.GetState().empty())
+                               maps_address_set_state(hAddr, tmpAddr.GetState().c_str());
+
+                       if(!tmpAddr.GetCountry().empty())
+                               maps_address_set_country(hAddr, tmpAddr.GetCountry().c_str());
+
+                       if(!tmpAddr.GetCountryCode().empty())
+                               maps_address_set_country_code(hAddr, tmpAddr.GetCountryCode().c_str());
+
+                       if(!tmpAddr.GetPostalCode().empty())
+                               maps_address_set_postal_code(hAddr, tmpAddr.GetPostalCode().c_str());
+
+                       if(!tmpAddr.GetLabel().empty())
+                               maps_address_set_freetext(hAddr, tmpAddr.GetLabel().c_str());
+               }
+       }
+
+       if (m_bCanceled)
+       {
+               maps_address_destroy(hAddr);
+       }
+       else
+       {
+               ((maps_service_reverse_geocode_cb)m_pCbFunc)(error, m_nReqId, 0, 1, hAddr, m_pUserData);
+       }
+
+       delete this;
+}
+
+void HereRevGeocode::OnGeoCoderFailure(const GeoCoderReply& Reply)
+{
+       if (!m_bCanceled)
+               ((maps_service_reverse_geocode_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+       delete this;
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_route.cpp b/src/here_route.cpp
new file mode 100644 (file)
index 0000000..a8eb95e
--- /dev/null
@@ -0,0 +1,431 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_route.h"
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereRoute::HereRoute(void *pCbFunc, void *pUserData, int nReqId)
+{
+       m_pQuery = NULL;
+
+       m_pCbFunc = pCbFunc;
+       m_pUserData = pUserData;
+       m_nReqId = nReqId;
+}
+
+HereRoute::~HereRoute()
+{
+       if (m_pQuery)
+       {
+               delete m_pQuery;
+               m_pQuery = NULL;
+       }
+}
+
+here_error_e HereRoute::PrepareQuery()
+{
+       if (m_pQuery)
+               return HERE_ERROR_PERMISSION_DENIED;
+
+       GeoCoordinates origCoord, destCoord;
+       m_pQuery = new GeoRouteQuery(origCoord, destCoord);
+
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+       else
+               return HERE_ERROR_NONE;
+}
+
+here_error_e HereRoute::PrepareWaypoint(maps_coordinates_h hOrigin, maps_coordinates_h hDestination)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hOrigin || !hDestination)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+
+       const int nWaypointNum = 2;
+       maps_coordinates_h hWaypointList[nWaypointNum];
+       hWaypointList[0] = hOrigin;
+       hWaypointList[1] = hDestination;
+
+       return PrepareWaypoint(hWaypointList, nWaypointNum);
+}
+
+here_error_e HereRoute::PrepareWaypoint(const maps_coordinates_h* hWaypointList, int nWaypointNum)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hWaypointList || nWaypointNum <= 0)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+       GeoCoordinateList hereCoordList;
+       GeoCoordinates hereCoord;
+       double dLatitude, dLongitude;
+
+       for (int index = 0; index < nWaypointNum; index++)
+       {
+               if (hWaypointList[index] != NULL) {
+                       maps_coordinates_get_latitude(hWaypointList[index], &dLatitude);
+                       maps_coordinates_get_longitude(hWaypointList[index], &dLongitude);
+
+                       //MAPS_LOGD("Waypoint --> Lat : %f, Long : %f", dLatitude, dLongitude);
+
+                       hereCoord = GeoCoordinates(dLatitude, dLongitude);
+
+                       if (!HereUtils::IsValid(hereCoord))
+                               return HERE_ERROR_INVALID_PARAMETER;
+
+                       hereCoordList.push_back(hereCoord);
+               }
+       }
+
+       m_pQuery->SetWaypoints(hereCoordList);
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereRoute::PreparePreference(maps_preference_h hPref)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       if (!hPref)
+               return HERE_ERROR_INVALID_PARAMETER;
+
+/*
+       SegmentDetail aSegmentDetail;
+       ManeuverDetail aMneuverDetail;
+       m_pQuery->SetSegmentDetail(aSegmentDetail);
+       m_pQuery->SetManeuverDetail(aMneuverDetail);
+*/
+
+       /* transport mode */
+       maps_route_transport_mode_e eTransMode;
+       if (maps_preference_get_route_transport_mode(hPref, &eTransMode) == MAPS_ERROR_NONE)
+       {
+               m_pQuery->SetTravelModes(HereUtils::Convert(eTransMode));
+       }
+
+       /* eFeature */
+       maps_route_feature_e eFeature;
+       maps_route_feature_weight_e eFeatureWeight;
+       if (maps_preference_get_route_feature(hPref, &eFeature) == MAPS_ERROR_NONE &&
+           maps_preference_get_route_feature_weight(hPref, &eFeatureWeight) == MAPS_ERROR_NONE)
+       {
+               m_pQuery->SetFeatureWeight(HereUtils::Convert(eFeature),
+                       HereUtils::Convert(eFeatureWeight));
+       }
+
+       /* exclude areas */
+       char *szAreaToAvoid;
+       if (maps_preference_get(hPref, MAPS_ROUTE_RECT_AREA_TO_AVOID, &szAreaToAvoid) == MAPS_ERROR_NONE)
+       {
+               GeoBoundingBox gbBox;
+               GeoBoundingBoxList gbBoxList;
+               gbBoxList.push_back(HereUtils::Convert(szAreaToAvoid, gbBox));
+               m_pQuery->SetExcludeAreas(gbBoxList);
+               g_free(szAreaToAvoid);
+       }
+
+       /* optimization */
+       GeoRouteQuery::RouteOptimization hereOpt;
+       maps_route_optimization_e mapsOpt;
+       if (maps_preference_get_route_optimization(hPref, &mapsOpt) == MAPS_ERROR_NONE)
+       {
+               switch (mapsOpt)
+               {
+               case MAPS_ROUTE_TYPE_FASTEST:  hereOpt = GeoRouteQuery::RO_FastestRoute;  break;
+               case MAPS_ROUTE_TYPE_SHORTEST: hereOpt = GeoRouteQuery::RO_ShortestRoute; break;
+               default:                       hereOpt = GeoRouteQuery::RO_FastestRoute;  break;
+               }
+               m_pQuery->SetRouteOptimization(hereOpt);
+       }
+
+       /* Metric System */
+       GeoRouteQuery::MetricSystem eMetric;
+       maps_distance_unit_e eUnit;
+       if (maps_preference_get_distance_unit(hPref, &eUnit) == MAPS_ERROR_NONE)
+       {
+               switch (eUnit)
+               {
+               case MAPS_DISTANCE_UNIT_M:  eMetric = GeoRouteQuery::DIST_metric;   break;
+               case MAPS_DISTANCE_UNIT_KM: eMetric = GeoRouteQuery::DIST_metric;   break;
+               default:                    eMetric = GeoRouteQuery::DIST_imperial; break;
+               }
+               m_pQuery->SetMetricSystem(eMetric);
+       }
+
+       char *szViewBounds;
+       if (maps_preference_get(hPref, MAPS_ROUTE_GEOMETRY_BOUNDING_BOX, &szViewBounds) == MAPS_ERROR_NONE)
+       {
+               GeoBoundingBox gbBox;
+               HereUtils::Convert(szViewBounds, gbBox);
+               m_pQuery->SetViewBounds(gbBox);
+               g_free(szViewBounds);
+       }
+
+       return HERE_ERROR_NONE;
+}
+
+here_error_e HereRoute::StartRoute(void)
+{
+       if (!m_pQuery)
+               return HERE_ERROR_OUT_OF_MEMORY;
+
+       m_nRestReqId = m_pQuery->Execute(*this, NULL);
+
+       return (m_nRestReqId > 0 ? HERE_ERROR_NONE : HERE_ERROR_INVALID_OPERATION);
+}
+
+void HereRoute::OnRouteReply(const GeoRouteReply& Reply)
+{
+       if (m_bCanceled) // ignore call back if it was cancelled.
+       {
+               delete this;
+               return;
+       }
+
+       maps_route_h mapsRoute;
+       maps_error_e error;
+       GeoRouteList hereRouteList = Reply.GetRoutes();
+       int nReplyIdx = 0, nReplyNum = hereRouteList.size();
+       GeoRouteList::iterator hereRoute;
+
+       if (nReplyNum == 0)
+       {
+               ((maps_service_search_route_cb)m_pCbFunc)(MAPS_ERROR_NOT_FOUND, m_nReqId,
+                       0, 1, NULL, m_pUserData);
+               delete this;
+               return;
+       }
+
+       for (hereRoute = hereRouteList.begin() ; hereRoute != hereRouteList.end() ; hereRoute++)
+       {
+               error = (maps_error_e)maps_route_create(&mapsRoute);
+
+               if (error == MAPS_ERROR_NONE)
+               {
+                       /* route id */
+                       if (!hereRoute->GetRouteId().empty())
+                               maps_route_set_route_id(mapsRoute, (char*)hereRoute->GetRouteId().c_str());
+
+                       /* distance */
+                       maps_route_set_total_distance(mapsRoute, hereRoute->GetDistance());
+
+                       /* duration */
+                       maps_route_set_total_duration(mapsRoute, hereRoute->GetTravelTime());
+
+                       /* travel mode */
+                       maps_route_transport_mode_e eTransportMode;
+                       eTransportMode = HereUtils::Convert(hereRoute->GetTravelMode());
+                       maps_route_set_transport_mode(mapsRoute, eTransportMode);
+
+                       /* path */
+                       GeoCoordinateList herePathList = hereRoute->GetPath();
+                       maps_item_list_h mapsPathList;
+                       maps_coordinates_h mapsPath;
+
+                       if (maps_item_list_create(&mapsPathList) == MAPS_ERROR_NONE)
+                       {
+                               GeoCoordinateList::iterator herePath;
+                               for (herePath = herePathList.begin(); herePath != herePathList.end(); herePath++)
+                               {
+                                       double dLat = herePath->GetLatitude();
+                                       double dLng = herePath->GetLongitude();
+
+                                       if(maps_coordinates_create(dLat, dLng, &mapsPath) == MAPS_ERROR_NONE)
+                                       {
+                                               if (herePath == herePathList.begin())
+                                                       maps_route_set_origin(mapsRoute, mapsPath);
+                                               else if (herePath == herePathList.end()-1)
+                                                       maps_route_set_destination(mapsRoute, mapsPath);
+                                               else
+                                                       maps_item_list_append(mapsPathList, mapsPath, maps_coordinates_clone);
+
+                                               maps_coordinates_destroy(mapsPath);
+                                       }
+                               }
+
+                               if (maps_item_list_items(mapsPathList))
+                               {
+                                       maps_route_set_path(mapsRoute, mapsPathList);
+                                       maps_item_list_remove_all(mapsPathList, maps_coordinates_destroy);
+                               }
+                               maps_item_list_destroy(mapsPathList);
+                       }
+
+                       /* bounding box */
+                       maps_area_h hMapsArea = NULL;
+                       HereUtils::Convert(hereRoute->GetBounds(), hMapsArea);
+                       if (hMapsArea)
+                       {
+                               maps_route_set_bounding_box(mapsRoute, hMapsArea);
+                               maps_area_destroy(hMapsArea);
+                       }
+
+                       /* segments */
+                       ProcessSegments(mapsRoute, hereRoute->GetRouteSegmentList());
+               }
+
+               if (m_bCanceled)
+               {
+                       maps_route_destroy(mapsRoute);
+                       break;
+               }
+               else
+               {
+                       if (((maps_service_search_route_cb)m_pCbFunc)(error, m_nReqId,
+                               nReplyIdx++, nReplyNum, mapsRoute, m_pUserData) == FALSE)
+                       {
+                               delete this;
+                               return;
+                       }
+                       //maps_route_destroy(mapsRoute);
+               }
+       }
+
+       if(nReplyIdx >= nReplyNum)
+               delete this;
+}
+
+void HereRoute::OnRouteFailure(const GeoRouteReply& Reply)
+{
+       if (!m_bCanceled)
+               ((maps_service_search_route_cb)m_pCbFunc)((maps_error_e)GetErrorCode(Reply), m_nReqId, 0, 1, NULL, m_pUserData);
+       delete this;
+}
+
+maps_error_e HereRoute::ProcessSegments(maps_route_h mapsRoute, const RouteSegmentList& hereSegmList)
+{
+       maps_item_list_h mapsSegmList;
+       maps_route_segment_h mapsSegm;
+       maps_error_e error;
+
+       if (hereSegmList.empty()) return MAPS_ERROR_NOT_FOUND;
+
+       if ((error = (maps_error_e)maps_item_list_create(&mapsSegmList)) != MAPS_ERROR_NONE)
+               return error;
+
+       RouteSegmentList::const_iterator hereSegm;
+       for (hereSegm = hereSegmList.begin() ; hereSegm != hereSegmList.end() ; hereSegm++)
+       {
+               if (maps_route_segment_create(&mapsSegm) != MAPS_ERROR_NONE) continue;
+
+               /* distance */
+               maps_route_segment_set_distance(mapsSegm, hereSegm->GetDistance());
+
+               /* tranvel time */
+               maps_route_segment_set_duration(mapsSegm, hereSegm->GetTravelTime());
+
+               /* origin, destination */
+               GeoCoordinateList herePathList = hereSegm->GetPath();
+               int here_path_list_size = herePathList.size();
+
+               if (here_path_list_size > 0)
+               {
+                       GeoCoordinates hereOrig = herePathList.at(0);
+                       GeoCoordinates hereDest = herePathList.at(here_path_list_size-1);
+
+                       maps_coordinates_h mapsOrig, mapsDest;
+                       maps_coordinates_create(hereOrig.GetLatitude(),
+                                               hereOrig.GetLongitude(), &mapsOrig);
+                       maps_coordinates_create(hereDest.GetLatitude(),
+                                               hereDest.GetLongitude(), &mapsDest);
+                       maps_route_segment_set_origin(mapsSegm, mapsOrig);
+                       maps_route_segment_set_destination(mapsSegm, mapsDest);
+                       maps_coordinates_destroy(mapsOrig);
+                       maps_coordinates_destroy(mapsDest);
+               }
+
+               /* maneuver */
+               ProcessManeuver(mapsSegm, hereSegm->GetManeuverList());
+
+               maps_item_list_append(mapsSegmList, mapsSegm, maps_route_segment_clone);
+               maps_route_segment_destroy(mapsSegm);
+       }
+
+       if (maps_item_list_items(mapsSegmList))
+       {
+               maps_route_set_segments(mapsRoute, mapsSegmList);
+               maps_item_list_remove_all(mapsSegmList, maps_route_segment_destroy);
+       }
+       maps_item_list_destroy(mapsSegmList);
+
+       return MAPS_ERROR_NONE;
+}
+
+maps_error_e HereRoute::ProcessManeuver(maps_route_segment_h mapsSegm, const ManeuverList& hereManeList)
+{
+       maps_item_list_h mapsManeList;
+       maps_route_maneuver_h mapsManeuver;
+       maps_coordinates_h mapsCoord;
+       maps_error_e error;
+
+       if (hereManeList.empty()) return MAPS_ERROR_NOT_FOUND;
+
+       if ((error = (maps_error_e)maps_item_list_create(&mapsManeList)) != MAPS_ERROR_NONE)
+               return error;
+
+       ManeuverList::const_iterator hereMane;
+       for (hereMane = hereManeList.begin() ; hereMane != hereManeList.end() ; hereMane++)
+       {
+               if (maps_route_maneuver_create(&mapsManeuver) != MAPS_ERROR_NONE) continue;
+
+               /* position */
+               if (maps_coordinates_create(hereMane->GetPosition().GetLatitude(),
+                       hereMane->GetPosition().GetLongitude(), &mapsCoord) == MAPS_ERROR_NONE)
+               {
+                       maps_route_maneuver_set_position(mapsManeuver, mapsCoord);
+                       maps_coordinates_destroy(mapsCoord);
+               }
+
+               /* instruction */
+               if (!hereMane->GetInstructionText().empty())
+                       maps_route_maneuver_set_instruction_text(mapsManeuver,
+                               (char*)hereMane->GetInstructionText().c_str());
+
+               /* length */
+               maps_route_maneuver_set_distance_to_next_instruction(mapsManeuver,
+                       hereMane->GetDistanceToNextInstruction());
+
+               /* travel time */
+               maps_route_maneuver_set_time_to_next_instruction(mapsManeuver,
+                       hereMane->GetTimeToNextInstruction());
+
+               /* direction -> turn type */
+               maps_route_maneuver_set_turn_type(mapsManeuver,
+                       HereUtils::Convert(hereMane->GetDirection()));
+
+               maps_item_list_append(mapsManeList, mapsManeuver, maps_route_maneuver_clone);
+               maps_route_maneuver_destroy(mapsManeuver);
+       }
+
+       if (maps_item_list_items(mapsManeList))
+       {
+               maps_route_segment_set_maneuvers(mapsSegm, mapsManeList);
+               maps_item_list_remove_all(mapsManeList, maps_route_maneuver_destroy);
+       }
+       maps_item_list_destroy(mapsManeList);
+
+       return MAPS_ERROR_NONE;
+}
+
+HERE_PLUGIN_END_NAMESPACE
+
diff --git a/src/here_utils.cpp b/src/here_utils.cpp
new file mode 100644 (file)
index 0000000..60f1fb9
--- /dev/null
@@ -0,0 +1,359 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "here_utils.h"
+#include <common/CommunicationError.h>
+
+
+static const double LATITUDE_RANGE = 85.05113;
+static const double LONGITUDE_RANGE = 180.0;
+
+
+extern "C"
+{
+int ConvertToMapsError(int nErr)
+{
+       switch (nErr)
+       {
+               case HERE_ERROR_NONE:                  return MAPS_ERROR_NONE;
+               case HERE_ERROR_PERMISSION_DENIED:     return MAPS_ERROR_PERMISSION_DENIED;
+               case HERE_ERROR_OUT_OF_MEMORY:         return MAPS_ERROR_OUT_OF_MEMORY;
+               case HERE_ERROR_INVALID_PARAMETER:     return MAPS_ERROR_INVALID_PARAMETER;
+               case HERE_ERROR_NOT_SUPPORTED:         return MAPS_ERROR_NOT_SUPPORTED;
+               case HERE_ERROR_CONNECTION_TIME_OUT:   return MAPS_ERROR_CONNECTION_TIME_OUT;
+               case HERE_ERROR_NETWORK_UNREACHABLE:   return MAPS_ERROR_NETWORK_UNREACHABLE;
+               case HERE_ERROR_INVALID_OPERATION:     return MAPS_ERROR_INVALID_OPERATION;
+               case HERE_ERROR_KEY_NOT_AVAILABLE:     return MAPS_ERROR_KEY_NOT_AVAILABLE;
+               case HERE_ERROR_RESOURCE_BUSY:         return MAPS_ERROR_RESOURCE_BUSY;
+               case HERE_ERROR_CANCELED:              return MAPS_ERROR_CANCELED;
+               case HERE_ERROR_UNKNOWN:               return MAPS_ERROR_UNKNOWN;
+               case HERE_ERROR_SERVICE_NOT_AVAILABLE: return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
+               case HERE_ERROR_NOT_FOUND:             return MAPS_ERROR_NOT_FOUND;
+       }
+       return MAPS_ERROR_UNKNOWN;
+}
+
+int ConvertToHereError(int nErr)
+{
+       switch (nErr)
+       {
+               case MAPS_ERROR_NONE:                  return HERE_ERROR_NONE;
+               case MAPS_ERROR_PERMISSION_DENIED:     return HERE_ERROR_PERMISSION_DENIED;
+               case MAPS_ERROR_OUT_OF_MEMORY:         return HERE_ERROR_OUT_OF_MEMORY;
+               case MAPS_ERROR_INVALID_PARAMETER:     return HERE_ERROR_INVALID_PARAMETER;
+               case MAPS_ERROR_NOT_SUPPORTED:         return HERE_ERROR_NOT_SUPPORTED;
+               case MAPS_ERROR_CONNECTION_TIME_OUT:   return HERE_ERROR_CONNECTION_TIME_OUT;
+               case MAPS_ERROR_NETWORK_UNREACHABLE:   return HERE_ERROR_NETWORK_UNREACHABLE;
+               case MAPS_ERROR_INVALID_OPERATION:     return HERE_ERROR_INVALID_OPERATION;
+               case MAPS_ERROR_KEY_NOT_AVAILABLE:     return HERE_ERROR_KEY_NOT_AVAILABLE;
+               case MAPS_ERROR_RESOURCE_BUSY:         return HERE_ERROR_RESOURCE_BUSY;
+               case MAPS_ERROR_CANCELED:              return HERE_ERROR_CANCELED;
+               case MAPS_ERROR_UNKNOWN:               return HERE_ERROR_UNKNOWN;
+               case MAPS_ERROR_SERVICE_NOT_AVAILABLE: return HERE_ERROR_SERVICE_NOT_AVAILABLE;
+               case MAPS_ERROR_NOT_FOUND:             return HERE_ERROR_NOT_FOUND;
+       }
+       return HERE_ERROR_UNKNOWN;
+}
+
+const char* ConverHereErrorToString(int nErr)
+{
+       switch (nErr)
+       {
+               case HERE_ERROR_NONE:                  return "No errors";
+               case HERE_ERROR_PERMISSION_DENIED:     return "Permission denied";
+               case HERE_ERROR_OUT_OF_MEMORY:         return "Out of memory";
+               case HERE_ERROR_INVALID_PARAMETER:     return "Invalid Parameter";
+               case HERE_ERROR_NOT_SUPPORTED:         return "Not suppoerted";
+               case HERE_ERROR_CONNECTION_TIME_OUT:   return "Connection time out";
+               case HERE_ERROR_NETWORK_UNREACHABLE:   return "Network unreachable";
+               case HERE_ERROR_INVALID_OPERATION:     return "Invalid operation";
+               case HERE_ERROR_KEY_NOT_AVAILABLE:     return "Key not available";
+               case HERE_ERROR_RESOURCE_BUSY:         return "Resource busy";
+               case HERE_ERROR_CANCELED:              return "Canceled";
+               case HERE_ERROR_UNKNOWN:               return "Unknown";
+               case HERE_ERROR_SERVICE_NOT_AVAILABLE: return "Service not available";
+               case HERE_ERROR_NOT_FOUND:             return "Not found";
+       }
+       return "Unknown";
+}
+
+const char* ConvertMapsErrorToChar(int nErr)
+{
+       switch (nErr)
+       {
+               case MAPS_ERROR_NONE:                  return "MAPS_ERROR_NONE";
+               case MAPS_ERROR_PERMISSION_DENIED:     return "MAPS_ERROR_PERMISSION_DENIED";
+               case MAPS_ERROR_OUT_OF_MEMORY:         return "MAPS_ERROR_OUT_OF_MEMORY";
+               case MAPS_ERROR_INVALID_PARAMETER:     return "MAPS_ERROR_INVALID_PARAMETER";
+               case MAPS_ERROR_NOT_SUPPORTED:         return "MAPS_ERROR_NOT_SUPPORTED";
+               case MAPS_ERROR_CONNECTION_TIME_OUT:   return "MAPS_ERROR_CONNECTION_TIME_OUT";
+               case MAPS_ERROR_NETWORK_UNREACHABLE:   return "MAPS_ERROR_NETWORK_UNREACHABLE";
+               case MAPS_ERROR_INVALID_OPERATION:     return "MAPS_ERROR_INVALID_OPERATION";
+               case MAPS_ERROR_KEY_NOT_AVAILABLE:     return "MAPS_ERROR_KEY_NOT_AVAILABLE";
+               case MAPS_ERROR_RESOURCE_BUSY:         return "MAPS_ERROR_RESOURCE_BUSY";
+               case MAPS_ERROR_CANCELED:              return "MAPS_ERROR_CANCELED";
+               case MAPS_ERROR_UNKNOWN:               return "MAPS_ERROR_UNKNOWN";
+               case MAPS_ERROR_SERVICE_NOT_AVAILABLE: return "MAPS_ERROR_SERVICE_NOT_AVAILABLE";
+               case MAPS_ERROR_NOT_FOUND:             return "MAPS_ERROR_NOT_FOUND";
+       }
+       return "MAPS_ERROR_UNKNOWN";
+}
+}
+
+
+HERE_PLUGIN_BEGIN_NAMESPACE
+
+HereUtils::HereUtils()
+{
+}
+
+HereUtils::~HereUtils()
+{
+}
+
+GeoRouteQuery::TravelMode HereUtils::Convert(maps_route_transport_mode_e nVal)
+{
+       switch (nVal)
+       {
+               case MAPS_ROUTE_TRANSPORT_MODE_CAR:           return GeoRouteQuery::TM_CarTravel;
+               case MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN:    return GeoRouteQuery::TM_PedestrianTravel;
+               case MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT: return GeoRouteQuery::TM_PublicTransitTravel;
+               default: break;
+       }
+       return GeoRouteQuery::TM_CarTravel;
+}
+
+maps_route_transport_mode_e HereUtils::Convert(GeoRouteQuery::TravelMode nVal)
+{
+       switch (nVal)
+       {
+               case GeoRouteQuery::TM_CarTravel:           return MAPS_ROUTE_TRANSPORT_MODE_CAR;
+               case GeoRouteQuery::TM_PedestrianTravel:    return MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN;
+               case GeoRouteQuery::TM_PublicTransitTravel: return MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT;
+               default: break;
+       }
+       return MAPS_ROUTE_TRANSPORT_MODE_CAR;
+}
+
+GeoRouteQuery::FeatureType HereUtils::Convert(maps_route_feature_e nVal)
+{
+       switch (nVal)
+       {
+               case MAPS_ROUTE_FEATURE_NO:             return GeoRouteQuery::FT_NoFeature;
+               case MAPS_ROUTE_FEATURE_TOLL:           return GeoRouteQuery::FT_TollFeature;
+               case MAPS_ROUTE_FEATURE_MOTORWAY:       return GeoRouteQuery::FT_MotorwayFeature;
+               case MAPS_ROUTE_FEATURE_BOATFERRY:      return GeoRouteQuery::FT_BoatFerryFeature;
+               case MAPS_ROUTE_FEATURE_RAILFERRY:      return GeoRouteQuery::FT_RailFerryFeature;
+               case MAPS_ROUTE_FEATURE_PUBLICTTRANSIT: return GeoRouteQuery::FT_PublicTransitFeature;
+               case MAPS_ROUTE_FEATURE_TUNNEL:         return GeoRouteQuery::FT_TunnelFeature;
+               case MAPS_ROUTE_FEATURE_DIRTROAD:       return GeoRouteQuery::FT_DirtRoadFeature;
+               case MAPS_ROUTE_FEATURE_PARKS:          return GeoRouteQuery::FT_ParksFeature;
+               case MAPS_ROUTE_FEATURE_HOVLANE:        return GeoRouteQuery::FT_HOVLane;
+               case MAPS_ROUTE_FEATURE_STAIRS:         return GeoRouteQuery::FT_Stairs;
+               default: break;
+       }
+       return GeoRouteQuery::FT_NoFeature;
+}
+
+GeoRouteQuery::FeatureWeight HereUtils::Convert(maps_route_feature_weight_e nVal)
+{
+       switch (nVal)
+       {
+               case MAPS_ROUTE_FEATURE_WEIGHT_NORMAL:        return GeoRouteQuery::FW_NormalFeatureWeight;
+               case MAPS_ROUTE_FEATURE_WEIGHT_PREFER:        return GeoRouteQuery::FW_PreferFeatureWeight;
+               case MAPS_ROUTE_FEATURE_WEIGHT_AVOID:         return GeoRouteQuery::FW_AvoidFeatureWeight;
+               case MAPS_ROUTE_FEATURE_WEIGHT_SOFTEXCLUDE:   return GeoRouteQuery::FW_SoftExcludeFeatureWeight;
+               case MAPS_ROUTE_FEATURE_WEIGHT_STRICTEXCLUDE: return GeoRouteQuery::FW_StrictExcludeFeatureWeight;
+               default: break;
+       }
+       return GeoRouteQuery::FW_NormalFeatureWeight;
+}
+
+maps_route_turn_type_e HereUtils::Convert(Maneuver::InstructionDirection nVal)
+{
+       switch (nVal)
+       {
+               case Maneuver::ID_NoDirection:          return MAPS_ROUTE_TURN_TYPE_NONE;
+               case Maneuver::ID_DirectionForward:     return MAPS_ROUTE_TURN_TYPE_STRAIGHT;
+               case Maneuver::ID_DirectionBearRight:   return MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT;
+               case Maneuver::ID_DirectionLightRight:  return MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT;
+               case Maneuver::ID_DirectionRight:       return MAPS_ROUTE_TURN_TYPE_RIGHT;
+               case Maneuver::ID_DirectionHardRight:   return MAPS_ROUTE_TURN_TYPE_HARD_RIGHT;
+               case Maneuver::ID_DirectionUTurnRight:  return MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT;
+               case Maneuver::ID_DirectionUTurnLeft:   return MAPS_ROUTE_TURN_TYPE_UTURN_LEFT;
+               case Maneuver::ID_DirectionHardLeft:    return MAPS_ROUTE_TURN_TYPE_HARD_LEFT;
+               case Maneuver::ID_DirectionLeft:        return MAPS_ROUTE_TURN_TYPE_LEFT;
+               case Maneuver::ID_DirectionLightLeft:   return MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT;
+               case Maneuver::ID_DirectionBearLeft:    return MAPS_ROUTE_TURN_TYPE_BEAR_LEFT;
+               default: break;
+       }
+       return MAPS_ROUTE_TURN_TYPE_NONE;
+}
+
+Maneuver::InstructionDirection HereUtils::Convert(maps_route_turn_type_e nVal)
+{
+       switch (nVal)
+       {
+               case MAPS_ROUTE_TURN_TYPE_NONE:         return Maneuver::ID_NoDirection;
+               case MAPS_ROUTE_TURN_TYPE_STRAIGHT:     return Maneuver::ID_DirectionForward;
+               case MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT:   return Maneuver::ID_DirectionBearRight;
+               case MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT:  return Maneuver::ID_DirectionLightRight;
+               case MAPS_ROUTE_TURN_TYPE_RIGHT:        return Maneuver::ID_DirectionRight;
+               case MAPS_ROUTE_TURN_TYPE_HARD_RIGHT:   return Maneuver::ID_DirectionHardRight;
+               case MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT:  return Maneuver::ID_DirectionUTurnRight;
+               case MAPS_ROUTE_TURN_TYPE_UTURN_LEFT:   return Maneuver::ID_DirectionUTurnLeft;
+               case MAPS_ROUTE_TURN_TYPE_HARD_LEFT:    return Maneuver::ID_DirectionHardLeft;
+               case MAPS_ROUTE_TURN_TYPE_LEFT:         return Maneuver::ID_DirectionLeft;
+               case MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT:   return Maneuver::ID_DirectionLightLeft;
+               case MAPS_ROUTE_TURN_TYPE_BEAR_LEFT:    return Maneuver::ID_DirectionBearLeft;
+               default: break;
+       }
+       return Maneuver::ID_NoDirection;
+}
+
+maps_error_e HereUtils::ConvertHttpCodeToMapsError(int nVal)
+{
+       switch (nVal)
+       {
+               case 200:/*Ok*/                         return MAPS_ERROR_NONE;
+               case 408:/*Request timeout*/
+               case 504:/*Gateway timeout*/
+               case 598:/*Network reading timeout*/
+               case 599:/*Network connection timeout*/ return MAPS_ERROR_CONNECTION_TIME_OUT;
+
+               case 404:/*Not found*/
+               case 407:/*Proxy auth. required*/
+               case 502:/*Bad gateway*/                return MAPS_ERROR_NETWORK_UNREACHABLE;
+
+               case 401:/*Unauthorized*/
+               case 402:/*Payment required*/           return MAPS_ERROR_KEY_NOT_AVAILABLE;
+
+               case 405:/*Method not allowed*/
+               case 413:/*Request entity too larget*/
+               case 414:/*Request uri too large*/      return MAPS_ERROR_INVALID_OPERATION;
+
+               case 403:/*Forbidden*/
+               case 500:/*Server internal error*/
+               case 501:/*Not implemented*/
+               case 503:/*Service unavailable*/        return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
+       }
+
+       if (nVal > 0 && nVal < 100) // curl error code
+               return MAPS_ERROR_NETWORK_UNREACHABLE;
+
+       if (nVal >= 400 && nVal < 500) // http code 4xx (client-side error)
+               return MAPS_ERROR_INVALID_OPERATION;
+
+       if (nVal >= 500 && nVal < 600) // http code 5xx (server-side error)
+               return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
+
+       return MAPS_ERROR_UNKNOWN;
+}
+
+GeoBoundingBox& HereUtils::Convert(maps_area_h hArea, GeoBoundingBox& Box)
+{
+       maps_area_s* area_s = (maps_area_s*)hArea;
+
+       if (!area_s || area_s->type != MAPS_AREA_RECTANGLE) return Box;
+
+       GeoCoordinates hereCoordLT(area_s->rect.top_left.latitude, area_s->rect.top_left.longitude);
+       GeoCoordinates hereCoordRB(area_s->rect.bottom_right.latitude, area_s->rect.bottom_right.longitude);
+
+       Box.SetTopLeft(hereCoordLT);
+       Box.SetBottomRight(hereCoordRB);
+
+       return Box;
+}
+
+maps_area_h& HereUtils::Convert(GeoBoundingBox Box, maps_area_h& hArea)
+{
+       maps_coordinates_h mapsCoordLT, mapsCoordRB;
+       GeoCoordinates hereCoordLT, hereCoordRB;
+
+       hereCoordLT = Box.GetTopLeft();
+       hereCoordRB = Box.GetBottomRight();
+
+       maps_coordinates_create(hereCoordLT.GetLatitude(), hereCoordLT.GetLongitude(), &mapsCoordLT);
+       maps_coordinates_create(hereCoordRB.GetLatitude(), hereCoordRB.GetLongitude(), &mapsCoordRB);
+
+       maps_area_create_rectangle(mapsCoordLT, mapsCoordRB, &hArea);
+
+       maps_coordinates_destroy(mapsCoordLT);
+       maps_coordinates_destroy(mapsCoordRB);
+
+       return hArea;
+}
+
+void HereUtils::Convert(String strUtf8, WString& strUtf16)
+{
+       strUtf16.assign(strUtf8.begin(), strUtf8.end());
+}
+
+void HereUtils::Convert(WString strUtf16, String& strUtf8)
+{
+       strUtf8.assign(strUtf16.begin(), strUtf16.end());
+}
+
+GeoBoundingBox& HereUtils::Convert(const char *src, GeoBoundingBox &box)
+{
+       int i = 0;
+       char *token, *next;
+       double coord[4] = { 0.0, };
+
+       token = strtok_r((char*)src, ",;", &next);
+       while (token && i < 4)
+       {
+               coord[i++] = atof(token);
+               token = strtok_r(NULL, ",;", &next);
+       }
+       box.SetTopLeft(GeoCoordinates(coord[0], coord[1]));
+       box.SetBottomRight(GeoCoordinates(coord[2], coord[3]));
+       return box;
+}
+
+bool HereUtils::IsValid(GeoCoordinates geoCoord)
+{
+       return IsValidCoord(geoCoord.GetLatitude(), geoCoord.GetLongitude());
+}
+
+bool HereUtils::IsValid(maps_coordinates_s geoCoord)
+{
+       return IsValidCoord(geoCoord.latitude, geoCoord.longitude);
+}
+
+bool HereUtils::IsValidCoord(double dLat, double dLng)
+{
+       return ((dLat <= LATITUDE_RANGE && dLat >= -LATITUDE_RANGE) &&
+               (dLng <= LONGITUDE_RANGE && dLng >= -LONGITUDE_RANGE));
+}
+
+bool HereUtils::IsValid(maps_area_s hArea)
+{
+       if (hArea.type == MAPS_AREA_RECTANGLE)
+       {
+               return (HereUtils::IsValid(hArea.rect.top_left) &&
+                       HereUtils::IsValid(hArea.rect.bottom_right));
+       }
+       else if(hArea.type == MAPS_AREA_CIRCLE)
+       {
+               return HereUtils::IsValid(hArea.circle.center);
+       }
+       else
+               return false;
+}
+
+
+HERE_PLUGIN_END_NAMESPACE
diff --git a/x86_64/libheremaps-engine.so.1 b/x86_64/libheremaps-engine.so.1
deleted file mode 120000 (symlink)
index 0fc20c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libheremaps-engine.so.1.0.6_6
\ No newline at end of file
diff --git a/x86_64/libheremaps-engine.so.1.0.6_6 b/x86_64/libheremaps-engine.so.1.0.6_6
deleted file mode 100755 (executable)
index 3e2a062..0000000
Binary files a/x86_64/libheremaps-engine.so.1.0.6_6 and /dev/null differ
diff --git a/x86_64/libmaps-plugin-here.so b/x86_64/libmaps-plugin-here.so
deleted file mode 120000 (symlink)
index 89d69a6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0
\ No newline at end of file
diff --git a/x86_64/libmaps-plugin-here.so.0 b/x86_64/libmaps-plugin-here.so.0
deleted file mode 120000 (symlink)
index f343856..0000000
+++ /dev/null
@@ -1 +0,0 @@
-libmaps-plugin-here.so.0.1.6
\ No newline at end of file
diff --git a/x86_64/libmaps-plugin-here.so.0.1.6 b/x86_64/libmaps-plugin-here.so.0.1.6
deleted file mode 100755 (executable)
index 879b8e5..0000000
Binary files a/x86_64/libmaps-plugin-here.so.0.1.6 and /dev/null differ