{"ScriptPreparationCode":"var MyObject = {\r\n \u0022_id\u0022 : \u0022kid_bkFYnCzzzb\u0022,\r\n \u0022appId\u0022 : \u0022bdc63fc4e71d4a6db08ae95b04269b7c\u0022,\r\n \u0022environmentName\u0022 : \u0022Production\u0022,\r\n \u0022appsecret\u0022 : \u00229226605b7b09477ab7ffbe5dbab5e181\u0022,\r\n \u0022mastersecret\u0022 : \u0022e731f9a285834900a35c2813dd1762c2\u0022,\r\n \u0022API_version\u0022 : 3,\r\n \u0022creator\u0022 : \u0022e9e87e6e44a840fdab2d176cb8f74b09\u0022,\r\n \u0022creation_time\u0022 : \u00222016-05-04T01:53:03.192Z\u0022,\r\n \u0022devUserIDs\u0022 : [ \r\n \u0022e9e87e6e44a840fdab2d176cb8f74b09\u0022, \r\n \u00225e74042dfead4d6dab106746ad276e62\u0022, \r\n \u00229e5331f5765349d29866452cbd70c277\u0022\r\n ],\r\n \u0022collaborators\u0022 : [ \r\n \u0022d31ddbd3be76450f9ce6dce52e7cb818\u0022, \r\n \u0022b3bdf429002749edbeb04ca4447d6817\u0022, \r\n \u0022379a07326d864031aa802bfd084c34e4\u0022, \r\n \u002297d398c5e48c457793e4a0a11e11f68a\u0022, \r\n \u0022333555f5a843412fb6a3edaca658906d\u0022, \r\n \u00225c6ac833169b4d1ea51e804a36355a86\u0022, \r\n \u00224bf5209cadf14946b207cd4137907f05\u0022, \r\n \u0022834124069ba24656aee5eae697822ee4\u0022, \r\n \u0022ee07cbafc3764bf1a3866f1072503bc7\u0022\r\n ],\r\n \u0022blobService\u0022 : {\r\n \u0022gcsContainerName\u0022 : \u0022449962836b6c4ea5b59b03abd32fbedb\u0022,\r\n \u0022useGCS\u0022 : true\r\n },\r\n \u0022acl\u0022 : {\r\n \u0022EventCodeDetails\u0022 : \u0022append-read\u0022,\r\n \u0022Events\u0022 : \u0022append-only\u0022,\r\n \u0022EventType\u0022 : \u0022append-only\u0022,\r\n \u0022Farmer\u0022 : \u0022append-read\u0022,\r\n \u0022HectaresTilledCalculator\u0022 : \u0022write\u0022,\r\n \u0022MaintenanceTypes\u0022 : \u0022append-read\u0022,\r\n \u0022ResponseFromOperator\u0022 : \u0022append-read\u0022,\r\n \u0022Revenue\u0022 : \u0022append-read\u0022,\r\n \u0022RevenueTypes\u0022 : \u0022append-read\u0022,\r\n \u0022SmsGatewayInfo\u0022 : \u0022append-read\u0022,\r\n \u0022StoreCurrentStatus\u0022 : \u0022append-read\u0022,\r\n \u0022TelerivetFarmerInfo\u0022 : \u0022append-read\u0022,\r\n \u0022TractorDetail\u0022 : {\r\n \u0022create\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022read\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022grant\u0022\r\n }\r\n ],\r\n \u0022update\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022grant\u0022\r\n }\r\n ],\r\n \u0022delete\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022entity\u0022\r\n }\r\n ]\r\n },\r\n \u0022TractorInfo\u0022 : \u0022append-read\u0022,\r\n \u0022TractorOperator\u0022 : \u0022append-read\u0022,\r\n \u0022TractorOwner\u0022 : \u0022write\u0022,\r\n \u0022TractorToOperator\u0022 : \u0022append-only\u0022,\r\n \u0022_customEndpoints\u0022 : {\r\n \u0022EventCodeDetails\u0022 : \u0022master-or-user\u0022,\r\n \u0022FarmerMessageExpiryCheck\u0022 : \u0022master-or-user\u0022,\r\n \u0022GetTractorStatus\u0022 : \u0022master-or-user\u0022,\r\n \u0022NotificationGeoFence\u0022 : \u0022master-or-user\u0022,\r\n \u0022TelerivetFarmerInfo\u0022 : \u0022master-or-user\u0022,\r\n \u0022forgotPassword\u0022 : \u0022master-or-user\u0022,\r\n \u0022getActivity\u0022 : \u0022master-or-user\u0022,\r\n \u0022getTractors\u0022 : \u0022master-or-user\u0022,\r\n \u0022responseFromOperator\u0022 : \u0022master-or-user\u0022,\r\n \u0022ActionStatusMaintenanceLog\u0022 : \u0022master-or-user\u0022,\r\n \u0022AlertTwoTrackEventNotifications\u0022 : \u0022master-or-user\u0022,\r\n \u0022AlertStatusMaintenanceLog\u0022 : \u0022master-or-user\u0022,\r\n \u0022TractorCurrentLocation\u0022 : \u0022master-or-user\u0022,\r\n \u0022MaintenanceCalculate\u0022 : \u0022master-or-user\u0022,\r\n \u0022RunMaintenanceRepairNotification\u0022 : \u0022master-or-user\u0022,\r\n \u0022TotalHectareForTractor\u0022 : \u0022master-or-user\u0022,\r\n \u0022TractorActivity\u0022 : \u0022master-or-user\u0022,\r\n \u0022AutoRunMaintenance\u0022 : \u0022master-or-user\u0022,\r\n \u0022demo-endpoint\u0022 : \u0022master-or-user\u0022,\r\n \u0022push-demo\u0022 : \u0022master-or-user\u0022,\r\n \u0022SyncCollections\u0022 : \u0022master-or-user\u0022,\r\n \u0022MarkNotificationAsRead\u0022 : \u0022master-or-user\u0022,\r\n \u0022FilterDailyTractorActivities\u0022 : \u0022master-or-user\u0022,\r\n \u0022DisableGeofenceNotifications\u0022 : \u0022master-or-user\u0022,\r\n \u0022ResetMaintenanceCounter\u0022 : \u0022master-or-user\u0022,\r\n \u0022CopyMaintenanceActivities\u0022 : \u0022master-or-user\u0022,\r\n \u0022CreateMaintenanceActivities\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateRevenue\u0022 : \u0022master-or-user\u0022,\r\n \u0022GetHeatMapData\u0022 : \u0022master-or-user\u0022,\r\n \u0022remove-read-notifications\u0022 : \u0022master-or-user\u0022,\r\n \u0022process-hectares-daily-data\u0022 : \u0022master-or-user\u0022,\r\n \u0022process-timezones\u0022 : \u0022master-or-user\u0022,\r\n \u0022process-tractor-activities\u0022 : \u0022master-or-user\u0022,\r\n \u0022process-maintenance\u0022 : \u0022master-or-user\u0022,\r\n \u0022process-real-time-daily-data\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateDailyTractorActivityHectaresAndRevenue\u0022 : \u0022master-or-user\u0022,\r\n \u0022test-tractor-activities\u0022 : \u0022master-or-user\u0022,\r\n \u0022b_UpdateTractorOwners\u0022 : \u0022master-or-user\u0022,\r\n \u0022unassign-tractor-on-delete\u0022 : \u0022master-or-user\u0022,\r\n \u0022test\u0022 : \u0022master-or-user\u0022,\r\n \u0022process-update-tractors-status\u0022 : \u0022master-or-user\u0022,\r\n \u0022fetch-store-tractor-activities-three\u0022 : \u0022master-or-user\u0022,\r\n \u0022fetch-store-tractor-activities-two\u0022 : \u0022master-or-user\u0022,\r\n \u0022temp-daily-tractor-activity-clone\u0022 : \u0022master-or-user\u0022,\r\n \u0022fetch-update-daily-tractor-activity\u0022 : \u0022master-or-user\u0022,\r\n \u0022update-tractor-geofence\u0022 : \u0022master-or-user\u0022,\r\n \u0022b_UpdateBookingAgents\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateTractorOwnersOnBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateBookingAgentsOnBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022b_UpdateDailyTractorActivities\u0022 : \u0022master-or-user\u0022,\r\n \u0022deleteDuplicateFarmMeasures\u0022 : \u0022master-or-user\u0022,\r\n \u0022DeleteDuplicateFarmMeasure\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateBookingsWeather\u0022 : \u0022master-or-user\u0022,\r\n \u0022Update2TrackTractorActiveTimeToday\u0022 : \u0022master-or-user\u0022,\r\n \u0022Update_bookings_Sync_Status_to_1\u0022 : \u0022master-or-user\u0022,\r\n \u0022ResetTractorDetailActiveTimeToday\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateBookingsWeatherDetails\u0022 : \u0022master-or-user\u0022,\r\n \u0022ManuallyTriggerNotification\u0022 : \u0022master-or-user\u0022,\r\n \u0022DeleteBookingWeatherValue\u0022 : \u0022master-or-user\u0022,\r\n \u0022deleteUserPushToken\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateLatestBookingsWeatherInformation\u0022 : \u0022master-or-user\u0022,\r\n \u0022getTractorReports\u0022 : \u0022master-or-user\u0022,\r\n \u0022_CreatorUpdater\u0022 : \u0022master-or-user\u0022,\r\n \u0022TractorsNearby\u0022 : \u0022master-or-user\u0022,\r\n \u0022BookingsNearbySometimeAgo\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateAerisTractorEngineHours\u0022 : \u0022master-or-user\u0022,\r\n \u0022Update2TrackTractorEngineHours\u0022 : \u0022master-or-user\u0022,\r\n \u0022FetchBookingAgentsBetweenDateRange\u0022 : \u0022master-or-user\u0022,\r\n \u0022removeDuplicateBookingAgents\u0022 : \u0022master-or-user\u0022,\r\n \u0022deleteBookingAgents\u0022 : \u0022master-or-user\u0022,\r\n \u0022updateBookingsOrgID\u0022 : \u0022master-or-user\u0022,\r\n \u0022_generateBookingAgentsBookingsReport\u0022 : \u0022master-or-user\u0022,\r\n \u0022getBookingAgentFarmersDetails\u0022 : \u0022master-or-user\u0022,\r\n \u0022_duplicateCreatorRemover\u0022 : \u0022master-or-user\u0022,\r\n \u0022exportUsersEmail\u0022 : \u0022master-or-user\u0022,\r\n \u0022PushEmail\u0022 : \u0022master-or-user\u0022,\r\n \u0022SendMaintenanceAlert\u0022 : \u0022master-or-user\u0022,\r\n \u0022fetch_tractors_activities\u0022 : \u0022master-or-user\u0022,\r\n \u0022PushDailyReports\u0022 : \u0022master-or-user\u0022,\r\n \u0022_test\u0022 : \u0022master-or-user\u0022,\r\n \u0022EngineHoursDistanceDiscoveredWeeklyAlert\u0022 : \u0022master-or-user\u0022,\r\n \u0022getTractotsLatLng\u0022 : \u0022master-or-user\u0022,\r\n \u0022exportRegisteredBookingAgentsForDateRange\u0022 : \u0022master-or-user\u0022,\r\n \u0022geocoderService\u0022 : \u0022master-or-user\u0022,\r\n \u0022aeris_geofence_notification\u0022 : \u0022master-or-user\u0022,\r\n \u0022removeDuplicateBookings\u0022 : \u0022master-or-user\u0022,\r\n \u0022getOperatorIDByTractorID\u0022 : \u0022master-or-user\u0022,\r\n \u0022getBookingsLatLng\u0022 : \u0022master-or-user\u0022,\r\n \u0022count2TrackTractors\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateTwoTrackTractorActivityOnPOSTFromAWSBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateAerisTractorsActivityOnPostFromAWSBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateAerisTractorsOnPOSTFromAWSBACKEND\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateTwoTrackTractorsStatusOnPOSTFromAWSBACKEND\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateAllTractorsDetailAddressOnPOSTFromAWSBACKEND\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_getTractorLatLngSummaryForDateRange\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_update-daily-real-time-tractor-activity\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_aeris-tractors-location\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_temp-update-daily-activities-from-web-app\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_UpdateAerisTractorActiveTimeToday\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_UpdateTractorDetailAddress\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_fetch-store-tractor-activities-one\u0022 : \u0022master-or-user\u0022,\r\n \u0022deprecated_update-2track-token\u0022 : \u0022master-or-user\u0022,\r\n \u0022PushNotificationWhenTractorNearby\u0022 : \u0022master-or-user\u0022,\r\n \u0022getTractorServiceTypes\u0022 : \u0022master-or-user\u0022,\r\n \u0022SyncTractorsFromAWSBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022updateTractorIDsToNewIDUsingOldID\u0022 : \u0022master-or-user\u0022,\r\n \u0022generateAndStoreSubscriptionCode\u0022 : \u0022master-or-user\u0022,\r\n \u0022attemptLogin\u0022 : \u0022master-or-user\u0022,\r\n \u0022HandleTractorsAlertsEventFromAWSBACKEND\u0022 : \u0022master-or-user\u0022,\r\n \u0022generateMultipleSubCodes\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateOrgIdOfTestAccounts\u0022 : \u0022master-or-user\u0022,\r\n \u0022PostDataToAwsBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022syncUserProfileImageUrl\u0022 : \u0022master-or-user\u0022,\r\n \u0022PostBookingsDataToBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022HandleTractorFuelDataPostedFromAWSBackend\u0022 : \u0022master-or-user\u0022,\r\n \u0022ComputeTempFuelVolumes\u0022 : \u0022master-or-user\u0022,\r\n \u0022PopulateFuelHistoryAndSendAlert\u0022 : \u0022master-or-user\u0022,\r\n \u0022FireMaintenanceAlert\u0022 : \u0022master-or-user\u0022,\r\n \u0022ExportTractorOperatorIDAndTractorID\u0022 : \u0022master-or-user\u0022,\r\n \u0022updateTractorCreator\u0022 : \u0022master-or-user\u0022,\r\n \u0022PostTractorOperatorIDToAWS\u0022 : \u0022master-or-user\u0022,\r\n \u0022CreateUserApi\u0022 : \u0022master-or-user\u0022,\r\n \u0022AutomateReportsGeneration\u0022 : \u0022master-or-user\u0022,\r\n \u0022TractorWorkingOvertimeAlert\u0022 : \u0022master-or-user\u0022,\r\n \u0022_UpdateTractorOwnerOrgId\u0022 : \u0022master-or-user\u0022,\r\n \u0022_ProperlyFormatOrgIDsInUserCollection\u0022 : \u0022master-or-user\u0022,\r\n \u0022_UpdateStatusOfTractorsForThoseAssignedOperators\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateTractorGeofenceV2\u0022 : \u0022master-or-user\u0022,\r\n \u0022_UploadMaintenanceCSVSheet\u0022 : \u0022master-or-user\u0022,\r\n \u0022updateTractorDetailOnUpdateFromQueue\u0022 : \u0022master-or-user\u0022,\r\n \u0022TestConsumer\u0022 : \u0022master-or-user\u0022,\r\n \u0022PushRecentBookings\u0022 : \u0022master-or-user\u0022,\r\n \u0022PushAdNotificationToCustomer\u0022 : \u0022master-or-user\u0022,\r\n \u0022updateUserOrgIdByEmail\u0022 : \u0022master-or-user\u0022,\r\n \u0022UpdateTractorsRealTimeLocation\u0022 : \u0022master-or-user\u0022,\r\n \u0022getFuelDataByTractorId\u0022 : \u0022master-or-user\u0022,\r\n \u0022TriggerPushNotification\u0022 : \u0022master-or-user\u0022,\r\n \u0022PopulateDemoData\u0022 : \u0022master-or-user\u0022,\r\n \u0022PopulateDemoBookings\u0022 : \u0022master-or-user\u0022,\r\n \u0022ComputeDailyFuelConsumed\u0022 : \u0022master-or-user\u0022,\r\n \u0022_ComputeDailyFuelConsumedInit\u0022 : \u0022master-or-user\u0022,\r\n \u0022__updateTractorLocationOnPostFromLocationService\u0022 : \u0022master-or-user\u0022,\r\n \u0022playground\u0022 : \u0022master-or-user\u0022,\r\n \u0022genericUpdate\u0022 : \u0022master-or-user\u0022,\r\n \u0022_FixTractorDetailGeofence\u0022 : \u0022master-or-user\u0022,\r\n \u0022__updateTractorActiveTimeToday\u0022 : \u0022master-or-user\u0022,\r\n \u0022__updateTractorDetailProps\u0022 : \u0022master-or-user\u0022,\r\n \u0022_MigrateTractorOwnerData\u0022 : \u0022master-or-user\u0022,\r\n \u0022__handlePushedAlertsMessages\u0022 : \u0022master-or-user\u0022,\r\n \u0022__activeTractorsPerMonthFinder\u0022 : \u0022master-or-user\u0022,\r\n \u0022__upload_mechanisation_service_as_bookings\u0022 : \u0022master-or-user\u0022,\r\n \u0022getPastMaintenanceForTractor\u0022 : \u0022master-or-user\u0022,\r\n \u0022NearbyTractorTechnician\u0022 : \u0022master-or-user\u0022,\r\n \u0022__pulled_trips_active_time_updater\u0022 : \u0022master-or-user\u0022,\r\n \u0022FetchBookingWeatherData\u0022 : \u0022master-or-user\u0022\r\n },\r\n \u0022NotificationGeoFenceMaintenance\u0022 : \u0022append-only\u0022,\r\n \u0022TractorCurrentLocation\u0022 : \u0022append-read\u0022,\r\n \u0022Maintenance\u0022 : \u0022append-read\u0022,\r\n \u0022TractorActivity\u0022 : \u0022write\u0022,\r\n \u0022TractorActivityData\u0022 : \u0022write\u0022,\r\n \u0022CumulativeTractorActivityData\u0022 : \u0022append-read\u0022,\r\n \u0022AgroDealersHeatMapData\u0022 : \u0022append-read\u0022,\r\n \u0022TrackerIds\u0022 : \u0022write\u0022,\r\n \u0022ServiceBookingHistory\u0022 : \u0022append-read\u0022,\r\n \u0022Notification\u0022 : \u0022append-read\u0022,\r\n \u0022TestTractorActivities\u0022 : \u0022append-read\u0022,\r\n \u0022UserFeedback\u0022 : \u0022append-read\u0022,\r\n \u0022user\u0022 : \u0022append-read\u0022,\r\n \u0022TestDailyTractorActivity\u0022 : \u0022append-read\u0022,\r\n \u0022OldDailyTractorActivity\u0022 : \u0022append-read\u0022,\r\n \u0022DailyTractorActivity\u0022 : \u0022append-read\u0022,\r\n \u0022BookingAgents\u0022 : {\r\n \u0022create\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022read\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022update\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022delete\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ]\r\n },\r\n \u0022TwoTrackApiToken\u0022 : \u0022append-read\u0022,\r\n \u0022ServiceBookings\u0022 : {\r\n \u0022create\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022read\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022grant\u0022\r\n }\r\n ],\r\n \u0022update\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022grant\u0022\r\n }\r\n ],\r\n \u0022delete\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022entity\u0022\r\n }\r\n ]\r\n },\r\n \u0022TractorTips\u0022 : \u0022append-read\u0022,\r\n \u0022TractorAds\u0022 : \u0022append-read\u0022,\r\n \u0022FarmMeasure\u0022 : \u0022append-read\u0022,\r\n \u0022FarmMeasures\u0022 : \u0022append-read\u0022,\r\n \u0022AppVersionHistory\u0022 : \u0022append-read\u0022,\r\n \u0022Logger\u0022 : \u0022append-read\u0022,\r\n \u0022_blob\u0022 : {\r\n \u0022create\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022read\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022update\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022always\u0022\r\n }\r\n ],\r\n \u0022delete\u0022 : [ \r\n {\r\n \u0022roleId\u0022 : \u0022all-users\u0022,\r\n \u0022type\u0022 : \u0022entity\u0022\r\n }\r\n ]\r\n },\r\n \u0022FuelHistory\u0022 : \u0022append-read\u0022,\r\n \u0022UserAccounts\u0022 : \u0022append-read\u0022,\r\n \u0022OperatorReview\u0022 : \u0022append-read\u0022,\r\n \u0022Emails\u0022 : \u0022append-read\u0022,\r\n \u0022APIKeys\u0022 : \u0022append-read\u0022,\r\n \u0022MaintenanceRepo\u0022 : \u0022append-read\u0022,\r\n \u0022FailedPosts\u0022 : \u0022append-read\u0022,\r\n \u0022Logs\u0022 : \u0022append-read\u0022,\r\n \u0022DailyFuelConsumed\u0022 : \u0022append-read\u0022,\r\n \u0022FuelCalibrationResults\u0022 : \u0022append-read\u0022,\r\n \u0022MaintenanceHistory\u0022 : \u0022append-read\u0022,\r\n \u0022TractorTechnician\u0022 : \u0022append-read\u0022\r\n },\r\n \u0022bl\u0022 : {\r\n \u0022Events\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreFetch 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreFetch(request, response, modules) {\\n \\tvar currentUser = modules.requestContext.getAuthenticatedUserId();\\n var logger = modules.logger;\\n var obj = {\\\u0022creator\\\u0022:currentUser,\\\u0022gr\\\u0022:false,\\\u0022gw\\\u0022:false};\\n\\n var token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n \\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n \\n \\n var collectionName = request.collectionName;\\n if (!currentUser || !collectionName) {\\n\\t return response.error(\\\u0022Invalid user\\\u0022);\\n\\t} else{\\n \\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\\u0022Status\\\u0022: 1, \\\u0022_acl\\\u0022: obj}, function (err, docs) {\\n \\t logger.info(\\\u0022length of list \\\u0022\u002Bdocs.length);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n logger.info(\\\u0022Object.keys(docs).length=\\\u0022\u002BObject.keys(docs).length);\\n if(Object.keys(docs).length\u003E0){\\n docs.forEach(function(doc){\\n logger.info(\\\u0022doc=\\\u0022\u002Bdoc.TractorID);\\n var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackerId\\\u0022:doc.TractorID,\\n \\\u0022startActivityId\\\u0022:0,\\n \\\u0022rowCount\\\u0022:1,\\n \\\u0022startUTCTime\\\u0022:\\\u0022\\\u0022,\\n \\\u0022endUTCTime\\\u0022:\\\u0022\\\u0022\\n }\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022,\\n // \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\n },\\n json:requestData\\n }\\n logger.info(\\\u0022reached here\\\u0022);\\n modules.request.post(requestOptions, function(error, resp, body){\\n //logger.info(\\\u0022body=\\\u0022\u002Bbody);\\n //logger.info(\\\u0022error=\\\u0022\u002Berror);\\n if (error){\\n logger.info(\\\u0022error=\\\u0022\u002Berror);\\n response.body = {error: error.message};\\n response.complete(400);\\n }else{\\n // response.continue();\\n var respData=resp.body.data;\\n logger.info(\\\u0022respData=\\\u0022\u002BrespData);\\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n respData.forEach(function(data,a){\\n logger.info(\\\u0022data.activityId = \\\u0022\u002Bdata.activityId);\\n modules.collectionAccess.collection(\u0027Events\u0027).find({\\\u0022ActivityID\\\u0022: data.activityId}, function (err, docs) {\\n // response.continue();\\n logger.info(\\\u0022docs.length = \\\u0022\u002Bdocs.length);\\n if(docs.length === 0){\\n // response.continue();\\n if (doc.OperatorID !== null){\\n var entity = modules.kinvey.entity();\\n entity.OperatorID=doc.OperatorID;\\n logger.info(\\\u0022OperatorID id :\\\u0022\u002Bdoc.OperatorID);\\n entity.TractorID=doc.TractorID;\\n entity.ActivityID=data.activityId; \\n entity.EventCode=data.eventCode;\\n entity.EventName=data.eventName;\\n entity.Speed=data.speed;\\n entity.Odometer=data.odometer;\\n entity.Idle=data.idle;\\n entity.IsGPSValid=data.isGPSValid;\\n entity.LatLng=data.lat\u002B\\\u0022,\\\u0022\u002Bdata.lon;\\n entity.DirectionEW=data.directionEW;\\n entity.DirectionNS=data.directionNS;\\n entity.WindSpeed=data.windSpeed;\\n entity.Altitude=data.altitude;\\n entity.IgnitionStatus=data.ignitionStatus;\\n logger.info(\\\u0022$$$$\\\u0022 \u002B entity.IgnitionStatus);\\n entity.BatteryVoltage=data.batteryVoltage;\\n entity.SatelliteNumber=data.satelliteNumber; \\n entity.Street=data.street; \\n entity.Town=data.town;\\n entity.County=data.county; \\n entity.Country=data.country; \\n entity.ActivityUTCDate=data.activityUTCDate; \\n entity._acl.setGloballyReadable(false);\\n entity._acl.addReader(currentUser);\\n entity._acl.addWriter(currentUser);\\n modules.collectionAccess.collection(\\\u0022Events\\\u0022).save(entity, function(err) {\\n if (err !== null){\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else{\\n // response.continue();\\n logger.info(\\\u0022saved\\\u0022);\\n }\\n \\n });//events collection end\\n // response.continue();\\n }\\n // response.continue();\\n }\\n //response.continue();\\n });\\n // response.continue();\\n });//resp foreach\\n \\n // response.continue();\\n }//else if end\\n \\n }\\n // response.continue();\\n });// request end\\n });//doc for each end\\n }// doc null chk\\n }\\n // response.continue();\\n });\\n }\\n response.continue();\\n}\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreFetch\u0022 : true\r\n },\r\n \u0022EventType\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n\\tif (!currentUser) {\\n\\t return response.error(\\\u0022Invalid user\\\u0022);\\n\\t}\\n\\tresponse.continue();\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true\r\n },\r\n \u0022Farmer\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nvar isSendToAWSDone = false;\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n \\n async.parallel({\\n sendToAWSBackend: async.apply(\\n sendToAWSBackend,\\n httpRequest,\\n logger,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone \u0026\u0026 isSendToAWSDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/users/add-farmer\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n \\thttpRequest.post(blockchainRequestOptions(response, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n failedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n }); \\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n id: response.body._id,\\n farmSize: response.body.FarmSize,\\n farmerId: response.body.FarmerName,\\n latLon: response.body.LatLong,\\n location: response.body.Location,\\n activityType: response.body.ActivityType,\\n serialNum: response.body.SerialNum,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(response, msg, url, authorization) {\\n //Send to IBM Swagger (REST API) \\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n/**\\n * *******************************************************************************************\\n * Makes a copy of the farmer on the AWS Backend\\n * @param httpRequest An object of the HTTP {@link modules.request} from the modules package\\n * @param logger An object of the {@link modules.logger} library from the modules package\\n * @param response The response to the client request\\n * ********************************************************************************************\\n */\\n\\nfunction sendToAWSBackend(httpRequest, logger, response) {\\n var requestOptions = awsRequestOptions(response);\\n httpRequest.post(requestOptions, function(awsErr, awsResp, awsBody) {\\n logger.info(\\\u0022Results: \\\u0022 \u002B awsErr \u002B \\\u0022, \\\u0022 \u002B JSON.stringify(awsResp) \u002B \\\u0022, \\\u0022 \u002B awsBody);\\n\\n //Done\\n isSendToAWSDone = true;\\n callback(response);\\n });\\n}\\n\\nfunction awsRequestOptions(response) {\\n var url = AWS_BACKEND_HOST\u002B\u0027/kinvey/api/farmers\u0027;\\n\\n var msg = {\\n op: \u0027create\u0027,\\n data: response.body\\n };\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\n Accept: \\\u0022application/json\\\u0022,\\n Version: \\\u0022v1\\\u0022\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n var logger = modules.logger;\\n var collectionName = request.collectionName;\\n if (!currentUser || !collectionName) {\\n\\t return response.error(\\\u0022Invalid user\\\u0022);\\n\\t} else if (currentUser \u0026\u0026 !request.body._id) {\\n\\t modules.collectionAccess.collection(collectionName).count({}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else {\\n request.body.FarmerID = 300001 \u002B docs;\\n response.continue();\\n }\\n });\\n\\t} else {\\n\\t response.continue();\\n\\t}\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostDelete 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPostDelete(request, response, modules) {\\n \\n var req = modules.request;\\n\\tvar operation = \u0027delete\u0027;\\n\\t\\n\\tvar logger = modules.logger;\\n\\t\\n\\t//logger.info(response);\\n\\t//logger.info(request);\\n \\n var msg = {\\n op: operation,\\n data: request\\n };\\n \\n req.post({\\n uri : \u0027https://cloud.hellotractor.com/kinvey/api/farmers\u0027,\\n json : msg\\n }, function(error, res, body) {\\n response.continue();\\n });\\n\\t\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true,\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022hasOnPostDelete\u0022 : true\r\n },\r\n \u0022HectaresTilledCalculator\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n\\tvar logger = modules.logger;\\n\\tvar totalHectares = 0;\\n\\tvar tractorID = request.body.TractorId;\\n var operatorID = request.body.OperatorId;\\n var statusOfTractor = request.body.Status;\\n var tractorName = request.body.TractorName;\\n var currency = request.body.Currency;\\n var rate = request.body.Rate;\\n \\n\\tvar token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n \\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n\\t\\n modules.collectionAccess.collection(\u0027TractorActivity\u0027).find({\\\u0022TractorId\\\u0022: tractorID}, function (err, docs) {\\n //logger.info(\\\u0022dosc from table : \\\u0022\u002B docs.length);\\n if(docs.length \u003E 0){\\n docs.forEach(function(doc, a){\\n //logger.info(\\\u0022doc :: \\\u0022\u002Bdoc[0]);\\n var hectServFloat = doc.HectaresServiced;\\n \\n totalHectares = totalHectares \u002B hectServFloat;\\n \\n });\\n }\\n });\\n var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackers\\\u0022:[{\\\u0022trackerId\\\u0022: tractorID}]\\n };\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/status\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022,\\n // \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\n },\\n json:requestData,\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n \\n if (error){\\n logger.info(\\\u0022error=\\\u0022\u002Berror);\\n response.body = {error: error.message};\\n response.complete(400);\\n }else{\\n // response.continue();\\n var respData=resp.body.data;\\n logger.info(\\\u0022respData=\\\u0022\u002BObject.keys(respData).length);\\n if(Object.keys(respData).length \u003E 0){\\n respData.forEach(function(data,a){\\n \\n var odometerReading = totalHectares;\\n var latitude = data.lat;\\n var longitude = data.lon;\\n var utcDate = data.lastReportUTCDate;\\n var street = data.street;\\n var town = data.town;\\n modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).find({\\\u0022TractorId\\\u0022: tractorID, \\\u0022OperatorId\\\u0022: operatorID ,\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n \\n if (docs.length === 0) {\\n var entity = modules.kinvey.entity();\\n entity.TractorId = tractorID;\\n entity.OperatorId = operatorID;\\n entity.Status = 1;\\n entity.HectaresTilledStartPT = totalHectares;\\n entity.HectaresTilledStopPT = totalHectares;\\n \\n entity.Latitude = data.lat;\\n entity.Longitude = data.lon;\\n entity.Street = data.street;\\n entity.Town = data.town;\\n entity.Currency = \\\u0022RAND\\\u0022;\\n entity.Rate = 200;\\n entity.TractorName = tractorName;\\n entity.UtcDate = data.lastReportUTCDate;\\n modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).save(entity, function (err) {\\n logger.info(\\\u0022saved as new\\\u0022);\\n // response.continue();\\n });\\n } else {\\n // response.continue();\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n doc.HectaresTilledStopPT = totalHectares;\\n doc.Latitude = latitude;\\n doc.Longitude = longitude;\\n doc.UtcDate = utcDate;\\n doc.Street = street;\\n doc.Town = town;\\n logger.info(\\\u0022Status = \\\u0022\u002BstatusOfTractor);\\n doc.Status = statusOfTractor;\\n doc.Currency = currency;\\n doc.Rate = rate;\\n // doc.TractorName = tractorName;\\n logger.info(\\\u0022saved before\\\u0022);\\n modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n logger.info(\\\u0022updated\\\u0022);\\n // response.continue();\\n });\\n // response.continue();\\n });\\n }\\n // response.continue();\\n });\\n });\\n } else {\\n modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).find({\\\u0022TractorId\\\u0022: tractorID, \\\u0022OperatorId\\\u0022: operatorID ,\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n logger.info(\\\u0022no of docs present :: \\\u0022\u002Bdocs.length);\\n if (docs.length === 0) {\\n var entity = modules.kinvey.entity();\\n entity.TractorId = tractorID;\\n entity.OperatorId = operatorID;\\n logger.info(\\\u0022status inside=\\\u0022\u002BstatusOfTractor);\\n entity.Status = statusOfTractor;\\n entity.HectaresTilledStartPT = totalHectares;\\n entity.HectaresTilledStopPT = totalHectares;\\n logger.info(\\\u0022HectaresTilledStartPT :: \\\u0022\u002Bentity.HectaresTilledStartPT);\\n entity.Latitude = 0.0;\\n entity.Longitude = 0.0;\\n entity.Street = \\\u0022\\\u0022;\\n entity.Town = \\\u0022\\\u0022;\\n entity.Currency = \\\u0022Nigerian Naira\\\u0022;\\n entity.Rate = 200;\\n entity.UtcDate = \\\u0022\\\u0022;\\n modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).save(entity, function (err) {\\n logger.info(\\\u0022saved as new\\\u0022);\\n // response.continue();\\n });\\n }else{\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n doc.HectaresTilledStopPT = totalHectares;\\n doc.Latitude = 0.0;\\n doc.Longitude = 0.0;\\n doc.UtcDate = \\\u0022\\\u0022;\\n doc.Street = \\\u0022\\\u0022;\\n doc.Town = \\\u0022\\\u0022;\\n doc.Status = statusOfTractor;\\n // doc.Currency = \\\u0022RAND\\\u0022;\\n // doc.Rate = 200;\\n // doc.TractorName = tractorName;;\\n modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n logger.info(\\\u0022updated\\\u0022);\\n // response.continue();\\n });\\n // response.continue();\\n });\\n }\\n // response.continue();\\n });\\n // response.continue();\\n }\\n }\\n response.complete();\\n });\\n \\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true\r\n },\r\n \u0022Revenue\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n /*var logger=modules.logger;\\n\\tvar tractorInfo = request.body.TractorId;\\n\\tlogger.info(tractorInfo);\\n\\tmodules.collectionAccess.collection(\u0027Events\u0027).find({\\\u0022TractorID\\\u0022: tractorInfo}, function (err, docs) {\\n\\t var a = docs.length - 1;\\n logger.info(\\\u0022docsss fetched \\\u0022\u002Bdocs[a].Odometer);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n var odometer=docs[a].Odometer;\\n logger.info(\\\u0022@@@@@\\\u0022\u002B tractorInfo);\\n modules.collectionAccess.collection(\u0027Revenue\u0027).find({\\\u0022TractorId\\\u0022: tractorInfo}, function(err, docs) {\\n logger.info(\\\u0022rev length\\\u0022\u002B docs.length);\\n \\n //logger.info(\\\u0022id\\\u0022\u002B id);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc){\\n var id = doc._id;\\n logger.info(\\\u0022odometer\\\u0022\u002Bodometer);\\n doc.HectaresTilled = odometer;\\n logger.info(\\\u0022#####\\\u0022 \u002B doc.HectaresTilled);\\n modules.collectionAccess.collection(\u0027Revenue\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function(err) {\\n logger.info(\\\u0022saved\\\u0022);\\n });\\n });\\n response.continue();\\n }\\n });\\n response.complete();\\n }\\n\\t});*/\\n\\tresponse.continue();\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true\r\n },\r\n \u0022TractorDetail\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n// after tractor creation we create mandatory maintenance,\\n// create or remove revenues if some of attachments were changed,\\n// send revenue push\\nvar isSendToBlockchainDone = false;\\nvar isSendToAWSDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n modules.logger.info(\u0027i got called\u0027);\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\nmodules.logger.info( request.body );\\n async.parallel({\\n sendToAWSBackend: async.apply(\\n sendToAWSBackend,\\n httpRequest,\\n logger,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone \u0026\u0026 isSendToAWSDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors\\\u0022; \\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n modules.logger.info(\\\u0022About to build request message to Blockchain\\\u0022);\\n\\tvar msg = { \\n id:response.body._id,\\n activeTimeToday:\\tresponse.body.ActiveTimeToday,\\n bookingRequests:\\tresponse.body.BookingRequests,\\n characteristic:\\tresponse.body.Characteristic,\\n country:\\tresponse.body.Country,\\n dailyTractorUpdates:\\tresponse.body.DailyTractorUpdates,\\n engineHours:\\tresponse.body.EngineHours,\\n lastActiveTime:\\tresponse.body.LastActiveTime,\\n lastActivityId:\\tresponse.body.LastActivityId,\\n lastGeofenceNotificationTime:\\tresponse.body.LastGeofenceNotificationTime,\\n latitude:\\tresponse.body.Latitude,\\n licensePlateNumber:\\tresponse.body.license_plate_number,\\n longitude:\\tresponse.body.Longitude,\\n needToSendGeofenceOutNotification:\\tresponse.body.NeedToSendGeofenceOutNotification,\\n operatorId:\\tresponse.body.OperatorID,\\n positionLatitude:\\tresponse.body.PositionLatitude,\\n positionLongitude:\\tresponse.body.PositionLongitude,\\n speed:\\tresponse.body.Speed,\\n status:\\tresponse.body.Status,\\n street:\\tresponse.body.Street,\\n totalDistanceCovered:\\tresponse.body.TotalDistanceCovered,\\n totalHectaresTilled:\\tresponse.body.TotalHectaresTilled,\\n town:\\tresponse.body.Town,\\n tractorID:\\tresponse.body.TractorID,\\n tractorName:\\tresponse.body.TractorName,\\n updated_at:\\tmodules.moment(response.body.UpdatedAt).toISOString(),\\n created_at:\\tmodules.moment(response.body._kmd.lmt).toISOString(),\\n wasInArea:\\tresponse.body.WasInArea,\\n acl: response.body._acl.creator,\\n tractorModelId: response.body.TractorModelID\\n\\t};\\n return msg;\\n\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n\\n\\n/**\\n * *******************************************************************************************\\n * Makes a copy of the tractor on the AWS Backend\\n * @param httpRequest An object of the HTTP {@link modules.request} from the modules package\\n * @param logger An object of the {@link modules.logger} library from the modules package\\n * @param response The response to the client request\\n * ********************************************************************************************\\n */\\n\\nfunction sendToAWSBackend(httpRequest, logger, response) {\\n logger.info(\u0027posting to aws backend\u0027);\\n var requestOptions = awsRequestOptions(response);\\n httpRequest.post(requestOptions, function(awsErr, awsResp, awsBody) {\\n logger.info(\\\u0022Results: \\\u0022 \u002B awsErr \u002B \\\u0022, \\\u0022 \u002B JSON.stringify(awsResp) \u002B \\\u0022, \\\u0022 \u002B awsBody);\\n\\n //Done\\n isSendToAWSDone = true;\\n callback(response);\\n });\\n}\\n\\nfunction awsRequestOptions(response){\\n var url = AWS_BACKEND_HOST\u002B\u0027/kinvey/api/tractors\u0027; \\n modules.logger.info(url);\\n var msg = {\\n op: \\\u0022create\\\u0022,\\n data: response.body\\n };\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\n Accept: \\\u0022application/json\\\u0022,\\n Version: \\\u0022v1\\\u0022\\n },\\n \\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment,\\n tempObjectStore = modules.utils.tempObjectStore;\\n \\n \\n var currentUser = modules.requestContext.getAuthenticatedUserId(),\\n obj = {\\\u0022creator\\\u0022: \\\u0022kid_bkFYnCzzzb\\\u0022, \\\u0022gr\\\u0022: false, \\\u0022r\\\u0022: [currentUser], \\\u0022w\\\u0022: [currentUser]},\\n tractorId = request.body.TractorID;\\n\\n if(!currentUser) {\\n logger.info(\\\u0022invalid user!\\\u0022);\\n return response.error(\\\u0022Invalid user\\\u0022);\\n } else {\\n request.body.UpdatedAt = modules.moment().format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n \\n if(request.method == \u0027PUT\u0027) {\\n \\n logger.info(request.body.Latitude);\\n \\t\\t\\t//logger.info(request.body.Longitude);\\n \\n collectionAccess.collection(\u0027TractorDetail\u0027).findOneAsync({TractorID: tractorId})\\n .then(function(tractor) {\\n var geofenceLatitude = request.body.Latitude,\\n geofenceLongitude = request.body.Longitude;\\n\\n request.body.Street = tractor.Street;\\n request.body.Town = tractor.Town;\\n request.body.Country = tractor.Country;\\n tempObjectStore.set(\u0027oldCharacteristic\u0027, tractor.Characteristic ? tractor.Characteristic : \\\u0022\\\u0022);\\n if(tractor \u0026\u0026 (tractor.Latitude != geofenceLatitude || tractor.Longitude != geofenceLongitude)) {\\n request.body.NeedToSendGeofenceOutNotification = true;\\n request.body.LastGeofenceNotificationTime = \u0027\u0027;\\n request.body.WasInArea = true;\\n c_sendGeoFenceNotification(tractor, \u0027geofenceCreated\u0027, function(err) {\\n if(err){\\n return response.error(err);\\n }\\n return response.continue();\\n });\\n } else {\\n return response.continue();\\n }\\n },\\n function(err) {\\n logger.info(\u0027error \u0027 \u002B JSON.stringify(err));\\n return response.error(err);\\n });\\n } else {\\n request.body.NeedToSendGeofenceOutNotification = true;\\n request.body.LastGeofenceNotificationTime = \u0027\u0027;\\n request.body.WasInArea = true;\\n request.body.Currency = null;\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).countAsync({TractorID: tractorId})\\n .then(function(count) {\\n if(count \u003E 0) {\\n return response.error(\u0027Tractor with the same Tractor ID already exists\u0027);\\n } else {\\n return response.continue();\\n }\\n }, function(err) {\\n return response.error(err);\\n });\\n }\\n }\\n\\n \\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostDelete 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPostDelete(request, response, modules) {\\n \\n var req = modules.request;\\n\\tvar operation = \u0027delete\u0027;\\n\\t\\n\\tvar logger = modules.logger;\\n\\t\\n\\t//logger.info(response);\\n\\t//logger.info(request);\\n \\n var msg = {\\n op: operation,\\n data: request\\n };\\n \\n req.post({\\n uri : \u0027http://cloud.hellotractor.com/kinvey/api/tractors\u0027,\\n json : msg\\n }, function(error, res, body) {\\n response.continue();\\n });\\n\\t\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true,\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022hasOnPostDelete\u0022 : true\r\n },\r\n \u0022TractorInfo\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n\\n\\tvar req = modules.request;\\n\\tvar trackers=[];\\n\\tvar logger = modules.logger;\\n\\t\\n\\tvar token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n \\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n\\t\\n\\t\\n\\t modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n \\n if(docs!==null \u0026\u0026 docs!==\\\u0022\\\u0022){\\n docs.forEach(function(doc){\\n \\n var tacker={\\n \\\u0022trackerId\\\u0022:doc.TractorID\\n };\\n trackers.push(tacker);\\n \\n });\\n trackers.push(tacker);\\n }\\n \\n }\\n\\t \\n\\tvar requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackers\\\u0022 :trackers\\n\\t};\\n\\tlogger.info(requestData);\\n\\tvar requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/tracker\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022,\\n \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\n },\\n json:requestData,\\n };\\n\\treq.post(requestOptions, function(error, resp, body){\\n\\t \\n if (error){\\n response.body = {error: error.message};\\n response.complete(400);\\n return;\\n }\\n \\n // saving data to db\\n // response.continue();\\n var respData=resp.body.data;\\n \\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n respData.forEach(function(data,a){\\n \\n var entity = modules.kinvey.entity();\\n entity.TrackerId=data.trackerId;\\n \\n entity.TrackerName=data.trackerName;\\n entity.VehicleNo=data.vehicleNo;\\n entity.InstalledUTCDate=data.installedUTCDate;\\n \\n //calling db save function\\n \\n \\n modules.collectionAccess.collection(\\\u0022TractorInfo\\\u0022).save(entity, function(err) {\\n if (err !== null){\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else{\\n // logger.info(entity);\\n response.continue();\\n }\\n });\\n \\n });\\n }\\n \\n response.complete(resp.status);\\n});\\n});\\n}\\n\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/\\\u0022\u002Bresponse.body.VehicleNo\u002B\\\u0022tractor-info\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n TrackerId: response.body.TrackerId,\\n TrackerName: response.body.TrackerName,\\n \\tVehicleNo: response.body.VehicleNo,\\n InstalledUTCDate: response.body.InstalledUTCDate,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true,\r\n \u0022hasOnPostSave\u0022 : true\r\n },\r\n \u0022TractorOperator\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToAWSDone = false;\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n var lodash = modules.lodash;\\n var moment = modules.moment;\\n\\n async.parallel({\\n sendToAWSBackend: async.apply(\\n sendToAWSBackend,\\n httpRequest,\\n logger,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest,\\n lodash,\\n \\tmoment\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToAWSDone \u0026\u0026 isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n\\n/**\\n * **********************************************************************************\\n * Sends the tractor operator to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest, lodash, moment) {\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/users/add-tractor-operator\\\u0022;\\n var authorization = getBookingManagerToken();\\n var msg = buildBlockchainMessage(logger,response,lodash, moment);\\n httpRequest.post(blockchainRequestOptions(logger, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\n function buildBlockchainMessage(logger,response,lodash, moment){\\n \\n logger.info(response.body);\\n \\n var pick = lodash.pick(response.body,[\u0027_id\u0027,\u0027LatLng\u0027,\u0027Location\u0027,\u0027OperatorID\u0027, \u0027OperatorRating\u0027, \u0027CreatedAt\u0027, \u0027UpdatedAt\u0027])\\n\\n pick[\u0027_Id\u0027]=pick[\u0027_id\u0027];\\n pick[\u0027latLon\u0027]=pick[\u0027LatLng\u0027];\\n pick[\u0027location\u0027]=pick[\u0027Location\u0027];\\n pick[\u0027operatorId\u0027]=pick[\u0027OperatorID\u0027];\\n pick[\u0027operatorRating\u0027]=pick[\u0027OperatorRating\u0027];\\n// pick[\u0027created_at\u0027]=pick[\u0027CreatedAt\u0027];\\n// pick[\u0027updated_at\u0027]=pick[\u0027UpdatedAt\u0027];\\n \\n pick[\u0027created_at\u0027] = moment(lodash.get(response.body,\u0027CreatedAt\u0027)).toISOString();\\n pick[\u0027updated_at\u0027] = moment(lodash.get(response.body,\u0027UpdatedAt\u0027)).toISOString();\\n \\n pick[\u0027acl\u0027] = response.body._acl.creator;\\n delete pick[\u0027_id\u0027];\\n delete pick[\u0027LatLng\u0027];\\n delete pick[\u0027Location\u0027];\\n delete pick[\u0027OperatorID\u0027];\\n delete pick[\u0027OperatorRating\u0027];\\n delete pick[\u0027CreatedAt\u0027];\\n delete pick[\u0027UpdatedAt\u0027];\\n\\n logger.info(\\\u0022picking items - Operator\\\u0022);\\n\\n logger.info(pick);\\n \\n return pick; \\n\\n}\\n\\nfunction blockchainRequestOptions(logger, msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n/**\\n * *******************************************************************************************\\n * Makes a copy of the operator on the AWS Backend\\n * @param httpRequest An object of the HTTP {@link modules.request} from the modules package\\n * @param logger An object of the {@link modules.logger} library from the modules package\\n * @param response The response to the client request\\n * ********************************************************************************************\\n */\\n\\nfunction sendToAWSBackend(httpRequest, logger, response) {\\n var requestOptions = awsRequestOptions(response);\\n httpRequest.post(requestOptions, function(awsErr, awsResp, awsBody) {\\n logger.info(\\\u0022Results: \\\u0022 \u002B awsErr \u002B \\\u0022, \\\u0022 \u002B JSON.stringify(awsResp) \u002B \\\u0022, \\\u0022 \u002B awsBody);\\n\\n //Done\\n isSendToAWSDone = true;\\n callback(response);\\n });\\n}\\n\\nfunction awsRequestOptions(response){\\n var url = AWS_BACKEND_HOST\u002B\u0027kinvey/api/operators\u0027; \\n modules.logger.info(url);\\n var msg = {\\n op: \\\u0022create\\\u0022,\\n data: response.body\\n };\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\n Accept: \\\u0022application/json\\\u0022,\\n Version: \\\u0022v1\\\u0022\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n var logger = modules.logger;\\n logger.info(\\\u0022request : \\\u0022 \u002B JSON.stringify(request.body));\\n var collectionName = request.collectionName;\\n if (!currentUser || !collectionName) {\\n\\t return response.error(\\\u0022Invalid user\\\u0022);\\n\\t} else if (currentUser \u0026\u0026 !request.body.OperatorID) {\\n\\t modules.collectionAccess.collection(collectionName).count({}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else {\\n \\n //request.body.OperatorID = generate();\\n response.continue();\\n }\\n });\\n\\t} else {\\n\\t response.continue();\\n\\t}\\n\\n\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostDelete 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPostDelete(request, response, modules) {\\n \\n var req = modules.request;\\n\\tvar operation = \u0027delete\u0027;\\n\\t\\n\\tvar logger = modules.logger;\\n\\t\\n\\t//logger.info(response);\\n\\t//logger.info(request);\\n \\n var msg = {\\n op: operation,\\n data: request\\n };\\n \\n req.post({\\n uri : \u0027http://cloud.hellotractor.com/kinvey/api/operators\u0027,\\n json : msg\\n }, function(error, res, body) {\\n response.continue();\\n });\\n\\t\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true,\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022hasOnPostDelete\u0022 : true\r\n },\r\n \u0022TractorOwner\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToAWSDone = false;\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n var lodash = modules.lodash;\\n var moment = modules.moment;\\n\\n async.parallel({\\n sendToAWSBackend: async.apply(\\n sendToAWSBackend,\\n httpRequest,\\n logger,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest,\\n lodash,\\n moment\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToAWSDone \u0026\u0026 isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n\\n/**\\n * **********************************************************************************\\n * Sends the booking request to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest, lodash, moment) {\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/users/add-tractor-owner\\\u0022;\\n var authorization = getBookingManagerToken();\\n var msg = buildBlockchainMessage(logger, response, lodash, moment);\\n \\n httpRequest.post(blockchainRequestOptions(logger, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\n function buildBlockchainMessage(logger,response,lodash, moment){\\n logger.info(response.body);\\n var pick = lodash.pick(response.body,[\u0027_id\u0027,\u0027country\u0027,\u0027enableRevenue\u0027,\u0027maintenanceNotification\u0027, \u0027mpesaPaybillAccountId\u0027,\u0027systemNotifications\u0027,\u0027timezone\u0027,\u0027userLevel\u0027])\\n \\n pick[\u0027acl\u0027] = response.body._acl.creator;\\n pick[\u0027created_at\u0027] = moment(lodash.get(response.body,\u0027_kmd.ect\u0027)).toISOString();\\n pick[\u0027updated_at\u0027] = moment(lodash.get(response.body,\u0027_kmd.lmt\u0027)).toISOString();\\n pick[\u0027orgId\u0027] = response.body.orgID\\n \\n logger.info(\\\u0022picking items\\\u0022);\\n logger.info(pick);\\n \\n return pick;\\n}\\n\\nfunction blockchainRequestOptions(logger, msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n logger.info(\\\u0022here\\\u0022);\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n\\n/**\\n * *******************************************************************************************\\n * Makes a copy of the operator on the AWS Backend\\n * @param httpRequest An object of the HTTP {@link modules.request} from the modules package\\n * @param logger An object of the {@link modules.logger} library from the modules package\\n * @param response The response to the client request\\n * ********************************************************************************************\\n */\\n\\nfunction sendToAWSBackend(httpRequest, logger, response) {\\n var requestOptions = awsRequestOptions(response);\\n httpRequest.post(requestOptions, function(awsErr, awsResp, awsBody) {\\n logger.info(\\\u0022Results: \\\u0022 \u002B awsErr \u002B \\\u0022, \\\u0022 \u002B JSON.stringify(awsResp) \u002B \\\u0022, \\\u0022 \u002B awsBody);\\n\\n //Done\\n isSendToAWSDone = true;\\n callback(response);\\n });\\n}\\n\\nfunction awsRequestOptions(response){\\n var url = AWS_BACKEND_HOST\u002B\u0027/kinvey/api/users\u0027; \\n modules.logger.info(url);\\n var msg = {\\n op: \\\u0022create\\\u0022,\\n data: response.body\\n };\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\n Accept: \\\u0022application/json\\\u0022,\\n Version: \\\u0022v1\\\u0022\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostSave\u0022 : true\r\n },\r\n \u0022TractorToOperator\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n var logger = modules.logger;\\n logger.info(request.body);\\n\\tif (!currentUser) {\\n\\t return response.error(\\\u0022Invalid user\\\u0022);\\n\\t}\\n\\tresponse.continue();\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n/**\\n * **********************************************************************************\\n * Sends the booking request to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n modules.collectionAccess.collection(response.body.TractorId._collection).\\n findOne({\\\u0022_id\\\u0022: modules.collectionAccess.objectID(response.body.TractorId._id)}, \\n function(error, tractor){ \\n \\t\\t\\t\\tif(error){ \\n \\tlogger.info(error);\\n } else {\\n if(tractor){\\n logger.info(JSON.stringify(tractor)); \\n modules.collectionAccess.collection(response.body.OperatorId._collection).\\n findOne({\\\u0022_id\\\u0022: modules.collectionAccess.objectID(response.body.OperatorId._id)},\\n function(error, operator){\\n if(error){\\n logger.info(error);\\n }else{\\n if(operator != null){\\n logger.info(JSON.stringify(operator));\\n logger.info(\\\u0022Found operator\\\u0022);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/tractor-to-operator/\\\u0022;\\n logger.info(url);\\n var msg = {\\n _id: response.body._id,\\n tractorId : tractor.TractorID,\\n operatorId : operator.OperatorID\\n }\\n logger.info(msg);\\n var authorization = getBookingManagerToken();\\n logger.info(authorization);\\n \\n httpRequest.post(blockchainRequestOptions(logger, msg, url, authorization),\\n function(blockErr, blockRes, blockBody) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n\\n var doc = {\\n url: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n\\n failedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n });\\n\\n }\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n }\\n }\\n });\\n }\\n }});\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json:{}\\n };\\n\\n return requestOptions;\\n}\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true,\r\n \u0022hasOnPostSave\u0022 : true\r\n },\r\n \u0022user\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPostSave(request, response, modules) {\\n var logger = modules.logger,\\n collectionAccess = modules.collectionAccess;\\n logger.info(request.body);\\n\\n var name = request.body.first_name,\\n lastName = request.body.last_name,\\n email = request.body.email,\\n phone = request.body.phone,\\n address = request.body.address,\\n username = request.body.email,\\n bookingAgentID = request.body.bookingAgentID,\\n latitude = request.body.latitude,\\n longitude = request.body.longitude,\\n profileImage = request.body.profileImage,\\n profileImageURL = request.body.profileImageURL,\\n todaysDate = modules.moment.utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027),\\n _id = response.body._id,\\n \\t_kmd = response.body._kmd;\\n \\n \\n var orgId = \\\u0022\\\u0022;\\n if(request.body.orgIDs){\\n orgId = request.body.orgIDs;\\n }\\n \\n var timeZone = \\\u0022\\\u0022;\\n if (request.body.timeZone){\\n timeZone = request.body.timeZone;\\n }\\n \\n var userId = response.body._id;\\n \\n logger.info(response.body);\\n \\n //Check if user type is booking agent. BA user type is 2\\n if(request.body.user_type === 2){\\n collectionAccess.collection(\u0027BookingAgents\u0027)\\n .findOneAsync({bookingAgentID: bookingAgentID})\\n .then(function(bookingAgent) {\\n if(bookingAgent) {\\n \\n bookingAgent.name = name;\\n bookingAgent.email = email;\\n bookingAgent.phone = phone;\\n bookingAgent.address = address;\\n bookingAgent.username = phone;\\n bookingAgent.latitude = latitude;\\n bookingAgent.longitude = longitude;\\n bookingAgent.bookingAgentID = bookingAgentID;\\n bookingAgent.profileImage = profileImage; \\n bookingAgent.profileImageURL = profileImageURL;\\n bookingAgent.orgID = orgId;\\n bookingAgent.userId = userId;\\n \\tbookingAgent.updatedAt = todaysDate;\\n \\n collectionAccess.collection(\u0027BookingAgents\u0027).update(\\n {bookingAgentID : bookingAgentID}, \\n bookingAgent, \\n {upsert: true}, \\n function(updateErr, updatedBookingAgent){\\n if (updateErr){\\n logger.error(\u0027Query failed for updating booking agent: \u0027 \u002B err);\\n return response.error(err);\\n }\\n\\n return response.complete(200);\\n });\\n \\n } else {\\n bookingAgent = {\\n name: name,\\n email: email,\\n phone: phone,\\n address: address,\\n username: phone,\\n latitude: latitude,\\n longitude: longitude,\\n profileImage: profileImage, \\n profileImageURL: profileImageURL, \\n bookingAgentID: bookingAgentID,\\n orgID: orgId,\\n createdAt: todaysDate,\\n updatedAt: todaysDate,\\n userId: userId\\n };\\n\\n// var entity = modules.kinvey.entity(bookingAgent);\\n bookingAgent._acl = response.body._acl;\\n bookingAgent._id = response.body._id;\\n bookingAgent._kmd = {\\\u0022lmt\\\u0022:response.body._kmd.lmt,\\\u0022ect\\\u0022:response.body._kmd.ect}; \\n\\n collectionAccess.collection(\u0027BookingAgents\u0027).save(bookingAgent, function(err) {\\n if(err) {\\n logger.error(\u0027Query failed for creating booking agent: \u0027 \u002B err);\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n }\\n },\\n function(err) {\\n return response.error(err);\\n });\\n }\\n else{\\n \\n collectionAccess.collection(\u0027TractorOwner\u0027)\\n .findOneAsync({username: email})\\n .then(function(tractorOwner) {\\n if(tractorOwner) {\\n return response.complete(200);\\n } else {\\n tractorOwner = {\\n first_name: name,\\n last_name: lastName,\\n email: email,\\n phone: phone,\\n address: address,\\n username: email,\\n smsNotifications: false,\\n emailNotifications: false,\\n enableRevenue: true,\\n\\t\\t\\t\\t\\t\\t\\t\\torgID: orgId,\\n timeZone: timeZone\\n };\\n\\n var entity = modules.kinvey.entity(tractorOwner);\\n entity._acl = {creator: response.body._id};\\n\\n collectionAccess.collection(\u0027TractorOwner\u0027).save(entity, function(err) {\\n if(err) {\\n logger.error(\u0027Query failed for creating tractor owner: \u0027 \u002B err);\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n }\\n },\\n function(err) {\\n return response.error(err);\\n });\\n \\n }\\n \\n //}\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostSave\u0022 : true\r\n },\r\n \u0022_custom\u0022 : {\r\n \u0022EventCodeDetails\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\r\\n var logger = modules.logger;\\r\\n var req = modules.request;\\r\\n var token = \\\u0022\\\u0022;\\r\\n\\r\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\r\\n .then(function(accessToken) {\\r\\n token = accessToken;\\r\\n \\r\\n },\\r\\n function(err) {\\r\\n \\r\\n return response.error(err);\\r\\n });\\r\\n //data to send in request body\\r\\n var requestData={\\r\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\r\\n };\\r\\n var requestOptions = {\\r\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/event\u0027,\\r\\n headers: {\\r\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\r\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\r\\n // \\\u0022Accept\\\u0022 :\\\u0022application/vnd.hellotractor\u002Bjson\\\u0022,\\r\\n \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\r\\n },\\r\\n json:requestData,\\r\\n };\\r\\n req.post(requestOptions, function(error, resp, body){\\r\\n \\r\\n if (error){\\r\\n response.body = {error: error.message};\\r\\n return response.complete(400);\\r\\n }else{\\r\\n var respData=resp.body.data;\\r\\n if(respData !==null \u0026\u0026 respData!== undefined){\\r\\n respData.forEach(function(data,a){\\r\\n var entity = modules.kinvey.entity();\\r\\n entity.eventCode=data.eventCode;\\r\\n entity.eventName=data.eventName; \\r\\n modules.collectionAccess.collection(\\\u0022EventCodeDetails\\\u0022).save(entity, function(err) {\\r\\n if (err !== null){\\r\\n logger.error(\u0027Query failed: \u0027\u002B err);\\r\\n return response.error(err);\\r\\n } else{\\r\\n logger.info(\\\u0022saved\\\u0022);\\r\\n }\\r\\n \\r\\n });\\r\\n });//resp foreach\\r\\n }\\r\\n }\\r\\n return response.complete();\\r\\n });\\r\\n \\r\\n}\u0022\r\n },\r\n \u0022FarmerMessageExpiryCheck\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\t\\tvar logger = modules.logger;\\n modules.collectionAccess.collection(\u0027TelerivetFarmerInfo\u0027).find({\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var entity = modules.kinvey.entity();\\n var endDateFromDatabase = doc.EndDate;\\n var currentDate = new Date();\\n var theMoment = modules.moment(currentDate);\\n var currentDateFormat = theMoment.toString();\\n var startDate = modules.moment(endDateFromDatabase, \u0027YYYY-M-DD HH:mm:ss\u0027);\\n var endDate = modules.moment(currentDateFormat, \u0027YYYY-M-DD HH:mm:ss\u0027);\\n var secondsDiff = startDate.diff(endDate, \u0027seconds\u0027);\\n if(secondsDiff \u003C 0){\\n doc.Status = 0;\\n modules.collectionAccess.collection(\\\u0022TelerivetFarmerInfo\\\u0022).saveAsync(doc , function(err) {\\n if (err !== null){\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else{\\n return response.complete(400);\\n }\\n });\\n }\\n });\\n }\\n return response.complete();\\n });\\n\\n}\u0022\r\n },\r\n \u0022GetTractorStatus\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n\\tvar logger = modules.logger;\\n\\tvar identifier=null;\\n \\n var token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n \\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n \\n \\n\\tmodules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).find({\\\u0022Status\\\u0022:1}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var tractorId = doc.TractorId;\\n var operatorId = doc.OperatorId;\\n var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackerId\\\u0022:tractorId,\\n \\\u0022startActivityId\\\u0022:0,\\n \\\u0022rowCount\\\u0022:5,\\n \\\u0022startUTCTime\\\u0022:\\\u0022\\\u0022,\\n \\\u0022endUTCTime\\\u0022:\\\u0022\\\u0022\\n };\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022,\\n // \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\n },\\n json:requestData,\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n \\n if (error){\\n response.body = {error: error.message};\\n response.complete(400);\\n }else{\\n var respData=resp.body.data;\\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n for(var i = respData.length-1 ; i \u003E= 0; i-- ){\\n var data = respData[i];\\n if(data.eventCode === \\\u002211\\\u0022){\\n identifier = data.activityId \u002B \\\u0022_\\\u0022 \u002B data.activityUTCDate;\\n data.journeyIdentifier = identifier;\\n }else{\\n if(null !== identifier){\\n data.journeyIdentifier = identifier;\\n }else{\\n modules.collectionAccess.collection(\u0027ActivityHectar\u0027).find({\\\u0022TractorId\\\u0022:tractorId, \\\u0022OperatorId\\\u0022:operatorId, \\\u0022JourneyEndTime\\\u0022: \\\u0022\\\u0022}, function (err, docs) {\\n \\n if (docs.length === 0){\\n response.complete();\\n }else{\\n identifier = doc[0].JourneyIdentifier;\\n data.journeyIdentifier = identifier;\\n }\\n });\\n }\\n }\\n }\\n respData.forEach(function(data,a){\\n if(data.eventCode === \\\u002211\\\u0022){\\n modules.collectionAccess.collection(\u0027ActivityHectar\u0027).find({\\\u0022ActivityId\\\u0022:data.activityId}, function (err, docs) {\\n \\n if(docs.length === 0){\\n var entity = modules.kinvey.entity();\\n entity.TractorId = tractorId;\\n entity.OperatorId = operatorId;\\n entity.HectarTilledStartPT = data.odometer;\\n entity.HectarTilledStopPT = data.odometer;\\n entity.ActivityId = data.activityId;\\n entity.JourneyStartTime = data.activityUTCDate;\\n entity.JourneyEndTime = \\\u0022\\\u0022;\\n entity.Latitude = data.lat;\\n entity.JourneyIdentifier = data.journeyIdentifier;\\n entity.Longitude = data.lon;\\n entity.IgnitionStatus = data.ignitionStatus;\\n entity.Street = data.street;\\n entity.Town = data.town;\\n entity.County = data.county;\\n entity.Country = data.country;\\n modules.collectionAccess.collection(\u0027TractorOperator\u0027).find({\\\u0022OperatorID\\\u0022:operatorId}, function (err, docs) {\\n \\n entity.OperatorName = docs[0].OperatorName;\\n modules.collectionAccess.collection(\\\u0022ActivityHectar\\\u0022).save(entity, function(err) {\\n \\n });\\n response.continue();\\n });\\n }\\n response.continue();\\n });\\n }\\n else if (data.eventCode === \\\u002212\\\u0022){\\n modules.collectionAccess.collection(\u0027ActivityHectar\u0027).find({\\\u0022TractorId\\\u0022:tractorId, \\\u0022OperatorId\\\u0022:operatorId, \\\u0022JourneyEndTime\\\u0022: \\\u0022\\\u0022, \\\u0022JourneyIdentifier\\\u0022: data.journeyIdentifier}, function (err, docs) {\\n \\n if (docs.length === 0){\\n \\n }else{\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n doc.JourneyEndTime = data.activityUTCDate;\\n doc.HectarTilledStopPT = data.odometer;\\n doc.Latitude = data.lat;\\n doc.Longitude = data.lon;\\n doc.IgnitionStatus = data.ignitionStatus;\\n doc.Street = data.street;\\n doc.Town = data.town;\\n doc.County = data.county;\\n doc.Country = data.country;\\n modules.collectionAccess.collection(\u0027ActivityHectar\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n logger.info(\\\u0022update\\\u0022);\\n });\\n });\\n }\\n });\\n }\\n else{\\n \\n modules.collectionAccess.collection(\u0027ActivityHectar\u0027).find({\\\u0022TractorId\\\u0022:tractorId, \\\u0022OperatorId\\\u0022:operatorId, \\\u0022JourneyEndTime\\\u0022: \\\u0022\\\u0022, \\\u0022JourneyIdentifier\\\u0022: data.journeyIdentifier}, function (err, docs) {\\n logger.info(\\\u0022docs ## ::\\\u0022\u002Bdocs.length);\\n if (docs.length === 0){\\n response.complete();\\n }else{\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n doc.HectarTilledStopPT = data.odometer;\\n doc.Latitude = data.lat;\\n doc.Longitude = data.lon;\\n doc.IgnitionStatus = data.ignitionStatus;\\n entity.JourneyIdentifier = data.journeyIdentifier;\\n doc.Street = data.street;\\n doc.Town = data.town;\\n doc.County = data.county;\\n doc.Country = data.country;\\n modules.collectionAccess.collection(\u0027ActivityHectar\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n //logger.info(\\\u0022update again\\\u0022);\\n });\\n });\\n }\\n });\\n }\\n });\\n } \\n }\\n });\\n });\\n }\\n\\t});\\n\\t//response.complete(200);\\n}\u0022\r\n },\r\n \u0022NotificationGeoFence\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar logger = modules.logger;\\n\\tvar token = \\\u0022\\\u0022;\\n\\t\\n\\tcollectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n\\t.then(function(accessToken) {\\n\\t\\ttoken = accessToken;\\n\\t\\t\\n\\t},\\n\\tfunction(err) {\\n\\t\\t\\n\\t\\treturn response.error(err);\\n\\t});\\n\\t\\n\\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\\u0022Status\\\u0022:1}, function (err, docs) {\\n\\t logger.info(\\\u0022docs Length\\\u0022 \u002B docs.length);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n //logger.info(doc);\\n if (doc.Latitude !== undefined || doc.Longitude !== undefined){\\n var tractorId = doc.TractorID;\\n var latitudeList = doc.Latitude;\\n var longitudeList = doc.Longitude;\\n var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackers\\\u0022: [{\\\u0022trackerId\\\u0022: tractorId}]\\n };\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/status\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022\\n },\\n json:requestData,\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n if (error){\\n logger.info(\\\u0022error=\\\u0022\u002Berror);\\n response.body = {error: error.message};\\n response.complete(400);\\n }else{\\n var respData=resp.body.data;\\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n respData.forEach(function(data,a){\\n var latitude = data.lat;\\n var longitude = data.lon;\\n \\n var answer = checkcheck(latitude, longitude, latitudeList, longitudeList);\\n logger.info(\\\u0022answer --- \\\u0022\u002Banswer);\\n function checkcheck (xLat, yLng, latList, lngList) {\\n var i, j=latList.length-1 ;\\n var oddNodes=false;\\n var polyLat = latList;\\n var polyLng = lngList;\\n for (i=0; i\u003ClatList.length; i\u002B\u002B) {\\n if((polyLng[i]\u003C yLng \u0026\u0026 polyLng[j]\u003E=yLng || polyLng[j]\u003C yLng \u0026\u0026 polyLng[i]\u003E=yLng) \u0026\u0026 (polyLat[i]\u003C=xLat || polyLat[j]\u003C=xLat)) {\\n oddNodes^=(polyLat[i]\u002B(yLng-polyLng[i])/(polyLng[j]-polyLng[i])*(polyLat[j]-polyLat[i])\u003CxLat); \\n }\\n j=i;\\n }\\n logger.info(\\\u0022******\\\u0022 \u002B oddNodes);\\n if(oddNodes === 0){\\n modules.collectionAccess.collection(\u0027NotificationGeoFence\u0027).find({\\\u0022TractorId\\\u0022:tractorId}, function (err, docs) {\\n logger.info(\\\u0022docs.length : \\\u0022 \u002B docs.length);\\n if (docs.length === 0) {\\n var entity = modules.kinvey.entity();\\n var date = new Date();\\n entity.NotificationType = \\\u0022Alert\\\u0022;\\n entity.CurrentDate = date;\\n entity.TractorId = tractorId;\\n entity.Message = \\\u0022The tractor with tractor Id \\\u0022\u002B tractorId \u002B \\\u0022 is out of geofence area\\\u0022;\\n entity.ReadStatus = 0;\\n entity._acl.setGloballyReadable(false);\\n entity._acl.addReader(currentUser); \\n entity._acl.addWriter(currentUser);\\n logger.info(\\\u0022save\\\u0022 \u002B entity.TractorId);\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n });\\n }\\n });\\n }\\n else if (oddNodes === 1){\\n modules.collectionAccess.collection(\u0027NotificationGeoFenceMaintenance\u0027).findAndRemove({\\\u0022TractorId\\\u0022:tractorId}, function (err, docs) {\\n });\\n }\\n return oddNodes;\\n }\\n });\\n }else{\\n }\\n response.complete();\\n }\\n });\\n }\\n });\\n }\\n\\t});\\n\\t//response.complete(200);\\n}\u0022\r\n },\r\n \u0022TelerivetFarmerInfo\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var logger = modules.logger;\\n var a;\\n var smsContentToSent;\\n var fromNumber;\\n var mainObj = [];\\n var tractorInformation = [];\\n var farmerLatLngSplit = {};\\n var tractorIds = [];\\n var entity = modules.kinvey.entity();\\n var saveForLoopValue;\\n var lengthForCheck;\\n var tractorLengthCheck;\\n var saveTractorDetail = {TractorID : \\\u0022\\\u0022 , OperatorID : \\\u0022\\\u0022, Latitude: \\\u0022\\\u0022, Longitude : \\\u0022\\\u0022, OperatorPhoneNo : \\\u0022\\\u0022, OperatorName : \\\u0022\\\u0022, Radius : \\\u0022\\\u0022};\\n modules.collectionAccess.collection(\u0027TelerivetFarmerInfo\u0027).find({}, function (err, docs) {\\n var farmerLength = (docs.length)-1;\\n if(docs.length\u003E0){\\n a = docs[farmerLength].SmsId;\\n url = \u0027http://54.218.5.173/request/data?key=gaiSq3O2p7frojorudre\u0026last_id=\u0027 \u002B a;\\n }else{\\n url = \u0027http://54.218.5.173/request/data?key=gaiSq3O2p7frojorudre\u0026last_id=146\u0027;\\n }\\n var requestOptions = {\\n \u0027url\u0027: url,\\n headers: {}\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n if (error){\\n response.body = {error: error.message};\\n // //response.complete(400);\\n return;\\n }\\n response.body = JSON.parse(body);\\n var temp=response[\\\u0022body\\\u0022].data;\\n if (temp[0] === undefined){\\n // //response.complete();\\n }\\n var smsId = temp[0].id;\\n var smsFromNo = temp[0].from_number;\\n fromNumber = smsFromNo;\\n var smsToNo = temp[0].to_number;\\n var smsType = temp[0].message_type;\\n var smsContent = temp[0].content;\\n var smsCont = smsContent.trim();\\n if(smsCont.indexOf(\u002710\u0027) !== 0){\\n var entity = modules.kinvey.entity();\\n entity.SmsId = temp[0].id;\\n \\n modules.collectionAccess.collection(\\\u0022TelerivetFarmerInfo\\\u0022).save(entity, function(err) {\\n response.complete();\\n });\\n } else{\\n \\n var smsDirection = temp[0].direction;\\n var smsCreateTime = temp[0].created_at;\\n modules.collectionAccess.collection(\u0027TelerivetFarmerInfo\u0027).find({\\\u0022FromNumber\\\u0022: smsFromNo, \\\u0022Status\\\u0022 : 1}, function (err, docs) {\\n if(Object.keys(docs).length \u003E 0){\\n var i = 0;\\n docs.forEach(function(doc, a) {\\n var startDateFromDatabase = doc.StartDate;\\n var theMomentStartDate = modules.moment(startDateFromDatabase);\\n theMomentStartDate.add(\u0027hours\u0027, 6);\\n var estimatedEndDate = theMomentStartDate.toString();\\n var currentDate = new Date();\\n var startDate = modules.moment(currentDate, \u0027YYYY-M-DD HH:mm:ss\u0027);\\n var endDate = modules.moment(estimatedEndDate, \u0027YYYY-M-DD HH:mm:ss\u0027);\\n var secondsDiff = startDate.diff(endDate, \u0027seconds\u0027);\\n \\n if(secondsDiff \u003C 0){\\n //Send message back to farmer\\n }else{\\n i\u002B\u002B;\\n if(i===1){\\n farmerDetailsUpdate(temp);\\n }\\n }\\n });\\n } else {\\n farmerDetailsUpdate(temp);\\n }\\n });\\n }\\n });\\n ////response.complete();\\n });\\n \\n function farmerDetailsUpdate(temp){\\n //var tractorInformation = [];\\n \\n entity.SmsId = temp[0].id;\\n var toUseLater = entity.SmsId;\\n entity.FromNumber = temp[0].from_number;\\n entity.ToNumber = temp[0].to_number;\\n entity.SmsType = temp[0].message_type;\\n logger.info(\\\u0022smsContent :: \\\u0022\u002Btemp[0].content);\\n if(temp[0].content === \\\u0022101\\\u0022){\\n entity.Content = \\\u0022tilling\\\u0022; \\n } else if(temp[0].content === \\\u0022102\\\u0022){\\n entity.Content = \\\u0022ploughing\\\u0022;\\n } else if(temp[0].content === \\\u0022103\\\u0022){\\n entity.Content = \\\u0022ridging\\\u0022;\\n } else if(temp[0].content === \\\u0022104\\\u0022){\\n entity.Content = \\\u0022planting\\\u0022;\\n } else if(temp[0].content === \\\u0022105\\\u0022){\\n entity.Content = \\\u0022irrigating\\\u0022;\\n } else if(temp[0].content === \\\u0022106\\\u0022){\\n entity.Content = \\\u0022reaping\\\u0022;\\n } else{\\n entity.Content = \\\u0022hauling\\\u0022;\\n }\\n smsContentToSent = entity.Content;\\n \\n entity.Direction = temp[0].direction;\\n entity.CreationTime = temp[0].created_at;\\n var smsFromNo = temp[0].from_number;\\n var date = new Date();\\n entity.StartDate = date;\\n var theMoment = modules.moment(date);\\n theMoment.add(\u0027hours\u0027, 6);\\n var endDate = theMoment.toString();\\n entity.EndDate = endDate;\\n entity.Status = 1;\\n modules.collectionAccess.collection(\\\u0022Farmer\\\u0022).find({\\\u0022MobileNumber\\\u0022: smsFromNo}, function (err, docs) {\\n \\n if (err) {\\n \\n response.complete(400)\\n } else {\\n \\n docs.forEach(function(doc, a) {\\n if(doc.length === 0){\\n //response.complete();\\n }\\n farmerName = doc.FarmerName;\\n var farmerLocation = doc.Location;\\n var positionLatLng = doc.LatLong;\\n farmerLatLngSplit = positionLatLng.split(\\\u0022,\\\u0022);\\n });\\n }\\n //call list of tractor ids matching the feature\\n modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022).find({\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n \\n tractorLengthCheck = docs.length;\\n \\n if(docs.length \u003E 0){\\n var r = 0;\\n var p = 0;\\n docs.forEach(function(doc, a) {\\n r\u002B\u002B;\\n var features = doc.Characteristic;\\n if(features.indexOf(temp[0].content) \u003E -1){\\n var tractorDetail = {TractorID : \\\u0022\\\u0022,OperatorID : \\\u0022\\\u0022};\\n \\n tractorDetail.TractorID = doc.TractorID;\\n tractorDetail.OperatorID = doc.OperatorID;\\n tractorIds.push(tractorDetail);\\n logger.info(\\\u0022tractor Ids Array = \\\u0022\u002BtractorIds[p]);\\n p\u002B\u002B;\\n }\\n \\n if(tractorLengthCheck === r){\\n lengthForCheck = tractorIds.length;\\n var z = 0;\\n for(var w = 0; w\u003C tractorIds.length; w\u002B\u002B){\\n z\u002B\u002B;\\n saveForLoopValue = w;\\n saveTractor(z,lengthForCheck,saveForLoopValue);\\n }\\n }\\n });\\n \\n }\\n });\\n });\\n }\\n \\n function saveTractor(z,lengthForCheck,saveForLoopValue){\\n logger.info(\\\u0022tractor id=\\\u0022\u002BtractorIds[saveForLoopValue].TractorID);\\n modules.collectionAccess.collection(\\\u0022TractorCurrentLocation\\\u0022).find({\\\u0022TractorId\\\u0022: tractorIds[saveForLoopValue].TractorID}, function (err, docs) {\\n if(docs.length \u003E 0){\\n \\n saveTractorDetail.Latitude = docs[0].Latitude;\\n saveTractorDetail.Longitude = docs[0].Longitude;\\n \\n modules.collectionAccess.collection(\\\u0022TractorOperator\\\u0022).find({\\\u0022OperatorID\\\u0022: tractorIds[saveForLoopValue].OperatorID}, function (err, docs) {\\n saveTractorDetail.TractorID = tractorIds[saveForLoopValue].TractorID;\\n saveTractorDetail.OperatorID = tractorIds[saveForLoopValue].OperatorID;\\n saveTractorDetail.OperatorPhoneNo = docs[0].MobileNumber;\\n saveTractorDetail.OperatorName = docs[0].OperatorName;\\n saveTractorDetail.Radius = docs[0].Radius;\\n tractorInformation.push(saveTractorDetail);\\n if(lengthForCheck === z){\\n sendMessage();\\n }\\n });\\n }else{\\n saveTractorDetail.TractorID = tractorIds[saveForLoopValue].TractorID;\\n saveTractorDetail.OperatorID = tractorIds[saveForLoopValue].OperatorID;\\n modules.collectionAccess.collection(\\\u0022TractorOperator\\\u0022).find({\\\u0022OperatorID\\\u0022: tractorIds[saveForLoopValue].OperatorID}, function (err, docs) {\\n saveTractorDetail.OperatorPhoneNo = docs[0].MobileNumber;\\n saveTractorDetail.OperatorName = docs[0].OpertorName;\\n saveTractorDetail.Radius = docs[0].Radius;\\n tractorInformation.push(saveTractorDetail); \\n if(lengthForCheck === z){\\n sendMessage();\\n }\\n });\\n }\\n });\\n }\\n \\n \\n function sendMessage(){\\n \\n for(var i = 0; i \u003C tractorInformation.length; i\u002B\u002B){\\n if(tractorInformation[i].Latitude !== \\\u0022\\\u0022){\\n var distance = calculateDistance(farmerLatLngSplit[0], farmerLatLngSplit[1], tractorInformation[i].Latitude, tractorInformation[i].Longitude);\\n\\n if(tractorInformation[i].Radius !== \\\u0022\\\u0022){\\n if(distance \u003C= parseInt(tractorInformation[i].Radius)/0.62137){\\n var objItem={\\\u0022opertorId\\\u0022: tractorInformation[i].OperatorID, \\\u0022distance\\\u0022: distance, \\\u0022operatorName\\\u0022: tractorInformation[i].OperatorName, \\\u0022operatorPhoneNo\\\u0022: tractorInformation[i].OperatorPhoneNo};\\n mainObj.push(objItem);\\n }\\n }\\n }\\n }\\n if(mainObj.length \u003E 1){\\n var listOfDistances = mainObj.sort(compare);\\n //logger.info(\\\u0022listOfDistances = \\\u0022\u002BlistOfDistances[0]);\\n sendMessageToOperator(listOfDistances[0].operatorName,farmerName,fromNumber,smsContentToSent,listOfDistances[0].operatorPhoneNo);\\n entity.FarmerName = farmerName;\\n entity.ListOfDistances = listOfDistances;\\n modules.collectionAccess.collection(\\\u0022TelerivetFarmerInfo\\\u0022).save(entity, function(err) {\\n if (err !== null){\\n return response.error(err);\\n } else{\\n }\\n });\\n }else{\\n response.complete();\\n }\\n }\\n \\n //function to do compare list of distances\\n function compare(a,b) {\\n\\n if (a.distance \u003C b.distance)\\n return -1;\\n else if (a.distance \u003E b.distance)\\n return 1;\\n else \\n return 0;\\n }\\n //calculate the distances from farmer to list of tractors\\n function calculateDistance(lat1, long1, lat2, long2){ \\n //radians\\n lat1 = (lat1 * 2.0 * Math.PI) / 60.0 / 360.0; \\n long1 = (long1 * 2.0 * Math.PI) / 60.0 / 360.0; \\n lat2 = (lat2 * 2.0 * Math.PI) / 60.0 / 360.0; \\n long2 = (long2 * 2.0 * Math.PI) / 60.0 / 360.0; \\n var a = 6378137.0; // Earth Major Axis (WGS84) \\n var b = 6356752.3142; // Minor Axis \\n var f = (a-b) / a; // \\\u0022Flattening\\\u0022 \\n var e = 2.0*f - f*f; // \\\u0022Eccentricity\\\u0022 \\n var beta = (a / Math.sqrt( 1.0 - e * Math.sin( lat1 ) * Math.sin( lat1 ))); \\n var cos = Math.cos( lat1 ); \\n var x = beta * cos * Math.cos( long1 ); \\n var y = beta * cos * Math.sin( long1 ); \\n var z = beta * ( 1 - e ) * Math.sin( lat1 ); \\n beta = ( a / Math.sqrt( 1.0 - e * Math.sin( lat2 ) * Math.sin( lat2 ))); \\n cos = Math.cos( lat2 ); \\n x -= (beta * cos * Math.cos( long2 )); \\n y -= (beta * cos * Math.sin( long2 )); \\n z -= (beta * (1 - e) * Math.sin( lat2 )); \\n return (Math.sqrt( (x*x) \u002B (y*y) \u002B (z*z) )/1000); \\n }\\n //send sms to nearest tractor, but sms will go to the operator phone number \\n function sendMessageToOperator(operatorName,farmerName,smsFromNo,smsContent,phoneNumber){\\n //logger.info(\\\u0022@ phoneNumber : \\\u0022\u002BphoneNumber);\\n //logger.info(\\\u0022@ operatorName : \\\u0022\u002BoperatorName);\\n //logger.info(\\\u0022@ farmerName : \\\u0022\u002BfarmerName);\\n //logger.info(\\\u0022@ smsFromNo : \\\u0022\u002BsmsFromNo);\\n //logger.info(\\\u0022@ smsContent : \\\u0022\u002BsmsContent);\\n var headers = {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022\\n };\\n var opti = {\\n url: \u0027https://api.telerivet.com/v1/projects/PJ2743212d87e98295/messages/send\u0027,\\n headers: headers,\\n json: {\\n \\\u0022api_key\\\u0022:\\\u0022yZZA48CDp07DkzGgKyVyTDKX0KODJHOF\\\u0022,\\n \\\u0022content\\\u0022: \\\u0022Hello \\\u0022 \u002B operatorName \u002B\\\u0022, farmer \\\u0022 \u002B farmerName \u002B\\\u0022, with phone number: \\\u0022 \u002B smsFromNo \u002B\\\u0022 has requested \\\u0022 \u002B smsContent \u002B\\\u0022 services. Please reply yes or no to 2348176017561 to accept or decline this request within 6 hours\\\u0022, \\\u0022to_number\\\u0022: phoneNumber}\\n };\\n //logger.info(\\\u0022phonenumber1 : \\\u0022\u002BphoneNumber);\\n modules.request.post(opti, function (error, resp, body) {\\n //logger.info(\\\u0022#####\\\u0022);\\n //logger.info(\\\u0022@@@@@@\\\u0022);\\n response.complete();\\n });\\n }\\n}\u0022\r\n },\r\n \u0022forgotPassword\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tresponse.complete(500);\\n}\u0022\r\n },\r\n \u0022getActivity\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess\\n , logger = modules.logger\\n , body = request.body\\n , resultA = null, resultB = null, callback;\\n callback = function(){\\n if (resultA){\\n // Got both responses\\n response.body = {Events: resultA};\\n return response.complete(200);\\n } else {\\n // Still waiting for the other response.\\n return response.complete(500);\\n }\\n };\\n collectionAccess.collection(\u0027Events\u0027)\\n .find({name: body.thing}, function (err, docs)\\n {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n response.body.debug = err;\\n return response.complete(500);\\n } else {\\n resultA = docs;\\n callback();\\n }\\n });\\n // response.complete(200);\\n}\u0022\r\n },\r\n \u0022getTractors\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess\\n , logger = modules.logger\\n , body = request.body\\n , resultA = null, resultB = null, callback;\\n logger.info(modules.requestContext);\\n callback = function(){\\n if (resultA){\\n // Got both responses\\n response.body = {Events: resultA};\\n return response.complete(200);\\n } else {\\n // Still waiting for the other response.\\n return response.complete(500);\\n }\\n };\\n collectionAccess.collection(\u0027Events\u0027).find({name: body.thing}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n response.body.debug = err;\\n return response.complete(500);\\n } else {\\n resultA = docs;\\n callback();\\n }\\n });\\n}\u0022\r\n },\r\n \u0022responseFromOperator\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar req = modules.request;\\n\\tvar logger = modules.logger;\\n\\tvar farmerName;\\n\\tvar smsFromNum;\\n\\t var url;\\n modules.collectionAccess.collection(\u0027ResponseFromOperator\u0027).find({}, function (err, docs) {\\n var farmerLength = (docs.length)-1;\\n if(docs.length\u003E0){\\n var a = docs[farmerLength].SmsId;\\n url = \u0027http://54.218.5.173/request/data?key=gaiSq3O2p7frojorudre\u0026last_id=\u0027 \u002B a;\\n }else{\\n url = \u0027http://54.218.5.173/request/data?key=gaiSq3O2p7frojorudre\u0026last_id=146\u0027;\\n }\\n\\tvar requestOptions = {\\n \u0027url\u0027: url,\\n headers: {}\\n }\\n req.post(requestOptions, function(error, resp, body){\\n if (error){\\n response.body = {error: error.message};\\n response.complete(400);\\n return;\\n }\\n response.body = JSON.parse(body);\\n var temp=response[\\\u0022body\\\u0022].data;\\n if (temp[0] === undefined){\\n response.complete();\\n }\\n var smsId = temp[0].id;\\n var entity = modules.kinvey.entity();\\n entity.SmsId = temp[0].id;\\n modules.collectionAccess.collection(\\\u0022ResponseFromOperator\\\u0022).save(entity, function(err) {\\n logger.info(\\\u0022i m just saving sms id in db\\\u0022);\\n });\\n var operatorNo = temp[0].from_number;\\n var smsContent = temp[0].content;\\n var smsContentTrimed = smsContent.trim();\\n var splitStrng = smsContentTrimed.split(\\\u0022 \\\u0022);\\n if(splitStrng.length \u003C 6){\\n response.complete();\\n }\\n logger.info(\\\u0022split \\\u0022\u002BsplitStrng[0]);\\n logger.info(\\\u0022split 1 \\\u0022\u002BsplitStrng[1].trim());\\n if((smsContent.search(\u0027yes\u0027) \u003C= 5) || (smsContent.search(\u0027YES\u0027) \u003C= 5)){\\n modules.collectionAccess.collection(\\\u0022Farmer\\\u0022).find({\\\u0022MobileNumber\\\u0022: splitStrng[1].trim()}, function (err, docs) {\\n logger.info(\\\u0022farmer length=\\\u0022\u002Bdocs.length);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n doc.OperatorNumber = operatorNo;\\n farmerName=doc.FarmerName;\\n smsFromNum = doc.MobileNumber;\\n logger.info(\\\u0022farmerName\\\u0022\u002BfarmerName);\\n logger.info(\\\u0022smsFromNum\\\u0022\u002BsmsFromNum);\\n modules.collectionAccess.collection(\\\u0022Farmer\\\u0022).updateAsync ({_id: id}, doc, function(err) {\\n if (err !== null){\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else{\\n response.continue();\\n }\\n });\\n });\\n }\\n return response.complete();\\n });\\n } else if((smsContent.search(\u0027no\u0027) \u003C= 5) || (smsContent.search(\u0027NO\u0027) \u003C= 5)){\\n modules.collectionAccess.collection(\u0027TelerivetFarmerInfo\u0027).find({\\\u0022FromNumber\\\u0022: splitStrng[1]}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.error(err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n logger.info(\\\u0022doc\\\u0022 \u002B doc);\\n doc.ListOfDistances.splice(0,1);\\n modules.collectionAccess.collection(\u0027TelerivetFarmerInfo\u0027).updateAsync ({_id: id}, doc, function(err) {\\n });\\n var nextOperatorNo = doc.ListOfDistances[0].operatorPhoneNo;\\n var nextOperatorName = doc.ListOfDistances[0].opertorName;\\n smsFromNum = doc.FromNumber;\\n farmerName = doc.FarmerName;\\n var smsContent = doc.Content;\\n sendMessageToOperator(nextOperatorNo,farmerName,smsFromNum,nextOperatorName,smsContent);\\n });\\n }\\n });\\n } else {\\n return response.complete();\\n }\\n \\n });\\n });\\n function sendMessageToOperator(phoneNumber,farmerName,smsFromNo,operatorName,smsContent){\\n var headers = {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022\\n };\\n var opti = {\\n url: \u0027https://api.telerivet.com/v1/projects/PJ2743212d87e98295/messages/send\u0027,\\n headers: headers,\\n json: {\\n \\\u0022api_key\\\u0022:\\\u0022yZZA48CDp07DkzGgKyVyTDKX0KODJHOF\\\u0022,\\n \\\u0022content\\\u0022: \\\u0022Hello \\\u0022 \u002B operatorName \u002B\\\u0022, farmer \\\u0022 \u002B farmerName \u002B\\\u0022, with phone number: \\\u0022 \u002B smsFromNo \u002B\\\u0022 has requested \\\u0022 \u002B smsContent \u002B\\\u0022 services. Please reply yes or no to 2348176017561 to accept or decline this request within 6 hours\\\u0022, \\\u0022to_number\\\u0022: phoneNumber}\\n };\\n modules.request.post(opti, function (error, resp, body) {\\n\\n return response.complete();\\n });\\n }\\n}\u0022\r\n },\r\n \u0022ActionStatusMaintenanceLog\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n\\tvar logger = modules.logger;\\n\\tmodules.collectionAccess.collection(\u0027Maintenance\u0027).find({\\\u0022Status\\\u0022: 0}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n var date = new Date();\\n\\t var dateProper = date.toString();\\n\\t var currentDateTime = dateProper.slice(4,18);\\n\\t // logger.info(\\\u0022from newdate :\\\u0022 \u002B currentDateTime);\\n\\t var dateDb = doc.RepairDate;\\n\\t var properRepairDateTime = dateDb.slice(4,18);\\n\\t // logger.info(\\\u0022from DB :\\\u0022\u002BproperRepairDateTime);\\n\\t if (properRepairDateTime === currentDateTime){\\n\\t // logger.info(\\\u0022status will change\\\u0022);\\n\\t doc.Status = 1;\\n\\t modules.collectionAccess.collection(\u0027Maintenance\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n\\n\\t });\\n\\t }\\n });\\n }\\n \\n\\t});\\n\\tmodules.collectionAccess.collection(\u0027Maintenance\u0027).find({\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n\\t logger.info(\\\u0022******** \\\u0022 \u002B docs.length);\\n\\t docs.forEach(function(doc, a) {\\n\\t var aclId = doc._acl;\\n \\t var entity = modules.kinvey.entity();\\n var date = new Date();\\n entity.NotificationType = \\\u0022Action\\\u0022;\\n entity.CurrentDate = date;\\n entity.TractorId = doc.TractorId;\\n var tractId = entity.TractorId;\\n entity.Message = \\\u0022Have you checked and adjusted the \\\u0022\u002B doc.Description \u002B \\\u0022 on tractor \\\u0022 \u002B doc.TractorId \u002B \\\u0022? If you have done so click here to reset the counter\\\u0022;\\n entity.ReadStatus = 0;\\n modules.collectionAccess.collection(\u0027NotificationGeoFenceMaintenance\u0027).find({\\\u0022TractorId\\\u0022: tractId, \\\u0022NotificationType\\\u0022: \\\u0022Action\\\u0022}, function (err, docs) {\\n \\n if(docs.length \u003E 0){\\n docs.forEach(function(doc, a) {\\n if(doc.Message !== entity.Message){\\n // entity._acl.setGloballyReadable(false);\\n // entity._acl.addReader(aclId); \\n // entity._acl.addWriter(aclId);\\n entity._acl = aclId;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n });\\n }\\n });\\n \\n }else{\\n // entity._acl.setGloballyReadable(false);\\n // entity._acl.addReader(aclId); \\n // entity._acl.addWriter(aclId);\\n //logger.info(\\\u0022save\\\u0022 \u002B aclId);\\n entity._acl = aclId;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n return response.complete();\\n });\\n }\\n \\n });\\n\\t });\\n return response.complete();\\n });\\n\\t\\n}\u0022\r\n },\r\n \u0022AlertTwoTrackEventNotifications\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar currentUser = modules.requestContext.getAuthenticatedUserId();\\n\\tvar logger = modules.logger;\\n\\t\\n\\tvar token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n \\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n\\t\\n\\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\\u0022Status\\\u0022:1}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var tractorId = doc.TractorID;\\n var aclId = doc._acl;\\n var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackerId\\\u0022:tractorId,\\n \\\u0022startActivityId\\\u0022:0,\\n \\\u0022rowCount\\\u0022:10,\\n \\\u0022startUTCTime\\\u0022:\\\u0022\\\u0022,\\n \\\u0022endUTCTime\\\u0022:\\\u0022\\\u0022\\n };\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022,\\n // \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\n },\\n json:requestData,\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n logger.info(\\\u0022resp\\\u0022\u002Bresp);\\n if (error){\\n logger.info(\\\u0022error=\\\u0022\u002Berror);\\n response.body = {error: error.message};\\n return response.complete(400);\\n }else{\\n var respData=resp.body.data;\\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n for(var i = respData.length-1 ; i \u003E= 0; i-- ){\\n var data = respData[i];\\n if (data.eventCode === \\\u002290\\\u0022 || data.eventCode === \\\u002291\\\u0022){\\n var entity = modules.kinvey.entity();\\n var date = new Date();\\n entity.NotificationType = \\\u0022Alert\\\u0022;\\n entity.CurrentDate = date;\\n entity.TractorId = tractorId;\\n var tractId = entity.TractorId;\\n entity.Message = \\\u0022Battery is running low on tractor \\\u0022\u002B tractorId \u002B \\\u0022. Consider replacing the battery\\\u0022;\\n entity.ReadStatus = 0;\\n modules.collectionAccess.collection(\u0027NotificationGeoFenceMaintenance\u0027).find({\\\u0022TractorId\\\u0022: tractId, \\\u0022NotificationType\\\u0022: \\\u0022Alert\\\u0022}, function (err, docs) {\\n \\n if(docs.length \u003E 0){\\n docs.forEach(function(doc, a) {\\n \\n if(doc.Message !== entity.Message){\\n entity._acl = aclId;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n return response.complete();\\n });\\n }\\n });\\n }else{\\n entity._acl = aclId;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n return response.complete();\\n });\\n }\\n });\\n }\\n \\n }\\n }\\n }\\n \\n });\\n });\\n }\\n\\t});\\n}\u0022\r\n },\r\n \u0022AlertStatusMaintenanceLog\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n\\tvar logger = modules.logger;\\n\\tmodules.collectionAccess.collection(\u0027Maintenance\u0027).find({\\\u0022Status\\\u0022: 0}, function (err, docs) {\\n\\t logger.info(\\\u0022Maintenance row :: \\\u0022 \u002B docs.length);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n var date = new Date();\\n\\t var dateProper = date.toString();\\n\\t var currentDateTime = dateProper.slice(4,18);\\n\\t //logger.info(\\\u0022from newdate :\\\u0022 \u002B currentDateTime);\\n\\t var dateDb = doc.RepairDate;\\n\\t var properRepairDateTime = dateDb.slice(4,18);\\n\\t //logger.info(\\\u0022from DB :\\\u0022\u002BproperRepairDateTime);\\n\\t if (properRepairDateTime === currentDateTime){\\n\\t //logger.info(\\\u0022status will change\\\u0022);\\n\\t doc.Status = 1;\\n\\t modules.collectionAccess.collection(\u0027Maintenance\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n\\t //logger.info(\\\u0022updated\\\u0022);\\n \\n\\t });\\n\\t }\\n });\\n }\\n\\t});\\n\\tmodules.collectionAccess.collection(\u0027Maintenance\u0027).find({\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n\\t docs.forEach(function(doc, a) {\\n\\t var aclId = doc._acl;\\n //logger.info(\\\u0022aclId : \\\u0022 \u002B aclId);\\n \\t var entity = modules.kinvey.entity();\\n var date = new Date();\\n entity.NotificationType = \\\u0022Alert\\\u0022;\\n entity.CurrentDate = date;\\n entity.TractorId = doc.TractorId;\\n var tractId = entity.TractorId;\\n entity.Message = \\\u0022It is time to \\\u0022\u002B doc.Description \u002B \\\u0022 on tractor \\\u0022 \u002B doc.TractorId;\\n entity.ReadStatus = 0;\\n modules.collectionAccess.collection(\u0027NotificationGeoFenceMaintenance\u0027).find({\\\u0022TractorId\\\u0022: tractId, \\\u0022NotificationType\\\u0022: \\\u0022Alert\\\u0022}, function (err, docs) {\\n \\n logger.info(\\\u0022length in notif table : \\\u0022 \u002B docs.length);\\n if(docs.length \u003E 0){\\n docs.forEach(function(doc, a) {\\n if(doc.Message !== entity.Message){\\n // entity._acl.setGloballyReadable(false);\\n // entity._acl.addReader(aclId); \\n // entity._acl.addWriter(aclId);\\n \\n entity._acl = aclId;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n \\n });\\n \\n }\\n \\n });\\n \\n }else{\\n // entity._acl.setGloballyReadable(false);\\n // entity._acl.addReader(aclId); \\n // entity._acl.addWriter(aclId);\\n //logger.info(\\\u0022save2\\\u0022 \u002B aclId);\\n entity._acl = aclId;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n \\n });\\n }\\n });\\n\\t });\\n //logger.info(\\\u0022docs with status 1 \\\u0022\u002Bdocs.length);\\n return response.complete();\\n });\\n}\u0022\r\n },\r\n \u0022TractorCurrentLocation\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar logger = modules.logger,\\n\\ttoken = \\\u0022\\\u0022;\\n\\t\\n\\tmodules.collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n\\t.then(function(accessToken) {\\n\\t\\ttoken = accessToken;\\n\\t\\t\\n\\t},\\n\\tfunction(err) {\\n\\t\\t\\n\\t\\treturn response.error(err);\\n\\t});\\n\\t\\n\\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\\u0022Status\\\u0022: 1}, function (err, docs) {\\n\\t \\n\\t docs.forEach(function(doc, a){\\n\\t var tractorId = doc.TractorID;\\n\\t var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackers\\\u0022:[{\\\u0022trackerId\\\u0022: tractorId}]\\n };\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/status\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022,\\n // \\\u0022Accept\\\u0022 :\\\u0022application/vnd.twotrack.v1\u002Bjson\\\u0022\\n },\\n json:requestData,\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n logger.info(\\\u0022response=\\\u0022\u002Bresp);\\n if (error){\\n response.body = {error: error.message};\\n return response.complete(400);\\n }else{\\n var respData=resp.body.data;\\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n respData.forEach(function(data,a){\\n var entity = modules.kinvey.entity();\\n entity.TractorId = tractorId;\\n \\n entity.Latitude = data.lat;\\n \\n entity.Longitude = data.lon;\\n \\n modules.collectionAccess.collection(\u0027TractorCurrentLocation\u0027).find({\\\u0022TractorId\\\u0022: tractorId}, function (err, docs) {\\n \\n if(docs.length === 0){\\n \\n modules.collectionAccess.collection(\u0027TractorCurrentLocation\u0027).saveAsync(entity, function (err) {\\n logger.info(\\\u0022saved as new\\\u0022);\\n //response.continue();\\n });\\n }else{\\n docs.forEach(function(doc, a){\\n var id = doc._id;\\n doc.TractorId = tractorId;\\n doc.Latitude = data.lat;\\n doc.Longitude = data.lon;\\n modules.collectionAccess.collection(\u0027TractorCurrentLocation\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n \\n });\\n });\\n }\\n });\\n });\\n } else{\\n return response.complete();\\n }\\n }\\n });\\n\\t });\\n\\t return response.complete();\\n\\t});\\n}\u0022\r\n },\r\n \u0022MaintenanceCalculate\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar logger = modules.logger;\\n\\tvar timeAdd;\\n var lengthForCheck;\\n var TotalTimeTaken = 0;\\n var MaintananceObject;\\n var id;\\n\\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, docs) {\\n\\t //logger.info(\\\u0022docs.length : \\\u0022 \u002B docs.length);\\n\\t docs.forEach(function(doc, a) {\\n\\t //logger.info(\\\u0022tractId TractorDetail : \\\u0022 \u002B doc.TractorID);\\n\\t modules.collectionAccess.collection(\u0027Maintenance\u0027).find({\\\u0022TractorId\\\u0022: doc.TractorID}, function (err, docs) {\\n\\t //logger.info(\\\u0022docs.length Maintenance : \\\u0022 \u002B docs.length);\\n\\t id = 0;\\n\\t docs.forEach(function(doc, a) {\\n\\t MaintananceObject = doc;\\n\\t id = doc._id;\\n\\t var maintenanceDate = doc.Date;\\n\\t var maintTractId = doc.TractorId;\\n\\t //logger.info(\\\u0022maintTractId : \\\u0022 \u002B maintTractId);\\n\\t //logger.info(\\\u0022maintenanceDate : \\\u0022 \u002B new Date(maintenanceDate));\\n\\t checkTractorActivity(MaintananceObject,id, maintTractId,maintenanceDate);\\n\\t });\\n\\t });\\n\\t });\\n\\t response.complete();\\n\\t});\\n\\t\\n\\tfunction checkTractorActivity(MaintananceObject,id,tractorId,maintenanceDate){\\n\\t modules.collectionAccess.collection(\u0027TractorActivity\u0027).find({\\\u0022TractorId\\\u0022: tractorId}, function (err, docs) {\\n lengthForCheck = docs.length;\\n var z = 0;\\n timeAdd = 0;\\n docs.forEach(function(doc, a) {\\n z\u002B\u002B;\\n var tractorActivityDate = doc.StartTimeStamp;\\n if(new Date(tractorActivityDate) \u003E= new Date(maintenanceDate)){\\n timeAdd = timeAdd \u002B parseFloat(doc.TotalTimeServiced);\\n TotalTimeTaken = timeAdd; \\n }\\n //logger.info(\\\u0022lengthForCheck = \\\u0022\u002BlengthForCheck);\\n //logger.info(\\\u0022lengthForCheck z = \\\u0022\u002Bz);\\n if(lengthForCheck === z){\\n //logger.info(\\\u0022lengthForCheck equal =\\\u0022\u002BTotalTimeTaken \u002B \\\u0022 id :\\\u0022 \u002B id);\\n if(TotalTimeTaken !== 0){\\n updateMaintanence(TotalTimeTaken, MaintananceObject, id);\\n TotalTimeTaken = 0;\\n }\\n }\\n });\\n });\\n\\t}\\n\\t\\n\\tfunction updateMaintanence(timeTakenValue, doc, id){\\n\\t //logger.info(\\\u0022doc value = \\\u0022\u002Bdoc);\\n\\t //logger.info(\\\u0022timeTakenValue = \\\u0022\u002BtimeTakenValue);\\n\\t //logger.info(\\\u0022id id = \\\u0022\u002Bid);\\n\\t doc.TimeTaken = timeTakenValue;\\n \\tmodules.collectionAccess.collection(\\\u0022Maintenance\\\u0022).updateAsync({_id: id}, doc, function(err) {\\n \\t});\\n\\t}\\n\\t//response.complete(200);\\n}\u0022\r\n },\r\n \u0022RunMaintenanceRepairNotification\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var logger = modules.logger;\\n var currentUser = modules.requestContext.getAuthenticatedUserId();\\n modules.collectionAccess.collection(\u0027Maintenance\u0027).find({}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n var beforeDuration = doc.Duration - 4;\\n if(doc.TimeTaken \u003E beforeDuration){\\n var id = doc._id;\\n doc.Status = 1;\\n\\t modules.collectionAccess.collection(\u0027Maintenance\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n \\t logger.info(\\\u0022updated\\\u0022);\\n \\n \\t });\\n var entity = modules.kinvey.entity();\\n var date = new Date();\\n entity.NotificationType = \\\u0022Action\\\u0022;\\n entity.CurrentDate = date;\\n entity.TractorId = doc.TractorId;\\n entity.Message = \\\u0022Have you checked and adjusted the \\\u0022\u002B doc.Description \u002B \\\u0022 on tractor \\\u0022 \u002B doc.TractorId \u002B \\\u0022? If you have done so click here to reset the counter\\\u0022;\\n entity.ReadStatus = 0;\\n // entity._acl.setGloballyReadable(false);\\n // entity._acl.addReader(currentUser); \\n // entity._acl.addWriter(currentUser);\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFenceMaintenance\\\u0022).save(entity, function(err) {\\n response.complete();\\n });\\n }\\n });\\n }\\n });\\n\\t//response.complete();\\n}\u0022\r\n },\r\n \u0022TotalHectareForTractor\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar logger = modules.logger;\\n\\tvar totalHectaresCalculate = 0.0;\\n\\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, docs) {\\n\\t //logger.info(\\\u0022docs : \\\u0022 \u002B docs.length);\\n\\t if(docs.length \u003E 0){\\n\\t docs.forEach(function(doc, a){\\n\\t \\n\\t var tractorId = doc.TractorID;\\n\\t modules.collectionAccess.collection(\u0027HectaresTilledCalculator\u0027).find({\\\u0022TractorId\\\u0022: tractorId}, function (err, docs) {\\n\\t \\n\\t if(docs.length \u003E 0){\\n\\t var totalHectaresCalculate = docs[docs.length-1].HectaresTilledStopPT;\\n\\t \\n\\t modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\\u0022TractorID\\\u0022: tractorId}, function (err, docs) {\\n\\t \\n\\t if(docs.length \u003E 0){\\n\\t docs.forEach(function(doc, a){\\n\\t var id = doc._id;\\n\\t doc.TotalHectaresTilled = totalHectaresCalculate;\\n\\t \\n modules.collectionAccess.collection(\u0027TractorDetail\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n \\n });\\n\\t });\\n\\t }\\n\\t });\\n\\t } else if(docs.length === 0){\\n\\t totalHectaresCalculate = 0.0;\\n\\t modules.collectionAccess.collection(\u0027TractorActivity\u0027).find({\\\u0022TractorId\\\u0022: tractorId}, function (err, docs) {\\n \\n if(docs.length \u003E 0){\\n docs.forEach(function(doc, a){\\n //logger.info(\\\u0022doc :: \\\u0022\u002Bdoc[0]);\\n var hectServFloat = doc.HectaresServiced;\\n \\n totalHectaresCalculate = totalHectaresCalculate \u002B hectServFloat;\\n //logger.info(\\\u0022totalHectaresCalculate :: \\\u0022\u002BtotalHectaresCalculate);\\n });\\n var id = doc._id;\\n doc.TotalHectaresTilled = parseFloat(totalHectaresCalculate);\\n \\n modules.collectionAccess.collection(\u0027TractorDetail\u0027).updateAsync({\\\u0022_id\\\u0022: id}, doc, function (err, docs) {\\n \\n });\\n \\n //response.complete(200);\\n }\\n });\\n\\t }\\n\\t });\\n\\t });\\n\\t \\n\\t }\\n\\t});\\n\\tresponse.complete();\\n}\u0022\r\n },\r\n \u0022TractorActivity\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var logger = modules.logger;\\n var a;\\n\\tmodules.collectionAccess.collection(\u0027TractorActivity\u0027).find({}, function (err, docs) {\\n logger.info(\\\u0022rowLength = \\\u0022\u002Bdocs.length);\\n var rowLength = (docs.length)-1;\\n if(docs.length\u003E0){\\n a = docs[rowLength].Id;\\n logger.info(\\\u0022a\\\u0022 \u002B a);\\n url = \u0027http://54.218.5.173/tractors/hectares?key=7f8Q72tXhh\u0026last_id=\u0027 \u002B a;\\n }else{\\n url = \u0027http://54.218.5.173/tractors/hectares?key=7f8Q72tXhh\u0026last_id=0\u0027;\\n }\\n var requestOptions = {\\n \u0027url\u0027: url,\\n headers: {}\\n };\\n modules.request.get(requestOptions, function(error, resp, body){\\n logger.info(\\\u0022resp \\\u0022 \u002B resp);\\n logger.info(\\\u0022body \\\u0022 \u002B body);\\n if (error){\\n response.body = {error: error.message};\\n response.complete(400);\\n return;\\n }\\n response.body = JSON.parse(body);\\n var temps=response[\\\u0022body\\\u0022].data;\\n temps.forEach(function(temp, a) {\\n logger.info(\\\u0022temp \\\u0022 \u002B temp);\\n if (temp === undefined){\\n response.complete();\\n }\\n var id = temp.id;\\n var tractorId = temp.tractor_id;\\n logger.info(\\\u0022tractorId : \\\u0022 \u002B tractorId);\\n var hectaresServiced = temp.hectares_serviced;\\n var totalTimeServiced = temp.total_time_serviced;\\n var startTimeStamp = temp.start_time_stamp;\\n var endTimeStamp = temp.end_time_stamp;\\n var entity = modules.kinvey.entity();\\n entity.Id = id;\\n logger.info(\\\u0022is to be stored \\\u0022 \u002B entity.Id);\\n entity.TractorId = parseInt(tractorId);\\n entity.HectaresServiced = parseFloat(hectaresServiced);\\n entity.TotalTimeServiced = totalTimeServiced;\\n entity.StartTimeStamp = startTimeStamp;\\n entity.EndTimeStamp = endTimeStamp;\\n modules.collectionAccess.collection(\\\u0022TractorActivity\\\u0022).save(entity, function(err) {\\n response.complete();\\n });\\n \\n });\\n });\\n\\t});\\n\\tresponse.complete();\\n}\u0022\r\n },\r\n \u0022AutoRunMaintenance\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var logger = modules.logger;\\n modules.collectionAccess.collection(\u0027Maintenance\u0027).find({}, function (err, docs) {\\n logger.info(\\\u0022docs.length : \\\u0022 \u002B docs.length);\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n return response.complete(400);\\n } else {\\n docs.forEach(function(doc, a) {\\n var id = doc._id;\\n var dur = doc.Duration;\\n var startDate = doc.Date;\\n var theMoment = modules.moment(startDate);\\n theMoment.add(\u0027hours\u0027, doc.Duration);\\n var latestRepairDate = theMoment.toString();\\n doc.RepairDate = latestRepairDate;\\n //doc.Duration = 600;\\n modules.collectionAccess.collection(\\\u0022Maintenance\\\u0022).updateAsync({_id: id}, doc, function(err) {\\n return response.complete();\\n });\\n });\\n return response.complete();\\n }\\n });\\n}\u0022\r\n },\r\n \u0022demo-endpoint\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tresponse.body = {name : \\\u0022Edward Pie\\\u0022, email : \\\u0022hackstockpie@gmail.com\\\u0022};\\n\\tresponse.complete(200)\\n}\u0022\r\n },\r\n \u0022push-demo\u0022 : {\r\n \u0022code\u0022 : \u0022//Used to test push notifications.\\n//You can set \u0027type\u0027 in request body to receive\\n//different pushes\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n moment = modules.moment,\\n type = request.body.type;\\n\\n var username = \u0027admin@hellotractor.com\u0027;\\n\\n collectionAccess.collection(\u0027user\u0027).findOneAsync({username: username})\\n .then(function(user) {\\n if(!user) {\\n return response.error(\u0027user with username \u0027 \u002B username \u002B \u0027 was not found\u0027);\\n }\\n var notifications;\\n if(type == \u0027geofence\u0027) {\\n notifications = [\\n //{\\n // message: \u0027Geofence in\u0027,\\n // userId: user._id.toString(),\\n // type: \u0027alert\u0027,\\n // action: \u0027none\u0027,\\n // read: false,\\n // tractorId: 100007,\\n // operatorId: 200008\\n //},\\n {\\n message: \u0027Test Geofence notification\u0027,\\n userId: user._id.toString(),\\n type: \u0027action\u0027,\\n action: \u0027geofence_out\u0027,\\n read: false,\\n tractorId: 100007,\\n operatorId: 200008\\n }];\\n }else if(type ==\u0027maintenancePartial\u0027) {\\n notifications = [\\n {\\n message: \u0027Maintenance 80% Alert!\u0027,\\n userId: user._id.toString(),\\n type: \u0027action\u0027,\\n action: \u0027maintenance_partial\u0027,\\n read: false,\\n tractorId: 100007,\\n operatorId: 200008\\n }];\\n }else if (type == \u0027maintenance\u0027){\\n notifications = [\\n {\\n message: \u0027Maintenance full Alert!\u0027,\\n userId: user._id.toString(),\\n type: \u0027action\u0027,\\n action: \u0027maintenance\u0027,\\n read: false,\\n tractorId: 100007,\\n operatorId: 200008\\n }];\\n }else if(type == \u0027revenue\u0027){\\n notifications = [\\n {\\n message: \u0027Please set some revenue\u0027,\\n userId: user._id.toString(),\\n type: \u0027action\u0027,\\n action: \u0027revenue\u0027,\\n read: false,\\n tractorId: 100007,\\n operatorId: 200008\\n }];\\n } else {\\n notifications = [\\n {\\n message: \u0027Action-based test notification \u0027 \u002B moment().toISOString(),\\n userId: user._id.toString(),\\n type: \u0027action\u0027,\\n action: \u0027maintance\u0027,\\n read: false\\n },\\n {\\n message: \u0027Alert-based test notification \u0027 \u002B moment().toISOString(),\\n userId: user._id.toString(),\\n type: \u0027alert\u0027,\\n action: \u0027none\u0027,\\n read: false\\n }];\\n }\\n\\n logger.info(\u0027notifications \u0027 \u002B JSON.stringify(notifications));\\n c_sendNotifications(notifications, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n\\n return response.complete(200);\\n });\\n\\n }, function(err) {\\n return response.error(err);\\n });\\n //response.complete(200);\\n}\\n\u0022\r\n },\r\n \u0022SyncCollections\u0022 : {\r\n \u0022code\u0022 : \u0022//Used to sync Operators, Farmers, Tractors on client side in local db\\n//for better searching performance\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n lastSyncDate = request.body.lastSyncDate,\\n query = lastSyncDate ? {\u0027_kmd.lmt\u0027: {$gt: lastSyncDate}} : {};\\n\\n async.parallel({\\n operators: async.apply(fetchData, query, \u0027TractorOperator\u0027),\\n tractors: async.apply(fetchData, query, \u0027TractorDetail\u0027),\\n farmers: async.apply(fetchData, query, \u0027Farmer\u0027)\\n }, function(err, data) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = data;\\n return response.complete(200);\\n });\\n\\n\\n function fetchData(query, collectionName, cb) {\\n collectionAccess.collection(collectionName).find(query, {}, cb);\\n }\\n}\\n\u0022\r\n },\r\n \u0022MarkNotificationAsRead\u0022 : {\r\n \u0022code\u0022 : \u0022//Used to mark notification as read\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n var userId = request.body.userId;\\n if(userId){\\n logger.info(\\\u0022userId posted so about to delete all notifications for user \\\u0022\u002B userId);\\n \\n //then let\u0027s handle deleting for all\\n collectionAccess.collection(\u0027Notification\u0027)\\n .remove({\\n userId: userId\\n },function(err){\\n if(err){\\n logger.info(\\\u0022error: \\\u0022\u002B err);\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n }\\n else{\\n var notificationId = request.body.notificationId;\\n if(!notificationId) {\\n return response.error(\u0027notificationId parameter is required\u0027);\\n }\\n\\n collectionAccess.collection(\u0027Notification\u0027)\\n .update({_id: collectionAccess.objectID(notificationId)}, {\\n $set: {\\n read: true,\\n readTime: moment().toISOString()\\n }\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n }\\n\\n \\n //response.complete(200);\\n}\\n\u0022\r\n },\r\n \u0022FilterDailyTractorActivities\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment;\\n\\n var start = request.body.start,\\n end = request.body.end,\\n tractorId = request.body.TractorID;\\n\\n if(!start || !end || !tractorId) {\\n return response.error(\u0027start, end and TractorID parameters are required\u0027);\\n }\\n\\n start = moment(start).format(\u0027YYYY-MM-DD\u0027);\\n end = moment(end).format(\u0027YYYY-MM-DD\u0027);\\n\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).findAsync({\\n TractorID: tractorId,\\n day: {\\n $gte: start,\\n $lte: end\\n }\\n }, {sort: {day: 1}})\\n .then(function(tractorActivities) {\\n var startActivity = tractorActivities[0],\\n endActivity = tractorActivities[tractorActivities.length - 1],\\n totalSpeed = 0,\\n totalSpeedCounter = 0,\\n result = {\\n Hectares: 0,\\n Revenue: 0,\\n DistanceTravelled: 0,\\n TotalTimeActive: 0,\\n TotalTimeIdle: 0,\\n Route: [],\\n Country: endActivity.Country,\\n Town: endActivity.Town,\\n Street: endActivity.Street,\\n IgnitionStatus: endActivity.IgnitionStatus,\\n StartActiveData: startActivity.StartActiveData,\\n LastActiveData: endActivity.LastActiveData,\\n OperatorID: endActivity.OperatorID,\\n TractorID: tractorId,\\n StartTown: startActivity.StartTown,\\n StartCountry: startActivity.StartCountry,\\n StartStreet: startActivity.StartStreet\\n };\\n tractorActivities.forEach(function(tractorActivity) {\\n result.Hectares \u002B= tractorActivity.Hectares ? tractorActivity.Hectares : 0;\\n result.Revenue \u002B= tractorActivity.Revenue ? tractorActivity.Revenue : 0;\\n totalSpeed \u002B= tractorActivity.TotalSpeed ? tractorActivity.TotalSpeed : 0;\\n totalSpeedCounter \u002B= tractorActivity.TotalSpeedCounter ? tractorActivity.TotalSpeedCounter : 0;\\n result.DistanceTravelled \u002B= tractorActivity.DistanceTravelled ? tractorActivity.DistanceTravelled : 0;\\n result.TotalTimeActive \u002B= tractorActivity.TotalTimeActive ? tractorActivity.TotalTimeActive : 0;\\n result.TotalTimeIdle \u002B= tractorActivity.TotalTimeIdle ? tractorActivity.TotalTimeIdle : 0;\\n result.Route = result.Route.concat(tractorActivity.Route);\\n });\\n result.AverageSpeed = totalSpeedCounter \u003E 0 ? (totalSpeed / totalSpeedCounter).toFixed(1) : totalSpeed;\\n\\n collectionAccess.collection(\u0027TractorOperator\u0027).findOneAsync({OperatorID: result.OperatorID})\\n .then(function(operator) {\\n result.operator = operator;\\n response.body = result;\\n return response.complete(200);\\n }, function(err) {\\n return response.error(err);\\n });\\n }, function(err) {\\n return response.error(err);\\n });\\n}\\n\u0022\r\n },\r\n \u0022DisableGeofenceNotifications\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n moment = modules.moment,\\n async = modules.async;\\n\\n var tractorId = request.body.tractorId;\\n if(!tractorId) {\\n return response.error(\u0027tractorId parameter is required\u0027);\\n }\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: tractorId}, {\\n $set: {\\n NeedToSendGeofenceOutNotification: false\\n }\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = {};\\n return response.complete(200);\\n });\\n \\n}\u0022\r\n },\r\n \u0022ResetMaintenanceCounter\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment,\\n requestContext = modules.requestContext;\\n\\n var maintenanceId = request.body.maintenanceId;\\n if(!maintenanceId) {\\n return response.error(\u0027maintenanceId parameter is required\u0027);\\n }\\n\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).update({_id: collectionAccess.objectID(maintenanceId)},\\n {\\n $set: {\\n Counter: 0,\\n Status: 1\\n }\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = {};\\n return response.complete(200);\\n });\\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022CopyMaintenanceActivities\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment,\\n requestContext = modules.requestContext;\\n\\n var fromTractorId = request.body.fromTractorId,\\n toTractorId = request.body.toTractorId,\\n currentUserId = requestContext.getAuthenticatedUserId();\\n\\n async.parallel({\\n fromTractorMaintenance: async.apply(getMaintenanceByTractorId, fromTractorId),\\n toTractorMaintenance: async.apply(getMaintenanceByTractorId, toTractorId)\\n }, function(err, results) {\\n if(err) {\\n return response.error(err);\\n }\\n var fromTractorMaintenance = results.fromTractorMaintenance,\\n toTractorMaintenance = results.toTractorMaintenance;\\n\\n async.parallel({\\n copyPredefinedMaintenance: async.apply(copyPredefinedMaintenance, fromTractorMaintenance, toTractorMaintenance),\\n copyCustomMaintenance: async.apply(copyCustomMaintenance, fromTractorMaintenance, toTractorMaintenance)\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = {};\\n return response.complete();\\n });\\n });\\n\\n function copyPredefinedMaintenance(fromTractorMaintenance, toTractorMaintenance, cb) {\\n var fromTractorPredefinedMaintenance = fromTractorMaintenance.filter(function(maintenance) {\\n return maintenance.Type == 1;\\n }),\\n toTractorPredefinedMaintenance = toTractorMaintenance.filter(function(maintenance) {\\n return maintenance.Type == 1;\\n }),\\n newTractorPredefinedMaintenance;\\n\\n var fromPredefinedMaintenanceIds = fromTractorPredefinedMaintenance.map(function(maintenance) {\\n return maintenance.PredefinedMaintenanceActivityId;\\n }),\\n toPredefinedMaintenanceIds = toTractorPredefinedMaintenance.map(function(maintenance) {\\n return maintenance.PredefinedMaintenanceActivityId;\\n }),\\n newPredefinedMaintenanceIds = [];\\n\\n fromPredefinedMaintenanceIds.forEach(function(fromPredefinedMaintenanceId) {\\n if(toPredefinedMaintenanceIds.indexOf(fromPredefinedMaintenanceId) == -1) {\\n newPredefinedMaintenanceIds.push(fromPredefinedMaintenanceId);\\n }\\n });\\n\\n newTractorPredefinedMaintenance = fromTractorPredefinedMaintenance.filter(function(maintenence) {\\n return newPredefinedMaintenanceIds.indexOf(maintenence.PredefinedMaintenanceActivityId) != -1;\\n });\\n\\n logger.info(\u0027new maintenance predefined \u0027 \u002B JSON.stringify(newTractorPredefinedMaintenance));\\n\\n async.each(newTractorPredefinedMaintenance, handlePredefinedMaintenance, cb);\\n\\n function handlePredefinedMaintenance(predefinedMaintenance, cb) {\\n var maintenanceActivity = {\\n TractorID: toTractorId,\\n Duration: predefinedMaintenance.Duration,\\n Description: predefinedMaintenance.Description,\\n PredefinedMaintenanceActivityId: predefinedMaintenance.PredefinedMaintenanceActivityId,\\n CurrentUserId: currentUserId\\n };\\n c_createNewMaintenanceActivity(maintenanceActivity, cb);\\n }\\n\\n }\\n\\n function copyCustomMaintenance(fromTractorMaintenance, toTractorMaintenance, cb){\\n var fromTractorCustomMaintenance = fromTractorMaintenance.filter(function(maintenance) {\\n return maintenance.Type == 2;\\n }),\\n toTractorCustomMaintenance = toTractorMaintenance.filter(function(maintenance) {\\n return maintenance.Type == 2;\\n }),\\n newTractorCustomMaintenance;\\n\\n var fromCustomMaintenanceDescriptions = fromTractorCustomMaintenance.map(function(maintenance) {\\n return maintenance.Description;\\n }),\\n toCustomMaintenanceDescriptions = toTractorCustomMaintenance.map(function(maintenance) {\\n return maintenance.Description;\\n }),\\n newCustomMaintenanceDescriptions = [];\\n\\n fromCustomMaintenanceDescriptions.forEach(function(fromCustomMaintenanceDescription) {\\n if(toCustomMaintenanceDescriptions.indexOf(fromCustomMaintenanceDescription) == -1) {\\n newCustomMaintenanceDescriptions.push(fromCustomMaintenanceDescription);\\n }\\n });\\n\\n newTractorCustomMaintenance= fromTractorCustomMaintenance.filter(function(maintenence) {\\n return newCustomMaintenanceDescriptions.indexOf(maintenence.Description) != -1;\\n });\\n\\n logger.info(\u0027new maintenance custom \u0027 \u002B JSON.stringify(newTractorCustomMaintenance));\\n\\n async.each(newTractorCustomMaintenance, handleCustomMaintenance, cb);\\n\\n function handleCustomMaintenance(customMaintenance, cb) {\\n var maintenance = {\\n TractorID: toTractorId,\\n Duration: customMaintenance.Duration,\\n Description: customMaintenance.Description,\\n Type: 2,\\n CurrentUserId: currentUserId\\n };\\n c_createNewMaintenanceActivity(maintenance, cb);\\n }\\n }\\n\\n function getMaintenanceByTractorId(tractorId, cb) {\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).find({TractorID: tractorId}, {}, cb);\\n }\\n \\n}\\n\u0022\r\n },\r\n \u0022CreateMaintenanceActivities\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment,\\n requestContext = modules.requestContext;\\n\\n var newMaintenanceActivities = request.body.predefinedMaintenance,\\n tractorId = request.body.tractorId,\\n currentUserId = requestContext.getAuthenticatedUserId();\\n\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).findAsync({TractorID: tractorId, Type: 1})\\n .then(function(maintenanceActivities) {\\n var existedMaintenanceActivities = maintenanceActivities.map(function(maintenanceActivity) {\\n return maintenanceActivity.PredefinedMaintenanceActivityId;\\n });\\n\\n var maintenanceIdsForDelete = [],\\n maintenanceIdsForCreate = [];\\n\\n existedMaintenanceActivities.forEach(function(existedMaintenanceActivity) {\\n if(newMaintenanceActivities.indexOf(existedMaintenanceActivity) == -1) {\\n maintenanceIdsForDelete.push(existedMaintenanceActivity);\\n }\\n });\\n\\n newMaintenanceActivities.forEach(function(newMaintenanceActivity) {\\n if(existedMaintenanceActivities.indexOf(newMaintenanceActivity) == -1) {\\n maintenanceIdsForCreate.push(newMaintenanceActivity);\\n }\\n });\\n\\n logger.info(\u0027create \u0027 \u002B JSON.stringify(maintenanceIdsForCreate));\\n logger.info(\u0027delete \u0027 \u002B JSON.stringify(maintenanceIdsForDelete));\\n\\n async.parallel({\\n createActivities: async.apply(createActivities, maintenanceIdsForCreate),\\n deleteActivities: async.apply(deleteActivities, maintenanceIdsForDelete)\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = {};\\n return response.complete(200);\\n })\\n\\n }, function(err) {\\n return response.error(err);\\n });\\n\\n function createActivities(maintenanceIdsForCreate, cb) {\\n maintenanceIdsForCreate = maintenanceIdsForCreate.map(function(activity) {\\n return collectionAccess.objectID(activity);\\n });\\n\\n collectionAccess.collection(\u0027PredefinedMaintenanceActivity\u0027).findAsync({_id: {$in: maintenanceIdsForCreate}})\\n .then(function(predefinedMaintenanceActivities) {\\n async.each(predefinedMaintenanceActivities, handlePredefinedMaintenanceActivity, cb);\\n\\n function handlePredefinedMaintenanceActivity(predefinedMaintenanceActivity, cb) {\\n var maintenance = {\\n TractorID: tractorId,\\n Duration: predefinedMaintenanceActivity.Duration,\\n Description: predefinedMaintenanceActivity.Description,\\n PredefinedMaintenanceActivityId: predefinedMaintenanceActivity._id.toString(),\\n CurrentUserId: currentUserId\\n };\\n c_createNewMaintenanceActivity(maintenance, cb);\\n }\\n }, cb);\\n }\\n\\n function deleteActivities(maintenanceIdsForDelete, cb) {\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).remove({\\n PredefinedMaintenanceActivityId: {$in: maintenanceIdsForDelete},\\n TractorID: tractorId\\n }, cb);\\n }\\n \\n}\u0022\r\n },\r\n \u0022UpdateRevenue\u0022 : {\r\n \u0022code\u0022 : \u0022//Used for setting Default property of Revenue and update Currency of the TractorDetail\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n moment = modules.moment,\\n async = modules.async;\\n\\n var tractorId = request.body.tractorId,\\n defaultRevenueType = request.body.defaultRevenueType,\\n currency = request.body.currency;\\n\\n async.parallel([\\n changeDefaultRevenue,\\n changeTractorCurrency\\n ],function(err){\\n if(err){\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n\\n //find previous Default Revenue and set Default to false,\\n //after it set Default to true for Revenue with type that was sent as param\\n function changeDefaultRevenue(cb){\\n collectionAccess.collection(\u0027Revenue\u0027).findOne({\\n TractorId: tractorId,\\n Type: defaultRevenueType\\n }, {}, function(err, revenue) {\\n if(err){\\n return cb(err);\\n }\\n if(!revenue) {\\n return cb(\u0027Revenue with this type does not exist\u0027);\\n } else {\\n collectionAccess.collection(\u0027Revenue\u0027).update({TractorId: tractorId, Default: true}, {$set: {Default: false}},\\n function(err) {\\n if(err) {\\n return cb(err);\\n }\\n collectionAccess.collection(\u0027Revenue\u0027).update({TractorId: tractorId, Type: defaultRevenueType}, {$set: {Default: true}}, cb);\\n });\\n }\\n });\\n }\\n\\n function changeTractorCurrency(cb){\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: tractorId},{$set:{Currency: currency}},cb);\\n }\\n}\\n\u0022\r\n },\r\n \u0022GetHeatMapData\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment;\\n\\n collectionAccess.collection(\u0027Farmer\u0027).findAsync({})\\n .then(function(farmers) {\\n var results = {\\n points: []\\n };\\n\\n async.each(farmers, handleFarmer, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = results;\\n return response.complete(200);\\n });\\n\\n function handleFarmer(farmer, cb) {\\n if(farmer.LatLong) {\\n var points = farmer.LatLong.split(\u0027,\u0027);\\n results.points.push({\\n lat: points[0],\\n lng: points[1]\\n });\\n return cb();\\n } else {\\n return cb();\\n }\\n }\\n }, function(err) {\\n return response.error(err);\\n });\\n //response.complete(200);\\n}\\n\u0022\r\n },\r\n \u0022remove-read-notifications\u0022 : {\r\n \u0022code\u0022 : \u0022//Scheduled endpoint\\n//Interval - 5-minutes\\n//Start time - 2016/11/29 11:00\\n\\n//Remove notifications that were read more than 1 day ago\\n\\nfunction onRequest(request, response, modules){\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n collectionAccess.collection(\u0027Notification\u0027)\\n .remove({\\n read:true,\\n readTime:{\\n $lte: moment().subtract({hours:1}).toISOString()\\n }\\n },function(err){\\n if(err){\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n\\n //response.complete(200);\\n}\\n\u0022\r\n },\r\n \u0022process-hectares-daily-data\u0022 : {\r\n \u0022code\u0022 : \u0022//Scheduled endpoint\\n//Interval - daily\\n//Start time - 2016/11/29 00:10\\n\\n//Used to calculate Revenue Generated per data based on TractorActivity collection,\\n//sending daily sms updates\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment;\\n\\n //commented data was used for testing\\n //var start = moment.utc().startOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n //var end = moment.utc().endOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n //logger.info(\u0027start \u0027 \u002B start);\\n //logger.info(\u0027end \u0027 \u002B end);\\n //logger.info(\u0027moment \u0027 \u002B moment().format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027));\\n //var fromDate = \u00272016-10-30 10:30:00.0\u0027,\\n // tillDate = \u00272016-10-30 11:00:00.0\u0027;\\n //var fromDate = \u00272016-10-30 10:00:00.0\u0027,\\n // tillDate = \u00272016-10-30 10:30:00.0\u0027;\\n //var fromDate = \u00272016-10-31 00:00:00.0\u0027,\\n // tillDate = \u00272016-10-31 23:59:40.0\u0027;\\n //var day = \u00272016-10-31\u0027;\\n var fromDate = moment.utc().subtract({hours: 10}).startOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027),\\n tillDate = moment.utc().subtract({hours: 10}).endOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n var day = moment.utc().subtract({hours: 10}).format(\u0027YYYY-MM-DD\u0027);\\n\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).findAsync({})\\n .then(function(tractors) {\\n async.each(tractors, handleTractor, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n\\n function handleTractor(tractor, cb) {\\n if(tractor.TractorID.toString().length != 6) {\\n return cb();\\n } else {\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).findOneAsync({\\n day: day,\\n TractorID: tractor.TractorID\\n })\\n .then(function(dailyTractorActivity) {\\n if(!dailyTractorActivity) {\\n return cb();\\n } else {\\n getDailyData(tractor, function(err, results) {\\n if(err) {\\n return cb(err);\\n }\\n results[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n dailyTractorActivity.TotalTimeActive = dailyTractorActivity.TotalTimeActive \u003C 86400 ? dailyTractorActivity.TotalTimeActive : 86400;\\n results.TotalTimeIdle = 86400 - dailyTractorActivity.TotalTimeActive;\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).update({_id: collectionAccess.objectID(dailyTractorActivity._id)}, {$set: results}, function(err){\\n if(err){\\n return cb(err);\\n }\\n sendDailyUpdateSms(dailyTractorActivity._id, tractor, cb);\\n });\\n });\\n }\\n }, cb);\\n }\\n\\n //get fields based on hectares data\\n //calculate fields HectaresServiced, Revenue, RevenueType, RevenueCurrency\\n function getDailyData(tractor, cb) {\\n async.parallel({\\n tractorActivities: async.apply(getHectaresTractorActivities, tractor),\\n revenue: async.apply(getRevenue, tractor)\\n }, function(err, results) {\\n if(err) {\\n return cb(err);\\n }\\n var tractorActivities = results.tractorActivities,\\n revenue = results.revenue,\\n totalHectaresServiced = 0;\\n tractorActivities.forEach(function(tractorActivity) {\\n totalHectaresServiced \u002B= tractorActivity.HectaresServiced;\\n });\\n\\n var revenueType = revenue \u0026\u0026 revenue.Type ? revenue.Type: 101,\\n revenueGenerated = revenue \u0026\u0026 revenue.Rate ? totalHectaresServiced * revenue.Rate: null;\\n\\n return cb(null, {HectaresServiced: totalHectaresServiced, Revenue: revenueGenerated, RevenueType: revenueType, RevenueCurrency: tractor.Currency});\\n });\\n\\n function getHectaresTractorActivities(tractor, cb) {\\n collectionAccess.collection(\u0027TractorActivity\u0027).find({\\n TractorId: tractor.TractorID,\\n StartTimeStamp: {\\n $gt: fromDate\\n },\\n EndTimeStamp: {\\n $lt: tillDate\\n }\\n }, {}, cb);\\n }\\n\\n function getRevenue(tractor, cb) {\\n collectionAccess.collection(\u0027Revenue\u0027).findOne({\\n TractorId: tractor.TractorID,\\n Default:true\\n }, cb)\\n }\\n }\\n\\n function sendDailyUpdateSms(dailyActivityId, tractor, cb) {\\n\\n async.parallel({\\n dailyActivity: getDailyActivity,\\n tractorOwner: getTractorOwner,\\n operator:getOperator\\n },function(err, results){\\n var dailyActivity = results.dailyActivity,\\n tractorOwner = results.tractorOwner,\\n operator = results.operator;\\n\\n if(dailyActivity \u0026\u0026 tractorOwner \u0026\u0026 tractor.DailyTractorUpdates \u0026\u0026 tractorOwner.phone) {\\n var startTime = moment(dailyActivity.StartActiveData).format(\u0027h:mm A\u0027),\\n endTime = moment(dailyActivity.LastActiveData).format(\u0027h:mm A\u0027);\\n if(tractor.UtcOffset) {\\n if(tractor.UtcOffset \u003E 0) {\\n startTime = moment(dailyActivity.StartActiveData).add({minutes: tractor.UtcOffset}).format(\u0027h:mm A\u0027);\\n endTime = moment(dailyActivity.LastActiveData).add({minutes: tractor.UtcOffset}).format(\u0027h:mm A\u0027);\\n } else {\\n startTime = moment(dailyActivity.StartActiveData).subtract({minutes: tractor.UtcOffset}).format(\u0027h:mm A\u0027);\\n endTime = moment(dailyActivity.LastActiveData).subtract({minutes: tractor.UtcOffset}).format(\u0027h:mm A\u0027);\\n }\\n }\\n\\n var message = \u0027Hello \u0027 \u002B tractorOwner.first_name \u002B \u0027, your tractor \u0027 \u002B tractor.TractorName \u002B \u0027 did \u0027 \u002B dailyActivity.HectaresServiced \u002B\\n \u0027 hectares from \u0027 \u002B startTime \u002B \u0027 to \u0027 \u002B endTime \u002B\\n \u0027 on \u0027 \u002B moment(dailyActivity.day).format(\u0027MMMM Do\u0027) \u002B \u0027, and earned \u0027 \u002B dailyActivity.Revenue \u002B \u0027 \u0027 \u002B dailyActivity.RevenueCurrency \u002B\\n \u0027. Tractor was active for \u0027 \u002B moment(dailyActivity.LastActiveData).diff(moment(dailyActivity.StartActiveData), \u0027hours\u0027) \u002B \u0027 hours \u0027 \u002B\\n \u0027and was operated by \u0027 \u002B operator.OperatorName;\\n logger.info(\u0027message \u0027 \u002B message);\\n c_sendSms(message, tractorOwner.phone, tractor.Country, cb);\\n } else {\\n return cb();\\n }\\n });\\n\\n function getDailyActivity(cb) {\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).findOne({_id: collectionAccess.objectID(dailyActivityId)}, {}, cb);\\n }\\n\\n function getTractorOwner(cb) {\\n collectionAccess.collection(\u0027user\u0027).findOneAsync({_id: collectionAccess.objectID(tractor._acl.creator)})\\n .then(function(user) {\\n if(!user) {\\n return cb();\\n }\\n collectionAccess.collection(\u0027TractorOwner\u0027).findOne({username: user.email}, {}, cb);\\n }, cb);\\n }\\n\\n function getOperator(cb){\\n collectionAccess.collection(\u0027TractorOperator\u0027).findOne({OperatorID: tractor.OperatorID},cb);\\n }\\n }\\n }\\n },\\n function(error) {\\n if(error) {\\n response.error(error);\\n }\\n });\\n //response.complete(200);\\n}\\n\u0022\r\n },\r\n \u0022process-timezones\u0022 : {\r\n \u0022code\u0022 : \u0022//Scheduled endpoint\\n//Interval - daily\\n//Start time - 2016/11/29 00:30\\n\\n//Update UtcOffset field in TractorDetail collection on Kinvey\\n//using Google Maps timezone API\\n//Need to do it in case when tractor will change timezone\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n \\n collectionAccess.collection(\u0027TractorDetail\u0027).findAsync({})\\n .then(function(tractors) {\\n async.each(tractors, processTractorTimezone, function(err) {\\n if(err) {\\n return response.error(err);\\n } else {\\n return response.complete(200);\\n }\\n });\\n\\n function processTractorTimezone(tractor, cb) {\\n if(tractor.PositionLatitude \u0026\u0026 tractor.PositionLongitude) {\\n getUtcOffset(tractor.PositionLongitude, tractor.PositionLongitude, function(err, offset) {\\n logger.info(offset);\\n if(err) {\\n return cb(err);\\n }\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({_id: collectionAccess.objectID(tractor._id)},\\n {$set: {UtcOffset: offset}}, cb);\\n });\\n } else {\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({_id: collectionAccess.objectID(tractor._id)},\\n {$set: {UtcOffset: 0}}, cb);\\n }\\n\\n function getUtcOffset(latitude, longitude, cb) {\\n var GoogleTimezoneApiKey = \u0027AIzaSyCENGAB8-qFOFeHB0_T379DSdxJbaptIMY\u0027,\\n requestOptions = {\\n url: \u0027https://maps.googleapis.com/maps/api/timezone/json?location=\u0027 \u002B latitude \u002B \u0027,\u0027 \u002B longitude \u002B \u0027\u0026timestamp=1331161200\u0026key=\u0027 \u002B GoogleTimezoneApiKey,\\n method: \u0027GET\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027\\n },\\n json: true\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n var utcOffsetInSeconds = body \u0026\u0026 body.rawOffset ? body.rawOffset/60 : 0;\\n cb(null, utcOffsetInSeconds);\\n });\\n }\\n }\\n }, function(err) {\\n return response.error(err);\\n });\\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022process-tractor-activities\u0022 : {\r\n \u0022code\u0022 : \u0022// //Scheduled endpoint\\n// //Interval - 5-minutes\\n// //Start time - 2016/11/29 02:47\\n\\n// //Fetching tractor activities from 2-track server and store them in TractorActivityData collection on Kinvey,\\n// //updating coordinates and address of tractor(TractorDetail) based on last activity,\\n// //sending geofence notification(tractor left or returned back in the area),\\n// //sending maintenance alert-based push notifications based on EventCode field from 2-track\\n\\n// function onRequest(request, response, modules) {\\n\\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment;\\n \\n// var token = \\\u0022\\\u0022;\\n\\n// collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n// .then(function(accessToken) {\\n// token = accessToken;\\n \\n// },\\n// function(err) {\\n \\n// return response.error(err);\\n// });\\n \\n// //Get tractors and loop through the tractors\\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, tractors) {\\n\\n// tractors.forEach(function(tractor, a){\\n\\n// if(tractor.TractorID.toString().length === 6){\\n// //logger.info(tractor.TractorID);\\n// //Make request to 2track and store data in collection\\n\\n// var startActivityId = tractor.LastActivityId ? tractor.LastActivityId : 0,\\n// payloadOptions = {\\n// token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// trackerId: tractor.TractorID,\\n// startActivityId: startActivityId,\\n// rowCount: 10,\\n// startUTCTime: \\\u0022\\\u0022,\\n// endUTCTime: \\\u0022\\\u0022\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \u0027Accept\u0027: \u0027application/json\u0027,\\n// \u0027Version\u0027: \u0027v1\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n \\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// if(err) {\\n// return cb(err);\\n// } else {\\n// if(!body.data) {\\n// return cb();\\n// } else {\\n// logger.info(\\\u0022Successfully placed http request for tractor updates for: \\\u0022 \u002B tractor.TractorID);\\n// async.parallel({\\n// saveTractorActivities: async.apply(saveTractorActivities, body.data, tractor.TractorID),\\n// updateTractorDetail: async.apply(updateTractorDetail, body.data, tractor.TractorID, tractor)\\n// });\\n// }\\n// }\\n\\n// //response.complete(200);\\n// });\\n// }\\n// });\\n// //response.complete(200);\\n// });\\n\\n// function saveTractorActivities(activities, cb) {\\n// //logger.info(\\\u0022about to start saving tractor activities and data is: \\\u0022\u002B activities);\\n// var tractorID = cb;\\n// activities.forEach(function(data, a) {\\n\\n// //Save data in the collection\\n\\n// var entity = modules.kinvey.entity();\\n// entity.TractorID = tractorID;\\n// entity.ActivityID = data.activityId;\\n// entity.EventCode = data.eventCode;\\n// entity.EventName = data.eventName;\\n// entity.Speed = data.speed;\\n// entity.Odometer = data.odometer;\\n// entity.Idle = data.idle;\\n// entity.IsGPSValid = data.isGPSValid;\\n// entity.Lat = data.lat;\\n// entity.Lng = data.lon;\\n// entity.DirectionEW = data.directionEW;\\n// entity.DirectionNS = data.directionNS;\\n// entity.Altitude = data.altitude;\\n// entity.IgnitionStatus = data.ignitionStatus;\\n// entity.BatteryVoltage = data.batteryVoltage;\\n// entity.SatelliteNumber = data.satelliteNumber;\\n// entity.Street = data.street;\\n// entity.Town = data.town;\\n// entity.County = data.county;\\n// entity.Country = data.country;\\n// entity.ActivityUTCDate = data.activityUTCDate;\\n\\n\\n// collectionAccess.collection(\u0027TractorActivityData\u0027).save(entity, function(err) {\\n// //logger.info(\\\u0022saving activities\\\u0022);\\n// //return response.complete();\\n// });\\n// });\\n\\n// }\\n\\n\\n// //update coordinates and address of tractor, send geofence push notifications\\n// function updateTractorDetail(activities, cb, tractor) {\\n// //logger.info(\\\u0022Begining process for updating tractor and tractor data is:\\\u0022 \u002B tractor.TractorID);\\n\\n// if(activities.length === 0) {\\n// logger.info(\\\u0022No activities data for tractor \\\u0022 \u002B tractor.TractorID);\\n// return;\\n// //return cb();\\n// }\\n// var lastActivity = activities.reduce(function(prev, curr) {\\n// return prev.activityUTCDate \u003E curr.activityUTCDate ? prev : curr;\\n// });\\n\\n// var setObject = {\\n// LastActiveTime: lastActivity.activityUTCDate\\n// };\\n\\n// if(lastActivity.lat \u0026\u0026 lastActivity.lon) {\\n\\n// setObject.PositionLatitude = lastActivity.lat;\\n// setObject.PositionLongitude = lastActivity.lon;\\n// setObject.LastActivityId = lastActivity.activityId;\\n\\n// if(lastActivity.country){\\n// setObject.Street = lastActivity.street;\\n// setObject.Town = lastActivity.town;\\n// setObject.Country = lastActivity.country;\\n// }\\n// setObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n\\n// //logger.info(\u0027last activity utcdate for tractor is: \u0027 \u002B setObject.LastActiveTime);\\n// //logger.info(\u0027tractor \u0027 \u002B JSON.stringify(tractor));\\n\\n// //TODO: add - code of c_sendGeofenceNotificationIfNecessary is placed in common/geofence.js\\n// c_sendGeofenceNotificationIfNecessary(lastActivity, tractor, function(err, result){\\n// if(err){\\n// return cb(err);\\n// }\\n// if(result.wasSent) {\\n// setObject.LastGeofenceNotificationTime = !result.WasInArea \u0026\u0026 tractor.NeedToSendGeofenceOutNotification ? moment().toISOString() : \u0027\u0027;\\n// setObject.WasInArea = result.WasInArea;\\n// setObject.NeedToSendGeofenceOutNotification = true;\\n// }\\n// //logger.info(\u0027set Object \u0027 \u002B JSON.stringify(setObject));\\n// collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: cb}, {\\n// $set: setObject\\n// }, cb);\\n// });\\n\\n// collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: cb},\\n// {\\n// $set: setObject\\n\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n\\n// //return response.complete(200);\\n// });\\n\\n// }\\n// else{\\n// response.complete(400);\\n// //return cb();\\n// }\\n// }\\n\\n// //response.complete(200);\\n\\n// }\\n\u0022\r\n },\r\n \u0022process-maintenance\u0022 : {\r\n \u0022code\u0022 : \u0022//Scheduled endpoint\\n//Interval - 30-minutes\\n//Start time - 2016/11/29 00:01\\n\\n//Used to check Counter value and send maintenance push notifications\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment;\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).findAsync({})\\n .then(function(tractors) {\\n async.each(tractors, handleTractor, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n response.body = {};\\n return response.complete(200);\\n });\\n\\n function handleTractor(tractor, cb) {\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).findAsync({\\n TractorID: tractor.TractorID\\n })\\n .then(function(maintenanceActivities) {\\n async.each(maintenanceActivities, handleMaintenanceActivity, cb);\\n\\n //info about Status of MaintenanceActivity you can find in the doc file about Maintenance\\n function handleMaintenanceActivity(maintenanceActivity, cb) {\\n var durationInSeconds = maintenanceActivity.Duration * 60 * 60,\\n partialDurationInSeconds = durationInSeconds * 0.8,\\n counter = maintenanceActivity.Counter,\\n status = maintenanceActivity.Status;\\n if(counter \u003C partialDurationInSeconds) {\\n return cb();\\n } else {\\n if(counter \u003C durationInSeconds) {\\n var needToSendPartialPush = (status != 2) || (status == 2 \u0026\u0026 moment().diff(moment(maintenanceActivity.LastNotificationTime), \u0027days\u0027) \u003E= 1);\\n if(!needToSendPartialPush) {\\n return cb();\\n } else {\\n //code of c_sendMaintenanceNotification is placed in common/maintenance.js\\n c_sendMaintenanceNotification(maintenanceActivity, tractor.OperatorID, \u0027maintenancePartial\u0027, function(err) {\\n if(err) {\\n return cb(err);\\n }\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).update({_id: collectionAccess.objectID(maintenanceActivity._id)}, {\\n $set: {\\n Status: 2,\\n LastNotificationTime: moment().toISOString()\\n }\\n }, cb);\\n });\\n }\\n } else {\\n var needToSendPush = (status != 3) || (status == 3 \u0026\u0026 moment().diff(moment(maintenanceActivity.LastNotificationTime), \u0027days\u0027) \u003E= 1);\\n if(!needToSendPush) {\\n return cb();\\n } else {\\n //code of c_sendMaintenanceNotification is placed in common/maintenance.js\\n c_sendMaintenanceNotification(maintenanceActivity, tractor.OperatorID, \u0027maintenance\u0027, function(err) {\\n if(err) {\\n return cb(err);\\n }\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).update({_id: collectionAccess.objectID(maintenanceActivity._id)}, {\\n $set: {\\n Status: 3,\\n LastNotificationTime: moment().toISOString()\\n }\\n }, cb);\\n })\\n }\\n }\\n }\\n }\\n }, cb);\\n }\\n }, function(err) {\\n return response.error(err);\\n })\\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022process-real-time-daily-data\u0022 : {\r\n \u0022code\u0022 : \u0022//Scheduled endpoint\\n//Interval - 30-minutes\\n//Start time - 2016/11/28 23:58\\n\\n//Used to calculate DailyTractorActivity fields based on TractorActivityData collection,\\n//updating Counter field for MaintenanceActivity entities\\n\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment;\\n\\n //var start = moment.utc().startOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n //var end = moment.utc().endOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n //logger.info(\u0027start \u0027 \u002B start);\\n //logger.info(\u0027end \u0027 \u002B end);\\n //logger.info(\u0027moment \u0027 \u002B moment().format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027));\\n //var fromDate = \u00272016-10-30 10:30:00.0\u0027,\\n // tillDate = \u00272016-10-30 11:00:00.0\u0027;\\n //var fromDate = \u00272016-10-30 10:00:00.0\u0027,\\n // tillDate = \u00272016-10-30 10:30:00.0\u0027;\\n //var fromDate = \u00272016-11-06 00:00:00.0\u0027,\\n // tillDate = \u00272016-11-06 23:59:40.0\u0027;\\n //var day = \u00272016-11-06\u0027,\\n // dayStart = moment(\u00272016-11-06 00:00:00.0\u0027);\\n \\n //logger.info(\u0027start time \u0027 \u002B moment().utc().toISOString());\\n\\n var tillDate = moment.utc().format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027),\\n fromDate = moment(tillDate).subtract({minutes: 30}).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).findAsync({})\\n .then(function(tractors) {\\n async.each(tractors, handleTractor, function(err) {\\n //logger.info(\u0027end time \u0027 \u002B moment().utc().toISOString());\\n if(err) {\\n logger.info(\\\u0022There was error processing activities : \\\u0022\u002B err);\\n response.error(err);\\n }\\n return response.complete(200);\\n });\\n\\n function handleTractor(tractor, cb) {\\n if(tractor.TractorID.toString().length != 6) {\\n return cb();\\n } else {\\n var day;\\n if(tractor.UtcOffset) {\\n if(tractor.UtcOffset \u003E 0) {\\n day = moment.utc().add({minutes: tractor.UtcOffset}).format(\u0027YYYY-MM-DD\u0027);\\n } else {\\n day = moment.utc().subtract({minutes: tractor.UtcOffset}).format(\u0027YYYY-MM-DD\u0027);\\n }\\n } else {\\n day = moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n }\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).findAsync({\\n day: day,\\n TractorID: tractor.TractorID\\n })\\n .then(function(dailyTractorActivities) {\\n var dailyTractorActivity = dailyTractorActivities[0];\\n getRealTimeData(tractor, dailyTractorActivity, function(err, results) {\\n\\n if(err) {\\n return cb(err);\\n }\\n if(!results) {\\n return cb();\\n }\\n results.OperatorID = tractor.OperatorID;\\n results.TractorID = tractor.TractorID;\\n results.day = day;\\n\\n collectionAccess.collection(\u0027Revenue\u0027).findOneAsync({\\n TractorId: tractor.TractorID,\\n Default: true\\n })\\n .then(function(revenue) {\\n results.RevenueType = revenue \u0026\u0026 revenue.Type ? revenue.Type : 101;\\n results.RevenueCurrency = tractor \u0026\u0026 tractor.Currency ? tractor.Currency : null;\\n results.Revenue = revenue \u0026\u0026 revenue.Rate ? 0 : null;\\n\\n if(dailyTractorActivity) {\\n results[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).update({_id: collectionAccess.objectID(dailyTractorActivity._id)}, {$set: results}, cb);\\n } else {\\n var entity = modules.kinvey.entity(results);\\n entity.HectaresServiced = 0;\\n collectionAccess.collection(\u0027DailyTractorActivity\u0027).save(entity, cb);\\n }\\n }, cb);\\n });\\n }, cb);\\n }\\n\\n //get fields based on real time data\\n //calculate fields AverageSpeed, LastActiveData,Country, Town, Street, IgnitionStatus, DistanceTravelled,\\n //TotalTimeActive, TotalTimeIdle, Route\\n function getRealTimeData(tractor, dailyTractorActivity, cb) {\\n collectionAccess.collection(\u0027TractorActivityData\u0027).findAsync({\\n ActivityUTCDate: {$gt: fromDate, $lt: tillDate},\\n TractorID: tractor.TractorID\\n }, {\\n sort: {\\n ActivityUTCDate: 1\\n }\\n })\\n .then(function(tractorsActivities) {\\n if(tractorsActivities.length === 0) {\\n return cb();\\n } else {\\n async.parallel({\\n totalTime: async.apply(calculateTotalTimeActiveAndIdle, tractorsActivities, dailyTractorActivity),\\n averageData: async.apply(calculateAverageData, tractorsActivities, dailyTractorActivity),\\n route: async.apply(getRoute, tractorsActivities, dailyTractorActivity)\\n }, function(err, results) {\\n if(err) {\\n return cb(err);\\n }\\n results = c_mergeObjects([results.totalTime, results.averageData, results.route]);\\n return cb(null, results);\\n });\\n }\\n\\n function calculateTotalTimeActiveAndIdle(tractorsActivities, dailyTractorActivity, cb) {\\n var totalTimeActive = dailyTractorActivity \u0026\u0026 dailyTractorActivity.TotalTimeActive ? dailyTractorActivity.TotalTimeActive : 0,\\n totalTimeActiveStartValue = totalTimeActive,\\n lastActivity = tractorsActivities[tractorsActivities.length - 1],\\n totalTimeIdle,\\n tractorTillDate,\\n dayStart,\\n dayEnd;\\n\\n if(tractor.UtcOffset) {\\n if(tractor.UtcOffset \u003E 0) {\\n tractorTillDate = moment(tillDate).add({minutes: tractor.UtcOffset}).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n dayStart = moment.utc().add({minutes: tractor.UtcOffset}).startOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n dayEnd = moment.utc().add({minutes: tractor.UtcOffset}).endOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n } else {\\n tractorTillDate = moment(tillDate).subtract({minutes: tractor.UtcOffset}).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n dayStart = moment.utc().subtract({minutes: tractor.UtcOffset}).startOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n dayEnd = moment.utc().subtract({minutes: tractor.UtcOffset}).endOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n }\\n } else {\\n dayStart = moment.utc().startOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n dayEnd = moment.utc().endOf(\u0027day\u0027).format(\u0027YYYY-MM-DD HH:mm:ss.0\u0027);\\n tractorTillDate = tillDate;\\n }\\n\\n\\n var lastJourneyStartTime = dailyTractorActivity \u0026\u0026 dailyTractorActivity.LastJourneyStartTime ? dailyTractorActivity.LastJourneyStartTime : dayStart;\\n\\n tractorsActivities.forEach(function(tractorActivity) {\\n if(tractorActivity.EventName == \u0027Journey Start\u0027) {\\n lastJourneyStartTime = tractorActivity.ActivityUTCDate;\\n } else if(tractorActivity.EventName == \u0027Journey End\u0027) {\\n //logger.info(\u0027journey start \u0027 \u002B lastJourneyStartTime \u002B \u0027 journey end \u0027 \u002B tractorActivity.ActivityUTCDate);\\n var start = moment(lastJourneyStartTime),\\n end = moment(tractorActivity.ActivityUTCDate);\\n var diff = end.diff(start, \u0027seconds\u0027);\\n diff = diff \u003E 0 ? diff : 0;\\n totalTimeActive \u002B= diff;\\n }\\n });\\n\\n if(moment(dayEnd).diff(moment(tractorTillDate), \u0027minutes\u0027) \u003C 5 \u0026\u0026 lastActivity.EventName != \u0027Journey End\u0027) {\\n var diff = moment(dayEnd).diff(moment(lastJourneyStartTime), \u0027seconds\u0027);\\n diff = diff \u003E 0 ? diff : 0;\\n totalTimeActive \u002B= diff;\\n }\\n\\n totalTimeIdle = moment(tractorTillDate).diff(moment(dayStart), \u0027seconds\u0027) - totalTimeActive;\\n //logger.info(\u0027Total time active \u0027 \u002B totalTimeActive \u002B \u0027 \u0027 \u002B dayStart \u002B \u0027 \u0027 \u002B tractorTillDate);\\n\\n var totalTimeActiveDiff = totalTimeActive - totalTimeActiveStartValue;\\n\\n updateMaintenanceActivities(tractor, totalTimeActiveDiff, function(err){\\n return cb(err, {TotalTimeActive: totalTimeActive, TotalTimeIdle: totalTimeIdle, LastJourneyStartTime: lastJourneyStartTime});\\n });\\n\\n function updateMaintenanceActivities(tractor, totalTimeActiveDiff, cb) {\\n if(totalTimeActiveDiff \u003C= 0) {\\n return cb();\\n } else {\\n //get Maintenance activities of specific tractor with types predefined and custom\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).findAsync({\\n TractorID: tractor.TractorID,\\n Type: {$in: [1, 2]}\\n })\\n .then(function(maintenanceActivities) {\\n async.each(maintenanceActivities, handleMaintenanceActivity,cb);\\n\\n function handleMaintenanceActivity(maintenanceActivity, cb) {\\n totalTimeActiveDiff = totalTimeActiveDiff \u0026\u0026 totalTimeActiveDiff \u003E 0 ? totalTimeActiveDiff : 0;\\n var counter = maintenanceActivity.Counter \u002B totalTimeActiveDiff;\\n counter = counter ? counter : 0;\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).update({_id: collectionAccess.objectID(maintenanceActivity._id)}, {$set: {Counter: counter}}, cb);\\n }\\n }, cb);\\n }\\n\\n }\\n }\\n\\n function calculateAverageData(tractorsActivities, dailyTractorActivity, cb) {\\n var startActivity = tractorsActivities[0],\\n endActivity = tractorsActivities[tractorsActivities.length - 1],\\n totalSpeed = dailyTractorActivity \u0026\u0026 dailyTractorActivity.TotalSpeed ? dailyTractorActivity.TotalSpeed : 0,\\n totalSpeedCounter = dailyTractorActivity \u0026\u0026 dailyTractorActivity.TotalSpeedCounter ? dailyTractorActivity.TotalSpeedCounter : 0;\\n\\n tractorsActivities.forEach(function(tractorActivity) {\\n totalSpeed \u002B= tractorActivity.Speed;\\n totalSpeedCounter = tractorActivity.Speed \u0026\u0026 tractorActivity.Speed \u003E 0 ? totalSpeedCounter \u002B 1 : totalSpeedCounter;\\n });\\n\\n var averageSpeed = totalSpeedCounter \u003E 0 ? (totalSpeed / totalSpeedCounter).toFixed(1) : totalSpeed;\\n\\n var distanceTravelled = dailyTractorActivity \u0026\u0026 dailyTractorActivity.DistanceTravelled ? dailyTractorActivity.DistanceTravelled : 0,\\n additionalDistance = dailyTractorActivity \u0026\u0026 dailyTractorActivity.LastOdometerValue ? endActivity.Odometer - dailyTractorActivity.LastOdometerValue :\\n endActivity.Odometer - startActivity.Odometer;\\n distanceTravelled \u002B= additionalDistance;\\n\\n var startCountry = dailyTractorActivity \u0026\u0026 dailyTractorActivity.StartCountry ? dailyTractorActivity.StartCountry : startActivity.Country;\\n startCountry = startCountry ? startCountry : \\\u0022\\\u0022;\\n\\n var startTown = dailyTractorActivity \u0026\u0026 dailyTractorActivity.StartTown ? dailyTractorActivity.StartTown : startActivity.Town;\\n startTown = startTown ? startTown : \\\u0022\\\u0022;\\n\\n var startStreet = dailyTractorActivity \u0026\u0026 dailyTractorActivity.StartStreet ? dailyTractorActivity.StartStreet : startActivity.Street;\\n startStreet = startStreet ? startStreet : \\\u0022\\\u0022;\\n\\n var startActiveData = dailyTractorActivity \u0026\u0026 dailyTractorActivity.StartActiveData ? dailyTractorActivity.StartActiveData : startActivity.ActivityUTCDate;\\n\\n return cb(null, {\\n TotalSpeed: totalSpeed,\\n TotalSpeedCounter: totalSpeedCounter,\\n AverageSpeed: averageSpeed.toString(),\\n StartActiveData: startActiveData,\\n LastActiveData: endActivity.ActivityUTCDate,\\n Country: endActivity.Country,\\n Town: endActivity.Town,\\n Street: endActivity.Street,\\n IgnitionStatus: endActivity.IgnitionStatus,\\n DistanceTravelled: distanceTravelled,\\n LastOdometerValue: endActivity.Odometer,\\n StartCountry: startCountry,\\n StartTown: startTown,\\n StartStreet: startStreet\\n });\\n }\\n\\n function getRoute(tractorActivities, dailyTractorActivity, cb) {\\n var route = tractorActivities.map(function(tractorActivity) {\\n return {\\n Lat: tractorActivity.Lat,\\n Lng: tractorActivity.Lng,\\n Time: moment.utc().format(\u0027HH:mm:ss.0\u0027)\\n };\\n });\\n route = dailyTractorActivity \u0026\u0026 dailyTractorActivity.Route ? dailyTractorActivity.Route.concat(route) : route;\\n\\n return cb(null, {\\n Route: route\\n });\\n }\\n }, cb);\\n }\\n }\\n },\\n function(error) {\\n response.error(error);\\n });\\n}\\n\u0022\r\n },\r\n \u0022UpdateDailyTractorActivityHectaresAndRevenue\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var logger = modules.logger;\\n var message= \\\u0022Hello, World!\\\u0022;\\n logger.info(message);\\n response.complete(200);\\n}\u0022\r\n },\r\n \u0022test-tractor-activities\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n \\n var startActivityId = \u0027664074\u0027;\\n \\n var token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n \\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n \\n //fetch data for static tractor and store in the collection\\n var payloadOptions = {\\n token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n trackerId: 100009,\\n startActivityId: startActivityId,\\n rowCount: 30,\\n startUTCTime: \\\u0022\\\u0022,\\n endUTCTime: \\\u0022\\\u0022\\n };\\n \\n var requestOptions = {\\n url: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n \\n modules.request.get(requestOptions, function(error, resp, body){\\n logger.info(\\\u0022resp \\\u0022 \u002B resp);\\n logger.info(\\\u0022body \\\u0022 \u002B body);\\n // if (error){\\n // response.body = {error: error.message};\\n // return response.complete(400);\\n // }\\n \\n //var r = JSON.parse(body);\\n var data=body;\\n //return response.complete(data);\\n \\n data.forEach(function(temp, a) {\\n \\n logger.info(\\\u0022temp \\\u0022 \u002B temp);\\n\\n var entity = modules.kinvey.entity();\\n entity.TractorID = temp.tracker_id;\\n entity.ActivityID = temp.activity_id;\\n modules.collectionAccess.collection(\\\u0022TestTractorActivities\\\u0022).save(entity, function(err) {\\n return response.complete();\\n });\\n \\n });\\n });\\n}\u0022\r\n },\r\n \u0022b_UpdateTractorOwners\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n //loop through the tractor owners and post the data of each row to the aws backend.\\n modules.collectionAccess.collection(\u0027TractorOwner\u0027).find({}, function (err, tractorOwners) {\\n \\n tractorOwners.forEach(function(tractorOwner, a){\\n \\n //logger.info(\\\u0022syncing to server for: \\\u0022\u002B tractorOwner.first_name);\\n \\n var payloadOptions = {\\n op: \u0027create\u0027,\\n data: tractorOwner\\n },\\n requestOptions = {\\n url: \u0027https://cloud.hellotractor.com/kinvey/api/users\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n if(err) {\\n //return cb(err);\\n } else {\\n \\n //logger.info(\\\u0022Successfully placed http request\\\u0022);\\n //response.complete(200);\\n }\\n\\n \\n });\\n\\n });\\n });\\n \\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022unassign-tractor-on-delete\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules){\\n \\n \\tvar logger = modules.logger;\\n \\tvar collectionAccess = modules.collectionAccess;\\n \\t//logger.info(\\\u0022body1: \\\u0022\u002B JSON.stringify(request));\\n \\tvar operatorId = request.body.operatorId;\\n \\tlogger.info(\\\u0022ID posted: \\\u0022\u002B operatorId);\\n\\n \\tif(!operatorId){\\n \\t\\tlogger.error(\\\u0022Invalid operator ID posted: \\\u0022\u002B operatorId);\\n \\t\\treturn response.complete(400);\\n \\t}\\n\\n \\tlogger.info(\\\u0022operator ID posted: \\\u0022\u002B operatorId);\\n\\n \\tcollectionAccess.collection(\u0027TractorDetail\u0027).update({OperatorID: operatorId}, {\\n\\t $set: {\\n\\t OperatorID: 0,\\n\\t Status: 0\\n\\t }\\n\\t }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n return response.complete(200);\\n });\\n \\n //return response.complete(200);\\n}\u0022\r\n },\r\n \u0022test\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n// var logger = modules.logger;\\n// logger.info(\\\u0022Hey test\\\u0022);\\n// response.complete();\\n \\n \\n// var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n// fuelHistoryCol.find({}, function(fuelErr, fuelHistoryList){\\n// var count = fuelHistoryList.length;\\n// modules.logger.info(\\\u0022Count: \\\u0022\u002Bcount);\\n// fuelHistoryList.forEach(function(fuelHistory){\\n// var operator = {OperatorID: fuelHistory.OperatorID? Number(fuelHistory.OperatorID): null};\\n// fuelHistoryCol.update({\\\u0022_id\\\u0022:fuelHistory._id}, {$set: operator}, {upsert: false}, function(updateErr, updatedRes){\\n// count--;\\n// if (count \u003C= 0){\\n// response.complete();\\n// }\\n// })\\n// });\\n// }); \\n \\n \\n// logger.info(\\\u0022Hello external API\\\u0022);\\n // response.complete();\\n// var options = {limit:1};\\n// var count = 0;\\n// var hectares = 0;\\n \\n\\n// modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022).distinct(\\\u0022bookingID\\\u0022, {\\\u0022bookingStatus\\\u0022:0}, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// modules.logger.info(docs.length);\\n// for (var i = 0; i \u003C docs.length; i\u002B\u002B){\\n// if (docs[i].hectaresServiced \u0026\u0026 docs[i]._acl.creator != \\\u00225af40bd426860c399aba621b\\\u0022 \u0026\u0026 docs[i]._acl.creator != \\\u0022598ad681bac152c62bcfd9ef\\\u0022){\\n// hectares \u002B= Number(docs[i].hectaresServiced);\\n// }\\n// count \u002B= 1;\\n// if (count \u003E= docs.length){\\n// modules.logger.info(\\\u0022Hectares: \\\u0022\u002Bhectares\u002B\\\u0022, Count: \\\u0022\u002Bcount);\\n// response.complete();\\n// } \\n// }\\n// }\\n// }); \\n \\n \\n// var country = \\\u0022Kenya\\\u0022;\\n// var date = \\\u00222019-02-15\\\u0022;\\n// var query = {\\\u0022LastActiveTime\\\u0022: {$gte: date}, \\\u0022Country\\\u0022:country};\\n// var query = {\\\u0022LastActiveTime\\\u0022: {$gte: date}};\\n// var sort = {sort: {\\\u0022Country\\\u0022:1}};\\n \\n \\n \\n// modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022).find(query, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// modules.logger.info(country\u002B\\\u0022 tractors: \\\u0022\u002Bdocs.length);\\n// response.complete();\\n// }\\n// }); \\n \\n \\n \\n //Total number of engine hours\\n// modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022).find(query, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// var engineHours = 0;\\n// var distance = 0;\\n// for (var i = 0; i \u003C docs.length; i\u002B\u002B){\\n// engineHours \u002B= Number(docs[i].EngineHours);\\n// distance \u002B= Number(docs[i].TotalDistanceCovered);\\n// }\\n// modules.logger.info(\\\u0022Total Tractors: \\\u0022\u002Bdocs.length);\\n// modules.logger.info(\\\u0022Total Eninge Hours: \\\u0022\u002BengineHours);\\n// modules.logger.info(\\\u0022Total Distance Covered: \\\u0022\u002Bdistance);\\n// response.complete();\\n// }\\n// }); \\n \\n \\n \\n// modules.collectionAccess.collection(\u0027ServiceBookings\u0027).update({orgID:\\\u0022165\\\u0022}, {$set: {\\\u0022BookingArchived\\\u0022:\\\u0022\\\u0022}}, {upsert: false, multi: true}, function(err){\\n// logger.info(\\\u0022Done\\\u0022);\\n// });\\n \\n \\n \\n \\n// Compute total number of bookings after a certain date\\n// var bookingStatusQuery = {\\\u0022bookingStatus\\\u0022:0};\\n// var createdAtQuery = {\\\u0022createdAt\\\u0022: {$gte:\\\u00222019-02-22\\\u0022, $lt:\\\u00222019-02-23\\\u0022}};\\n// modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022).distinct(\\\u0022bookingID\\\u0022, createdAtQuery, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// modules.logger.info(\\\u0022Bookings Number: \\\u0022\u002Bdocs.length);\\n// modules.logger.info(docs);\\n \\n// for (var i = 0; i \u003C docs.length; i\u002B\u002B){\\n// if (docs[i].hectaresServiced \u0026\u0026 docs[i]._acl.creator != \\\u00225af40bd426860c399aba621b\\\u0022 \u0026\u0026 docs[i]._acl.creator != \\\u0022598ad681bac152c62bcfd9ef\\\u0022){\\n// hectares \u002B= Number(docs[i].hectaresServiced);\\n// }\\n// count \u002B= 1;\\n// if (count \u003E= docs.length){\\n// modules.logger.info(\\\u0022Hectares: \\\u0022\u002Bhectares\u002B\\\u0022, Count: \\\u0022\u002Bcount);\\n// response.complete();\\n// } \\n// }\\n// }\\n// }); \\n \\n \\n// }\\n\\n\\n// function onRequest(request, response, modules) {\\n// var logger = modules.logger;\\n// logger.info(\\\u0022Hey test\\\u0022);\\n// response.complete();\\n \\n// var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n// fuelHistoryCol.find({}, function(fuelErr, fuelHistoryList){\\n// var count = fuelHistoryList.length;\\n// modules.logger.info(\\\u0022Count: \\\u0022\u002Bcount);\\n// fuelHistoryList.forEach(function(fuelHistory){\\n// var operator = {OperatorID: fuelHistory.OperatorID? Number(fuelHistory.OperatorID): null};\\n// fuelHistoryCol.update({\\\u0022_id\\\u0022:fuelHistory._id}, {$set: operator}, {upsert: false}, function(updateErr, updatedRes){\\n// count--;\\n// if (count \u003C= 0){\\n// response.complete();\\n// }\\n// })\\n// });\\n// });\\n \\n// var usersCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n// var orgId = \\\u0022165\\\u0022;\\n// var tractorOwners = usersCol.find({orgIDs: orgId, user_type: {$ne: 2}}, function(userErr, users){\\n// modules.logger.info(users.length);\\n// response.complete();\\n// });\\n \\n// var trackerIdsCol = modules.collectionAccess.collection(\\\u0022TrackerIds\\\u0022);\\n// var count = 0;\\n \\n// var baseId = 910000\\n// for(var i = 0; i \u003C 100; i\u002B\u002B){\\n// var trackerId = {tracker_id: (baseId\u002Bi)}\\n// var trackerIdA = modules.kinvey.entity(trackerId);\\n// trackerIdsCol.save(trackerIdA, function(saveIdErr, savedTrackerId){\\n// if (i \u003E= 99){\\n// response.complete();\\n// }\\n// });\\n// }\\n \\n \\n \\n// logger.info(\\\u0022Hello external API\\\u0022);\\n // response.complete();\\n// var options = {limit:1};\\n// var count = 0;\\n// var hectares = 0;\\n \\n\\n// modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022).distinct(\\\u0022bookingID\\\u0022, {\\\u0022bookingStatus\\\u0022:0}, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// modules.logger.info(docs.length);\\n// for (var i = 0; i \u003C docs.length; i\u002B\u002B){\\n// if (docs[i].hectaresServiced \u0026\u0026 docs[i]._acl.creator != \\\u00225af40bd426860c399aba621b\\\u0022 \u0026\u0026 docs[i]._acl.creator != \\\u0022598ad681bac152c62bcfd9ef\\\u0022){\\n// hectares \u002B= Number(docs[i].hectaresServiced);\\n// }\\n// count \u002B= 1;\\n// if (count \u003E= docs.length){\\n// modules.logger.info(\\\u0022Hectares: \\\u0022\u002Bhectares\u002B\\\u0022, Count: \\\u0022\u002Bcount);\\n// response.complete();\\n// } \\n// }\\n// }\\n// }); \\n \\n \\n// var country = \\\u0022Kenya\\\u0022;\\n// var date = \\\u00222019-02-15\\\u0022;\\n// var query = {\\\u0022LastActiveTime\\\u0022: {$gte: date}, \\\u0022Country\\\u0022:country};\\n// var query = {\\\u0022LastActiveTime\\\u0022: {$gte: date}};\\n// var sort = {sort: {\\\u0022Country\\\u0022:1}};\\n \\n \\n \\n// modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022).find(query, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// modules.logger.info(country\u002B\\\u0022 tractors: \\\u0022\u002Bdocs.length);\\n// response.complete();\\n// }\\n// }); \\n \\n \\n \\n //Total number of engine hours\\n// modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022).find(query, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// var engineHours = 0;\\n// var distance = 0;\\n// for (var i = 0; i \u003C docs.length; i\u002B\u002B){\\n// engineHours \u002B= Number(docs[i].EngineHours);\\n// distance \u002B= Number(docs[i].TotalDistanceCovered);\\n// }\\n// modules.logger.info(\\\u0022Total Tractors: \\\u0022\u002Bdocs.length);\\n// modules.logger.info(\\\u0022Total Eninge Hours: \\\u0022\u002BengineHours);\\n// modules.logger.info(\\\u0022Total Distance Covered: \\\u0022\u002Bdistance);\\n// response.complete();\\n// }\\n// }); \\n \\n \\n \\n// modules.collectionAccess.collection(\u0027ServiceBookings\u0027).update({orgID:\\\u0022165\\\u0022}, {$set: {\\\u0022BookingArchived\\\u0022:\\\u0022\\\u0022}}, {upsert: false, multi: true}, function(err){\\n// logger.info(\\\u0022Done\\\u0022);\\n// });\\n \\n \\n \\n \\n// Compute total number of bookings after a certain date\\n// var bookingStatusQuery = {\\\u0022bookingStatus\\\u0022:0};\\n// var createdAtQuery = {\\\u0022createdAt\\\u0022: {$gte:\\\u00222019-02-22\\\u0022, $lt:\\\u00222019-02-23\\\u0022}};\\n// modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022).distinct(\\\u0022bookingID\\\u0022, createdAtQuery, function (err, docs) {\\n// if (err) {\\n// logger.error(\u0027Query failed: \u0027\u002B err);\\n// response.error();\\n// } else {\\n// modules.logger.info(\\\u0022Bookings Number: \\\u0022\u002Bdocs.length);\\n// modules.logger.info(docs);\\n \\n// for (var i = 0; i \u003C docs.length; i\u002B\u002B){\\n// if (docs[i].hectaresServiced \u0026\u0026 docs[i]._acl.creator != \\\u00225af40bd426860c399aba621b\\\u0022 \u0026\u0026 docs[i]._acl.creator != \\\u0022598ad681bac152c62bcfd9ef\\\u0022){\\n// hectares \u002B= Number(docs[i].hectaresServiced);\\n// }\\n// count \u002B= 1;\\n// if (count \u003E= docs.length){\\n// modules.logger.info(\\\u0022Hectares: \\\u0022\u002Bhectares\u002B\\\u0022, Count: \\\u0022\u002Bcount);\\n// response.complete();\\n// } \\n// }\\n// }\\n// }); \\n \\n \\n \\n// Generates dummy tractors for test@hellotractor.com\\n// var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n// var tractorIds = [100119];\\n// var testAcl = {\\\u0022creator\\\u0022:\\\u00225a8831637ab19c0d42abd747\\\u0022};\\n// var log = modules.logger;\\n// var countTractors = 0;\\n// var countTractorsSaved = 0;\\n// fuelHistoryCol.find({TractorID: {$in: tractorIds}}, function(fuelHistoryErr, fuelHistoryList){\\n// countTractors = fuelHistoryList.length;\\n// log.info(\\\u0022Count tractors: \\\u0022\u002BcountTractors);\\n// fuelHistoryList.forEach(function(fuelHistory){\\n// delete fuelHistory._id;\\n// fuelHistory._acl = testAcl;\\n// fuelHistory.TractorID = 500196\\n// fuelHistoryCol.save(fuelHistory, function(fuelHistorySaveErr, fuelHistorySaved){\\n// countTractors--;\\n// countTractorsSaved\u002B\u002B;\\n// finish();\\n// });\\n// });\\n// });\\n\\n// var finish = function(){\\n// if (countTractors \u003C= 0){\\n// log.info(\\\u0022Done: \\\u0022\u002BcountTractorsSaved);\\n// response.complete();\\n// }\\n// }\\n \\n \\n// var serviceBookingsCol = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n// var log = modules.logger;\\n// var newOrgID = \\\u0022300\\\u0022;\\n// var lastThreeMonths = modules.moment.utc().subtract(3, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022);\\n// log.info(\\\u0022Last three months: \\\u0022\u002BlastThreeMonths);\\n// var countBookings = 0;\\n// var bookingsSaved = 0;\\n// var query = {\\n// $and: [\\n// {orgID: \\\u0022305\\\u0022},\\n// {bookingStatus: 0},\\n// {createdAt: {$gt: lastThreeMonths}}\\n// ]\\n// };\\n\\n// serviceBookingsCol.find(query, {limit: 20, sort: {clusterID: -1}}, function(serviceBookingErr, serviceBookingList){\\n// if (serviceBookingList \u0026\u0026 serviceBookingList.length \u003E 0){\\n// log.info(\\\u0022Service bookings length: \\\u0022\u002BserviceBookingList.length);\\n// countBookings = serviceBookingList.length;\\n// serviceBookingList.forEach(function(booking){\\n// booking.orgID = newOrgID;\\n// booking.farmerName = booking.farmerName\u002B\\\u0022 Test\\\u0022;\\n// serviceBookingsCol.save(booking, function(serviceBookingSavedErr, serviceBookingSaved){\\n// countBookings--;\\n// bookingsSaved\u002B\u002B;\\n// finish();\\n// });\\n// });\\n// } else {\\n// log.info(\\\u0022Finished: No booking found\\\u0022);\\n// finish();\\n// }\\n// });\\n\\n// var finish = function(){\\n// if (countBookings \u003C= 0){\\n// log.info(\\\u0022Done: \\\u0022\u002BbookingsSaved);\\n// response.complete();\\n// }\\n// }\\n \\n \\n \\n //Generates dummy fuel history for select tractors\\n// var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n// var tractorIds = [500196];\\n// var testAcl = {\\\u0022creator\\\u0022:\\\u002259c8d84f8c59558e131dd898\\\u0022};\\n// var log = modules.logger;\\n// var countTractors = 0;\\n// var countTractorsSaved = 0;\\n// fuelHistoryCol.find({TractorID: {$in: tractorIds}}, function(fuelHistoryErr, fuelHistoryList){\\n// countTractors = fuelHistoryList.length;\\n// log.info(\\\u0022Count tractors: \\\u0022\u002BcountTractors);\\n// fuelHistoryList.forEach(function(fuelHistory){\\n// fuelHistory._acl = testAcl;\\n// fuelHistory.TractorID = 100119\\n// fuelHistoryCol.save(fuelHistory, function(fuelHistorySaveErr, fuelHistorySaved){\\n// countTractors--;\\n// countTractorsSaved\u002B\u002B;\\n// finish();\\n// });\\n// });\\n// });\\n\\n// var finish = function(){\\n// if (countTractors \u003C= 0){\\n// log.info(\\\u0022Done: \\\u0022\u002BcountTractorsSaved);\\n// response.complete();\\n// }\\n// }\\n \\n// var usersCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n// usersCol.find({\\\u0022orgIDs\\\u0022: \\\u00226018\\\u0022}, function(necasAgentsErr, necasUsers){\\n// // var usersNameAndPhone = necasUsers.map(function(user){\\n// // return user.first_name \u002B\\\u0022, \\\u0022\u002Buser.username;\\n// // })\\n \\n// modules.logger.info(JSON.stringify(necasUsers));\\n// modules.logger.info(\\\u0022Here\\\u0022);\\n// response.complete();\\n// });\\n \\n var notificationCol = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n notificationCol.find({_kmd: {$exists: false}}, function(notificationErr, notificationList){\\n modules.logger.info(\\\u0022Count empty kmd notificaitions: \\\u0022\u002BnotificationList.length);\\n \\n notificationCol.update({_kmd: {$exists: false}}, {$set: {_kmd: {\\\u0022lmt\\\u0022:\\\u00222020-04-22T09:06:04.938Z\\\u0022, \\\u0022ect\\\u0022:\\\u00222020-04-22T09:06:04.938Z\\\u0022}}}, {multi: true, upsert: false}, function(updateNotificationErr, updateNotificationList){\\n modules.logger.info(\\\u0022Notifications updated successfully\\\u0022);\\n \\tresponse.complete(); \\n })\\n });\\n \\n}\u0022\r\n },\r\n \u0022process-update-tractors-status\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// /*\\n// This endpoint gets the status of each tractor from 2track and updates it with the latest reading from the monitoring device\\n// */\\n \\n// var collectionAccess = modules.collectionAccess,\\n// async = modules.async,\\n// logger = modules.logger,\\n// moment = modules.moment,\\n// token = \\\u0022\\\u0022;\\n \\n// //Get 2track access token\\n// collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n// .then(function(accessToken) {\\n// token = accessToken;\\n \\n// },\\n// function(err) {\\n \\n// return response.error(err);\\n// });\\n \\n// //Get tractors and loop through the tractors\\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, tractors) {\\n\\n// tractors.forEach(function(tractor, a){\\n\\n// if(tractor.TractorID.toString().length === 6){\\n// //logger.info(\\\u0022tractor ServiceProvider: \\\u0022\u002B tractor.ServiceProvider);\\n \\n// //Make a request to 2track for the tractor\u0027s status and update the tractor detail collection\\n// var payloadOptions = {\\n// \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// \\\u0022trackers\\\u0022:[{\\\u0022trackerId\\\u0022: tractor.TractorID}]\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/status\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \u0027Accept\u0027: \u0027application/json\u0027,\\n// \u0027Version\u0027: \u0027v1\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n \\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// //logger.info(\\\u0022Data returned is:\\\u0022 \u002B JSON.stringify(body.data));\\n// if(err) {\\n// return cb(err);\\n// } else {\\n// if(!body.data) {\\n// logger.info(\\\u0022There was no data in body for tractor: \\\u0022\u002B tractor.TractorID);\\n// return;\\n// } else {\\n// //logger.info(\\\u0022Successfully placed http request for tractor status for: \\\u0022 \u002B tractor.TractorID);\\n// async.parallel({\\n// updateTractorDetail: async.apply(updateTractorDetail, resp.body.data, tractor.TractorID, tractor)\\n// });\\n// }\\n// }\\n\\n// //response.complete(200);\\n// });\\n// }\\n \\n// }); //end forEach tractors\\n// });//end collectionAccess get all tractors\\n \\n \\n// function updateTractorDetail(data, cb, tractor) {\\n\\n// if(data.length === 0) {\\n// logger.info(\\\u0022No status for tractor \\\u0022 \u002B tractor.TractorID);\\n// return;\\n// }\\n \\n// /*\\n// [{\\\u0022trackerId\\\u0022:\\\u0022100021\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:2603967,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:0.0711,\\\u0022lon\\\u0022:37.1458,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:322,\\\u0022altitude\\\u0022:200893,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022Laikipia County\\\u0022,\\\u0022country\\\u0022:\\\u0022Kenya\\\u0022,\\\u0022lastReportUTCDate\\\u0022:\\\u00222017-05-10 05:15:13.0\\\u0022}]\\n// */\\n \\n// var setObject = {\\n// LastActiveTime: data[0].lastReportUTCDate,\\n// PositionLatitude: data[0].lat,\\n// PositionLongitude: data[0].lon,\\n// Speed: data[0].speed,\\n// UpdatedAt: modules.moment().format(\u0027YYYY-MM-DD HH:mm:ss\u0027)\\n// };\\n \\n// // Street: data[0].street,\\n// // Town: data[0].town,\\n// // Country: data[0].country,\\n \\n// setObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n// //logger.info(\\\u0022LastActiveTime is: \\\u0022\u002B setObject.LastActiveTime);\\n \\n// var tractorId = tractor.TractorID;\\n \\n// collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: tractor.TractorID},\\n// {\\n// $set: setObject\\n\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n\\n// //return response.complete(200);\\n// }); \\n \\n// logger.info(\\\u0022Finished updating tractor: \\\u0022 \u002B tractor.TractorID);\\n// }\\n \\n// }\\n\u0022\r\n },\r\n \u0022fetch-store-tractor-activities-three\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules){\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n \\n var token = \\\u0022\\\u0022;\\n\\t\\n\\tcollectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n\\t.then(function(accessToken) {\\n\\t\\ttoken = accessToken;\\n\\t\\t\\n\\t},\\n\\tfunction(err) {\\n\\t\\t\\n\\t\\treturn response.error(err);\\n\\t});\\n\\n modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\n TractorID: {\\n $gte: 100099,\\n $lte: 100150\\n }\\n }, function (err, tractors) {\\n\\n tractors.forEach(function(tractor, a){\\n if(tractor.TractorID.toString().length === 6){\\n\\n //Make request to 2track and store data in collection\\n var startActivityId = tractor.LastActivityId ? tractor.LastActivityId : 0,\\n payloadOptions = {\\n token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n trackerId: tractor.TractorID,\\n startActivityId: startActivityId,\\n rowCount: 100,\\n startUTCTime: \\\u0022\\\u0022,\\n endUTCTime: \\\u0022\\\u0022\\n },\\n requestOptions = {\\n url: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n if(err) {\\n logger.error(\\\u0022Error placing request to 2track\\\u0022);\\n return;\\n } else {\\n if(!body.data) {\\n logger.error(\\\u0022Error: No data available for tractor\\\u0022);\\n return;\\n } else {\\n //logger.info(\\\u0022Successfully placed http request for tractor updates for: \\\u0022 \u002B tractor.TractorID);\\n async.parallel({\\n saveTractorActivities: async.apply(saveTractorActivities, body.data, tractor.TractorID),\\n updateTractorDetail: async.apply(updateTractorDetail, body.data, tractor.TractorID, tractor)\\n });\\n }\\n }\\n //response.complete(200);\\n });\\n }\\n });\\n });\\n \\n function saveTractorActivities(tractorActivities, tractorId){\\n //logger.info(\\\u0022in function saveTractorActivities and tractor activityId is: \\\u0022\u002Btractor.activityId);\\n \\n tractorActivities.forEach(function(tractor, a) {\\n \\n var entity = modules.kinvey.entity();\\n entity.TractorID = tractorId;\\n entity.ActivityID = tractor.activityId;\\n entity.EventCode = tractor.eventCode;\\n entity.EventName = tractor.eventName;\\n entity.Speed = tractor.speed;\\n entity.Odometer = tractor.odometer;\\n entity.Idle = tractor.idle;\\n entity.IsGPSValid = tractor.isGPSValid;\\n entity.Lat = tractor.lat;\\n entity.Lng = tractor.lon;\\n entity.DirectionEW = tractor.directionEW;\\n entity.DirectionNS = tractor.directionNS;\\n entity.Altitude = tractor.altitude;\\n entity.IgnitionStatus = tractor.ignitionStatus;\\n entity.BatteryVoltage = tractor.batteryVoltage;\\n entity.SatelliteNumber = tractor.satelliteNumber;\\n entity.Street = tractor.street;\\n entity.Town = tractor.town;\\n entity.County = tractor.county;\\n entity.Country = tractor.country;\\n entity.ActivityUTCDate = tractor.activityUTCDate;\\n\\n collectionAccess.collection(\u0027TractorActivityData\u0027).save(entity, function(err) {\\n logger.info(\\\u0022Successfully saved data for tractor with ID: \\\u0022 \u002B tractorId);\\n });\\n });\\n \\n //response.complete();\\n }\\n \\n //update coordinates and address of tractor, send geofence push notifications\\n function updateTractorDetail(activities, cb, tractor) {\\n //logger.info(\\\u0022Begining process for updating tractor and tractor data is:\\\u0022 \u002B tractor.TractorID);\\n\\n if(activities.length === 0) {\\n logger.info(\\\u0022No activities data for tractor \\\u0022 \u002B tractor.TractorID);\\n return;\\n //return cb();\\n }\\n var lastActivity = activities.reduce(function(prev, curr) {\\n return prev.activityUTCDate \u003E curr.activityUTCDate ? prev : curr;\\n });\\n\\n var setObject = {\\n LastActiveTime: lastActivity.activityUTCDate\\n };\\n\\n if(lastActivity.lat \u0026\u0026 lastActivity.lon) {\\n\\n setObject.PositionLatitude = lastActivity.lat;\\n setObject.PositionLongitude = lastActivity.lon;\\n setObject.LastActivityId = lastActivity.activityId;\\n\\n// if(lastActivity.country){\\n// setObject.Street = lastActivity.street;\\n// setObject.Town = lastActivity.town;\\n// setObject.Country = lastActivity.country;\\n// }\\n setObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: cb},\\n {\\n $set: setObject\\n\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n\\n //return response.complete(200);\\n });\\n\\n }\\n else{\\n response.complete(400);\\n //return cb();\\n }\\n }\\n //response.complete();\\n}\u0022\r\n },\r\n \u0022fetch-store-tractor-activities-two\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment;\\n \\n// var token = \\\u0022\\\u0022;\\n\\n// collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n// .then(function(accessToken) {\\n// token = accessToken;\\n \\n// },\\n// function(err) {\\n \\n// return response.error(err);\\n// }); \\n \\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\n// TractorID: {\\n// $gte: 100049,\\n// $lte: 100100\\n// }\\n// }, function (err, tractors) {\\n\\n// tractors.forEach(function(tractor, a){\\n// if(tractor.TractorID.toString().length === 6){\\n\\n// //Make request to 2track and store data in collection\\n// var startActivityId = tractor.LastActivityId ? tractor.LastActivityId : 0,\\n// payloadOptions = {\\n// token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// trackerId: tractor.TractorID,\\n// startActivityId: startActivityId,\\n// rowCount: 100,\\n// startUTCTime: \\\u0022\\\u0022,\\n// endUTCTime: \\\u0022\\\u0022\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \u0027Accept\u0027: \u0027application/json\u0027,\\n// \u0027Version\u0027: \u0027v1\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n\\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// if(err) {\\n// logger.error(\\\u0022Error placing request to 2track\\\u0022);\\n// return;\\n// } else {\\n// if(!body.data) {\\n// logger.error(\\\u0022Error: No data available for tractor\\\u0022);\\n// return;\\n// } else {\\n// //logger.info(\\\u0022Successfully placed http request for tractor updates for: \\\u0022 \u002B tractor.TractorID);\\n// async.parallel({\\n// saveTractorActivities: async.apply(saveTractorActivities, body.data, tractor.TractorID),\\n// updateTractorDetail: async.apply(updateTractorDetail, body.data, tractor.TractorID, tractor)\\n// });\\n// }\\n// }\\n// //response.complete(200);\\n// });\\n// }\\n// });\\n// });\\n \\n// function saveTractorActivities(tractorActivities, tractorId){\\n// //logger.info(\\\u0022in function saveTractorActivities and tractor activityId is: \\\u0022\u002Btractor.activityId);\\n \\n// tractorActivities.forEach(function(tractor, a) {\\n \\n// var entity = modules.kinvey.entity();\\n// entity.TractorID = tractorId;\\n// entity.ActivityID = tractor.activityId;\\n// entity.EventCode = tractor.eventCode;\\n// entity.EventName = tractor.eventName;\\n// entity.Speed = tractor.speed;\\n// entity.Odometer = tractor.odometer;\\n// entity.Idle = tractor.idle;\\n// entity.IsGPSValid = tractor.isGPSValid;\\n// entity.Lat = tractor.lat;\\n// entity.Lng = tractor.lon;\\n// entity.DirectionEW = tractor.directionEW;\\n// entity.DirectionNS = tractor.directionNS;\\n// entity.Altitude = tractor.altitude;\\n// entity.IgnitionStatus = tractor.ignitionStatus;\\n// entity.BatteryVoltage = tractor.batteryVoltage;\\n// entity.SatelliteNumber = tractor.satelliteNumber;\\n// entity.Street = tractor.street;\\n// entity.Town = tractor.town;\\n// entity.County = tractor.county;\\n// entity.Country = tractor.country;\\n// entity.ActivityUTCDate = tractor.activityUTCDate;\\n\\n// collectionAccess.collection(\u0027TractorActivityData\u0027).save(entity, function(err) {\\n// logger.info(\\\u0022Successfully saved data for tractor with ID: \\\u0022 \u002B tractorId);\\n// });\\n// });\\n \\n// //response.complete();\\n// }\\n \\n// //update coordinates and address of tractor, send geofence push notifications\\n// function updateTractorDetail(activities, cb, tractor) {\\n// //logger.info(\\\u0022Begining process for updating tractor and tractor data is:\\\u0022 \u002B tractor.TractorID);\\n\\n// if(activities.length === 0) {\\n// logger.info(\\\u0022No activities data for tractor \\\u0022 \u002B tractor.TractorID);\\n// return;\\n// //return cb();\\n// }\\n// var lastActivity = activities.reduce(function(prev, curr) {\\n// return prev.activityUTCDate \u003E curr.activityUTCDate ? prev : curr;\\n// });\\n\\n// var setObject = {\\n// LastActiveTime: lastActivity.activityUTCDate\\n// };\\n\\n// if(lastActivity.lat \u0026\u0026 lastActivity.lon) {\\n\\n// setObject.PositionLatitude = lastActivity.lat;\\n// setObject.PositionLongitude = lastActivity.lon;\\n// setObject.LastActivityId = lastActivity.activityId;\\n\\n// // if(lastActivity.country){\\n// // setObject.Street = lastActivity.street;\\n// // setObject.Town = lastActivity.town;\\n// // setObject.Country = lastActivity.country;\\n// // }\\n// setObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n\\n// collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: cb},\\n// {\\n// $set: setObject\\n\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n\\n// //return response.complete(200);\\n// });\\n\\n// }\\n// else{\\n// response.complete(400);\\n// //return cb();\\n// }\\n// }\\n// //response.complete();\\n// }\u0022\r\n },\r\n \u0022temp-daily-tractor-activity-clone\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment,\\n// requestContext = modules.requestContext;\\n \\n// modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027).find({day: \\\u00222017-06-21\\\u0022}, function (err, activities) {\\n\\n// activities.forEach(function(activity, a){\\n// //copy the data over to the new collection\\n// async.parallel({\\n// saveClone: async.apply(saveClone, activity)\\n// });\\n// }\\n \\n// );\\n// \\t});\\n \\n// function saveClone(activity){\\n \\n// var entity = modules.kinvey.entity();\\n// entity.TotalTimeActive = activity.TotalTimeActive;\\n// entity.TotalTimeIdle = activity.TotalTimeIdle; \\n// entity.DistanceTravelled = activity.DistanceTravelled;\\n// entity.TractorID = activity.TractorID;\\n// entity.day = activity.day;\\n// entity.PositionLongitude = activity.PositionLongitude;\\n// entity.LastActivityId = activity.LastActivityId;\\n// entity.LastJourneyStartTime = activity.LastJourneyStartTime;\\n// entity.TotalSpeed = activity.TotalSpeed;\\n// entity.TotalSpeedCounter = activity.TotalSpeedCounter;\\n// entity.AverageSpeed = activity.AverageSpeed;\\n// entity.StartActiveData = activity.StartActiveData;\\n// entity.LastActiveData = activity.LastActiveData;\\n// entity.LastOdometerValue = activity.LastOdometerValue;\\n// entity.BatteryVoltage = activity.batteryVoltage;\\n// entity.SatelliteNumber = activity.satelliteNumber;\\n// entity.Revenue = activity.Revenue;\\n// entity.Town = activity.Town;\\n// entity.Street = activity.Street;\\n// entity.Country = activity.Country;\\n// entity.StartCountry = activity.StartCountry;\\n// entity.StartTown = activity.StartTown;\\n// entity.StartStreet = activity.StartStreet;\\n// entity.Route = activity.Route;\\n// entity.OperatorID = activity.OperatorID;\\n// entity.RevenueType = activity.RevenueType;\\n// entity.RevenueCurrency = activity.RevenueCurrency;\\n// entity.HectaresServiced = activity.HectaresServiced;\\n// entity.IgnitionStatus = activity.IgnitionStatus;\\n// entity.Hectares = activity.Hectares;\\n// entity._kmd = activity._kmd;\\n// entity._id = activity._id;\\n\\n// collectionAccess.collection(\u0027DailyTractorActivityClone\u0027).save(entity, function(err) {\\n// logger.info(\\\u0022Successfully saved data for activity on day: \\\u0022\u002B activity.day);\\n// });\\n \\n// }\\n \\n// //response.complete();\\n \\n// }\u0022\r\n },\r\n \u0022fetch-update-daily-tractor-activity\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment;\\n \\n// var token = \\\u0022\\\u0022;\\n \\t\\n// \\tcollectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n// \\t.then(function(accessToken) {\\n// \\t\\ttoken = accessToken;\\n \\t\\t\\n// \\t},\\n// \\tfunction(err) {\\n \\t\\t\\n// \\t\\treturn response.error(err);\\n// \\t});\\n \\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, tractors) {\\n\\n// tractors.forEach(function(tractor, a){\\n \\n// if(tractor.TractorID.toString().length === 6){\\n\\n// //Make request to 2track and store data in collection\\n// var payloadOptions = {\\n// token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// trackerId: tractor.TractorID,\\n// startActivityId: startActivityId,\\n// rowCount: 101,\\n// startUTCTime: \\\u0022\\\u0022,\\n// endUTCTime: \\\u0022\\\u0022\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \u0027Accept\u0027: \u0027application/json\u0027,\\n// \u0027Version\u0027: \u0027v1\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n\\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// if(err) {\\n// logger.error(\\\u0022Error placing request to 2track\\\u0022);\\n// return;\\n// } else {\\n// if(!body.data) {\\n// logger.error(\\\u0022Error: No data available for tractor\\\u0022);\\n// return;\\n// } else {\\n// //logger.info(\\\u0022Successfully placed http request for tractor updates for: \\\u0022 \u002B tractor.TractorID);\\n// async.parallel({\\n// updateDailyTractorActivity: async.apply(updateDailyTractorActivity, body.data, tractor.TractorID, tractor)\\n// });\\n// }\\n// }\\n// //response.complete(200);\\n// });\\n// }\\n// });\\n// });\\n \\n// //update coordinates and address of tractor, send geofence push notifications\\n// function updateDailyTractorActivity(activities, cb, tractor) {\\n// //logger.info(\\\u0022Begining process for updating tractor and tractor data is:\\\u0022 \u002B tractor.TractorID);\\n\\n// if(activities.length === 0) {\\n// logger.info(\\\u0022No activities data for tractor \\\u0022 \u002B tractor.TractorID);\\n// return;\\n// //return cb();\\n// }\\n \\n// //check if this tractor has been created. If not, then create a new row\\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, tractors) {\\n \\n// };\\n// else{\\n// var entity = modules.kinvey.entity(results);\\n// entity.HectaresServiced = 0;\\n// collectionAccess.collection(\u0027DailyTractorActivity\u0027).save(entity, cb);\\n// }\\n\\n// var setObject = {\\n// LastActiveTime: lastActivity.activityUTCDate\\n// };\\n\\n// if(lastActivity.lat \u0026\u0026 lastActivity.lon) {\\n\\n// setObject.day = lastActivity.lat;\\n// setObject.PositionLongitude = lastActivity.lon;\\n// setObject.LastActivityId = lastActivity.activityId;\\n// setObject.TotalTimeActive = lastActivity.lat;\\n// setObject.TotalTimeIdle = lastActivity.lat;\\n// setObject.LastJourneyStartTime = lastActivity.lat;\\n// setObject.TotalSpeed = lastActivity.lat;\\n// setObject.TotalSpeedCounter = lastActivity.lat;\\n// setObject.AverageSpeed = lastActivity.lat;\\n// setObject.StartActiveData = lastActivity.lat;\\n// setObject.LastActiveData = lastActivity.lat;\\n// setObject.Country = lastActivity.lat;\\n// setObject.Town = lastActivity.lat;\\n// setObject.Street = lastActivity.lat;\\n// setObject.DistanceTravelled = lastActivity.lat;\\n// setObject.LastOdometerValue = lastActivity.lat;\\n// setObject.Revenue = lastActivity.lat;\\n// setObject.StartCountry = lastActivity.lat;\\n// setObject.StartTown = lastActivity.lat;\\n// setObject.StartStreet = lastActivity.lat;\\n// setObject.Route = lastActivity.lat;\\n// setObject.OperatorID = lastActivity.lat;\\n// setObject.RevenueType = lastActivity.lat;\\n// setObject.RevenueCurrency = lastActivity.lat;\\n// setObject.HectaresServiced = lastActivity.lat;\\n// setObject.IgnitionStatus = lastActivity.lat;\\n\\n// setObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n\\n// collectionAccess.collection(\u0027TestDailyTractorActivity\u0027).update({TractorID: cb, day: },\\n// {\\n// $set: setObject\\n\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n\\n// //return response.complete(200);\\n// });\\n\\n// }\\n// else{\\n// response.complete(400);\\n// //return cb();\\n// }\\n// }\\n// }\u0022\r\n },\r\n \u0022update-tractor-geofence\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var logger = modules.logger;\\n var collectionAccess = modules.collectionAccess;\\n \\n var tractorId = request.body.tractorId;\\n logger.info(\\\u0022ID posted: \\\u0022\u002B tractorId);\\n\\n var tractors = []; \\n var count = 0;\\n \\n if(!tractorId){\\n logger.error(\\\u0022Invalid Tractor posted: \\\u0022\u002B tractorId);\\n return response.complete(400);\\n }\\n\\n logger.info(\\\u0022tractorId posted: \\\u0022\u002B JSON.stringify(request.body)); \\n \\n if (Array.isArray(tractorId)){\\n logger.info(\\\u0022isArray checked\\\u0022);\\n for (var i=0; i\u003CtractorId.length; i\u002B\u002B){\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: tractorId[i]}, {\\n $set: {\\n Latitude: request.body.Latitude,\\n Longitude: request.body.Longitude,\\n NeedToSendGeofenceOutNotification: true,\\n WasInArea: true,\\n LastGeofenceNotificationTime: \u0027\u0027\\n }\\n }, function(err, tractorUpdated) {\\n collectionAccess.collection(\\\u0022TractorDetail\\\u0022).find({TractorID: tractorId[i]}, {}, function(err, tractor){\\n if (err){\\n logger.info(\u0027error \u0027 \u002B JSON.stringify(err));\\n return response.error(err); \\n } else {\\n logger.info(\\\u0022no error: \\\u0022\u002Bi);\\n var geofenceLatitude = request.body.Latitude,\\n geofenceLongitude = request.body.Longitude;\\n\\n tractors.push(tractorUpdated);\\n if(tractors.length == tractorId.length) {\\n c_sendGeoFenceNotification(tractor, \u0027geofenceCreated\u0027, function(err2) {\\n if(err2){\\n return response.error(err2);\\n }\\n return response.complete();\\n });\\n response.complete();\\n } else {\\n response.complete();\\n } \\n \\n }\\n }); \\n });\\n } \\n } else {\\n logger.info(\\\u0022isNotArray\\\u0022);\\n collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: tractorId}, {\\n $set: {\\n Latitude: request.body.Latitude,\\n Longitude: request.body.Longitude,\\n NeedToSendGeofenceOutNotification: true,\\n WasInArea: true,\\n LastGeofenceNotificationTime: \u0027\u0027\\n }\\n }, function(err) {\\n if(err) {\\n return response.error(err);\\n }\\n\\n collectionAccess.collection(\u0027TractorDetail\u0027).findOneAsync({TractorID: tractorId})\\n .then(function(tractor) {\\n var geofenceLatitude = request.body.Latitude,\\n geofenceLongitude = request.body.Longitude;\\n\\n if(tractor) {\\n c_sendGeoFenceNotification(tractor, \u0027geofenceCreated\u0027, function(err) {\\n if(err){\\n return response.error(err);\\n }\\n return response.continue();\\n });\\n } else {\\n return response.continue();\\n }\\n },\\n function(err) {\\n logger.info(\u0027error \u0027 \u002B JSON.stringify(err));\\n return response.error(err);\\n });\\n\\n return response.complete(200);\\n }); \\n }\\n}\u0022\r\n },\r\n \u0022b_UpdateBookingAgents\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n //loop through the tractor owners and post the data of each row to the aws backend.\\n modules.collectionAccess.collection(\u0027BookingAgents\u0027).find({}, function (err, bookingAgents) {\\n \\n bookingAgents.forEach(function(bookingAgent, a){\\n \\n logger.info(\\\u0022syncing to server for: \\\u0022\u002B bookingAgent.username);\\n \\n var payloadOptions = {\\n op: \u0027create\u0027,\\n data: bookingAgent\\n },\\n requestOptions = {\\n url: \u0027https://cloud.hellotractor.com/kinvey/api/bookingagents\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n if(err) {\\n //return cb(err);\\n } else {\\n \\n //response.complete(200);\\n }\\n \\n });\\n\\n });\\n });\\n \\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022UpdateTractorOwnersOnBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n //loop through the tractor owners and post the data of each row to the aws backend.\\n modules.collectionAccess.collection(\u0027TractorOwner\u0027).find({}, function (err, tractorOwners) {\\n \\n tractorOwners.forEach(function(tractorOwner, a){\\n \\n //logger.info(\\\u0022syncing to server for: \\\u0022\u002B tractorOwner.first_name);\\n \\n var payloadOptions = {\\n op: \u0027create\u0027,\\n data: tractorOwner\\n },\\n requestOptions = {\\n url: \u0027https://cloud.hellotractor.com/kinvey/api/users\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n if(err) {\\n //return cb(err);\\n } else {\\n \\n //logger.info(\\\u0022Successfully placed http request\\\u0022);\\n //response.complete(200);\\n }\\n\\n \\n });\\n\\n });\\n });\\n \\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022UpdateBookingAgentsOnBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n //loop through the tractor owners and post the data of each row to the aws backend.\\n modules.collectionAccess.collection(\u0027BookingAgents\u0027).find({}, function (err, bookingAgents) {\\n \\n bookingAgents.forEach(function(bookingAgent, a){\\n \\n logger.info(\\\u0022syncing to server for: \\\u0022\u002B bookingAgent.username);\\n \\n var payloadOptions = {\\n op: \u0027create\u0027,\\n data: bookingAgent\\n },\\n requestOptions = {\\n url: \u0027https://cloud.hellotractor.com/kinvey/api/bookingagents\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n if(err) {\\n //return cb(err);\\n } else {\\n \\n //response.complete(200);\\n }\\n \\n });\\n\\n });\\n });\\n \\n //response.complete(200);\\n}\u0022\r\n },\r\n \u0022b_UpdateDailyTractorActivities\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules){\\n \\n var collectionAccess = modules.collectionAccess,\\n logger = modules.logger,\\n async = modules.async,\\n moment = modules.moment;\\n\\n //loop through the tractor owners and post the data of each row to the aws backend.\\n modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027).find({\\n day: {\\n $gte: moment.utc().format(\u0027YYYY-MM-DD\u0027),\\n $lte: moment.utc().format(\u0027YYYY-MM-DD\u0027)\\n }\\n }, function (err, dailytractoractivities) {\\n \\n dailytractoractivities.forEach(function(dailytractoractivity, a){\\n \\n logger.info(\\\u0022Syncing daily tractor activities to server\\\u0022);\\n \\n var payloadOptions = {\\n data: dailytractoractivity\\n },\\n requestOptions = {\\n url: \u0027https://cloud.hellotractor.com/kinvey/api/dailytractoractivities\u0027,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027,\\n \u0027Version\u0027: \u0027v1\u0027\\n },\\n json: true,\\n body: payloadOptions\\n };\\n\\n modules.request.request(requestOptions, function(err, resp, body) {\\n if(err) {\\n //return cb(err);\\n } else {\\n \\n //response.complete(200);\\n }\\n \\n });\\n\\n });\\n });\\n \\n}\u0022\r\n },\r\n \u0022deleteDuplicateFarmMeasures\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n response.complete();\\n}\u0022\r\n },\r\n \u0022DeleteDuplicateFarmMeasure\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var FarmMeasureCollection = modules.collectionAccess.collection(\\\u0022FarmMeasure\\\u0022); \\n var myLodash = modules.lodash;\\n var farmMeasureData = FarmMeasureCollection.findAsync({syncStatus: 1});\\n farmMeasureData.then(\\n function(docs){\\n var result = [];\\n myLodash.forEach(docs, function(item){\\n if (result.indexOf(item.farmMeasureID) \u003C 0){\\n result.push(item.farmMeasureID);\\n } else {\\n FarmMeasureCollection.remove({_id : item._id}, function(err){\\n if (err){\\n \\tmodules.logger.info(err);\\n }\\n });\\n }\\n }); \\n }, function(err){\\n modules.logger.info(err);\\n response.error(400);\\n }); \\n}\u0022\r\n },\r\n \u0022UpdateBookingsWeather\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n// response.complete();\\nfor (var a = 0; a \u003C 1000000; a\u002B\u002B){\\n modules.logger.info(a);\\n}\\n}\u0022\r\n },\r\n \u0022Update2TrackTractorActiveTimeToday\u0022 : {\r\n \u0022code\u0022 : \u0022//Runs every three minutes to retrieve the active time for all 2track tractors \\n//from DailyTractorActivity collection today\\n//Created by Abdulmajid on 19/06/2018\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCollection = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var dailyTractorActivityCollection = modules.collectionAccess.collection(\\\u0022DailyTractorActivity\\\u0022); \\n var log = modules.logger;\\n var loggerCollection= modules.collectionAccess.collection(\\\u0022Logger\\\u0022);\\n var LOG_ID = 106;\\n var count = 0;\\n var size = 0;\\n var startTime = modules.moment().valueOf();\\n var todaysDate = modules.moment.utc().format(\u0027YYYY-MM-DD\u0027); \\n \\n\\n tractorDetailCollection.find({TractorID: {$lt:500000}, LastActiveTime: {$gte: todaysDate}}, {}, function(err2, docs){\\n\\n //Group TractorIDs into an array\\n var tractorIDs = [];\\n for (var j = 0; j \u003C docs.length; j\u002B\u002B){\\n tractorIDs.push(docs[j].TractorID);\\n } //end for group tractor IDs\\n\\n findDailyActivityForTractorsAndUpdate(tractorIDs);\\n\\n });\\n \\n var findDailyActivityForTractorsAndUpdate = function(tractorIDs){\\n// var todaysDate = \\\u00222017-05-19\\\u0022; for testing\\n \\n loggerCollection.find({logID:LOG_ID}, {}, function(err1, logs){ \\n \\n dailyTractorActivityCollection.find({TractorID: {$in: tractorIDs}, day: todaysDate}, {\\\u0022sort\\\u0022:{\\\u0022_id\\\u0022:1}}, function(err, dailyActivities){\\n log.info(\\\u0022No of daily activities: \\\u0022\u002BdailyActivities.length);\\n\\n var startFrom = 0;\\n if (logs[0].Message \u003C dailyActivities.length){\\n startFrom = logs[0].Message;\\n }\\n\\n size = dailyActivities.length;\\n count = startFrom;\\n log.info(\\\u0022Size: \\\u0022\u002Bsize\u002B\\\u0022, Start From: \\\u0022\u002BstartFrom); \\n\\n for (var i = startFrom; i \u003C dailyActivities.length; i\u002B\u002B){\\n updateTractorDetailCollection(dailyActivities[i]);\\n } \\n\\n }); \\n\\n }); \\n }\\n \\n var updateTractorDetailCollection = function(dailyActivity){\\n tractorDetailCollection.update({TractorID: dailyActivity.TractorID}, \\n {$set: {\\n \\\u0022ActiveTimeToday\\\u0022:dailyActivity.TotalTimeActive,\\n \\\u0022UpdatedAt\\\u0022:modules.moment().format(\u0027YYYY-MM-DD HH:mm:ss\u0027)\\n }}, \\n {upsert: false}, \\n function(tractorErr, tractorDetailDoc){\\n count\u002B\u002B;\\n// log.info(\\\u0022No: \\\u0022\u002Bcount\u002B\\\u0022, \\\u0022\u002BJSON.stringify(dailyActivity));\\n shouldCompleteRequest();\\n }); //End update tractor detail with active time today \\n }\\n \\n var shouldCompleteRequest = function(){\\n var duration = modules.moment().valueOf() - startTime;\\n if (count \u003E= size || duration \u003E= 19000){\\n log.info(\\\u0022Total: \\\u0022\u002Bcount);\\n\\n //Update logger and finish task\\n loggerCollection.update({logID:LOG_ID}, {$set: {Message:count}}, {upsert: false}, function(logErr, logDoc){\\n response.complete(); \\n }); //End update logger collection with last count \\n }//end if \\n } \\n \\n} //end onRequest function\\n \\n\\n\u0022\r\n },\r\n \u0022Update_bookings_Sync_Status_to_1\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Bookings = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n Bookings.update({}, {$set: {\\\u0022syncStatus\\\u0022: 1} }, {\\\u0022multi\\\u0022:true } , function(err, updatedDocs){\\n if(err) { modules.logger.info(\u0027There was an error:\u0027 \u002B err) }\\n else { modules.logger.info(\u0027docs updated\u0027)}\\n \\n response.complete();\\n });\\n \\n}\u0022\r\n },\r\n \u0022ResetTractorDetailActiveTimeToday\u0022 : {\r\n \u0022code\u0022 : \u0022//Resets the active time today field for all tractors to 0 at 11:59pm daily\\n//Created by Abdulmajid on 21/06/2018\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCollection = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n tractorDetailCollection.update({}, {$set: {\\n \\\u0022ActiveTimeToday\\\u0022:0, \\n \\\u0022UpdatedAt\\\u0022:modules.moment().format(\u0027YYYY-MM-DD HH:mm:ss\u0027)\\n }}, {upsert: false, multi: true}, function(err, doc){\\n modules.logger.info(\\\u0022Reset Complete\\\u0022);\\n response.complete();\\n });\\n}\u0022\r\n },\r\n \u0022UpdateBookingsWeatherDetails\u0022 : {\r\n \u0022code\u0022 : \u0022//Updates weather information for bookings every three (3) minutes where the service date is two weeks later than today\\n//Created by Paul on 28/06/2018 \\n//@update 01/11/2018 ( changed ready to fetch info to cater for bookings whose service date are in the future and storing only service date weather information of 9am only)\\n\\nfunction onRequest(request, response, modules) {\\n var LOG_ID = 108, //log id to know count for the next batch\\n collectionAccess = modules.collectionAccess,\\n Logger = modules.collectionAccess.collection(\u0027Logger\u0027),\\n Booking = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022),\\n APPID = \\\u0022\u0026APPID=36b45f00efffeeb4d17f8509fe86d167\\\u0022,\\n Request = modules.request,\\n count = 0,\\n now = modules.moment(),\\n startFrom = 0,\\n now = modules.moment(),\\n updateLimit = 60;\\n\\n //fetch weather information for bookings one week to the service date\\n var canFetchBookingWeatherInfo = function (serviceDate) {\\n var serviceDateTimestamp = modules.moment(serviceDate),\\n oneWeekMinusServiceDate = modules.moment(serviceDateTimestamp).subtract(7, \\\u0022days\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022);\\n return (now.format(\\\u0022YYYY-MM-DD\\\u0022) \u003E= oneWeekMinusServiceDate) \u0026\u0026 (now.format(\\\u0022YYYY-MM-DD\\\u0022) \u003C= serviceDate )\\n }\\n\\n //fetch the booking weather condition\\n var getWeatherConditionForBooking = function (booking) {\\n /** make a request to the open weather API **/\\n var lat = booking.latitude,\\n lng = booking.longitude,\\n isSetLatLng = lat \u0026\u0026 lng ? true : false;\\n\\n var readyToFetchWeatherInfo = canFetchBookingWeatherInfo(booking.serviceDate);\\n\\n if (isSetLatLng \u0026\u0026 readyToFetchWeatherInfo){\\n\\n var weatherURL = \\\u0022https://api.openweathermap.org/data/2.5/forecast?units=metric\u0026lat=\\\u0022 \u002B lat \u002B \\\u0022\u0026lon=\\\u0022 \u002B lng \u002B APPID;\\n requestOptions = {\\n url: weatherURL,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027\\n },\\n json: true\\n };\\n Request.request(requestOptions, function (err, resp, body) {\\n if (!err) {\\n if (body.cod == 200) {\\n updateSingleBookingWeatherCondition(body, booking);\\n } else {\\n count\u002B\u002B;\\n checkToUpdateOrResetLogCount();\\n }\\n } else {\\n count\u002B\u002B;\\n checkToUpdateOrResetLogCount();\\n modules.logger.info(err);\\n }\\n });\\n } else {\\n count\u002B\u002B;\\n checkToUpdateOrResetLogCount();\\n }\\n }\\n\\n var getUpdatedAtForBooking = function () {\\n return now.format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n\\n }\\n\\n var updateSingleBookingWeatherCondition = function (condition, booking) {\\n \\n var bookingServiceDate = booking.serviceDate;\\n var BookingServiceDateWeatherInfo = getBookingServiceDateWeatherInfo(condition, bookingServiceDate);\\n modules.logger.info(\\\u0022 BookingServiceDateWeatherInfo is \\\u0022 \u002B BookingServiceDateWeatherInfo);\\n \\n\\t\\tif( BookingServiceDateWeatherInfo ){ \\n Booking.update({\\n \\\u0022bookingID\\\u0022: booking.bookingID\\n }, {\\n $set: {\\n \\\u0022WeatherCondition\\\u0022: BookingServiceDateWeatherInfo,\\n \\\u0022updatedAt\\\u0022: getUpdatedAtForBooking()\\n }\\n }, function (err, updatedBooking) {\\n if (!err) {\\n modules.logger.info(\\\u0022Updated the weather condition of booking with ID: \\\u0022 \u002B booking.bookingID);\\n } else {\\n modules.logger.info(\\\u0022not updating booking with ID: \\\u0022 \u002B booking_id);\\n }\\n count\u002B\u002B;\\n //update log count here\\n checkToUpdateOrResetLogCount();\\n\\n })\\n \\n }\\n else {\\n\\t\\t\\t\\t\\n count\u002B\u002B;\\n checkToUpdateOrResetLogCount();\\n\\n }\\n\\n }\\n\\n var checkToUpdateOrResetLogCount = function () {\\n if (count == updateLimit) {\\n //update or reset the log count\\n UpdateOrResetLogCount();\\n }\\n }\\n\\n\\n var UpdateOrResetLogCount = function () {\\n var newCount = count \u002B startFrom;\\n modules.logger.info(\\\u0022new log count is \\\u0022 \u002B newCount);\\n Booking.count({\\n \\\u0022bookingStatus\\\u0022: 0\\n }, function (err, bookingCount) {\\n\\n modules.logger.info(\\\u0022total booking count is \\\u0022 \u002B bookingCount);\\n if (newCount \u003E= bookingCount) {\\n Logger.update({\\n \\\u0022logID\\\u0022: LOG_ID\\n }, {\\n $set: {\\n \\\u0022Message\\\u0022: 0\\n }\\n }, function (err, countUpdated) {\\n if (!err) {\\n modules.logger.info(\\\u0022Log count reset successfull\\\u0022);\\n response.complete();\\n } else {\\n response.complete();\\n }\\n })\\n\\n } else if (newCount \u003C bookingCount) {\\n Logger.update({\\n \\\u0022logID\\\u0022: LOG_ID\\n }, {\\n $set: {\\n \\\u0022Message\\\u0022: newCount\\n }\\n }, function (err, updatedLogCount) {\\n if (!err) {\\n modules.logger.info(\\\u0022Log Count successfully updated to: \\\u0022 \u002B newCount);\\n } else {\\n modules.logger.info(\\\u0022There was an error updating log count\\\u0022);\\n }\\n\\n })\\n }\\n\\n response.complete();\\n\\n })\\n }\\n\\n //find the last log count\\n Logger.find({\\n \\\u0022logID\\\u0022: LOG_ID\\n }, function (err, lastCount) {\\n startFrom = lastCount[0].Message; //0\\n\\n Booking.find({\\n \\\u0022bookingStatus\\\u0022: 0\\n }, {\\n \\\u0022limit\\\u0022: updateLimit,\\n \\\u0022skip\\\u0022: startFrom\\n }, function (err, bookings) {\\n if (bookings \u0026\u0026 bookings.length \u003E 0) {\\n updateLimit = bookings.length;\\n //modules.logger.info( bookings.length );\\n bookings.forEach(function (booking) {\\n getWeatherConditionForBooking(booking);\\n })\\n } else {\\n modules.logger.info(\\\u0022no bookings found\\\u0022);\\n response.complete();\\n }\\n })\\n });\\n}\\n\\n\\n\u0022\r\n },\r\n \u0022ManuallyTriggerNotification\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var Push = modules.push,\\n username = \u0027test@hellotractor.com\u0027,\\n User = modules.collectionAccess.collection(\u0027user\u0027),\\n triggerData = {\\n id: response.body._id,\\n TractorDetail:\\\u0022\\\u0022, \\n type: \\\u0022action\\\u0022, \\n action: \\\u0022trigger\\\u0022, \\n kind: 12, \\n trigger:907, \\n entity: {\\n \\n } \\n \\n };\\n \\n var sendRefreshTrigger = function(user, data){\\n return Push.send(user, JSON.stringify(data));\\n }\\n \\n User.find({\\\u0022username\\\u0022:username}, function(err, user){\\n \\n //push the trigger via notification \\n \\tif( sendRefreshTrigger( user, triggerData) )\\n {\\n \\tmodules.logger.info(\\\u0022app refresh trigger sent to : \\\u0022 \u002B username );\\n return response.complete();\\n }\\n \\telse {\\n modules.logger.info(\\\u0022push notification not sent to : \\\u0022 \u002B username );\\n return response.complete();\\n \\t\\t\\t}\\n });\\n\\n \\n}\u0022\r\n },\r\n \u0022DeleteBookingWeatherValue\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\nvar Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n \\nvar updateQuery = { $set: { WeatherCondition: \u0027\u0027 } };\\n \\n Booking.update({},updateQuery, {multi: true}, function(err, done){\\n if(!err){\\n modules.logger.info(\u0027updated all bookings Weather Condition to empty\u0027);\\n response.complete();\\n }\\n else {\\n modules.logger.info(\u0027failed updating all bookings Weather condition\u0027);\\n modules.logger.error(err);\\n response.complete();\\n }\\n } )\\n}\u0022\r\n },\r\n \u0022deleteUserPushToken\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar updateValue = {\\\u0022pushTokens\\\u0022: [] };\\n modules.collectionAccess.collection(\u0027user\u0027).update({}, { $set:{_messaging:updateValue }}, {multi:true}, \\t\\t function(err, done){\\n if(!err){\\n modules.logger.info(\u0027updated all push tokens\u0027);\\n response.complete();\\n }\\n else {\\n modules.logger.info(\u0027there was an error\u0027);\\n response.complete();\\n }\\n } )\\n}\u0022\r\n },\r\n \u0022UpdateLatestBookingsWeatherInformation\u0022 : {\r\n \u0022code\u0022 : \u0022\\n//fetch new bookings that was posted 30 minutes ago\\n//@update 01/11/2018 ( added checks to store service date weather info of 9am only and cater for fetching weather information of bookings whose service date are in future , greater than now )\\nfunction onRequest(request, response, modules) {\\n \\tvar Booking = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022),\\n \\t\\tAPPID = \\\u0022\u0026APPID=36b45f00efffeeb4d17f8509fe86d167\\\u0022,\\n \\t\\tRequest = modules.request,\\n \\t\\tnow = modules.moment(),\\n newBookings,\\n count = 0;\\n\\n //fetch weather information for bookings one week to the service date\\n var canFetchBookingWeatherInfo = function (serviceDate) {\\n var serviceDateTimestamp = modules.moment(serviceDate),\\n oneWeekMinusServiceDate = modules.moment(serviceDateTimestamp).subtract(7, \\\u0022days\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022);\\n \\treturn ( now.format(\\\u0022YYYY-MM-DD\\\u0022) \u003E= oneWeekMinusServiceDate) \u0026\u0026 ( now.format(\\\u0022YYYY-MM-DD\\\u0022) \u003C= serviceDate );\\n }\\n\\n //fetch the booking weather condition\\n var getWeatherConditionForBooking = function (booking) {\\n /** make a request to the open weather API **/\\n var lat = booking.latitude,\\n lng = booking.longitude,\\n isSetLatLng = lat \u0026\u0026 lng ? true : false;\\n\\n var readyToFetchWeatherInfo = canFetchBookingWeatherInfo(booking.serviceDate);\\n\\n if (isSetLatLng \u0026\u0026 readyToFetchWeatherInfo) {\\n \\t\\t\\tvar weatherURL = \\\u0022https://api.openweathermap.org/data/2.5/forecast?units=metric\u0026lat=\\\u0022 \u002B lat \u002B \\\u0022\u0026lon=\\\u0022 \u002B lng \u002B APPID;\\n requestOptions = {\\n url: weatherURL,\\n method: \u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027\\n },\\n json: true\\n };\\n Request.request(requestOptions, function (err, resp, body){\\n modules.logger.info(JSON.stringify(body));\\n if(body.cod == 200){\\n //update the booking with weather information if the response is a good one\\n \\tupdateSingleBookingWeatherCondition(body,booking);\\n }\\n }); //request function ends \\n }\\n else { \\n modules.logger.info(\\\u0022lat lng not set and not ready to fetch\\\u0022);\\n count\u002B\u002B;\\n if( count == newBookings.length) { response.complete() };\\n\\n }\\n }\\n\\n var getUpdatedAtForBooking = function () {\\n return now.format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n\\n }\\n\\n var updateSingleBookingWeatherCondition = function (condition, booking) {\\n \\n var bookingServiceDate = booking.serviceDate;\\n var BookingServiceDateWeatherInfo = getBookingServiceDateWeatherInfo(condition, bookingServiceDate);\\n modules.logger.info(\\\u0022 BookingServiceDateWeatherInfo is \\\u0022 \u002B BookingServiceDateWeatherInfo);\\n \\n\\t\\tif( BookingServiceDateWeatherInfo ){\\n \\n Booking.update({\\n \\\u0022bookingID\\\u0022: booking.bookingID\\n }, {\\n $set: {\\n \\\u0022WeatherCondition\\\u0022: BookingServiceDateWeatherInfo,\\n \\\u0022updatedAt\\\u0022: getUpdatedAtForBooking()\\n }\\n }, function (err, updatedBooking) {\\n if (!err) {\\n count\u002B\u002B\\n modules.logger.info(\\\u0022Updated the weather condition of booking with ID: \\\u0022 \u002B booking.bookingID);\\n } else {\\n modules.logger.info(\\\u0022not updating booking with ID: \\\u0022 \u002B booking.bookingID);\\n count\u002B\u002B\\n }\\n if( count == newBookings.length) { response.complete() };\\n })\\n \\n }\\n \\n else {\\n count\u002B\u002B;\\n if( count == newBookings.length) { response.complete() };\\n\\n }\\n\\t \\n\\n }\\n \\n //filter those records that were posted 30 minutes ago \\n \\n var getNewBookings = function(bookings){ \\n return bookings.filter( function(booking){\\n \\n /* diff below is in milliseconds, divide by 1000 to get seconds\\n Math.abs is used to the absolute difference so that new Date(\u00272018-08-02 12:00\u0027) and new Date(\u00272018-08-02 \\t\\t00:00\u0027) gives the same result \\n */ \\n var diff = Math.abs(new Date() - new Date(booking.updatedAt)); \\n\\tvar minutes = Math.floor((diff/1000)/60); //in seconds , divide by 60 to get the minutes \\n\\treturn true //minutes \u003C= 30;\\n \\n });\\n }\\n \\n\\n Booking.find({\\n \\\u0022bookingStatus\\\u0022: 0,\\n }, function (err, bookings) {\\n if (bookings \u0026\u0026 bookings.length \u003E 0) {\\n newBookings = getNewBookings(bookings)\\n if( newBookings.length \u003E 0){\\n newBookings.forEach(function (booking) {\\n getWeatherConditionForBooking(booking)\\n modules.logger.info(\u0027new booking count is \u0027 \u002BnewBookings.length);\\n });\\n }\\n \\telse {\\n modules.logger.info(\u0027no new bookings found\u0027);\\n response.complete();\\n }\\n \\n } else {\\n modules.logger.info(\\\u0022no bookings found\\\u0022);\\n response.complete();\\n }\\n });\\n\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\u0022\r\n },\r\n \u0022getTractorReports\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var TractorOwner = modules.collectionAccess.collection(\u0027TractorOwner\u0027),\\n TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027),\\n Http = modules.request,\\n count = 0;\\n \\n var getTractorIds = function(tractorDetails){\\n return tractorDetails.map(function(tractorDetail){\\n return tractorDetail.TractorID;\\n })\\n }\\n \\n var sendTractorReportsRequest = function(tractorIds, customerName,customerEmail, tractorOwners){\\n var startDate = \\\u00222017-08-01\\\u0022;\\n var endDate = \\\u00222017-08-31\\\u0022;\\n var date_range = startDate\u002B\u0027|\u0027\u002BendDate;\\n var tractorIDs = tractorIds.join(\u0027,\u0027);\\n var request_url = \\\u0022https://cloud.hellotractor.com/report/log/csv?tractor_ids=\\\u0022\u002BtractorIDs\u002B\\\u0022\u0026dates=\\\u0022\u002B date_range\u002B\\\u0022\u0026customer_name=\\\u0022\u002BcustomerName\u002B\\\u0022\u0026customer_email=\\\u0022\u002BcustomerEmail;\\n\\tmodules.logger.info( request_url );\\n var requestOptions = {\\n url:request_url,\\n method: \u0027GET\u0027,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027\\n },\\n json: true\\n };\\n \\n Http.request(requestOptions, function(err, resp, body){\\n if(!err){\\n modules.logger.info(JSON.stringify(resp));\\n count\u002B\u002B\\n }\\n else {\\n count\u002B\u002B\\n }\\n if( count == tractorOwners.length ) { response.complete() } ;\\n })\\n }\\n\\n \\n TractorOwner.find({\\\u0022username\\\u0022: \\\u0022tohfan08@yahoo.com\\\u0022}, function(err, tractorOwners){\\n tractorOwners.forEach( function(tractorOwner){\\n var tractorOwnerName = tractorOwner.first_name,\\n \\t\\ttractorOwnerEmail = tractorOwner.email; \\n TractorDetail.find({\\\u0022_acl.creator\\\u0022: tractorOwner._acl.creator}, function(err, tractorDetails){\\n\\t\\t\\t\\t\\tvar tractorIds = getTractorIds(tractorDetails);\\n \\t\\n \\t//send request only if the tractor owner has tractors \\n \\tif(tractorIds.length \u003E 0){ \\n modules.logger.info(\\\u0022The acl \\\u0022 \u002B tractorOwner._acl.creator \u002B \\\u0022 has \\\u0022 \u002B tractorIds ); \\n \\t\\tsendTractorReportsRequest(tractorIds,tractorOwnerName,tractorOwnerEmail,tractorOwners );\\n }\\n else {\\n count\u002B\u002B;\\n }\\n \\t\\t\\t\\t\\t\\t\\n }) \\n }) \\n })\\n \\n}\u0022\r\n },\r\n \u0022_CreatorUpdater\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n TractorDetail.find({\\\u0022_acl.gr\\\u0022: {$exists:true}, \\\u0022_acl.gw\\\u0022: {$exists:true}},function(err, tractorDetails){\\n if(!err){\\n var count =0;\\n \\n \\ttractorDetails.forEach( function(tractorDetail){\\n \\n var creator = {\\\u0022creator\\\u0022: tractorDetail._acl.creator };\\n \\n \\t\\t\\tTractorDetail.update({_id: tractorDetail._id}, {$set:{_acl: creator}},\\n function(err, done){\\n count\u002B\u002B\\n if( tractorDetails.length == count){\\n modules.logger.info(\u0027all updated\u0027);\\n response.complete();\\n }\\n })\\n }) \\n }\\n else {\\n modules.logger.error( \\\u0022There was an error\\\u0022 );\\n response.complete();\\n }\\n })\\n}\u0022\r\n },\r\n \u0022TractorsNearby\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n * Used to retrieve the nearest tractors within a close proximity to the location passed\\n * Requires - lat, long, and maxDistance parameters passed in the body of the request\\n * Last updated: 4th June 2020, 9th June 2020\\n * @param request \\n * @param response \\n * @param modules \\n */\\n\\nfunction onRequest(request, response, modules) {\\n var currLat = request.body.lat,\\n currLong = request.body.long,\\n maxDistance = request.body.maxDistance, //kilometers\\n apiKey = \\\u0022AIzaSyCOpj5ds5nIRt7RxyogDNfybL67Z4d9xfk\\\u0022, //Google API Key for displaying routes from farm location to tractor\\n threshold = 10,\\n logger = modules.logger;\\n \\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var tractorOperatorCol = modules.collectionAccess.collection(\\\u0022TractorOperator\\\u0022);\\n var appUserCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var pricePerHectareCol = modules.collectionAccess.collection(\\\u0022PricePerHectare\\\u0022);\\n \\n var R = 6371 * Math.pow(10, 3); //earth radius in meters\\n var PI = Math.PI;\\n var radius = maxDistance * Math.pow(10, 3) //In meters\\n \\n var minLat = currLat - radius / R * 180 / PI;\\n var maxLat = currLat \u002B radius / R * 180 / PI;\\n var minLong = currLong - (radius / R * 180 / PI) / Math.cos(currLat * PI / 180);\\n var maxLong = currLong \u002B (radius / R * 180 / PI) / Math.cos(currLat * PI / 180);\\n \\n var tractorQuery = {\\n $and: [\\n { \\\u0022PositionLatitude\\\u0022: { $gte: minLat } },\\n { \\\u0022PositionLatitude\\\u0022: { $lte: maxLat } },\\n { \\\u0022PositionLongitude\\\u0022: { $gte: minLong } },\\n { \\\u0022PositionLongitude\\\u0022: { $lte: maxLong } },\\n { \\\u0022BookingRequests\\\u0022: true}\\n ]\\n };\\n \\n /**\\n * Retrives tractors from tractor detail collection that satisfy tractor query criteri\\n * @param tractorQuery An object of the query criteria\\n */\\n var fetchTractors = function(){\\n tractorDetailCol.find(tractorQuery, function (tractorsErr, tractorList) {\\n if (tractorsErr || !tractorList) {\\n logger.info(\\\u0022Query failed: \\\u0022 \u002B tractorsErr);\\n response.error(\\\u0022Unable to find nearby tractors\\\u0022);\\n } else {\\n logger.info(\\\u0022Building nearby tractor list, bounding square tractors: \\\u0022\u002BtractorList.length);\\n buildNearbyTractors(tractorList);\\n }\\n });\\n }\\n \\n /**\\n * Creates an array of creator id and operator id and filters the tractor list to extract those within the radius\\n * @param tractorList The list of tractors that satisfy the rectangular bounding box queried\\n */\\n var buildNearbyTractors = function(tractorList){\\n var creatorIdArr = [];\\n var operatorIdArr = [];\\n var tractorsWithinCircle = [];\\n var countTractors = 0;\\n var unit = \\\u0022K\\\u0022; //Killometers\\n \\n var totalTractorCount = tractorList.length;\\n for (var i = 0; i \u003C totalTractorCount; i\u002B\u002B){\\n var tractor = tractorList[i];\\n var lat = tractor.PositionLatitude;\\n var long = tractor.PositionLongitude;\\n var distanceFromPosition = distance(\\n currLat,\\n currLong,\\n lat,\\n long,\\n unit\\n );\\n \\n if (distanceFromPosition \u003C= maxDistance) {\\n tractorsWithinCircle.push(tractor);\\n creatorIdArr.push(tractor._acl.creator);\\n if (tractor.OperatorID) {\\n operatorIdArr.push(tractor.OperatorID);\\n }\\n countTractors\u002B\u002B;\\n }\\n \\n if (countTractors \u003E threshold){\\n break;\\n }\\n }\\n \\n logger.info(\\\u0022Number of tractors within bounding circle: \\\u0022 \u002B tractorsWithinCircle.length);\\n \\n //Find tractor owners to retrieve org id of the creator\\n fetchTractorOwnerUsers(creatorIdArr, operatorIdArr, tractorsWithinCircle);\\n }\\n \\n \\n var fetchTractorOwnerUsers = function(creatorIdArr, operatorIdArr, tractorsWithinCircle){\\n appUserCol.find({\\\u0022_acl.creator\\\u0022: {$in: creatorIdArr}}, function(usersErr, userList){\\n var userIdToUserMap = buildUserIdToUserMap(userList? userList: []);\\n //find operators to retrieve operator information of tractors assigned\\n fetchOperators(creatorIdArr, operatorIdArr, userIdToUserMap, tractorsWithinCircle);\\n });\\n }\\n \\n var buildUserIdToUserMap = function(userList){\\n var userIdToUserMap = userList.reduce(function(acc, user, index){\\n acc[user._acl.creator] = user;\\n return acc;\\n }, {});\\n \\n return userIdToUserMap;\\n }\\n \\n var buildOperatorIdOperatorMap = function(operators){\\n var operatorIdOperatorMap = operators.reduce(function(acc, operator, index){\\n acc[operator.OperatorID] = operator;\\n return acc;\\n }, {});\\n \\n return operatorIdOperatorMap;\\n }\\n \\n var fetchOperators = function (creatorIdArr, operatorIdArr, userIdToUserMap, tractorsWithinCircle){\\n tractorOperatorCol.find({\\\u0022OperatorID\\\u0022: {$in: operatorIdArr}}, function(operatorsErr, operatorList){\\n var operatorIdOperatorMap = buildOperatorIdOperatorMap(operatorList);\\n fetchPricePerHectare(creatorIdArr, userIdToUserMap, tractorsWithinCircle, operatorIdOperatorMap);\\n });\\n }\\n\\n var buildResponse = function(userIdToUserMap, tractorsWithinCircle, operatorIdOperatorMap, creatorIdAttachmentCodeToPricePerHectareMap){\\n var tractorListToReturn = [];\\n tractorsWithinCircle.forEach(function(tractor){\\n var tractorOwner = userIdToUserMap[tractor._acl.creator];\\n var operator = operatorIdOperatorMap[tractor.OperatorID];\\n\\n var attachmentsPricePerHectareMap = creatorIdAttachmentCodeToPricePerHectareMap[tractor._acl.creator];\\n var tractorAttachmentPrices = {};\\n\\n if (attachmentsPricePerHectareMap){\\n var tractorAttachmentCodes = tractor.Characteristic.split(\\\u0022,\\\u0022);\\n tractorAttachmentCodes.forEach(function(attachmentCode){\\n var pricePerHectare = attachmentsPricePerHectareMap[attachmentCode];\\n if (pricePerHectare){\\n tractorAttachmentPrices[pricePerHectare.serviceType] = pricePerHectare;\\n }\\n });\\n }\\n\\n if (tractorOwner \u0026\u0026 operator){\\n var lat = tractor.PositionLatitude;\\n var lng = tractor.PositionLongitude;\\n var orgID = tractorOwner.orgIDs;\\n var tractorResponse = constructResponse(lat, lng, tractor, operator, apiKey, orgID, tractorAttachmentPrices);\\n tractorListToReturn.push(tractorResponse);\\n }\\n });\\n\\n finish(tractorListToReturn); \\n }\\n\\n var fetchPricePerHectare = function(creatorIdArr, userIdToUserMap, tractorsWithinCircle, operatorIdOperatorMap){\\n pricePerHectareCol.find({\\\u0022_acl.creator\\\u0022: {$in: creatorIdArr}}, function(pricerPerHectareErr, pricePerHectareList){\\n var creatorIdAttachmentCodeToPricePerHectareMap = {};\\n if (pricePerHectareList \u0026\u0026 pricePerHectareList.length \u003E 0)\\n creatorIdAttachmentCodeToPricePerHectareMap = buildCreatorIdAttachmentCodeToPricePerHectareMap(pricePerHectareList);\\n buildResponse(userIdToUserMap, tractorsWithinCircle, operatorIdOperatorMap, creatorIdAttachmentCodeToPricePerHectareMap);\\n });\\n }\\n\\n /**\\n * {\\\u0022ajhdiksdhna1112\\\u0022: {\\\u0022100\\\u0022: {\\\u0022PricePerHectare\\\u0022: 12500}, \\\u0022101\\\u0022: {\\\u0022PricePerHecatre\\\u0022: 25000}}, \\n * \\\u0022bheu1313132\\\u0022: {\\\u0022100\\\u0022: {\\\u0022PricePerHectare\\\u0022: 15500}, \\\u0022101\\\u0022: {\\\u0022PricePerHecatre\\\u0022: 25000}}}\\n * @param pricePerHectareList\\n */\\n\\n var buildCreatorIdAttachmentCodeToPricePerHectareMap = function(pricePerHectareList){\\n var attachmentCodeToPricePerHectareMap = pricePerHectareList.reduce(function(acc, pricePerHectare, index){\\n if (!acc[pricePerHectare._acl.creator]) acc[pricePerHectare._acl.creator] = {};\\n acc[pricePerHectare._acl.creator][pricePerHectare.serviceType] = pricePerHectare;\\n return acc;\\n }, {});\\n \\n return attachmentCodeToPricePerHectareMap;\\n }\\n \\n var finish = function(tractorListToReturn){\\n modules.logger.info(\\\u0022Number of tractors nearby: \\\u0022 \u002B tractorListToReturn.length);\\n modules.logger.info(\\\u0022Response: \\\u0022 \u002B JSON.stringify(tractorListToReturn));\\n response.body = tractorListToReturn;\\n response.complete();\\n }\\n \\n //Entry point, fetch tractors that satisfy query criteria\\n fetchTractors(tractorQuery); \\n }\\n \\n function distance(lat1, lon1, lat2, lon2, unit) {\\n var radlat1 = (Math.PI * lat1) / 180;\\n var radlat2 = (Math.PI * lat2) / 180;\\n var theta = lon1 - lon2;\\n var radtheta = (Math.PI * theta) / 180;\\n var dist =\\n Math.sin(radlat1) * Math.sin(radlat2) \u002B\\n Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\\n if (dist \u003E 1) {\\n dist = 1;\\n }\\n dist = Math.acos(dist);\\n dist = (dist * 180) / Math.PI;\\n dist = dist * 60 * 1.1515;\\n if (unit == \\\u0022K\\\u0022) {\\n dist = dist * 1.609344;\\n }\\n if (unit == \\\u0022N\\\u0022) {\\n dist = dist * 0.8684;\\n }\\n return dist;\\n }\\n \\n function constructResponse(lat, lng, doc, operatorAssigned, apiKey, orgID, tractorAttachmentPrices) {\\n var strippedDoc = {\\n _id: doc._id,\\n _kmd: doc._kmd,\\n _acl: doc._acl,\\n PositionLatitude: lat,\\n PositionLongitude: lng,\\n EngineHours: doc.EngineHours,\\n Characteristic: doc.Characteristic,\\n TractorName: doc.TractorName,\\n ImplementsAttached: doc.ImplementsAttached,\\n license_plate_number: doc.license_plate_number,\\n Country: doc.Country,\\n Town: doc.Town,\\n Street: doc.Street,\\n TractorID: doc.TractorID,\\n Heading: doc.Heading,\\n TractorModelID: doc.TractorModelID,\\n OperatorID: doc.OperatorID,\\n ImplementAttached: doc.ImplementAttached,\\n TractorOperator: operatorAssigned,\\n OrgID: orgID,\\n AttachmentPricePerHectare: tractorAttachmentPrices,\\n APIKey: apiKey\\n };\\n \\n return strippedDoc;\\n }\u0022\r\n },\r\n \u0022BookingsNearbySometimeAgo\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var currLat = request.body.lat, \\n currLong = request.body.long, \\n count = 0, \\n count2 = 0, \\n maxDistance = request.body.maxDistance, //kilometers\\n filteredBookings = [], \\n startDate = request.body.startDate, \\n endDate = request.body.endDate; \\n \\n var query = {serviceDate: { $gte: startDate, $lte: endDate }};\\n \\n var serviceBookings = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n serviceBookings.find(query, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n response.error(\\\u0022Unable to find nearby bookings\\\u0022);\\n } else {\\n if (docs.length \u003E 0){\\n docs.forEach(function(doc){\\n var lat = doc.latitude;\\n var long = doc.longitude;\\n var unit = \\\u0022K\\\u0022; //Killometers\\n \\n if (lat \u0026\u0026 long){\\n \\n var distanceFromPosition = distance(currLat, currLong, lat, long, unit);\\n if (distanceFromPosition \u003C= maxDistance){\\n count\u002B\u002B;\\n var strippedDoc = {\\n latitude:doc.latitude,\\n longitude:doc.longitude,\\n serviceDate:doc.serviceDate,\\n hectaresServiced:doc.hectaresServiced,\\n distanceToDestination:doc.distanceToDestination,\\n serviceType:doc.serviceType\\n };\\n filteredBookings.push(strippedDoc);\\n }\\n }\\n \\n count2\u002B\u002B;\\n if (count2 == docs.length){\\n modules.logger.info(\\\u0022Number of bookings nearby: \\\u0022\u002Bcount);\\n modules.logger.info(\\\u0022Total Number of Bookings: \\\u0022\u002Bcount2); \\t\\t\\t\\t\\t\\t\\n modules.logger.info(\\\u0022Later: \\\u0022\u002Bmodules.moment.utc());\\n\\t\\t\\t\\t\\t\\tresponse.body = filteredBookings;\\n response.complete();\\n }\\n\\n });\\n } else {\\n response.complete();\\n }\\n }\\n\\t});\\n}\\n\\nfunction distance (lat1, lon1, lat2, lon2, unit) {\\n\\tvar radlat1 = Math.PI * lat1/180;\\n\\tvar radlat2 = Math.PI * lat2/180;\\n\\tvar theta = lon1-lon2;\\n\\tvar radtheta = Math.PI * theta/180;\\n\\tvar dist = Math.sin(radlat1) * Math.sin(radlat2) \u002B Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\\n\\tif (dist \u003E 1) {\\n\\t\\tdist = 1;\\n\\t}\\n\\tdist = Math.acos(dist);\\n\\tdist = dist * 180/Math.PI;\\n\\tdist = dist * 60 * 1.1515;\\n\\tif (unit==\\\u0022K\\\u0022) {\\n dist = dist * 1.609344\\n }\\n\\tif (unit==\\\u0022N\\\u0022) { \\n dist = dist * 0.8684 \\n }\\n\\treturn dist;\\n} \u0022\r\n },\r\n \u0022UpdateAerisTractorEngineHours\u0022 : {\r\n \u0022code\u0022 : \u0022//Runs every three minutes to retrieve the total engine hours\\n//for all aeris tractors on cloud.hellotractor.com\\n//Created by Abdulmajid on 22/08/2018\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCollection = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var log = modules.logger;\\n var loggerCollection= modules.collectionAccess.collection(\\\u0022Logger\\\u0022);\\n var LOG_ID = 109;\\n var count = 0;\\n var size = 0;\\n var startTime = modules.moment().valueOf();\\n var todaysDate = modules.moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n var timeout = 19990; //milliseoncs\\n// var query = {TractorID: {$gte:500000}, LastActiveTime: {$gte:todaysDate}};\\n var query = {TractorID: {$gte:500000}}; \\n \\n loggerCollection.find({logID:LOG_ID}, {}, function(err1, logs){ \\n tractorDetailCollection.find(query, {}, function(err, docs){\\n if (err){\\n response.complete();\\n } else if (docs.length \u003E 0){\\n var startFrom = 0;\\n if (logs[0].Message \u003C docs.length){\\n startFrom = logs[0].Message;\\n }\\n\\n size = docs.length;\\n count = startFrom;\\n log.info(\\\u0022Size: \\\u0022\u002Bsize\u002B\\\u0022, Start From: \\\u0022\u002BstartFrom);\\n\\n //Iterate through all tractors to request weather data via geonames api\\n for (var i = startFrom; i \u003C docs.length; i\u002B\u002B){\\n var tractorDetail = docs[i];\\n\\n if (tractorDetail.TractorID){\\n // modules.logger.info(JSON.stringify(booking));\\n makeRequest(tractorDetail);\\n\\n } else {\\n count\u002B\u002B;\\n shouldCompleteRequest(); \\n } //End if booking is not 0\\n\\n } //end for loop\\n \\t\\t} else {\\n response.complete();\\n }\\n });\\n });\\n \\n var makeRequest = function (tractorDetail){\\n \\tmodules.request.request(getRequestOptions(tractorDetail), function(err2, resp, body) {\\n if(err2) {\\n count\u002B\u002B;\\n\\t\\t\\t\\t\\t\\tshouldCompleteRequest();\\n } else {\\n if(!body) {\\n modules.logger.info(\\\u0022There was no data in body for booking: \\\u0022\u002B url);\\n count\u002B\u002B;\\n\\t\\t\\t\\t\\t\\t\\tshouldCompleteRequest(); \\n } else {\\n updateTractorDetailCollection(tractorDetail, body);\\n }\\n }\\n }); //end request \\n} \\n \\nvar updateTractorDetailCollection = function (tractorDetail, body){\\n var engineHoursDistanceCoveredArr = computeEngineHours(body);\\n tractorDetailCollection.update({_id:tractorDetail._id}, \\n {$set: {\\n \\\u0022EngineHours\\\u0022:engineHoursDistanceCoveredArr[0],\\n \\\u0022TotalDistanceCovered\\\u0022:engineHoursDistanceCoveredArr[1] \\n }}, \\n {upsert: false, _id:1}, \\n function(tractorErr, tractorDetailDoc){\\n \\t\\t\\tcount\u002B\u002B;\\n shouldCompleteRequest();\\n }); //End update tractor detail with active time today \\n// modules.logger.info(\\\u0022Count: \\\u0022\u002Bcount);\\n } //end updateTractorDetailCollection function \\n\\n\\n var shouldCompleteRequest = function(){\\n var duration = modules.moment().valueOf() - startTime;\\n if (count \u003E= size || duration \u003E= timeout){\\n log.info(\\\u0022Total: \\\u0022\u002Bcount);\\n\\n //Update logger and finish task\\n loggerCollection.update({logID:LOG_ID}, {$set: {Message:count}}, {upsert: false}, function(logErr, logDoc){\\n response.complete(); \\n }); //End update logger collection with last count \\n }//end if \\n }\\n} //end onRequest function\\n\\n\\nfunction computeEngineHours(body){\\n var engineHoursDistanceCoveredArr = []; \\n try {\\n if (body){\\n var totalEngineHours = 0;\\n var totalDistanceCovered = 0;\\n for (var i = 0; i \u003C body.length; i\u002B\u002B){\\n totalEngineHours \u002B= Number(body[i].total_active_time) \u002B Number(body[i].total_inactive_time);\\n totalDistanceCovered \u002B= Number(body[i].total_distance);\\n }\\n engineHoursDistanceCoveredArr.push(Math.round(totalEngineHours/3600));\\nengineHoursDistanceCoveredArr.push(Math.round(totalDistanceCovered)); \\n return engineHoursDistanceCoveredArr;\\n }\\n } catch(err){\\n } \\n \\n return engineHoursDistanceCoveredArr;\\n}\\n\\nfunction getRequestOptions(tractorDetail){\\n\\tvar url = \\\u0022https://cloud.hellotractor.com/api/v1/tractors/daily/activities/summary?tractor_id=\\\u0022\u002BtractorDetail.TractorID;\\n var requestOptions = {url:url, method: \u0027GET\u0027, \\n\\t\\t\\t\\theaders: {\\n \\t\u0027Content-Type\u0027: \u0027application/json\u0027,\\n \\t\u0027Accept\u0027: \u0027application/json\u0027\\n \\t},\\n json: true\\n }; \\n return requestOptions;\\n}\u0022\r\n },\r\n \u0022Update2TrackTractorEngineHours\u0022 : {\r\n \u0022code\u0022 : \u0022//Runs every three minutes to compute the total engine hours\\n//and total distance covered (killometers) for all 2track tractors on //cloud.hellotractor.com\\n\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCollection = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var dailyTractorActivityCollection = modules.collectionAccess.collection(\\\u0022DailyTractorActivity\\\u0022);\\n var log = modules.logger;\\n var loggerCollection= modules.collectionAccess.collection(\\\u0022Logger\\\u0022);\\n var LOG_ID = 110;\\n var count = 0;\\n var size = 0;\\n var startTime = modules.moment().valueOf();\\n var todaysDate = modules.moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n var timeout = 19990; //milliseoncs\\n// var query = {TractorID: {$gte:500000}, LastActiveTime: {$gte:todaysDate}};\\n var query = {TractorID: {$lt:500000}}; \\n \\n loggerCollection.find({logID:LOG_ID}, {}, function(err1, logs){ \\n tractorDetailCollection.find(query, {}, function(err, docs){\\n if (err){\\n response.complete();\\n } else if (docs.length \u003E 0){\\n var startFrom = 0;\\n if (logs[0].Message \u003C docs.length){\\n startFrom = logs[0].Message;\\n }\\n\\n size = docs.length;\\n count = startFrom;\\n log.info(\\\u0022Size: \\\u0022\u002Bsize\u002B\\\u0022, Start From: \\\u0022\u002BstartFrom);\\n\\n //Iterate through all tractors to request weather data via geonames api\\n for (var i = startFrom; i \u003C docs.length; i\u002B\u002B){\\n var tractorDetail = docs[i];\\n\\n if (tractorDetail.TractorID){\\n // modules.logger.info(JSON.stringify(booking));\\n makeRequest(tractorDetail);\\n\\n } else {\\n count\u002B\u002B;\\n shouldCompleteRequest(); \\n } //End if booking is not 0\\n\\n } //end for loop\\n \\t\\t} else {\\n response.complete();\\n }\\n });\\n });\\n \\n var makeRequest = function (tractorDetail){\\n var query = {TractorID:tractorDetail.TractorID};\\n \\n dailyTractorActivityCollection.find(query, function(err, docs){\\n// modules.logger.info(\\\u0022After fetching daily tractor activities.\\\u0022); \\n if (err){\\n count\u002B\u002B;\\n\\t\\t\\t\\t\\t\\tshouldCompleteRequest();\\n } else {\\n updateTractorDetailCollection(tractorDetail, docs);\\n }\\n }); \\n} \\n \\nvar updateTractorDetailCollection = function (tractorDetail, body){\\n var engineHoursDistanceCoveredArr = computeEngineHours(body);\\n tractorDetailCollection.update({_id:tractorDetail._id}, \\n {$set: {\\n \\\u0022EngineHours\\\u0022:engineHoursDistanceCoveredArr[0],\\n \\\u0022TotalDistanceCovered\\\u0022:engineHoursDistanceCoveredArr[1] \\n }}, \\n {upsert: false, _id:1}, \\n function(tractorErr, tractorDetailDoc){\\n \\t\\t\\tcount\u002B\u002B;\\n shouldCompleteRequest();\\n }); //End update tractor detail with active time today \\n// modules.logger.info(\\\u0022Count: \\\u0022\u002Bcount);\\n } //end updateTractorDetailCollection function \\n\\n\\n var shouldCompleteRequest = function(){\\n var duration = modules.moment().valueOf() - startTime;\\n if (count \u003E= size || duration \u003E= timeout){\\n log.info(\\\u0022Total: \\\u0022\u002Bcount);\\n\\n //Update logger and finish task\\n loggerCollection.update({logID:LOG_ID}, {$set: {Message:count}}, {upsert: false}, function(logErr, logDoc){\\n response.complete(); \\n }); //End update logger collection with last count \\n }//end if \\n }\\n} //end onRequest function\\n\\n\\nfunction computeEngineHours(body){\\n var engineHoursDistanceCoveredArr = []; \\n try {\\n if (body){\\n var totalEngineHours = 0;\\n var totalDistanceCovered = 0;\\n for (var i = 0; i \u003C body.length; i\u002B\u002B){\\n totalEngineHours \u002B= Number(body[i].TotalTimeActive);\\n totalDistanceCovered \u002B= Number(body[i].DistanceTravelled);\\n }\\n engineHoursDistanceCoveredArr.push(Math.round(totalEngineHours/3600));\\nengineHoursDistanceCoveredArr.push(Math.round(totalDistanceCovered/1000)); \\n return engineHoursDistanceCoveredArr;\\n }\\n } catch(err){\\n } \\n \\n return engineHoursDistanceCoveredArr;\\n}\u0022\r\n },\r\n \u0022FetchBookingAgentsBetweenDateRange\u0022 : {\r\n \u0022code\u0022 : \u0022 function onRequest(request, response, modules) {\\n var BookingAgent = modules.collectionAccess.collection(\u0027BookingAgents\u0027);\\n \\n //fecth from july to august\\n var from = \\\u00222018-08-30\\\u0022;\\n var to= \\\u00222018-09-06\\\u0022;\\n var agentsArr = [];\\n BookingAgent.find(/*{\\\u0022createdAt\\\u0022:{$gte:from, $lte:to}}*/{}, {\\\u0022name\\\u0022:\\\u00221\\\u0022, \\\u0022phone\\\u0022:\\\u00221\\\u0022, \\\u0022address\\\u0022:\\\u00221\\\u0022}, function(err, agents){\\n var count = 0;\\n \\tif(!err){\\n\\t\\t\\t\\tagents.forEach(function(agent){\\n agentsArr.push({FullName:agent.name, PhoneNumber: agent.phone, AgentAddress: agent.address ? agent.address: \\\u0022\\\u0022, registrationDate: agent.createdAt ? agent.createdAt.split(\\\u0022 \\\u0022)[0] : \\\u0022\\\u0022});\\n \\n count\u002B\u002B;\\n \\n if( count == agents.length ){\\n modules.logger.info(JSON.stringify(agentsArr));\\n response.complete();\\n }\\n }) \\n }\\n else {\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B err); \\n response.complete();\\n }\\n }); \\n}\\n\\n\u0022\r\n },\r\n \u0022removeDuplicateBookingAgents\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var BookingAgents = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n BookingAgents.find({}, function(err, bookingAgents){\\n \\tvar bookingAgentsHash = {};\\n \\tvar count = 0;\\n \\tbookingAgents.forEach( function(bookingAgent){\\n \\n\\t\\t\\tif( ! bookingAgentsHash[bookingAgent.bookingAgentID] ){\\n bookingAgentsHash[bookingAgent.bookingAgentID] = [];\\n }\\n \\n bookingAgentsHash[bookingAgent.bookingAgentID].push( bookingAgent );\\n count\u002B\u002B;\\n \\n if( count === bookingAgents.length){\\n \\n for( bookingAgentID in bookingAgentsHash ){\\n \\n var agentsDuplicateCount = bookingAgentsHash[bookingAgentID].length;\\n var bookingAgentID = bookingAgentsHash[bookingAgentID][0].bookingAgentID;\\n var singleAgentRecord = bookingAgentsHash[bookingAgentID][0];\\n if( agentsDuplicateCount \u003E 1 ){\\n \\t\\t\\t\\t\\tBookingAgents.remove({bookingAgentID: bookingAgentID }, function(err){});\\n BookingAgents.save(singleAgentRecord, function(err, saved){}); \\n } \\n }\\n \\n modules.logger.info(\\\u0022The data are here! \\\u0022 \u002B JSON.stringify(bookingAgentsHash));\\n \\tresponse.complete();\\n }\\n \\t\\n \\t})\\n \\n })\\n}\u0022\r\n },\r\n \u0022deleteBookingAgents\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Booking = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n \\n// var BookingAgents = modules.collectionAccess.collection(\u0027BookingAgents\u0027);\\n \\n// BookingAgents.remove({}, {multi:true}, function(err, done){\\n// if( ! err ){\\n// modules.logger.info(\u0027all deleted\u0027);\\n// response.complete();\\n\\n// }\\n// else {\\n// modules.logger.info(\\\u0022 there was an error \\\u0022 \u002B err);\\n// response.complete();\\n\\n// }\\n// })\\n \\n Booking.remove({}, function(err, bookings){\\n// modules.logger.info(\\\u0022The bookings with orgID of 305 is \\\u0022 \u002B bookings.length );\\n response.complete();\\n })\\n \\n \\n}\u0022\r\n },\r\n \u0022updateBookingsOrgID\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\nvar now = modules.moment.utc();\\nvar today = now.format(\\\u0022YYYY-MM-DD HH:MM:SS\\\u0022);\\nvar Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\nvar dateRangeQuery = {\\\u0022_kmd.ect\\\u0022: { $lte: \\\u00222018-06-30\\\u0022} , orgID:\\\u0022305\\\u0022}; \\n \\n Booking.update(dateRangeQuery, {$set: { orgID: \\\u0022110\\\u0022, updatedAt:now }}, {\\\u0022multi\\\u0022:true},function(err){\\n if(!err){\\n modules.logger.info(\\\u0022all updated\\\u0022);\\n response.complete();\\n }\\n });\\n}\u0022\r\n },\r\n \u0022_generateBookingAgentsBookingsReport\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\n var Booking = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var BookingAgent = modules.collectionAccess.collection(\\\u0022BookingAgents\\\u0022);\\n\\tvar bookingsHash = {};\\n var bookingAgentsHash = {};\\n var bookingAgentsArr = [];\\n \\n //Find all bookings and form hash of bookingAgentId to bookings array \\n Booking.find({},{name:1, bookingAgentID:1, phone:1}, function(err,_bookings){\\n _bookings.forEach(function(_booking){\\n bookingsHash[_booking.bookingAgentID] = bookingsHash[_booking.bookingAgentID] || [];\\n bookingsHash[_booking.bookingAgentID].push(_booking);\\n })\\n //Find all booking agents and form a hash of the bookingAgentID to the agent details\\n BookingAgent.find({}, function(err, _bookingAgents){\\n\\n _bookingAgents.forEach( function(_bookingAgent){\\n if( bookingsHash[_bookingAgent.bookingAgentID] !== undefined){\\n \\n bookingAgentsArr.push( {fullName:_bookingAgent.name , Phone:_bookingAgent.phone, totalBookings:bookingsHash[_bookingAgent.bookingAgentID].length })\\n \\n }\\n })\\n\\n modules.logger.info(\\\u0022The agent bookings are \\\u0022 \u002B JSON.stringify( bookingAgentsArr ));\\n response.complete();\\n\\n})\\n \\n })\\n \\n}\u0022\r\n },\r\n \u0022getBookingAgentFarmersDetails\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\nvar Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n \\nvar bookingAgentID = \\\u00221521828670\\\u0022;\\nvar boookingAgentBookings = [];\\n \\n Booking.find({bookingAgentID:bookingAgentID }, function(err, _agentBookings ){\\n \\n _agentBookings.forEach( function(_booking){\\n boookingAgentBookings.push( {\\n farmerName: _booking.farmerName,\\n farmerPhone: _booking.farmerPhone\\n });\\n })\\n \\n modules.logger.info(\\\u0022The agent bookings are \\\u0022 \u002B JSON.stringify(boookingAgentBookings));\\n response.complete(200);\\n \\n })\\n\\n}\u0022\r\n },\r\n \u0022_duplicateCreatorRemover\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var BookingAgent = modules.collectionAccess.collection(\u0027BookingAgents\u0027)\\n \\n BookingAgent.find({}, function(err, _agents){\\n var count = 0;\\n _agents.map(function(_agent){\\n var dupCreator = _agent._acl.creator.creator;\\n modules.logger.info( \\\u0022the dup creator is \\\u0022 \u002B dupCreator );\\n \\n if(dupCreator === undefined ){\\n\\t\\t\\t\\t\\tcount\u002B\u002B;\\n }\\n else{\\n \\tvar newCreatorFormat = {\\\u0022creator\\\u0022:dupCreator};\\n BookingAgent.update({_id: _agent._id}, {$set:{_acl:newCreatorFormat}}, function(err){\\n count\u002B\u002B;\\n })\\n }\\n \\n if( count === _agents.length){\\n modules.logger.info(\\\u0022all updated\\\u0022);\\n response.complete();\\n }\\n \\n })\\n })\\n \\n \\n}\u0022\r\n },\r\n \u0022exportUsersEmail\u0022 : {\r\n \u0022code\u0022 : \u0022/** find users whose email address is not empty and export all the email addresses **/\\n\\nfunction onRequest(request, response, modules) {\\n var userEmailsArray = [];\\n var User = modules.collectionAccess.collection(\u0027user\u0027);\\n \\tvar count = 0;\\n \\tUser.find({}, function(err,_users){\\n modules.logger.info(JSON.stringify(_users));\\n var usersCount = _users.length;\\n _users.map( function(_user){\\n if(_user.email === undefined || _user.email ===\\\u0022\\\u0022 ){\\n count\u002B\u002B;\\n }\\n else{\\n userEmailsArray.push({email: _user.email})\\n count\u002B\u002B; \\n }\\n\\n if( count === usersCount ) {\\n modules.logger.info(JSON.stringify(userEmailsArray));\\n response.complete();\\n \\t}\\n\\n })\\n \\n })\\n \\n}\u0022\r\n },\r\n \u0022PushEmail\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var message = request.body.message,\\n subject = request.body.subject,\\n from = request.body.from,\\n to = request.body.to,\\n cc = \\\u0022apps2@hellotractor.com\\\u0022,\\n bcc = \\\u0022abdulmajid@hellotractor.com\\\u0022,\\n replyTo = \\\u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\\\u0022,\\n emailType = request.body.emailType,\\n userType = request.body.userType;\\n \\n var email = modules.email;\\n email.send(from, //from\\n to, //to\\n subject, //subject\\n message, //text_body \\n replyTo, //reply_to\\n null, //html_body\\n cc, //cc\\n bcc, //bcc\\n function(err, result) {\\n \\n var mail = {\\n \\\u0022_acl\\\u0022: modules.kinvey.entity()._acl,\\n \\\u0022_kmd\\\u0022: modules.kinvey.entity()._kmd,\\n \\\u0022from\\\u0022: from,\\n \\\u0022message\\\u0022: message,\\n \\\u0022to\\\u0022: to,\\n \\\u0022cc\\\u0022: cc,\\n \\\u0022bcc\\\u0022: bcc,\\n \\\u0022emailType\\\u0022: emailType,\\n \\\u0022userType\\\u0022: userType,\\n \\\u0022reply_to\\\u0022: replyTo\\n };\\n \\n modules.collectionAccess.collection(\\\u0022Emails\\\u0022).save(mail, function(err2) {\\n response.body = mail;\\n return response.complete();\\n });\\n });\\n}\u0022\r\n },\r\n \u0022SendMaintenanceAlert\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var Maintenance = modules.collectionAccess.collection(\u0027MaintenanceRepo\u0027)\\n var Push = modules.push;\\n var Notification = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n var User = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var TractorDetail = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var AlltractorDetails;\\n\\n try {\\n TractorDetail.find({ maintenanceNotification: true }, function(\\n err,\\n tractorDetails\\n ) {\\n if (err) {\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B err);\\n response.complete();\\n } else {\\n //populate the AllEngineHoursTractorArr array\\n getTractorDetailByEngineHours(tractorDetails);\\n\\n var workCount = 0;\\n\\n modules.logger.info(\\n \\\u0022all the tractor details are \\\u0022 \u002B\\n JSON.stringify(AllEngineHoursTractorArr)\\n );\\n\\n AllEngineHoursTractorArr.forEach(function(tractorsByEngineHourArr) {\\n //filter the tractor details to make sure tractorModellD is greater than zero\\n var ValidTractorDetails = getValidTractorDetails(\\n tractorsByEngineHourArr\\n );\\n\\n var tractorsModelHash = {};\\n\\n ValidTractorDetails.forEach(function(tractorDetail) {\\n // Form a hashMap format of the tractorModellD to the tractorDetail\\n tractorsModelHash[tractorDetail.TractorModelID] = tractorDetail;\\n });\\n\\n var checksHash = {};\\n // Find all maintenance and transform it to a hash of tractorModelId To the array of checks\\n Maintenance.find({}, function(err, checks) {\\n var allTractorOwners = getTractorsCreator(tractorDetails);\\n\\n // Find all the user by the creators array : allTractorOwner\\n User.find({ \\\u0022_acl.creator\\\u0022: { $in: allTractorOwners } }, function(\\n err,\\n tractorOwners\\n ) {\\n if (err) {\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B err);\\n response.complete();\\n } else {\\n var tractorOwnerHash = {};\\n\\n // Convert the tractorOwners array to hashMap format of creator : tractorOwner\\n tractorOwners.map(function(tractorOwner) {\\n tractorOwnerHash[tractorOwner._acl.creator] = tractorOwner;\\n });\\n\\n // Loop over the tractor details to send notificat ion for each tractor maintenance\\n tractorsByEngineHourArr.forEach(function(tractorDetail) {\\n var tractorOwner =\\n tractorOwnerHash[tractorDetail._acl.creator];\\n var tractorEngineHours = tractorDetail.EngineHours;\\n var tractorModellD = tractorDetail.TractorModelID;\\n\\n modules.logger.info(\\\u0022engine hours \\\u0022 \u002B tractorEngineHours);\\n\\n //Filter the maintenance to get the ones that match the tractor detail engine hour and model Id\\n var _tractorChecks = checks.filter(function(check) {\\n return (\\n check.tractorModelId === tractorModellD \u0026\u0026\\n check.engineHours === tractorEngineHours\\n );\\n });\\n\\n // Send notification alert only if there is a tractor owner and maintenance alert for the tractot\\n if (tractorOwner !== undefined \u0026\u0026 _tractorChecks.length \u003E 0) {\\n var formattedMaintenanceChecks = getFormatedChecksMessage(\\n _tractorChecks\\n );\\n\\n var notificationMessage =\\n \\\u0022Hi \\\u0022 \u002B\\n tractorOwner.first_name \u002B\\n \\\u0022,\\\u0022 \u002B\\n formattedMaintenanceChecks \u002B\\n \\\u0022 recommended for the tractor: \\\u0022 \u002B\\n tractorDetail.TractorName;\\n\\n var tractorID = tractorDetail.TractorID;\\n\\n //Set the push notification message\\n var maintenanceAlertMessage = JSON.stringify({\\n message: notificationMessage,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022maintenance\\\u0022,\\n data: _tractorChecks,\\n tractorID: tractorID,\\n id: tractorDetail._id,\\n tractorModelID: tractorDetail.TractorModelID,\\n engineHours: tractorDetail.EngineHours,\\n _acl: tractorOwner._acl,\\n _kmd: response._kmd\\n });\\n\\n // Check if the notification has not been sent\\n var notification_action =\\n \\\u0022maintenance_alert_for_\\\u0022 \u002B tractorDetail.EngineHours;\\n modules.logger.info(\\n \\\u0022notification_action is \\\u0022 \u002B notification_action\\n );\\n\\n Notification.find(\\n {\\n tractorId: tractorDetail.TractorID,\\n action: notification_action\\n },\\n function(err, alerts) {\\n modules.logger.info(\\n \\\u0022alerts length is \\\u0022 \u002B alerts.length\\n );\\n\\n //Send alerts only if it has not been sent before.\\n if (alerts.length == 0) {\\n if (\\n Push.send(tractorOwner, maintenanceAlertMessage)\\n ) {\\n modules.logger.info(\\n \\\u0022mainatenance checks alert sent to \\\u0022 \u002B\\n tractorOwner.username\\n );\\n\\n //Set the notification details\\n var notification = {\\n message: notificationMessage,\\n type: \\\u0022action\\\u0022,\\n read: false,\\n tractorId: tractorID,\\n userId: tractorDetail._id,\\n action: notification_action\\n };\\n\\n //Save the notification to the collection\\n Notification.save(notification, function(\\n err,\\n saved\\n ) {\\n if (!err) {\\n modules.logger.info(\\n \\\u0022notification saved \\\u0022 \u002B JSON.stringify(saved)\\n );\\n workCount\u002B\u002B;\\n if (\\n workCount === AllEngineHoursTractorArr.length\\n ) {\\n response.complete();\\n }\\n } else {\\n modules.logger.info(\\\u0022There was an error\\\u0022);\\n }\\n });\\n }\\n } else {\\n workCount\u002B\u002B;\\n if (workCount === AllEngineHoursTractorArr.length) {\\n response.complete();\\n }\\n }\\n }\\n );\\n }\\n });\\n }\\n });\\n });\\n });\\n }\\n });\\n } catch (err) {\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B err);\\n response.complete(err);\\n }\\n}\\n\u0022\r\n },\r\n \u0022fetch_tractors_activities\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n* This endpoint returns daily tractor activities for tractor ids in the posted request \\n*\\n*/\\n\\nfunction onRequest(request, response, modules) {\\n\\tvar startTime = new Date();\\n var count=0;\\n modules.logger.info(request);\\n modules.logger.info(request.body);\\n \\n// return response.error(JSON.stringify(request.body));\\n \\n var requestBody = request.body.tractor_ids.split(\u0027,\u0027),\\n \\t\\tfrom_date = request.body.from_date,\\n to_date = request.body.to_date,\\n operator_ids = [],\\n \\t\\tdate_filter_obj = {},\\n DailyTractorActivity = modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027),\\n TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027),\\n TractorOperator = modules.collectionAccess.collection(\u0027TractorOperator\u0027),\\n tractor_activities,\\n tractor_operators,\\n tractor_details;\\n \\n\\t//convert each needle in the tractorIds haystack to typeof Number to pass the schema type of TractorID. \\n for(var i=0; i\u003C requestBody.length; i\u002B\u002B){\\n requestBody[i] = Number( requestBody[i]);\\n }\\n \\n \\n date_filter_obj = from_date \u0026\u0026 to_date ? { $gte:from_date , $lte:to_date } :date_filter_obj = from_date;\\n \\n TractorDetail.find({\u0027TractorID\u0027: {$in: requestBody }}, function(err, tractorDetails ){\\n if(tractorDetails.length \u003E 0){\\n tractor_details = tractorDetails;\\n cb(TractorOperator, operator_ids,tractor_activities, tractor_details, startTime )\\n }\\n \\n });\\n \\n \\n /** request for daily tractors activities */\\n DailyTractorActivity.find( { \\\u0022TractorID\\\u0022: {$in: requestBody }, \\\u0022day\\\u0022:date_filter_obj },function(err,docs){\\n tractor_activities = docs;\\n if(docs.length \u003E 0){\\n tractor_activities = docs ;\\n docs.forEach( function(doc){\\n if(doc.OperatorID){\\n operator_ids.push(doc.OperatorID);\\n }\\n count\u002B\u002B;\\n if (count == docs.length){\\n\\t\\t\\t\\t\\t\\t\\tcb(TractorOperator, operator_ids, tractor_activities, tractor_details, startTime );\\n }\\n }); \\n }\\n response.complete();\\n });\\n \\n}\\n\\nfunction cb(TractorOperator, operator_ids,tractor_activities, tractor_details, start ){\\n if( tractor_activities \u0026\u0026 tractor_details ){\\n \\tmodules.logger.info(operator_ids );\\n \\n /** Tractor Details HashTable **/\\n var tractorDetailsObj = {};\\n tractor_details.forEach( function(tractor_detail){\\n tractorDetailsObj[tractor_detail.TractorID] = tractor_detail\\n });\\n \\n /** operators hashTable **/\\n var operatorDetailsObj = {};\\n TractorOperator.find({\u0027OperatorID\u0027: {$in: operator_ids }}, function(err, Operators ){\\n Operators.forEach( function(operator){\\n operatorDetailsObj[operator.OperatorID] = operator\\n });\\n \\n if(tractor_activities.length \u003E 0){\\n for(var i=0; i\u003Ctractor_activities.length;i\u002B\u002B ){\\n if( tractor_activities[i].OperatorID ){\\n \\t\\t\\ttractor_activities[i].OperatorName = operatorDetailsObj[tractor_activities[i].OperatorID] ? operatorDetailsObj[tractor_activities[i].OperatorID].OperatorName : null; \\n }\\n tractor_activities[i].TractorName = tractorDetailsObj[tractor_activities[i].TractorID].TractorName;\\n }\\n response.body = tractor_activities;\\n// var end = new Date() - start ;\\n// modules.logger.info(\\\u0022Execution time was :\\\u0022 \u002B end \u002B\\\u0022ms\\\u0022);\\n }\\n });\\n\\t\\n}\\n \\n}\u0022\r\n },\r\n \u0022PushDailyReports\u0022 : {\r\n \u0022code\u0022 : \u0022\\n//Sends a CSV report of service bookings sent daily at 12am\\n//Created on 17/01/2019 by Abdulmajid\\nfunction onRequest(request, response, modules) {\\n var january = \\\u00222019-01-01\\\u0022;\\n var oneDayAgo = modules.moment.utc().subtract(24, \\\u0022hours\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022);\\n var oneDayAgo = january;\\n var email = modules.email;\\n var kinvey = modules.kinvey;\\n var cServiceBookings = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var cEmails = modules.collectionAccess.collection(\\\u0022Emails\\\u0022);\\n\\n //Constants\\n const from = \\\u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\\\u0022;\\n const to = \\\u0022apps2@hellotractor.com\\\u0022;\\n const cc = \\\u0022abubakar@hellotractor.com\\\u0022;\\n const bcc = \\\u0022deborah@hellotractor.com\\\u0022;\\n const replyTo = \\\u0022Hello Tractor App \u003Capps2@hellotractor.com\u003E\\\u0022;\\n const subject = \\\u0022Booking Report Since: \\\u0022 \u002B oneDayAgo;\\n// const subject = \\\u0022Booking Report for Today: \\\u0022 \u002B oneDayAgo;\\n const emailType = \\\u0022HTBookingCSVReport\\\u0022;\\n const userType = \\\u00220\\\u0022; //Hello Tractor Admin\\n\\n cServiceBookings.find({ createdAt: { $gte: oneDayAgo } }, function(\\n err,\\n serviceBookings\\n ) {\\n if (err || serviceBookings.length \u003C 1) {\\n response.complete();\\n } else {\\n var report = buildBookingsReport(serviceBookings);\\n pushCSVBookingsReport(\\n response,\\n email,\\n cEmails,\\n kinvey,\\n from,\\n to,\\n subject,\\n report,\\n replyTo,\\n cc,\\n bcc,\\n emailType,\\n userType\\n );\\n }\\n });\\n}\\n\\nfunction buildBookingsReport(serviceBookings) {\\n //Extract headers\\n var report = \\\u0022\\\u0022;\\n var comma = \\\u0022,\\\u0022;\\n var headers = \\\u0022_id,creator,ect,Service Date,Booking Id,BookingAgentID,Tractor Paired To,\\\u0022\u002B\\n \\\u0022Operator ID,Booking Status,Cluster Id,Created At,Updated At,Distance To Destination,\\\u0022\u002B\\n \\\u0022Farm Location,Farmer Name,Farmer Phone,Gender,Hectares Serviced,Latitude,Longitude,Org Id,Primary Crop,Secondary Crop, BAName, BAPhone, Service Type\\\u0022\u002B\\\u0022\\\\n\\\u0022;\\n\\n \\n\\n report \u002B= headers;\\n\\n serviceBookings.forEach(function(booking){\\n var bookingAgent = booking.bookingAgentData? JSON.parse(booking.bookingAgentData):\\\u0022\\\u0022;\\n var row = \\n toString(booking._id) \u002B comma \u002B \\n toString(booking._acl.creator) \u002B comma \u002B\\n toString(booking._kmd.ect) \u002B comma \u002B\\n toString(booking.serviceDate) \u002B comma \u002B\\n toString(booking.bookingID) \u002B comma \u002B\\n toString(booking.bookingAgentID) \u002B comma \u002B \\n toString(booking.tractorPairedTo) \u002B comma \u002B\\n toString(booking.OperatorID) \u002B comma \u002B\\n bookingStatus(booking.bookingStatus) \u002B comma \u002B\\n toString(booking.clusterID) \u002B comma \u002B\\n toString(booking.createdAt) \u002B comma \u002B\\n toString(booking.updatedAt) \u002B comma \u002B\\n toString(booking.distanceToDestination) \u002B comma \u002B\\n toString(booking.farmLocation) \u002B comma \u002B\\n toString(booking.farmerName) \u002B comma \u002B\\n toString(booking.farmerPhone) \u002B comma \u002B\\n toString(booking.gender) \u002B comma \u002B\\n toString(booking.hectaresServiced) \u002B comma \u002B\\n toString(booking.latitude) \u002B comma \u002B\\n toString(booking.longitude) \u002B comma \u002B\\n toString(booking.orgID) \u002B comma \u002B\\n toString(booking.primaryCrop) \u002B comma \u002B\\n toString(booking.secondaryCrop) \u002B comma \u002B\\n toString(bookingAgent?bookingAgent.name:\\\u0022\\\u0022) \u002B comma \u002B\\n toString(bookingAgent?bookingAgent.phone:\\\u0022\\\u0022) \u002B comma \u002B\\n getServiceName(booking.serviceType) \u002B \\\u0022\\\\n\\\u0022;\\n report \u002B= row; \\n });\\n \\n return report;\\n}\\n\\nfunction toString(text){\\n return JSON.stringify(text);\\n}\\n\\n\\n\\n\\n\\nfunction getServiceName (serviceCode) {\\n var service_name;\\n switch (serviceCode) {\\n case \\\u0022109\\\u0022:\\n service_name = \u0027Harrowing\u0027\\n break;\\n case \\\u0022104\\\u0022:\\n service_name = \u0027Planting/Seeding\u0027\\n break;\\n case \\\u0022105\\\u0022:\\n service_name = \u0027Irrigating\u0027\\n break;\\n case \\\u0022102\\\u0022:\\n service_name = \u0027Ploughing\u0027\\n break;\\n case \\\u0022101\\\u0022:\\n service_name = \u0027Tilling\u0027\\n break;\\n case \\\u0022103\\\u0022:\\n service_name = \u0027Ridging\u0027\\n break;\\n case \\\u0022107\\\u0022:\\n service_name = \u0027Trailing\u0027\\n break;\\n case \\\u0022108\\\u0022:\\n service_name = \u0027Harvesting\u0027\\n break;\\n case \\\u0022106\\\u0022:\\n service_name = \u0027Harvesting\u0027\\n break;\\n case \\\u0022110\\\u0022:\\n service_name = \u0027Spreading\u0027\\n break;\\n case \\\u0022112\\\u0022:\\n service_name = \u0027Sprayer\u0027\\n break;\\n case \\\u0022113\\\u0022:\\n service_name = \u0027Bioagtive\u0027\\n break;\\n case \\\u0022114\\\u0022:\\n service_name = \u0027Dozer\u0027\\n break;\\n case \\\u0022115\\\u0022:\\n service_name = \u0027Mower\u0027\\n break;\\n default:\\n service_name = \\\u0022Service Code: \\\u0022\u002BserviceCode;\\n break;\\n }\\n return service_name;\\n }\\n\\n\\n\\n\\n\\n\\n\\n//Sends the provided report to the user\u0027s email\\nfunction pushCSVBookingsReport(\\n response,\\n email,\\n cEmails,\\n kinvey,\\n from,\\n to,\\n subject,\\n report,\\n replyTo,\\n cc,\\n bcc,\\n emailType,\\n userType\\n) {\\n email.send(\\n from, //from\\n to, //to\\n subject, //subject\\n report, //text_body\\n replyTo, //reply_to\\n null, //html_body\\n cc, //cc\\n bcc, //bcc\\n function(err, result) {\\n if (err) {\\n response.complete();\\n } else {\\n var mail = {\\n _acl: kinvey.entity()._acl,\\n _kmd: kinvey.entity()._kmd,\\n from: from,\\n message: report,\\n to: to,\\n cc: cc,\\n bcc: bcc,\\n emailType: emailType,\\n userType: userType,\\n reply_to: replyTo\\n };\\n\\n cEmails.save(mail, function(err2) {\\n// response.body = mail;\\n response.complete();\\n });\\n }\\n }\\n );\\n}\\n\\nfunction bookingStatus(status){\\n if (status == 0){\\n return \\\u0022New\\\u0022;\\n } else if (status == 1 || status == 2){\\n return \\\u0022Paired\\\u0022;\\n } else if (status == 3){\\n return \\\u0022Completed\\\u0022\\n } else {\\n return \\\u0022Unknown Status\\\u0022;\\n }\\n}\u0022\r\n },\r\n \u0022_test\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var userCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var tractorOwnerCol = modules.collectionAccess.collection(\\\u0022TractorOwner\\\u0022); \\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022); \\n var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022); \\n var serviceBookingsCol = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022); \\n var tractorOperatorCol = modules.collectionAccess.collection(\\\u0022TractorOperator\\\u0022); \\n // bookingAgentCol.findOne({\\\u0022_acl.creator\\\u0022: \\\u00225d15fa675c95ad2e46e53b9c\\\u0022}, function(err, user){\\n // modules.logger.info(\\\u0022User: \\\u0022\u002BJSON.stringify(user));\\n // \\tresponse.complete(); \\n // });\\n // userCol.findOne({\\\u0022_acl.creator\\\u0022: \\\u00225dc53d5e1ffe08372c5cf20c\\\u0022}, function(userErr, user){\\n // \\tvar tractorOwner = {\\n // first_name: user.first_name,\\n // last_name: user.last_name,\\n // phone: user.phone,\\n // email: user.email,\\n // phone: user.phone,\\n // username: user.username, \\n // orgID: user.orgIDs,\\n // createdAt: modules.moment.utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027),\\n // updatedAt: modules.moment.utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027)\\n // };\\n \\n // // var entity = modules.kinvey.entity(bookingAgent);\\n // tractorOwner._acl = user._acl;\\n // tractorOwner._kmd = user._kmd; \\n \\n // tractorOwnerCol.save(tractorOwner, function(err) {\\n // if(err) {\\n // modules.logger.error(\u0027Query failed for creating tractor owner: \u0027 \u002B err);\\n // return response.error(err);\\n // } else {\\n // return response.complete(200);\\n // }\\n // }); \\n \\n \\n \\n // });\\n \\n // response.complete();\\n \\n // var oneDayAgo = modules.moment.utc().subtract(5, \\\u0022minutes\\\u0022); //.format(\\\u0022YYYY-MM-DD\\\u0022);\\n // \\t\\tmodules.logger.info(oneDayAgo);\\n // var i = {id: 100};\\n // modules.logger.info(i);\\n // response.complete();\\n \\n \\n // var count = 0;\\n // var tractorIds = [];\\n // var acl = {\\\u0022creator\\\u0022:\\\u00225e26e75b443e190015fd0bee\\\u0022};\\n // tractorDetailCol.find({\\\u0022_acl.creator\\\u0022: \\\u00225e26e75b443e190015fd0bee\\\u0022}, function (err, tractors){\\n // tractors.forEach(function(tractor){\\n // tractorIds.push(tractor.TractorID);\\n // });\\n \\n // var tractorIdToCopy = 502145;\\n // fuelHistoryCol.find({\\\u0022TractorID\\\u0022: tractorIdToCopy}, function(err, fuelHistoryList){\\n // fuelHistoryList.forEach(function(fuelHistory){\\n // tractorIds.forEach(function(tractorId){\\n // delete fuelHistory._id;\\n // fuelHistory._acl = acl;\\n // fuelHistory.TractorID = tractorId;\\n // fuelHistory.OperatorID = 1565008416787;\\n // fuelHistoryCol.save(fuelHistory, function(saveFuelErr, fuelSaved){\\n // count\u002B\u002B;\\n // finish(fuelHistoryList.length);\\n // })\\n // });\\n // })\\n // })\\n \\n // modules.logger.info(JSON.stringify(tractorIds));\\n // response.complete();\\n // });\\n \\n // var finish = function (fuelCount){\\n // if (count \u003E= (fuelCount * tractorIds.length)){\\n // modules.logger.info(\\\u0022Count saved: \\\u0022\u002B(fuelCount * tractorIds.length));\\n // response.complete();\\n // }\\n // }\\n \\n // var kmd = {_kmd: {\\\u0022lmt\\\u0022:\\\u00222020-01-22T13:33:33.862Z\\\u0022,\\\u0022ect\\\u0022:\\\u00222020-01-22T13:33:20.374Z\\\u0022}};\\n // var toSDate = {TOServiceDate: \\\u00222020-02-19\\\u0022};\\n // var date = {createdAt: \\\u00222020-01-21 12:58:14\\\u0022, updatedAt: \\\u00222020-01-21 12:58:14\\\u0022};\\n \\n \\n \\n // serviceBookingsCol.update({\\\u0022_acl.creator\\\u0022:\\\u00225e26f2b46706a300167614a3\\\u0022}, {$set: date}, {multi: true}, function(updateErr, updatedData){\\n // modules.logger.info(\\\u0022Booking agent bookings updated successfully: \\\u0022\u002BJSON.stringify(updatedData));\\n // response.complete();\\n // }) \\n \\n // var count = 0;\\n // serviceBookingsCol.find({\\\u0022_acl.creator\\\u0022:\\\u00225e26f2b46706a300167614a3\\\u0022}, function(findErr, bookingList){\\n // // modules.logger.info(\\\u0022Booking agent bookings updated successfully: \\\u0022\u002BJSON.stringify(updatedData));\\n // count = bookingList.length;\\n // modules.logger.info(\\\u0022Bookings to update: \\\u0022\u002Bcount);\\n // bookingList.forEach(function(booking){\\n // // booking.clusterID = clusterId.toString();\\n // // booking.bookingID = bookingId.toString();\\n // var docs = {$set: {serviceType: 101}};\\n \\n // serviceBookingsCol.update({_id: booking._id}, docs, {multi: true}, function(serviceBookingErr, serviceBokingUpdated){\\n // count--;\\n // finish();\\n // });\\n // });\\n // }) \\n \\n\\n var count = 0;\\n var tractorIds = [];\\n var operatorIds = [];\\n var acl = {\\\u0022creator\\\u0022:\\\u00225e26e75b443e190015fd0bee\\\u0022};\\n tractorDetailCol.find({\\\u0022_acl.creator\\\u0022: \\\u00225e26e75b443e190015fd0bee\\\u0022}, function (err, tractors){\\n // tractors.forEach(function(tractor){\\n // tractorIds.push(tractor.TractorID);\\n // });\\n modules.logger.info(\\\u0022Tractors found: \\\u0022\u002Btractors.length);\\n count = tractors.length;\\n tractors.forEach(function(tractor){\\n tractorOperatorCol.findOne({\\\u0022OperatorID\\\u0022: tractor.OperatorID}, function(err, operator){\\n var doc = {$set: {OperatorImageURL: operator.ImageLocation}}\\n fuelHistoryCol.update({\\\u0022TractorID\\\u0022:tractor.TractorID}, doc, {multi: true}, function(fuelErr, fuelUpdated){\\n count--;\\n finish();\\n })\\n })\\n })\\n });\\n \\n var finish = function (){\\n if (count \u003C= 0){\\n modules.logger.info(\\\u0022Bookings updated: \\\u0022\u002Bcount);\\n response.complete();\\n }\\n } \\n }\u0022\r\n },\r\n \u0022EngineHoursDistanceDiscoveredWeeklyAlert\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n //Use tractor details, Daily tractor activity and users collection\\n //1) find tractors\\n //2) loop through tractors to get engine hours and distance\\n //3) sort by acl to get tractors with same owner\\n //4) calcualate total distance and engine hours covered by all tractors for each user\\n //5) store the values in an array using acl as key\\n //6) loop through the users table and send engine hour and distance notification using acl.\\n\\n var Tractors = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n Tractors.find({}, { sort: { _acl: 1 } }, function(err, allTractors) {\\n if (err) {\\n modules.logger.info(\\\u0022error found\\\u0022 \u002B err);\\n response.error(300);\\n } else {\\n modules.logger.info(\\\u0022Total tractors: \\\u0022 \u002B allTractors.length);\\n handleMergeAcl(allTractors);\\n }\\n });\\n}\\n\\nfunction handleMergeAcl(tractors) {\\n var current_acl = \\\u0022\\\u0022;\\n var count = 0;\\n var counter = 0;\\n var tractorDetail = [];\\n var engineHours = 0;\\n var distanceCovered = 0;\\n\\n for (var i = 0; i \u003C tractors.length; i\u002B\u002B) {\\n if (current_acl == tractors[i]._acl.creator) {\\n if (tractors[i].EngineHours) {\\n engineHours = engineHours \u002B Number(tractors[i].EngineHours);\\n }\\n if (tractors[i].TotalDistanceCovered) {\\n distanceCovered =\\n distanceCovered \u002B Number(tractors[i].TotalDistanceCovered);\\n }\\n } else {\\n current_acl = tractors[i]._acl.creator;\\n if (tractors[i].EngineHours) {\\n engineHours = Number(tractors[i].EngineHours);\\n }\\n if (tractors[i].TotalDistanceCovered) {\\n distanceCovered = Number(tractors[i].TotalDistanceCovered);\\n }\\n count = count \u002B 1;\\n }\\n\\n tractorDetail[count - 1] = {\\n _id: count - 1,\\n _acl: {creator: current_acl},\\n EngineHours: engineHours,\\n TotalDistanceCovered: distanceCovered\\n };\\n\\n counter \u002B= 1;\\n \\n if (counter \u003E= tractors.length){\\n verifyUser(modules, response, tractorDetail); //datatype is an array\\n }\\n \\n } //end for loop\\n\\n // modules.logger.info(\\\u0022Merged: \\\u0022 \u002B tractorDetail.length);\\n //modules.logger.info(\\\u0022Merged Details: \\\u0022 \u002B JSON.stringify(tractorDetail));\\n \\n}\\n\\nfunction verifyUser(modules, response, answer) {\\n var users = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var count = 0;\\n var render = modules.utils.renderTemplate;\\n// modules.logger.info(\\\u0022in verify user method: \\\u0022 \u002B JSON.stringify(answer));\\n modules.logger.info(\\\u0022Answer Length: \\\u0022 \u002B answer.length);\\n var notificationsSent = 0;\\n \\n answer.forEach(function(userTractorData){\\n users.find({ \\\u0022_acl.creator\\\u0022: userTractorData._acl.creator }, function(err, user) {\\n if (err) {\\n modules.logger.info(\\\u0022Failed to find user: \\\u0022 \u002B userTractorData._acl);\\n } else {\\n if (user[0]) {\\n var mess = \\\u0022Hello \\\u0022\u002Buser[0].first_name\u002B\\\u0022, your tractors have been turned on for a total of \\\u0022\u002BuserTractorData.EngineHours\u002B\\\u0022 engine hours and covered a total distance of \\\u0022\u002BuserTractorData.TotalDistanceCovered\u002B\\\u0022km\\\u0022;\\n \\n notificationsSent\u002B\u002B;\\n// modules.logger.info(JSON.stringify(user[0]._acl.creator) \u002B \\\u0022 :\\\u0022 \u002B count);\\n modules.logger.info(\\\u0022User Name: \\\u0022\u002Buser[0].first_name \u002B\\\u0022, message: \\\u0022\u002Bmess);\\n } else {\\n// modules.logger.info(JSON.stringify(user));\\n }\\n }\\n count\u002B\u002B;\\n \\n if (count \u003E= answer.length){\\n modules.logger.info(\\\u0022Notifications Sent: \\\u0022\u002BnotificationsSent);\\n response.complete();\\n }\\n });\\n });\\n\\n\\n}\u0022\r\n },\r\n \u0022getTractotsLatLng\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n //expose all tractors lat and lng only \\n var DailyTractorActivity = modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027);\\n \\n // fetch tractor daily activities witin last year , from: 2018-01-01 , to: 2018-11-16; \\n var tractorActivityQuery = {day: {\\\u0022$gte\\\u0022 : \\\u00222018-01-01\\\u0022, \\\u0022$lte\\\u0022: \\\u00222018-11-16\\\u0022} }\\n \\t\\n DailyTractorActivity.find( tractorActivityQuery,function(err, _activities){\\n if( err ) return response.error(err);\\n\\t\\t\\n var stateActivitiesCountHash = {};\\n \\n var _activities_lat_lng = _activities.map( function(_activity){\\n if( _activity.Route \u0026\u0026 _activity.Route[0][\\\u0022Lat\\\u0022] \u0026\u0026 _activity.Route[0][\\\u0022Lng\\\u0022] ) {\\n \\n if( _activity[\\\u0022Town\\\u0022] ){\\n var townName = _activity.Town;\\n \\t stateActivitiesCountHash[townName] = stateActivitiesCountHash[townName] \u002B 1 || 0;\\n }\\n \\n return { lat : _activity.Route[0][\\\u0022Lat\\\u0022], lng: _activity.Route[0][\\\u0022Lng\\\u0022] }\\n }\\n });\\n \\n // Send the array of tractors lat , lng object as response \\n response.body = _activities_lat_lng;\\n// modules.logger.info( \\\u0022total activities is \\\u0022 \u002B _activities.length \u002B \\\u0022 and valid activities by lat and lng criteria is \\\u0022 \u002B _activities_lat_lng.length );\\n \\n modules.logger.info( stateActivitiesCountHash );\\n\\n response.complete(200);\\n })\\n \\n}\u0022\r\n },\r\n \u0022exportRegisteredBookingAgentsForDateRange\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules) {\\n \\n// const BookingAgent = modules.collectionAccess.collection(\u0027BookingAgents\u0027);\\n// const agents_query = {\\\u0022_kmd.lmt\\\u0022:{ \\\u0022$gte\\\u0022: \\\u00222017-01-01\\\u0022, \\\u0022$lte\\\u0022: \\\u00222019-02-28\\\u0022} }\\n// BookingAgent.find(agents_query, function(_err, _booking_agents){\\n// if( _err ) {\\n// modules.logger.info(\\\u0022There was an error \\\u0022 \u002B new Error(_err).message );\\n// response.complete();\\n// }\\n \\n// var agents_array = [];\\n// var count = 0;\\n// for( var i=0; i\u003C_booking_agents.length; i\u002B\u002B){\\n// agents_array.push({\\n// \\\u0022S/N\\\u0022: count\u002B=1,\\n// Name: _booking_agents[i].name,\\n// Email: _booking_agents[i].email ? _booking_agents[i].email : \\\u0022NA\\\u0022 , \\n// Phone: _booking_agents[i].phone,\\n// BookingAgentID: _booking_agents[i].bookingAgentID,\\n// ORGID: _booking_agents[i].orgID ? _booking_agents[i].orgID : \\\u0022NA\\\u0022 ,\\n// RegistrationDate: _booking_agents[i].createdAt ? _booking_agents[i].createdAt.split(\u0027 \u0027)[0]: \\\u0022NA\\\u0022\\n// })\\n// }\\n \\n// \\tresponse.body = agents_array;\\n// response.complete(200);\\n\\n// })\\n// }\\n\\n\\n\\nfunction onRequest(request, response, modules) {\\n var http = modules.request;\\n \\n var hasLocation = function(bookingAgent){\\n if ( bookingAgent.latitude \u0026\u0026 bookingAgent.longitude ) {\\n return {\\n lat: bookingAgent.latitude,\\n lng: bookingAgent.longitude\\n }\\n }\\n \\n return null;\\n }\\n \\n const BookingAgent = modules.collectionAccess.collection(\u0027BookingAgents\u0027);\\n const agents_query = {\\\u0022_kmd.lmt\\\u0022:{ \\\u0022$gte\\\u0022: \\\u00222017-01-01\\\u0022, \\\u0022$lte\\\u0022: \\\u00222019-02-28\\\u0022} }\\n BookingAgent.find(agents_query,{\\\u0022limit\\\u0022:510}, function(_err, _booking_agents){\\n if( _err ) {\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B new Error(_err).message );\\n response.complete();\\n }\\n \\n var agents_hash = {};\\n var count = 0;\\n for( var i=0; i\u003C_booking_agents.length; i\u002B\u002B){\\n agents_hash[_booking_agents[i].bookingAgentID] = {\\n \\\u0022S/N\\\u0022: count\u002B=1,\\n Name: _booking_agents[i].name,\\n Email: _booking_agents[i].email ? _booking_agents[i].email : \\\u0022NA\\\u0022 , \\n Phone: _booking_agents[i].phone,\\n BookingAgentID: _booking_agents[i].bookingAgentID,\\n ORGID: _booking_agents[i].orgID ? _booking_agents[i].orgID : \\\u0022NA\\\u0022 ,\\n RegistrationDate: _booking_agents[i].createdAt ? _booking_agents[i].createdAt.split(\u0027 \u0027)[0]: \\\u0022NA\\\u0022,\\n latitude: _booking_agents[i].latitude ? _booking_agents[i].latitude : 0, \\n longitude: _booking_agents[i].longitude ? _booking_agents[i].longitude : 0\\n }\\n }\\n \\n // Reverse goecode the latitude and longitude \\n var tmpCount = 0;\\n var noLoc = 0;\\n var url = \\\u0022https://baas.kinvey.com/rpc/kid_bkFYnCzzzb/custom/geocoderService\\\u0022;\\n \\n for( var key in agents_hash ){\\n var agent = agents_hash[key];\\n// modules.logger.info( \\\u0022the agent latitude and longitude is \\\u0022 \u002B agent.latitude \u002B \\\u0022 , \\\u0022 \u002B agent.longitude );\\n var _agentLocation = hasLocation(agent)\\n \\n if( _agentLocation ){\\n modules.logger.info(\\\u0022 The agent location is \\\u0022 \u002B JSON.stringify(_agentLocation) \u002B \\\u0022 and the booking agent ID is \\\u0022 \u002B agent.BookingAgentID );\\n var requestOptions = {\\n uri: url,\\n body: JSON.stringify({\\n lat: _agentLocation.lat,\\n lng: _agentLocation.lng\\n }),\\n headers:{\\n \\\u0022Content-Type\\\u0022:\\\u0022application/json\\\u0022,\\n \\\u0022Authorization\\\u0022: \\\u0022Basic a2lkX2JrRlluQ3p6emI6ZTczMWY5YTI4NTgzNDkwMGEzNWMyODEzZGQxNzYyYzI=\\\u0022,\\n \\\u0022X-Kinvey-API-Version\\\u0022:3\\n }\\n \\n }\\n\\n http.post(requestOptions, function(error, resp, body){\\n if( error ) {\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B error );\\n tmpCount\u002B\u002B;\\n }\\telse {\\n modules.logger.info( body );\\n \\tagents_hash[key].location = body.body\\n \\ttmpCount\u002B\u002B;\\n }\\n \\n })\\n }\\n else {\\n noLoc\u002B\u002B;\\n// modules.logger.info(\\\u0022booking agent has no location\\\u0022);\\n tmpCount\u002B\u002B;\\n }\\n \\n if( tmpCount === Object.keys(agents_hash).length){\\n modules.logger.info( \\\u0022The tempCount is \\\u0022 \u002B tmpCount );\\n modules.logger.info( \\\u0022The hash count is \\\u0022 \u002B Object.keys(agents_hash).length );\\n modules.logger.info( \\\u0022The no location agent count is \\\u0022 \u002B noLoc);\\n response.body = agents_hash;\\n response.complete(200);\\n }\\n\\t}\\n \\n })\\n}\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\u0022\r\n },\r\n \u0022geocoderService\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var handleGeocodeServiceResponse = function(error, resp, body){\\n var resObj = {};\\n if( error ){\\n // Whoops, error error!!\\n modules.logger.info(\\\u0022Error getting reverse geocode values\\\u0022);\\n \\t\\tresObj = {\\n success: false,\\n error: new Error(error).message\\n }\\n \\n }\\n \\t\\n // All went on fine ):\\n var location = JSON.parse(body).geonames[0];\\n \\tresObj = {\\n success: true,\\n body:location.name \u002B \u0027, \u0027 \u002B location.adminName1 \u002B \u0027, \u0027 \u002B location.countryName\\n }\\n \\n// \\tmodules.logger.info(\\\u0022We got data \\\u0022 \u002B body);\\n \\n // Set the response body\\n response.body = resObj;\\n \\treturn response.complete();\\n }\\n \\n var http = modules.request;\\n var lat = request.body.lat;\\n var lng = request.body.lng;\\n var requestOptions = {\\n qs: {\\n lat: lat,\\n lng: lng,\\n username:\u0027hellofuture\u0027\\n },\\n uri:\u0027http://api.geonames.org/findNearbyPlaceNameJSON\u0027\\n }\\n \\n http.get(requestOptions, handleGeocodeServiceResponse)\\n \\n}\u0022\r\n },\r\n \u0022aeris_geofence_notification\u0022 : {\r\n \u0022code\u0022 : \u0022//Sends a push notification to the tractor owner when the tractor is not within the boundary defined in latitude and longitude \\n//Scheduled endpoint\\n//Interval - 1-minute\\n//Start time - 2019/03/06 03:06\\n//Created by Abdulmajid\\n\\nfunction onRequest(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n moment = modules.moment,\\n logger = modules.logger,\\n count = 0,\\n dateTime30MinsAgo = modules.moment.utc().subtract(30, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n countTractorsUpdated = 0;\\n \\n var tractorQuery = {\\n $and: [\\n {TractorID: {$gte: 500000}},\\n {LastActiveTime: {$gte: dateTime30MinsAgo}}\\n ]\\n }; //Filter only aeris tractors \\n \\n //Get tractors and loop through the tractors\\n modules.collectionAccess\\n .collection(\\\u0022TractorDetail\\\u0022)\\n .find(tractorQuery, function(err, tractors) {\\n logger.info(\\\u0022Tractors found: \\\u0022\u002Btractors.length);\\n //Tractors found\\n if (err){\\n logger.info(\\\u0022Could not find tractors: \\\u0022\u002Berr);\\n response.complete();\\n } else {\\n logger.info(\\\u0022Tractors found 2: \\\u0022\u002Btractors.length);\\n tractors.forEach(function(tractor) {\\n if (tractor.TractorID \u0026\u0026 tractor.TractorID.toString().length === 6 \u0026\u0026 tractor.PositionLatitude \u0026\u0026 tractor.PositionLongitude) {\\n //named lastActivity, but its simply the lon and lat that is required\\n var lastActivity = {\\n lat: tractor.PositionLatitude,\\n lon: tractor.PositionLongitude\\n };\\n\\n modules.logger.info(\\\u0022About to initiate c_sendGeofenceNotificationIfNecessary\\\u0022);\\n \\n //code of c_sendGeofenceNotificationIfNecessary is placed in common/geofence.js\\n c_sendGeofenceNotificationIfNecessary(lastActivity, tractor, function(geoErr, result) {\\n if (geoErr) {\\n logger.info(\\\u0022Failed to send geofence notification for: \\\u0022\u002Btractor.TractorID\u002B\\\u0022, \\\u0022\u002BgeoErr);\\n shouldCompleteRequest(tractors);\\n } else {\\n var tractorGeofenceUpdate = {};\\n if (result \u0026\u0026 result.wasSent) {\\n tractorGeofenceUpdate.LastGeofenceNotificationTime = !result.WasInArea \u0026\u0026 tractor.NeedToSendGeofenceOutNotification? moment().toISOString():\\\u0022\\\u0022;\\n tractorGeofenceUpdate.WasInArea = result.WasInArea;\\n tractorGeofenceUpdate.NeedToSendGeofenceOutNotification = true;\\n logger.info(\\\u0022Notification was sent for \\\u0022\u002Btractor.TractorID);\\n } else {\\n logger.info(\\\u0022Notification was not sent: \\\u0022\u002Btractor.TractorID);\\n }\\n\\n //logger.info(\u0027set Object \u0027 \u002B JSON.stringify(setObject));\\n collectionAccess.collection(\\\u0022TractorDetail\\\u0022).update({TractorID: tractor.TractorID}, {$set: tractorGeofenceUpdate},\\n function (updateErr, updateResult) {\\n \\tcountTractorsUpdated\u002B\u002B;\\n shouldCompleteRequest(tractors);\\n });\\n }\\n });\\n } else {\\n logger.info(tractor.TractorID \u002B \\\u0022 is invalid\\\u0022);\\n shouldCompleteRequest(tractors);\\n }\\n });\\n } //end if err\\n });\\n \\n var shouldCompleteRequest = function (tractors){\\n count\u002B\u002B;\\n if (count == tractors.length){\\n \\tlogger.info(\\\u0022Count tractors updated: \\\u0022\u002BcountTractorsUpdated);\\n logger.info(\\\u0022Done\\\u0022);\\n response.complete();\\n }\\n }\\n }\\n \u0022\r\n },\r\n \u0022removeDuplicateBookings\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n \\n Booking.find({}, function(err, bookings){\\n \\tvar bookingsHash = {};\\n \\tvar count = 0;\\n \\tbookings.forEach( function(booking){\\n \\n\\t\\t\\tif( ! bookingsHash[booking.bookingID] ){\\n bookingsHash[booking.bookingID] = [];\\n }\\n \\n bookingsHash[booking.bookingID].push( booking );\\n count\u002B\u002B;\\n \\n if( count === bookings.length){\\n \\n for( var bookingID in bookingsHash ){\\n \\n var bookingsDuplicateCount = bookingsHash[bookingID].length;\\n var bookingID = bookingsHash[bookingID][0].bookingID;\\n var singleBookingRecord = bookingsHash[bookingID][0];\\n if( bookingsDuplicateCount \u003E 1 ){\\n \\t\\t\\t\\t\\tBooking.remove({bookingID: bookingID }, function(err){});\\n Booking.save(singleBookingRecord, function(err, saved){}); \\n } \\n }\\n \\n modules.logger.info(\\\u0022The data are here! \\\u0022 \u002B JSON.stringify(bookingsHash));\\n \\tresponse.complete();\\n }\\n \\t\\n \\t})\\n \\n })\\n}\\n \\n \u0022\r\n },\r\n \u0022getOperatorIDByTractorID\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules){\\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var tractor_id = Number(request.body.tractor_id);\\n modules.logger.info(\\\u0022called with tractor_id \\\u0022 \u002B tractor_id );\\n\\n if( !tractor_id ){\\n response.body = {success: false, errors: [{\\n tractor_id: \u0027please provide tractor_id to get the operator_id\u0027\\n }]};\\n \\n response.complete();\\n }\\n \\n Tractor.find({TractorID: tractor_id}, function(err, tractor){ \\n // Exit if error;\\n if( err ){\\n response.body = {success:false, errors: new Error(err).message};\\n return response.complete();\\n }\\n \\n // Exit if no tractor was found using the supplied tractor id \\n if( tractor.length === 0 ){\\n response.body = {success:false, errors: [{\\n tractor_id: \u0027Tractor with the tractorID \u0027 \u002B tractor_id \u002B \u0027 was not found, please supply a valid id\u0027\\n }]};\\n return response.complete();\\n }\\n \\n // We found the tractor and it has data , lets send the ID \\n \\n var operator_id;\\n \\n if( ! tractor[0].OperatorID ) {\\n operator_id = null;\\n }\\n else {\\n operator_id = tractor[0].OperatorID\\n }\\n \\n response.body = {success:true, operator_id:operator_id };\\n return response.complete();\\n \\n })\\n \\n}\u0022\r\n },\r\n \u0022getBookingsLatLng\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n //expose all tractors lat and lng only \\n var Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n\\n // Fetch booking for a date range \\n var bookingsQuery = {createdAt: {\\\u0022$gte\\\u0022 : \\\u00222019-01-02\\\u0022, \\\u0022$lte\\\u0022: \\\u00222019-04-05\\\u0022} }\\n Booking.find( bookingsQuery, function(err, _bookings){\\n\\n if( err ) return response.error(err);\\n \\t\\t\\n var _bookings_lat_lng = _bookings.map( function(_booking){\\n if( _booking.latitude \u0026\u0026 _booking.longitude ) {\\n return { lat : Number(_booking.latitude), lng: Number(_booking.latitude) }\\n }\\n });\\n \\n // Send the array of bookings lat , lng object as response \\n response.body = _bookings_lat_lng;\\n response.complete(200);\\n })\\n \\n}\u0022\r\n },\r\n \u0022count2TrackTractors\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n \\n Tractor.find({}, function(err, _tractors){\\n var tractorsCount =0;\\n var count = 0\\n var twotrack_tractors = []\\n for(var i=0; i \u003C _tractors.length; i\u002B\u002B){\\n if( _tractors[i][\\\u0022TractorID\\\u0022].toString().charAt(0) === \\\u00221\\\u0022 ){\\n twotrack_tractors.push(_tractors[i][\\\u0022TractorID\\\u0022]) \\n tractorsCount\u002B=1;\\n count\u002B\u002B;\\n }\\n else {\\n count\u002B\u002B;\\n }\\n \\n if( count === _tractors.length ){\\n response.body = JSON.stringify(twotrack_tractors);\\n response.complete();\\n }\\n }\\n \\n })\\n}\u0022\r\n },\r\n \u0022UpdateTwoTrackTractorActivityOnPOSTFromAWSBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n modules.logger.info(\u0027data posted\u0027);\\n modules.logger.info( JSON.stringify(request.body.data) )\\n var getFormattedRoute = function(activityArr){\\n var route = [];\\n for(var i=0; i \u003C activityArr.length; i\u002B\u002B){\\n route.push({\\\u0022Lat\\\u0022:activityArr[i].lat, \\\u0022Lng\\\u0022: activityArr[i].lon, \\\u0022Time\\\u0022: activityArr[i].activityUTCDate })\\n }\\n return route;\\n }\\n \\n \\tvar getTotalTimeIdle = function(activity){\\n try {\\n var today = modules.moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n var data = activity;\\n var startDate = new Date(\u0027\u0027\u002Btoday\u002B\u0027 00:00:00\u0027);\\n var endDate = new Date();\\n var seconds = (endDate - startDate) / 1000;\\n var inactiveTime = parseInt( (seconds - (activity.operateTime)).toFixed() );\\n \\n return inactiveTime;\\n }\\n catch(e){\\n modules.logger.info(new Error(e).message)\\n }\\n }\\n \\n var Tractor = modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027);\\n \\n // Get today date formatted as Y-m-d\\n\\tvar today = new Date().toISOString().split(\u0027T\u0027)[0]; \\n \\n //an array of activity objects\\n var tractorDataArr = request.body.data; \\n var queueCount = 0;\\n \\n if( tractorDataArr.length ){\\n // To be able to find the tractor activity, its TractorID need be an int type but it\u0027s been posted as type string\\n var tractor_id = \u002B tractorDataArr[0].tractor_id;\\n\\n modules.logger.info(tractor_id );\\n \\n for( var i = 0; i \u003C tractorDataArr.length; i\u002B\u002B){\\n \\n var tractorData = tractorDataArr[i];\\n \\n var activityData = {};\\n \\n activityData.day = today;\\n activityData.Latitude = tractorData.lat;\\n activityData.Longitude = tractorData.lon;\\n activityData.Speed = tractorData.speed;\\n activityData.Town = tractorData.town;\\n activityData.Street = tractorData.street;\\n activityData.Country = tractorData.country;\\n activityData.StartTown = tractorData.town;\\n activityData.StartCountry = tractorData.country;\\n activityData.StartStreet = tractorData.street;\\n activityData.ignitionStatus = tractorData.ignitionStatus;\\n activityData.LastOdometerValue = tractorDataArr[tractorDataArr.length-1].odometer;\\n activityData.Route = getFormattedRoute(tractorDataArr);\\n activityData.TractorID = tractor_id;\\n activityData.HectaresServiced = 0;\\n activityData.TotalTimeActive = tractorData.operateTime || 0;\\n activityData.DistanceTravelled = tractorData.distance || 0;\\n activityData.TotalTimeIdle = getTotalTimeIdle(tractorData);\\n activityData.RevenuType = 101;\\n activityData.Hectares = 0;\\n activityData.Revenue = 0;\\n activityData.RevenueType = 108;\\n activityData.RevenueCurrency = \u0027\u0027\\n activityData.LastJourneyStartTime = tractorData.activityUTCDate;\\n activityData.BatteryVoltage = tractorData.batteryVoltage;\\n activityData.SatelliteNumber = tractorData.satelliteNumber; \\n activityData.LastActivityId = tractorData.activityId;\\n activityData.StartActiveData = tractorDataArr[0].activityUTCDate;\\n activityData.LastActiveData = tractorDataArr[tractorDataArr.length-1].activityUTCDate;\\n \\n // Attach nescessary kinvey metadata\\n var KinveyMetaData = modules.kinvey.entity();\\n activityData._acl = KinveyMetaData._acl;\\n activityData._kmd = KinveyMetaData._kmd;\\n \\n \\n \\n Tractor.update({\\\u0022TractorID\\\u0022:tractor_id, \\\u0022day\\\u0022: today}, {$set: activityData}, {\\\u0022upsert\\\u0022:true}, function(err, updated){\\n if( !err){\\n queueCount\u002B\u002B;\\n if( queueCount === tractorDataArr.length ){\\n modules.logger.info(\u0027successfully updated all two track tractor activity for \u0027 \u002B tractor_id);\\n response.complete();\\n }\\n }\\n else {\\n modules.logger.info(err);\\n \\n queueCount\u002B\u002B;\\n if( queueCount === tractorDataArr.length ){\\n modules.logger.info(\u0027done processing with errors\u0027);\\n response.complete();\\n }\\n }\\n });\\n \\n \\t} \\n }\\n}\\n \\n\\n/*\\nSample data posted \\n\\n\\\u0022returnCode\\\u0022:\\\u0022200\\\u0022,\\\u0022isSuccess\\\u0022:true,\\\u0022data\\\u0022:[{\\\u0022activityId\\\u0022:121317998,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10075828,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8573,\\\u0022lon\\\u0022:10.9687,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:108,\\\u0022altitude\\\u0022:20690,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Palace Takum-Bali Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:45:06.0\\\u0022,\\\u0022tractor_id\\\u0022:\\\u0022100120\\\u0022},{\\\u0022activityId\\\u0022:121318014,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10075891,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8574,\\\u0022lon\\\u0022:10.9692,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:56,\\\u0022altitude\\\u0022:21102,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Palace Takum-Bali Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:45:22.0\\\u0022},{\\\u0022activityId\\\u0022:121318026,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:31,\\\u0022odometer\\\u0022:10076002,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.858,\\\u0022lon\\\u0022:10.97,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:39,\\\u0022altitude\\\u0022:20360,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Takum-Bali Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:45:39.0\\\u0022},{\\\u0022activityId\\\u0022:121318038,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:25,\\\u0022odometer\\\u0022:10076136,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.859,\\\u0022lon\\\u0022:10.9706,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:55,\\\u0022altitude\\\u0022:19967,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022Takum-Bali Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:45:55.0\\\u0022},{\\\u0022activityId\\\u0022:121318089,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10076184,\\\u0022idle\\\u0022:33,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.859,\\\u0022lon\\\u0022:10.971,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:109,\\\u0022altitude\\\u0022:19920,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Takum-Bali Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:46:41.0\\\u0022},{\\\u0022activityId\\\u0022:121318197,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:30,\\\u0022odometer\\\u0022:10076250,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8587,\\\u0022lon\\\u0022:10.9716,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:125,\\\u0022altitude\\\u0022:20580,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Takum-Bali Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:48:52.0\\\u0022},{\\\u0022activityId\\\u0022:121318220,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:31,\\\u0022odometer\\\u0022:10076420,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8577,\\\u0022lon\\\u0022:10.9727,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:141,\\\u0022altitude\\\u0022:19859,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:49:11.0\\\u0022},{\\\u0022activityId\\\u0022:121318238,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10076698,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9743,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:124,\\\u0022altitude\\\u0022:19841,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:49:46.0\\\u0022},{\\\u0022activityId\\\u0022:121318320,\\\u0022eventCode\\\u0022:\\\u002212\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Journey End\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9744,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:113,\\\u0022altitude\\\u0022:19836,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:51:18.0\\\u0022},{\\\u0022activityId\\\u0022:121318782,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:1555394304,\\\u0022isGPSValid\\\u0022:false,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9744,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:113,\\\u0022altitude\\\u0022:0,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:0,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:56:41.0\\\u0022},{\\\u0022activityId\\\u0022:121318795,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:1555394304,\\\u0022isGPSValid\\\u0022:false,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9744,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:113,\\\u0022altitude\\\u0022:0,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:0,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:56:41.0\\\u0022},{\\\u0022activityId\\\u0022:121318787,\\\u0022eventCode\\\u0022:\\\u002231\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Sensor\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:1555394304,\\\u0022isGPSValid\\\u0022:false,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9744,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:113,\\\u0022altitude\\\u0022:0,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:0,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:56:41.0\\\u0022},{\\\u0022activityId\\\u0022:121318792,\\\u0022eventCode\\\u0022:\\\u002298\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Power Connect\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:1555394304,\\\u0022isGPSValid\\\u0022:false,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9744,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:113,\\\u0022altitude\\\u0022:0,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:0,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 05:56:41.0\\\u0022},{\\\u0022activityId\\\u0022:121319075,\\\u0022eventCode\\\u0022:\\\u002212\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Journey End\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8558,\\\u0022lon\\\u0022:10.9744,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:134,\\\u0022altitude\\\u0022:19737,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:00:54.0\\\u0022},{\\\u0022activityId\\\u0022:121319712,\\\u0022eventCode\\\u0022:\\\u002211\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Journey Start\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10076710,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8557,\\\u0022lon\\\u0022:10.9745,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:136,\\\u0022altitude\\\u0022:20044,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:05:29.0\\\u0022},{\\\u0022activityId\\\u0022:121320914,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10076712,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.8557,\\\u0022lon\\\u0022:10.9745,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:255,\\\u0022altitude\\\u0022:19958,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:06:07.0\\\u0022},{\\\u0022activityId\\\u0022:121320917,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:32,\\\u0022odometer\\\u0022:10082548,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9046,\\\u0022lon\\\u0022:10.9894,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:22907,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:17:46.0\\\u0022},{\\\u0022activityId\\\u0022:121320949,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:32,\\\u0022odometer\\\u0022:10082847,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9074,\\\u0022lon\\\u0022:10.9895,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:23799,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:18:25.0\\\u0022},{\\\u0022activityId\\\u0022:121320999,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:32,\\\u0022odometer\\\u0022:10083144,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9102,\\\u0022lon\\\u0022:10.9896,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:23928,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:18:58.0\\\u0022},{\\\u0022activityId\\\u0022:121321041,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:33,\\\u0022odometer\\\u0022:10083440,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9129,\\\u0022lon\\\u0022:10.9896,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:23813,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:19:31.0\\\u0022},{\\\u0022activityId\\\u0022:121321111,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:33,\\\u0022odometer\\\u0022:10083737,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9157,\\\u0022lon\\\u0022:10.9897,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:0,\\\u0022altitude\\\u0022:22627,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:20:04.0\\\u0022},{\\\u0022activityId\\\u0022:121321126,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:32,\\\u0022odometer\\\u0022:10084034,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9184,\\\u0022lon\\\u0022:10.9897,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:22017,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:20:37.0\\\u0022},{\\\u0022activityId\\\u0022:121321315,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10084264,\\\u0022idle\\\u0022:192,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:10.9899,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:91,\\\u0022altitude\\\u0022:22231,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:24:19.0\\\u0022},{\\\u0022activityId\\\u0022:121321402,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10084386,\\\u0022idle\\\u0022:3,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:10.991,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:72,\\\u0022altitude\\\u0022:22217,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:25:15.0\\\u0022},{\\\u0022activityId\\\u0022:121321407,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10084431,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9206,\\\u0022lon\\\u0022:10.9914,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:94,\\\u0022altitude\\\u0022:22447,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:25:31.0\\\u0022},{\\\u0022activityId\\\u0022:121321449,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10084478,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:10.9918,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:75,\\\u0022altitude\\\u0022:22619,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:25:50.0\\\u0022},{\\\u0022activityId\\\u0022:121321502,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10084542,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9206,\\\u0022lon\\\u0022:10.9924,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:92,\\\u0022altitude\\\u0022:22642,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:26:21.0\\\u0022},{\\\u0022activityId\\\u0022:121321538,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10084613,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9207,\\\u0022lon\\\u0022:10.9932,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:72,\\\u0022altitude\\\u0022:22588,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:26:48.0\\\u0022},{\\\u0022activityId\\\u0022:121321557,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:17,\\\u0022odometer\\\u0022:10084675,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9207,\\\u0022lon\\\u0022:10.9937,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:89,\\\u0022altitude\\\u0022:22518,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:27:05.0\\\u0022},{\\\u0022activityId\\\u0022:121321588,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10084763,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9207,\\\u0022lon\\\u0022:10.9946,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:105,\\\u0022altitude\\\u0022:23004,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:27:29.0\\\u0022},{\\\u0022activityId\\\u0022:121321628,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10084850,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:10.9953,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:84,\\\u0022altitude\\\u0022:23179,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:27:57.0\\\u0022},{\\\u0022activityId\\\u0022:121321654,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10084899,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:10.9958,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:114,\\\u0022altitude\\\u0022:23225,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:28:13.0\\\u0022},{\\\u0022activityId\\\u0022:121321668,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:16,\\\u0022odometer\\\u0022:10084953,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:10.9963,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:94,\\\u0022altitude\\\u0022:23193,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:28:29.0\\\u0022},{\\\u0022activityId\\\u0022:121321701,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10085014,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9206,\\\u0022lon\\\u0022:10.9968,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:78,\\\u0022altitude\\\u0022:23224,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:28:47.0\\\u0022},{\\\u0022activityId\\\u0022:121321738,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10085111,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9206,\\\u0022lon\\\u0022:10.9977,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:98,\\\u0022altitude\\\u0022:23252,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:29:15.0\\\u0022},{\\\u0022activityId\\\u0022:121321762,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10085160,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9206,\\\u0022lon\\\u0022:10.9982,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:62,\\\u0022altitude\\\u0022:23186,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:29:31.0\\\u0022},{\\\u0022activityId\\\u0022:121321776,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10085213,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9207,\\\u0022lon\\\u0022:10.9986,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:79,\\\u0022altitude\\\u0022:22976,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:29:48.0\\\u0022},{\\\u0022activityId\\\u0022:121321796,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:13,\\\u0022odometer\\\u0022:10085262,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9209,\\\u0022lon\\\u0022:10.999,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:60,\\\u0022altitude\\\u0022:22692,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:30:04.0\\\u0022},{\\\u0022activityId\\\u0022:121321829,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10085312,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.921,\\\u0022lon\\\u0022:10.9995,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:79,\\\u0022altitude\\\u0022:22504,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:30:20.0\\\u0022},{\\\u0022activityId\\\u0022:121321860,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10085391,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9213,\\\u0022lon\\\u0022:11.0002,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:59,\\\u0022altitude\\\u0022:22446,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:30:42.0\\\u0022},{\\\u0022activityId\\\u0022:121321910,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10085455,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9215,\\\u0022lon\\\u0022:11.0007,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:83,\\\u0022altitude\\\u0022:22417,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:31:00.0\\\u0022},{\\\u0022activityId\\\u0022:121321912,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10085513,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9215,\\\u0022lon\\\u0022:11.0012,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:134,\\\u0022altitude\\\u0022:22470,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:31:16.0\\\u0022},{\\\u0022activityId\\\u0022:121321918,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:15,\\\u0022odometer\\\u0022:10085574,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.921,\\\u0022lon\\\u0022:11.0016,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:154,\\\u0022altitude\\\u0022:22282,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:31:33.0\\\u0022},{\\\u0022activityId\\\u0022:121321959,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10085610,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9208,\\\u0022lon\\\u0022:11.0018,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:136,\\\u0022altitude\\\u0022:22224,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:31:50.0\\\u0022},{\\\u0022activityId\\\u0022:121321992,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10085778,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9197,\\\u0022lon\\\u0022:11.0029,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:118,\\\u0022altitude\\\u0022:22025,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:32:45.0\\\u0022},{\\\u0022activityId\\\u0022:121322033,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:15,\\\u0022odometer\\\u0022:10085906,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9192,\\\u0022lon\\\u0022:11.0039,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:98,\\\u0022altitude\\\u0022:22350,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:33:17.0\\\u0022},{\\\u0022activityId\\\u0022:121322066,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10085990,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.919,\\\u0022lon\\\u0022:11.0047,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:79,\\\u0022altitude\\\u0022:22594,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:33:38.0\\\u0022},{\\\u0022activityId\\\u0022:121322075,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10086015,\\\u0022idle\\\u0022:6,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.919,\\\u0022lon\\\u0022:11.0049,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:103,\\\u0022altitude\\\u0022:22750,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:33:54.0\\\u0022},{\\\u0022activityId\\\u0022:121322129,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10086087,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9188,\\\u0022lon\\\u0022:11.0055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:124,\\\u0022altitude\\\u0022:22898,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:34:15.0\\\u0022},{\\\u0022activityId\\\u0022:121322132,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10086146,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9185,\\\u0022lon\\\u0022:11.006,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:95,\\\u0022altitude\\\u0022:22810,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:34:31.0\\\u0022},{\\\u0022activityId\\\u0022:121322171,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10086198,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9184,\\\u0022lon\\\u0022:11.0065,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:113,\\\u0022altitude\\\u0022:22939,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:34:54.0\\\u0022},{\\\u0022activityId\\\u0022:121322190,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10086228,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9183,\\\u0022lon\\\u0022:11.0068,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:90,\\\u0022altitude\\\u0022:22949,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:35:10.0\\\u0022},{\\\u0022activityId\\\u0022:121322245,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10086270,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9183,\\\u0022lon\\\u0022:11.0073,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:70,\\\u0022altitude\\\u0022:23131,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:35:30.0\\\u0022},{\\\u0022activityId\\\u0022:121322323,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10086417,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9187,\\\u0022lon\\\u0022:11.0087,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:86,\\\u0022altitude\\\u0022:22802,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:36:12.0\\\u0022},{\\\u0022activityId\\\u0022:121322347,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10086484,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9189,\\\u0022lon\\\u0022:11.0093,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:69,\\\u0022altitude\\\u0022:22714,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:36:31.0\\\u0022},{\\\u0022activityId\\\u0022:121322699,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10086637,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9194,\\\u0022lon\\\u0022:11.0106,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:53,\\\u0022altitude\\\u0022:22405,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:37:19.0\\\u0022},{\\\u0022activityId\\\u0022:121322702,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:24,\\\u0022odometer\\\u0022:10086704,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9197,\\\u0022lon\\\u0022:11.0111,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:72,\\\u0022altitude\\\u0022:22302,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:37:35.0\\\u0022},{\\\u0022activityId\\\u0022:121322705,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10086781,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.92,\\\u0022lon\\\u0022:11.0118,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:53,\\\u0022altitude\\\u0022:22270,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:37:57.0\\\u0022},{\\\u0022activityId\\\u0022:121322788,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10086838,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9203,\\\u0022lon\\\u0022:11.0122,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:75,\\\u0022altitude\\\u0022:22298,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:38:13.0\\\u0022},{\\\u0022activityId\\\u0022:121322794,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:16,\\\u0022odometer\\\u0022:10086917,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9205,\\\u0022lon\\\u0022:11.0129,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:57,\\\u0022altitude\\\u0022:22221,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:38:36.0\\\u0022},{\\\u0022activityId\\\u0022:121322799,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10087261,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9221,\\\u0022lon\\\u0022:11.0156,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:70,\\\u0022altitude\\\u0022:22326,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:40:00.0\\\u0022},{\\\u0022activityId\\\u0022:121322804,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:18,\\\u0022odometer\\\u0022:10087431,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9226,\\\u0022lon\\\u0022:11.0171,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:86,\\\u0022altitude\\\u0022:22383,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:40:45.0\\\u0022},{\\\u0022activityId\\\u0022:121322806,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10087618,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9226,\\\u0022lon\\\u0022:11.0188,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:70,\\\u0022altitude\\\u0022:22241,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:41:27.0\\\u0022},{\\\u0022activityId\\\u0022:121322823,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10087763,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9229,\\\u0022lon\\\u0022:11.0201,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:86,\\\u0022altitude\\\u0022:22238,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:42:19.0\\\u0022},{\\\u0022activityId\\\u0022:121323088,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10087833,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9231,\\\u0022lon\\\u0022:11.0207,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:69,\\\u0022altitude\\\u0022:22035,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:42:45.0\\\u0022},{\\\u0022activityId\\\u0022:121323091,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10088071,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9238,\\\u0022lon\\\u0022:11.0228,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:52,\\\u0022altitude\\\u0022:22373,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:43:53.0\\\u0022},{\\\u0022activityId\\\u0022:121323096,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10088133,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9241,\\\u0022lon\\\u0022:11.0234,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:70,\\\u0022altitude\\\u0022:22589,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:44:15.0\\\u0022},{\\\u0022activityId\\\u0022:121323099,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:18,\\\u0022odometer\\\u0022:10088243,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9243,\\\u0022lon\\\u0022:11.0244,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:87,\\\u0022altitude\\\u0022:22800,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:44:45.0\\\u0022},{\\\u0022activityId\\\u0022:121323102,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10088310,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9244,\\\u0022lon\\\u0022:11.025,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:71,\\\u0022altitude\\\u0022:22729,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:45:01.0\\\u0022},{\\\u0022activityId\\\u0022:121323162,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10088416,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9246,\\\u0022lon\\\u0022:11.0259,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:89,\\\u0022altitude\\\u0022:22850,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:45:47.0\\\u0022},{\\\u0022activityId\\\u0022:121323208,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:15,\\\u0022odometer\\\u0022:10088486,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9248,\\\u0022lon\\\u0022:11.0266,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:64,\\\u0022altitude\\\u0022:22772,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:46:03.0\\\u0022},{\\\u0022activityId\\\u0022:121323250,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:20,\\\u0022odometer\\\u0022:10088579,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9252,\\\u0022lon\\\u0022:11.0274,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:41,\\\u0022altitude\\\u0022:22535,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:46:19.0\\\u0022},{\\\u0022activityId\\\u0022:121323338,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:19,\\\u0022odometer\\\u0022:10088746,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9263,\\\u0022lon\\\u0022:11.0284,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:25,\\\u0022altitude\\\u0022:22751,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:47:02.0\\\u0022},{\\\u0022activityId\\\u0022:121323399,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:21,\\\u0022odometer\\\u0022:10088821,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9268,\\\u0022lon\\\u0022:11.0289,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:46,\\\u0022altitude\\\u0022:22740,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:47:18.0\\\u0022},{\\\u0022activityId\\\u0022:121323403,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:15,\\\u0022odometer\\\u0022:10088919,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9273,\\\u0022lon\\\u0022:11.0297,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:62,\\\u0022altitude\\\u0022:22767,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:47:36.0\\\u0022},{\\\u0022activityId\\\u0022:121323547,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10089191,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9284,\\\u0022lon\\\u0022:11.0319,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:78,\\\u0022altitude\\\u0022:23086,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:48:38.0\\\u0022},{\\\u0022activityId\\\u0022:121323858,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:21,\\\u0022odometer\\\u0022:10089500,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.929,\\\u0022lon\\\u0022:11.0346,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:76,\\\u0022altitude\\\u0022:23217,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:49:38.0\\\u0022},{\\\u0022activityId\\\u0022:121323863,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:14,\\\u0022odometer\\\u0022:10089565,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9293,\\\u0022lon\\\u0022:11.0351,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:39,\\\u0022altitude\\\u0022:23226,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:49:54.0\\\u0022},{\\\u0022activityId\\\u0022:121323871,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10089631,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9297,\\\u0022lon\\\u0022:11.0354,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:12,\\\u0022altitude\\\u0022:23367,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:50:10.0\\\u0022},{\\\u0022activityId\\\u0022:121323935,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10089673,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9301,\\\u0022lon\\\u0022:11.0354,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:354,\\\u0022altitude\\\u0022:23648,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:50:27.0\\\u0022},{\\\u0022activityId\\\u0022:121323939,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10089729,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9306,\\\u0022lon\\\u0022:11.0356,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:33,\\\u0022altitude\\\u0022:23741,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:50:43.0\\\u0022},{\\\u0022activityId\\\u0022:121323943,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10089823,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9313,\\\u0022lon\\\u0022:11.0361,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:53,\\\u0022altitude\\\u0022:24263,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:51:10.0\\\u0022},{\\\u0022activityId\\\u0022:121323984,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10089900,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9318,\\\u0022lon\\\u0022:11.0366,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:32,\\\u0022altitude\\\u0022:24673,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:51:34.0\\\u0022},{\\\u0022activityId\\\u0022:121323998,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10089943,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9321,\\\u0022lon\\\u0022:11.0369,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:49,\\\u0022altitude\\\u0022:24914,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:51:50.0\\\u0022},{\\\u0022activityId\\\u0022:121324120,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10090100,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9332,\\\u0022lon\\\u0022:11.0378,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:30,\\\u0022altitude\\\u0022:25352,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:52:40.0\\\u0022},{\\\u0022activityId\\\u0022:121324150,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10090158,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9336,\\\u0022lon\\\u0022:11.0381,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:52,\\\u0022altitude\\\u0022:25271,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:53:02.0\\\u0022},{\\\u0022activityId\\\u0022:121324223,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10090266,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9344,\\\u0022lon\\\u0022:11.0387,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:36,\\\u0022altitude\\\u0022:25631,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:53:42.0\\\u0022},{\\\u0022activityId\\\u0022:121324345,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:19,\\\u0022odometer\\\u0022:10090519,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.936,\\\u0022lon\\\u0022:11.0403,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:54,\\\u0022altitude\\\u0022:25805,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:54:45.0\\\u0022},{\\\u0022activityId\\\u0022:121324462,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:18,\\\u0022odometer\\\u0022:10090627,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9367,\\\u0022lon\\\u0022:11.041,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:38,\\\u0022altitude\\\u0022:25769,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:55:07.0\\\u0022},{\\\u0022activityId\\\u0022:121324470,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10090682,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9371,\\\u0022lon\\\u0022:11.0413,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:62,\\\u0022altitude\\\u0022:25677,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:55:23.0\\\u0022},{\\\u0022activityId\\\u0022:121324493,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:13,\\\u0022odometer\\\u0022:10090739,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9374,\\\u0022lon\\\u0022:11.0417,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:46,\\\u0022altitude\\\u0022:25753,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:55:41.0\\\u0022},{\\\u0022activityId\\\u0022:121324551,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10090812,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9379,\\\u0022lon\\\u0022:11.0422,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:27,\\\u0022altitude\\\u0022:25767,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:56:05.0\\\u0022},{\\\u0022activityId\\\u0022:121324593,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10090857,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9382,\\\u0022lon\\\u0022:11.0425,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:53,\\\u0022altitude\\\u0022:25828,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:56:21.0\\\u0022},{\\\u0022activityId\\\u0022:121324693,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10090955,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9388,\\\u0022lon\\\u0022:11.0431,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:36,\\\u0022altitude\\\u0022:25610,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:56:53.0\\\u0022},{\\\u0022activityId\\\u0022:121324781,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:16,\\\u0022odometer\\\u0022:10091065,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9395,\\\u0022lon\\\u0022:11.0437,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:59,\\\u0022altitude\\\u0022:25426,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:57:26.0\\\u0022},{\\\u0022activityId\\\u0022:121324786,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:16,\\\u0022odometer\\\u0022:10091137,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9396,\\\u0022lon\\\u0022:11.0443,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:106,\\\u0022altitude\\\u0022:25283,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:57:42.0\\\u0022},{\\\u0022activityId\\\u0022:121324834,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10091197,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9396,\\\u0022lon\\\u0022:11.0449,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:84,\\\u0022altitude\\\u0022:25290,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:58:00.0\\\u0022},{\\\u0022activityId\\\u0022:121325194,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:19,\\\u0022odometer\\\u0022:10091392,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9399,\\\u0022lon\\\u0022:11.0466,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:67,\\\u0022altitude\\\u0022:25263,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:58:56.0\\\u0022},{\\\u0022activityId\\\u0022:121325211,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10091443,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9402,\\\u0022lon\\\u0022:11.047,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:50,\\\u0022altitude\\\u0022:25265,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 06:59:12.0\\\u0022},{\\\u0022activityId\\\u0022:121325246,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10091698,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9416,\\\u0022lon\\\u0022:11.0489,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:67,\\\u0022altitude\\\u0022:24618,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:00:44.0\\\u0022},{\\\u0022activityId\\\u0022:121325266,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10091774,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9419,\\\u0022lon\\\u0022:11.0495,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:42,\\\u0022altitude\\\u0022:24357,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:01:09.0\\\u0022},{\\\u0022activityId\\\u0022:121325332,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:17,\\\u0022odometer\\\u0022:10091874,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9424,\\\u0022lon\\\u0022:11.0502,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:60,\\\u0022altitude\\\u0022:24275,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:01:35.0\\\u0022},{\\\u0022activityId\\\u0022:121325365,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10091919,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9427,\\\u0022lon\\\u0022:11.0505,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:22,\\\u0022altitude\\\u0022:24217,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:01:51.0\\\u0022},{\\\u0022activityId\\\u0022:121325377,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10091966,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.943,\\\u0022lon\\\u0022:11.0507,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:40,\\\u0022altitude\\\u0022:24080,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:02:07.0\\\u0022},{\\\u0022activityId\\\u0022:121325433,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10092007,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9433,\\\u0022lon\\\u0022:11.0509,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:21,\\\u0022altitude\\\u0022:24135,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:02:23.0\\\u0022},{\\\u0022activityId\\\u0022:121325464,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10092065,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9439,\\\u0022lon\\\u0022:11.051,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:5,\\\u0022altitude\\\u0022:23880,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:02:40.0\\\u0022},{\\\u0022activityId\\\u0022:121325512,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10092127,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9444,\\\u0022lon\\\u0022:11.0511,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:28,\\\u0022altitude\\\u0022:23831,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:03:05.0\\\u0022},{\\\u0022activityId\\\u0022:121325570,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10092165,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9446,\\\u0022lon\\\u0022:11.0514,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:49,\\\u0022altitude\\\u0022:23961,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:03:22.0\\\u0022},{\\\u0022activityId\\\u0022:121325646,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10092178,\\\u0022idle\\\u0022:47,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9447,\\\u0022lon\\\u0022:11.0515,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:70,\\\u0022altitude\\\u0022:23827,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:04:16.0\\\u0022},{\\\u0022activityId\\\u0022:121325675,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10092223,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9449,\\\u0022lon\\\u0022:11.0519,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:53,\\\u0022altitude\\\u0022:23842,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:04:32.0\\\u0022},{\\\u0022activityId\\\u0022:121325704,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10092267,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.945,\\\u0022lon\\\u0022:11.0522,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:84,\\\u0022altitude\\\u0022:23963,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:04:48.0\\\u0022},{\\\u0022activityId\\\u0022:121325713,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10092305,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9452,\\\u0022lon\\\u0022:11.0524,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:37,\\\u0022altitude\\\u0022:24166,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:05:04.0\\\u0022},{\\\u0022activityId\\\u0022:121325741,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10092337,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9455,\\\u0022lon\\\u0022:11.0526,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:6,\\\u0022altitude\\\u0022:23971,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:05:20.0\\\u0022},{\\\u0022activityId\\\u0022:121325790,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10092399,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9461,\\\u0022lon\\\u0022:11.0526,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:348,\\\u0022altitude\\\u0022:23688,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:05:49.0\\\u0022},{\\\u0022activityId\\\u0022:121325854,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10092449,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9465,\\\u0022lon\\\u0022:11.0525,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:328,\\\u0022altitude\\\u0022:23489,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:06:14.0\\\u0022},{\\\u0022activityId\\\u0022:121325894,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10092481,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9467,\\\u0022lon\\\u0022:11.0525,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:34,\\\u0022altitude\\\u0022:23321,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Bali B\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:06:30.0\\\u0022},{\\\u0022activityId\\\u0022:121325955,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10092545,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9471,\\\u0022lon\\\u0022:11.0528,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:51,\\\u0022altitude\\\u0022:23336,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:06:53.0\\\u0022},{\\\u0022activityId\\\u0022:121326030,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10092623,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9476,\\\u0022lon\\\u0022:11.0534,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:35,\\\u0022altitude\\\u0022:23400,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:07:26.0\\\u0022},{\\\u0022activityId\\\u0022:121326106,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10092687,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0538,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:51,\\\u0022altitude\\\u0022:23293,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:07:58.0\\\u0022},{\\\u0022activityId\\\u0022:121326145,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10092717,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.054,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:92,\\\u0022altitude\\\u0022:23365,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:08:14.0\\\u0022},{\\\u0022activityId\\\u0022:121326370,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10092749,\\\u0022idle\\\u0022:84,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9482,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:15,\\\u0022altitude\\\u0022:23634,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:09:49.0\\\u0022},{\\\u0022activityId\\\u0022:121326463,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10092865,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:359,\\\u0022altitude\\\u0022:23052,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:10:29.0\\\u0022},{\\\u0022activityId\\\u0022:121326520,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10092914,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:18,\\\u0022altitude\\\u0022:22814,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:10:49.0\\\u0022},{\\\u0022activityId\\\u0022:121326580,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10092987,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:0,\\\u0022altitude\\\u0022:22753,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:11:21.0\\\u0022},{\\\u0022activityId\\\u0022:121326761,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10093022,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:42,\\\u0022altitude\\\u0022:22678,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:11:37.0\\\u0022},{\\\u0022activityId\\\u0022:121326764,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10093034,\\\u0022idle\\\u0022:17,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:162,\\\u0022altitude\\\u0022:22592,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:11:58.0\\\u0022},{\\\u0022activityId\\\u0022:121326769,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10093064,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:219,\\\u0022altitude\\\u0022:22699,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:12:14.0\\\u0022},{\\\u0022activityId\\\u0022:121326775,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10093096,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.95,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:185,\\\u0022altitude\\\u0022:22778,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:12:30.0\\\u0022},{\\\u0022activityId\\\u0022:121326801,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10093166,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:203,\\\u0022altitude\\\u0022:22897,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:12:59.0\\\u0022},{\\\u0022activityId\\\u0022:121326845,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10093245,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0543,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:184,\\\u0022altitude\\\u0022:23026,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:13:28.0\\\u0022},{\\\u0022activityId\\\u0022:121326881,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10093284,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9484,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:208,\\\u0022altitude\\\u0022:23102,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:13:44.0\\\u0022},{\\\u0022activityId\\\u0022:121326910,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10093314,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:191,\\\u0022altitude\\\u0022:23307,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:14:00.0\\\u0022},{\\\u0022activityId\\\u0022:121326954,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10093338,\\\u0022idle\\\u0022:15,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:18,\\\u0022altitude\\\u0022:23240,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:14:23.0\\\u0022},{\\\u0022activityId\\\u0022:121327084,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10093538,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9499,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:22771,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:15:40.0\\\u0022},{\\\u0022activityId\\\u0022:121327120,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10093594,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:20,\\\u0022altitude\\\u0022:22675,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:16:03.0\\\u0022},{\\\u0022activityId\\\u0022:121327147,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10093626,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:103,\\\u0022altitude\\\u0022:22665,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:16:19.0\\\u0022},{\\\u0022activityId\\\u0022:121327175,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10093642,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:22679,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:16:35.0\\\u0022},{\\\u0022activityId\\\u0022:121327280,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10093758,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:204,\\\u0022altitude\\\u0022:22759,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:17:22.0\\\u0022},{\\\u0022activityId\\\u0022:121327282,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10093801,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:184,\\\u0022altitude\\\u0022:22860,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:17:38.0\\\u0022},{\\\u0022activityId\\\u0022:121327285,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10093852,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:204,\\\u0022altitude\\\u0022:23041,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:17:55.0\\\u0022},{\\\u0022activityId\\\u0022:121327338,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10093893,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9484,\\\u0022lon\\\u0022:11.0543,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:23132,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:18:24.0\\\u0022},{\\\u0022activityId\\\u0022:121327375,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10093935,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0541,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:206,\\\u0022altitude\\\u0022:23439,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:18:46.0\\\u0022},{\\\u0022activityId\\\u0022:121328010,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10093944,\\\u0022idle\\\u0022:297,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:12,\\\u0022altitude\\\u0022:23675,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:23:46.0\\\u0022},{\\\u0022activityId\\\u0022:121328051,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10093968,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9483,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:12,\\\u0022altitude\\\u0022:23592,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:24:06.0\\\u0022},{\\\u0022activityId\\\u0022:121328275,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10094239,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:40,\\\u0022altitude\\\u0022:22813,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:25:39.0\\\u0022},{\\\u0022activityId\\\u0022:121328314,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10094279,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:22973,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:25:55.0\\\u0022},{\\\u0022activityId\\\u0022:121328403,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10094370,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:202,\\\u0022altitude\\\u0022:22873,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:26:31.0\\\u0022},{\\\u0022activityId\\\u0022:121328458,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10094414,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:182,\\\u0022altitude\\\u0022:23007,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:26:47.0\\\u0022},{\\\u0022activityId\\\u0022:121328480,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10094462,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:199,\\\u0022altitude\\\u0022:23110,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:27:03.0\\\u0022},{\\\u0022activityId\\\u0022:121328538,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10094506,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9484,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:215,\\\u0022altitude\\\u0022:23157,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:27:22.0\\\u0022},{\\\u0022activityId\\\u0022:121328614,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10094542,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0541,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:237,\\\u0022altitude\\\u0022:23425,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:27:40.0\\\u0022},{\\\u0022activityId\\\u0022:121328664,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10094558,\\\u0022idle\\\u0022:12,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9481,\\\u0022lon\\\u0022:11.0541,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:20,\\\u0022altitude\\\u0022:23516,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:27:58.0\\\u0022},{\\\u0022activityId\\\u0022:121328759,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10094689,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:4,\\\u0022altitude\\\u0022:23285,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:28:42.0\\\u0022},{\\\u0022activityId\\\u0022:121328870,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10094796,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9502,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:20,\\\u0022altitude\\\u0022:22925,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:29:18.0\\\u0022},{\\\u0022activityId\\\u0022:121328907,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10094836,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:3,\\\u0022altitude\\\u0022:22861,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:29:34.0\\\u0022},{\\\u0022activityId\\\u0022:121328929,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10094868,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9505,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:184,\\\u0022altitude\\\u0022:22840,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:29:50.0\\\u0022},{\\\u0022activityId\\\u0022:121328969,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10094903,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9501,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:200,\\\u0022altitude\\\u0022:22900,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:30:07.0\\\u0022},{\\\u0022activityId\\\u0022:121329004,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10094945,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9498,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:176,\\\u0022altitude\\\u0022:22904,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:13,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:30:23.0\\\u0022},{\\\u0022activityId\\\u0022:121329052,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10094985,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:205,\\\u0022altitude\\\u0022:23000,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:30:39.0\\\u0022},{\\\u0022activityId\\\u0022:121329131,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10095037,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:185,\\\u0022altitude\\\u0022:23025,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:30:57.0\\\u0022},{\\\u0022activityId\\\u0022:121329186,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10095087,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0543,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:206,\\\u0022altitude\\\u0022:23223,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:31:13.0\\\u0022},{\\\u0022activityId\\\u0022:121329211,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10095128,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9482,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:190,\\\u0022altitude\\\u0022:23352,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:31:30.0\\\u0022},{\\\u0022activityId\\\u0022:121329263,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10095157,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9482,\\\u0022lon\\\u0022:11.0541,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:21,\\\u0022altitude\\\u0022:23444,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:31:45.0\\\u0022},{\\\u0022activityId\\\u0022:121329357,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10095256,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:2,\\\u0022altitude\\\u0022:23219,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:32:20.0\\\u0022},{\\\u0022activityId\\\u0022:121329379,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10095303,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:20,\\\u0022altitude\\\u0022:23071,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:32:36.0\\\u0022},{\\\u0022activityId\\\u0022:121329495,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10095419,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9505,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:3,\\\u0022altitude\\\u0022:22782,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:33:21.0\\\u0022},{\\\u0022activityId\\\u0022:121329557,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10095455,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9505,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:22825,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:33:37.0\\\u0022},{\\\u0022activityId\\\u0022:121329704,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10095569,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:202,\\\u0022altitude\\\u0022:23011,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:34:46.0\\\u0022},{\\\u0022activityId\\\u0022:121329758,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10095614,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:184,\\\u0022altitude\\\u0022:23075,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:35:03.0\\\u0022},{\\\u0022activityId\\\u0022:121329792,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10095680,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:207,\\\u0022altitude\\\u0022:23309,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:35:23.0\\\u0022},{\\\u0022activityId\\\u0022:121329843,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10095719,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9483,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:269,\\\u0022altitude\\\u0022:23521,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:35:39.0\\\u0022},{\\\u0022activityId\\\u0022:121329890,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10095758,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0543,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:13,\\\u0022altitude\\\u0022:23369,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:35:55.0\\\u0022},{\\\u0022activityId\\\u0022:121330104,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10095989,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:41,\\\u0022altitude\\\u0022:22893,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:37:24.0\\\u0022},{\\\u0022activityId\\\u0022:121330137,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10096022,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:193,\\\u0022altitude\\\u0022:22895,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:37:40.0\\\u0022},{\\\u0022activityId\\\u0022:121330168,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10096065,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.95,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:176,\\\u0022altitude\\\u0022:22999,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:37:57.0\\\u0022},{\\\u0022activityId\\\u0022:121330224,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10096107,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:192,\\\u0022altitude\\\u0022:22993,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:38:13.0\\\u0022},{\\\u0022activityId\\\u0022:121330320,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10096232,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9485,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:210,\\\u0022altitude\\\u0022:23358,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:38:59.0\\\u0022},{\\\u0022activityId\\\u0022:121330334,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10096267,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9483,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:263,\\\u0022altitude\\\u0022:23430,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:39:15.0\\\u0022},{\\\u0022activityId\\\u0022:121330368,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10096277,\\\u0022idle\\\u0022:13,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9484,\\\u0022lon\\\u0022:11.0542,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:9,\\\u0022altitude\\\u0022:23567,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:39:32.0\\\u0022},{\\\u0022activityId\\\u0022:121330460,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10096364,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:31,\\\u0022altitude\\\u0022:23249,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:40:10.0\\\u0022},{\\\u0022activityId\\\u0022:121330485,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10096396,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:184,\\\u0022altitude\\\u0022:23315,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:40:26.0\\\u0022},{\\\u0022activityId\\\u0022:121330503,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10096428,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:212,\\\u0022altitude\\\u0022:23416,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:40:42.0\\\u0022},{\\\u0022activityId\\\u0022:121330538,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10096461,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:15,\\\u0022altitude\\\u0022:23401,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:40:58.0\\\u0022},{\\\u0022activityId\\\u0022:121330755,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10096717,\\\u0022idle\\\u0022:23,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:188,\\\u0022altitude\\\u0022:22751,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:42:59.0\\\u0022},{\\\u0022activityId\\\u0022:121330891,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10096892,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:205,\\\u0022altitude\\\u0022:23238,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:44:13.0\\\u0022},{\\\u0022activityId\\\u0022:121330922,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10096937,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:184,\\\u0022altitude\\\u0022:23390,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:44:30.0\\\u0022},{\\\u0022activityId\\\u0022:121330953,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10096967,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9485,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:349,\\\u0022altitude\\\u0022:23479,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:44:46.0\\\u0022},{\\\u0022activityId\\\u0022:121330967,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10096982,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:16,\\\u0022altitude\\\u0022:23517,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:45:02.0\\\u0022},{\\\u0022activityId\\\u0022:121331188,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10097209,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:359,\\\u0022altitude\\\u0022:22832,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:46:40.0\\\u0022},{\\\u0022activityId\\\u0022:121331247,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10097229,\\\u0022idle\\\u0022:8,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:157,\\\u0022altitude\\\u0022:22739,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:46:57.0\\\u0022},{\\\u0022activityId\\\u0022:121331325,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10097262,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:192,\\\u0022altitude\\\u0022:22759,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:47:13.0\\\u0022},{\\\u0022activityId\\\u0022:121331434,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10097369,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:176,\\\u0022altitude\\\u0022:23131,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:47:57.0\\\u0022},{\\\u0022activityId\\\u0022:121331486,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10097406,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:208,\\\u0022altitude\\\u0022:23277,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:48:13.0\\\u0022},{\\\u0022activityId\\\u0022:121331554,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10097451,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:191,\\\u0022altitude\\\u0022:23253,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:48:32.0\\\u0022},{\\\u0022activityId\\\u0022:121331590,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10097489,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:12,\\\u0022altitude\\\u0022:23364,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:48:48.0\\\u0022},{\\\u0022activityId\\\u0022:121331855,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10097730,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:33,\\\u0022altitude\\\u0022:22862,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:50:24.0\\\u0022},{\\\u0022activityId\\\u0022:121331885,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10097766,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:198,\\\u0022altitude\\\u0022:22791,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:50:40.0\\\u0022},{\\\u0022activityId\\\u0022:121331932,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10097809,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.95,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:177,\\\u0022altitude\\\u0022:22866,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:50:57.0\\\u0022},{\\\u0022activityId\\\u0022:121331994,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10097850,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:201,\\\u0022altitude\\\u0022:23009,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:51:14.0\\\u0022},{\\\u0022activityId\\\u0022:121332030,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10097873,\\\u0022idle\\\u0022:7,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:14,\\\u0022altitude\\\u0022:23001,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:51:31.0\\\u0022},{\\\u0022activityId\\\u0022:121332097,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10097889,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:189,\\\u0022altitude\\\u0022:23222,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:51:47.0\\\u0022},{\\\u0022activityId\\\u0022:121332137,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10097956,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:207,\\\u0022altitude\\\u0022:23320,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:52:16.0\\\u0022},{\\\u0022activityId\\\u0022:121332171,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10097990,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:230,\\\u0022altitude\\\u0022:23323,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:52:33.0\\\u0022},{\\\u0022activityId\\\u0022:121332239,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10098025,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:21,\\\u0022altitude\\\u0022:23388,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:52:49.0\\\u0022},{\\\u0022activityId\\\u0022:121332278,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10098080,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:3,\\\u0022altitude\\\u0022:23258,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:53:10.0\\\u0022},{\\\u0022activityId\\\u0022:121332466,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10098251,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:23,\\\u0022altitude\\\u0022:22782,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:54:18.0\\\u0022},{\\\u0022activityId\\\u0022:121332493,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10098285,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:196,\\\u0022altitude\\\u0022:22817,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:54:34.0\\\u0022},{\\\u0022activityId\\\u0022:121332544,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10098340,\\\u0022idle\\\u0022:3,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.95,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:170,\\\u0022altitude\\\u0022:23042,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:54:57.0\\\u0022},{\\\u0022activityId\\\u0022:121332579,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10098379,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:191,\\\u0022altitude\\\u0022:23031,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:55:13.0\\\u0022},{\\\u0022activityId\\\u0022:121332654,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10098452,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:214,\\\u0022altitude\\\u0022:23117,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:55:42.0\\\u0022},{\\\u0022activityId\\\u0022:121332683,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10098467,\\\u0022idle\\\u0022:15,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:177,\\\u0022altitude\\\u0022:23126,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:56:02.0\\\u0022},{\\\u0022activityId\\\u0022:121332722,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10098508,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:226,\\\u0022altitude\\\u0022:23167,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:56:18.0\\\u0022},{\\\u0022activityId\\\u0022:121332758,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10098542,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:30,\\\u0022altitude\\\u0022:23152,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:56:34.0\\\u0022},{\\\u0022activityId\\\u0022:121332808,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10098587,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:9,\\\u0022altitude\\\u0022:23104,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:56:50.0\\\u0022},{\\\u0022activityId\\\u0022:121332841,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10098613,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:8,\\\u0022altitude\\\u0022:23106,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:57:01.0\\\u0022},{\\\u0022activityId\\\u0022:121333066,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10098779,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:30,\\\u0022altitude\\\u0022:22701,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:58:06.0\\\u0022},{\\\u0022activityId\\\u0022:121333113,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10098815,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9505,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:183,\\\u0022altitude\\\u0022:22907,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:58:22.0\\\u0022},{\\\u0022activityId\\\u0022:121333177,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10098880,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9499,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:205,\\\u0022altitude\\\u0022:22958,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:58:50.0\\\u0022},{\\\u0022activityId\\\u0022:121333247,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10098916,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:22902,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:59:08.0\\\u0022},{\\\u0022activityId\\\u0022:121333299,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10098994,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:216,\\\u0022altitude\\\u0022:23365,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 07:59:41.0\\\u0022},{\\\u0022activityId\\\u0022:121333415,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10099030,\\\u0022idle\\\u0022:18,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:238,\\\u0022altitude\\\u0022:23289,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:00:13.0\\\u0022},{\\\u0022activityId\\\u0022:121333450,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099061,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0544,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:24,\\\u0022altitude\\\u0022:23386,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:00:29.0\\\u0022},{\\\u0022activityId\\\u0022:121333486,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10099103,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:23176,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:00:47.0\\\u0022},{\\\u0022activityId\\\u0022:121333535,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099163,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:17,\\\u0022altitude\\\u0022:23017,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:01:12.0\\\u0022},{\\\u0022activityId\\\u0022:121333633,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10099288,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:353,\\\u0022altitude\\\u0022:22777,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:02:02.0\\\u0022},{\\\u0022activityId\\\u0022:121333679,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10099321,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:189,\\\u0022altitude\\\u0022:22847,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:02:18.0\\\u0022},{\\\u0022activityId\\\u0022:121333733,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10099399,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9498,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:207,\\\u0022altitude\\\u0022:23108,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:02:50.0\\\u0022},{\\\u0022activityId\\\u0022:121333760,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099442,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:191,\\\u0022altitude\\\u0022:23333,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:03:07.0\\\u0022},{\\\u0022activityId\\\u0022:121333790,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10099489,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:170,\\\u0022altitude\\\u0022:23257,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:03:28.0\\\u0022},{\\\u0022activityId\\\u0022:121333834,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10099536,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:191,\\\u0022altitude\\\u0022:23400,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:03:45.0\\\u0022},{\\\u0022activityId\\\u0022:121333861,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099558,\\\u0022idle\\\u0022:18,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9485,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:259,\\\u0022altitude\\\u0022:23494,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:04:13.0\\\u0022},{\\\u0022activityId\\\u0022:121333897,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10099592,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:15,\\\u0022altitude\\\u0022:23348,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:04:29.0\\\u0022},{\\\u0022activityId\\\u0022:121333930,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10099640,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9492,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:358,\\\u0022altitude\\\u0022:23125,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:04:47.0\\\u0022},{\\\u0022activityId\\\u0022:121333962,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099675,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:20,\\\u0022altitude\\\u0022:22902,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:05:04.0\\\u0022},{\\\u0022activityId\\\u0022:121333989,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10099723,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9499,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:2,\\\u0022altitude\\\u0022:22822,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:05:23.0\\\u0022},{\\\u0022activityId\\\u0022:121334030,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10099780,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:18,\\\u0022altitude\\\u0022:22632,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:05:44.0\\\u0022},{\\\u0022activityId\\\u0022:121334086,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099815,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:111,\\\u0022altitude\\\u0022:22576,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:06:00.0\\\u0022},{\\\u0022activityId\\\u0022:121334136,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10099855,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:191,\\\u0022altitude\\\u0022:22733,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:06:16.0\\\u0022},{\\\u0022activityId\\\u0022:121334196,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10099932,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:207,\\\u0022altitude\\\u0022:23073,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:06:47.0\\\u0022},{\\\u0022activityId\\\u0022:121334223,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10099971,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:23146,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:07:03.0\\\u0022},{\\\u0022activityId\\\u0022:121334283,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10100030,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:209,\\\u0022altitude\\\u0022:23352,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:07:29.0\\\u0022},{\\\u0022activityId\\\u0022:121334300,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100065,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:243,\\\u0022altitude\\\u0022:23660,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:07:45.0\\\u0022},{\\\u0022activityId\\\u0022:121334333,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10100101,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:16,\\\u0022altitude\\\u0022:23479,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:08:01.0\\\u0022},{\\\u0022activityId\\\u0022:121334384,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100171,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:357,\\\u0022altitude\\\u0022:23173,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:08:28.0\\\u0022},{\\\u0022activityId\\\u0022:121334396,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100209,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:21,\\\u0022altitude\\\u0022:23019,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:08:44.0\\\u0022},{\\\u0022activityId\\\u0022:121334428,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10100250,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9501,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:4,\\\u0022altitude\\\u0022:22928,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:09:00.0\\\u0022},{\\\u0022activityId\\\u0022:121334468,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100319,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:33,\\\u0022altitude\\\u0022:22699,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:09:32.0\\\u0022},{\\\u0022activityId\\\u0022:121334489,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10100355,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9505,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:189,\\\u0022altitude\\\u0022:22709,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:09:48.0\\\u0022},{\\\u0022activityId\\\u0022:121334557,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10100452,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:207,\\\u0022altitude\\\u0022:23084,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:10:24.0\\\u0022},{\\\u0022activityId\\\u0022:121334589,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10100492,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:185,\\\u0022altitude\\\u0022:23083,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:10:40.0\\\u0022},{\\\u0022activityId\\\u0022:121334634,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10100560,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:201,\\\u0022altitude\\\u0022:23149,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:11:08.0\\\u0022},{\\\u0022activityId\\\u0022:121334662,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100592,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9486,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:297,\\\u0022altitude\\\u0022:23404,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:11:24.0\\\u0022},{\\\u0022activityId\\\u0022:121334693,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10100628,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:19,\\\u0022altitude\\\u0022:23299,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:11:40.0\\\u0022},{\\\u0022activityId\\\u0022:121334827,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100695,\\\u0022idle\\\u0022:38,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:354,\\\u0022altitude\\\u0022:23177,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:12:43.0\\\u0022},{\\\u0022activityId\\\u0022:121334886,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10100720,\\\u0022idle\\\u0022:10,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:269,\\\u0022altitude\\\u0022:22961,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:13:04.0\\\u0022},{\\\u0022activityId\\\u0022:121334915,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10100742,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9493,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:178,\\\u0022altitude\\\u0022:23020,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:13:20.0\\\u0022},{\\\u0022activityId\\\u0022:121334970,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10100790,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:197,\\\u0022altitude\\\u0022:23010,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:13:41.0\\\u0022},{\\\u0022activityId\\\u0022:121335026,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100811,\\\u0022idle\\\u0022:16,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0545,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:358,\\\u0022altitude\\\u0022:23251,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:14:05.0\\\u0022},{\\\u0022activityId\\\u0022:121335071,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10100859,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9493,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:14,\\\u0022altitude\\\u0022:22953,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:14:28.0\\\u0022},{\\\u0022activityId\\\u0022:121335090,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10100881,\\\u0022idle\\\u0022:9,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:175,\\\u0022altitude\\\u0022:22966,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:14:46.0\\\u0022},{\\\u0022activityId\\\u0022:121335126,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10100900,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9493,\\\u0022lon\\\u0022:11.0546,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:21,\\\u0022altitude\\\u0022:22933,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:15:01.0\\\u0022},{\\\u0022activityId\\\u0022:121335219,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10100987,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9501,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:4,\\\u0022altitude\\\u0022:22782,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:15:47.0\\\u0022},{\\\u0022activityId\\\u0022:121335268,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10101028,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9505,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:24,\\\u0022altitude\\\u0022:22555,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:16:04.0\\\u0022},{\\\u0022activityId\\\u0022:121335300,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10101060,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:146,\\\u0022altitude\\\u0022:22521,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:16:20.0\\\u0022},{\\\u0022activityId\\\u0022:121335338,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10101102,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:185,\\\u0022altitude\\\u0022:22654,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:16:36.0\\\u0022},{\\\u0022activityId\\\u0022:121335448,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10101185,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:202,\\\u0022altitude\\\u0022:23165,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:17:10.0\\\u0022},{\\\u0022activityId\\\u0022:121335557,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10101240,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:23416,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:17:32.0\\\u0022},{\\\u0022activityId\\\u0022:121335560,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10101293,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:203,\\\u0022altitude\\\u0022:23546,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:17:54.0\\\u0022},{\\\u0022activityId\\\u0022:121335652,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10101314,\\\u0022idle\\\u0022:42,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:8,\\\u0022altitude\\\u0022:23502,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:18:41.0\\\u0022},{\\\u0022activityId\\\u0022:121335768,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10101541,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:29,\\\u0022altitude\\\u0022:22595,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:20:19.0\\\u0022},{\\\u0022activityId\\\u0022:121335795,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10101555,\\\u0022idle\\\u0022:17,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0551,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:176,\\\u0022altitude\\\u0022:22550,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:20:41.0\\\u0022},{\\\u0022activityId\\\u0022:121335815,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10101598,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:192,\\\u0022altitude\\\u0022:22639,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:20:59.0\\\u0022},{\\\u0022activityId\\\u0022:121335925,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10101770,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:208,\\\u0022altitude\\\u0022:23237,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:7,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:22:08.0\\\u0022},{\\\u0022activityId\\\u0022:121335940,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10101803,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:24,\\\u0022altitude\\\u0022:23395,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:22:24.0\\\u0022},{\\\u0022activityId\\\u0022:121335979,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10101835,\\\u0022idle\\\u0022:15,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:0,\\\u0022altitude\\\u0022:23104,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:8,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:22:52.0\\\u0022},{\\\u0022activityId\\\u0022:121336026,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10101892,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:18,\\\u0022altitude\\\u0022:22939,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:23:18.0\\\u0022},{\\\u0022activityId\\\u0022:121336057,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10101946,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.95,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:353,\\\u0022altitude\\\u0022:22733,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:23:41.0\\\u0022},{\\\u0022activityId\\\u0022:121336069,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10101989,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:19,\\\u0022altitude\\\u0022:22673,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:23:57.0\\\u0022},{\\\u0022activityId\\\u0022:121336089,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10102029,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:46,\\\u0022altitude\\\u0022:22685,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:24:14.0\\\u0022},{\\\u0022activityId\\\u0022:121336106,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10102065,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:204,\\\u0022altitude\\\u0022:23013,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:24:30.0\\\u0022},{\\\u0022activityId\\\u0022:121336124,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10102098,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9501,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:182,\\\u0022altitude\\\u0022:23054,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:24:46.0\\\u0022},{\\\u0022activityId\\\u0022:121336156,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10102150,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:203,\\\u0022altitude\\\u0022:23287,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:25:08.0\\\u0022},{\\\u0022activityId\\\u0022:121336174,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10102190,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9493,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:186,\\\u0022altitude\\\u0022:23519,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:25:26.0\\\u0022},{\\\u0022activityId\\\u0022:121336203,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10102257,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:214,\\\u0022altitude\\\u0022:23739,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:25:53.0\\\u0022},{\\\u0022activityId\\\u0022:121336289,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10102279,\\\u0022idle\\\u0022:13,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:10,\\\u0022altitude\\\u0022:23901,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:26:15.0\\\u0022},{\\\u0022activityId\\\u0022:121336335,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10102384,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9496,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:26,\\\u0022altitude\\\u0022:23077,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:27:04.0\\\u0022},{\\\u0022activityId\\\u0022:121336379,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10102433,\\\u0022idle\\\u0022:13,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9499,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:9,\\\u0022altitude\\\u0022:22646,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:27:33.0\\\u0022},{\\\u0022activityId\\\u0022:121336435,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10102517,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:39,\\\u0022altitude\\\u0022:22392,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:28:04.0\\\u0022},{\\\u0022activityId\\\u0022:121336461,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10102556,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9504,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:189,\\\u0022altitude\\\u0022:22653,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:28:20.0\\\u0022},{\\\u0022activityId\\\u0022:121336554,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10102668,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:205,\\\u0022altitude\\\u0022:23554,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:29:08.0\\\u0022},{\\\u0022activityId\\\u0022:121336576,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:4,\\\u0022odometer\\\u0022:10102703,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:189,\\\u0022altitude\\\u0022:23875,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:29:24.0\\\u0022},{\\\u0022activityId\\\u0022:121336609,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10102745,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9487,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:205,\\\u0022altitude\\\u0022:23903,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:29:41.0\\\u0022},{\\\u0022activityId\\\u0022:121336636,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10102778,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:17,\\\u0022altitude\\\u0022:23700,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:29:57.0\\\u0022},{\\\u0022activityId\\\u0022:121336670,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10102838,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:358,\\\u0022altitude\\\u0022:23082,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:30:24.0\\\u0022},{\\\u0022activityId\\\u0022:121336705,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10102871,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9497,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:20,\\\u0022altitude\\\u0022:23059,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:30:40.0\\\u0022},{\\\u0022activityId\\\u0022:121336761,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10102926,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9502,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:4,\\\u0022altitude\\\u0022:22533,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:31:06.0\\\u0022},{\\\u0022activityId\\\u0022:121336807,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10102975,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:27,\\\u0022altitude\\\u0022:22400,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:31:29.0\\\u0022},{\\\u0022activityId\\\u0022:121336847,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10102991,\\\u0022idle\\\u0022:21,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:182,\\\u0022altitude\\\u0022:22560,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:31:55.0\\\u0022},{\\\u0022activityId\\\u0022:121336898,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10103060,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.95,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:199,\\\u0022altitude\\\u0022:23129,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:32:26.0\\\u0022},{\\\u0022activityId\\\u0022:121336935,\\\u0022eventCode\\\u0022:\\\u002212\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Journey End\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10103085,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9498,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:190,\\\u0022altitude\\\u0022:23304,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:32:47.0\\\u0022},{\\\u0022activityId\\\u0022:121336964,\\\u0022eventCode\\\u0022:\\\u002211\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Journey Start\\\u0022,\\\u0022speed\\\u0022:0,\\\u0022odometer\\\u0022:10103085,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9498,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:190,\\\u0022altitude\\\u0022:23479,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:32:57.0\\\u0022},{\\\u0022activityId\\\u0022:121336998,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10103129,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.0548,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:175,\\\u0022altitude\\\u0022:23347,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:33:23.0\\\u0022},{\\\u0022activityId\\\u0022:121337011,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10103165,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:192,\\\u0022altitude\\\u0022:23380,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:33:39.0\\\u0022},{\\\u0022activityId\\\u0022:121337046,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10103185,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:11,\\\u0022altitude\\\u0022:23501,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:9,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:33:55.0\\\u0022},{\\\u0022activityId\\\u0022:121337064,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10103203,\\\u0022idle\\\u0022:8,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:189,\\\u0022altitude\\\u0022:23575,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:34:11.0\\\u0022},{\\\u0022activityId\\\u0022:121337104,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10103244,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0547,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:159,\\\u0022altitude\\\u0022:23776,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:34:30.0\\\u0022},{\\\u0022activityId\\\u0022:121337122,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10103282,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9489,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:8,\\\u0022altitude\\\u0022:23592,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:34:46.0\\\u0022},{\\\u0022activityId\\\u0022:121337261,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:12,\\\u0022odometer\\\u0022:10103500,\\\u0022idle\\\u0022:23,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0551,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:188,\\\u0022altitude\\\u0022:22759,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:36:31.0\\\u0022},{\\\u0022activityId\\\u0022:121337326,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10103593,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9498,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:204,\\\u0022altitude\\\u0022:23238,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:37:06.0\\\u0022},{\\\u0022activityId\\\u0022:121337364,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10103653,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9493,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:188,\\\u0022altitude\\\u0022:23493,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:37:27.0\\\u0022},{\\\u0022activityId\\\u0022:121337393,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10103710,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:208,\\\u0022altitude\\\u0022:23892,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:12,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:37:50.0\\\u0022},{\\\u0022activityId\\\u0022:121337829,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:6,\\\u0022odometer\\\u0022:10103909,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9507,\\\u0022lon\\\u0022:11.0551,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:50,\\\u0022altitude\\\u0022:22472,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:42:10.0\\\u0022},{\\\u0022activityId\\\u0022:121337849,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10103953,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9503,\\\u0022lon\\\u0022:11.0551,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:200,\\\u0022altitude\\\u0022:22721,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:42:26.0\\\u0022},{\\\u0022activityId\\\u0022:121337881,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:11,\\\u0022odometer\\\u0022:10104004,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9499,\\\u0022lon\\\u0022:11.0551,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:180,\\\u0022altitude\\\u0022:22959,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:42:43.0\\\u0022},{\\\u0022activityId\\\u0022:121337916,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10104053,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9494,\\\u0022lon\\\u0022:11.055,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:198,\\\u0022altitude\\\u0022:23264,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:43:00.0\\\u0022},{\\\u0022activityId\\\u0022:121337965,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:5,\\\u0022odometer\\\u0022:10104088,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9491,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:177,\\\u0022altitude\\\u0022:23492,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:43:17.0\\\u0022},{\\\u0022activityId\\\u0022:121337982,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:9,\\\u0022odometer\\\u0022:10104123,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9488,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:201,\\\u0022altitude\\\u0022:23555,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022Maihula\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:43:33.0\\\u0022},{\\\u0022activityId\\\u0022:121338009,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:7,\\\u0022odometer\\\u0022:10104161,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.949,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:23,\\\u0022altitude\\\u0022:23315,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:43:49.0\\\u0022},{\\\u0022activityId\\\u0022:121338047,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:8,\\\u0022odometer\\\u0022:10104212,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9495,\\\u0022lon\\\u0022:11.0549,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:1,\\\u0022altitude\\\u0022:23007,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:11,\\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:44:10.0\\\u0022},{\\\u0022activityId\\\u0022:121338143,\\\u0022eventCode\\\u0022:\\\u002200\\\u0022,\\\u0022eventName\\\u0022:\\\u0022Normal\\\u0022,\\\u0022speed\\\u0022:10,\\\u0022odometer\\\u0022:10104341,\\\u0022idle\\\u0022:0,\\\u0022isGPSValid\\\u0022:true,\\\u0022lat\\\u0022:7.9506,\\\u0022lon\\\u0022:11.0551,\\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\\u0022headingDegree\\\u0022:19,\\\u0022altitude\\\u0022:22543,\\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\\u0022batteryVoltage\\\u0022:0,\\\u0022satelliteNumber\\\u0022:10,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022county\\\u0022:\\\u0022\\\u0022,\\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022activityUTCDate\\\u0022:\\\u00222019-04-16 08:44:58.0\\\u0022}],\\\u0022message\\\u0022:\\\u0022\\\u0022} \\n\\n*/\\n\\n\\n\u0022\r\n },\r\n \u0022UpdateAerisTractorsActivityOnPostFromAWSBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var tractorId = request.body.tractor_id;\\n var DailyTractorActivity = modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027);\\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n if( tractorId ) {\\n var postedTractorActivity= request.body;\\n\\n var tractorActivityData = {};\\n tractorActivityData.day = postedTractorActivity.day;\\n tractorActivityData.TotalTimeActive = postedTractorActivity.total_active_time;\\n tractorActivityData.TotalTimeIdle = postedTractorActivity.total_inactive_time;\\n tractorActivityData.LastJourneyStartTime = postedTractorActivity.last_journey_start_time;\\n tractorActivityData.TotalSpeed = postedTractorActivity.total_speed;\\n tractorActivityData.TotalSpeedCounter = postedTractorActivity.total_speed_counter;\\n tractorActivityData.AverageSpeed = postedTractorActivity.average_speed;\\n tractorActivityData.StartActiveData = postedTractorActivity.start_active_date;\\n tractorActivityData.LastActiveData = postedTractorActivity.last_active_date;\\n tractorActivityData.Country = postedTractorActivity.country;\\n tractorActivityData.Town = postedTractorActivity.town;\\n tractorActivityData.Street = postedTractorActivity.street;\\n tractorActivityData.StartCountry = postedTractorActivity.start_country;\\n tractorActivityData.StartTown = postedTractorActivity.start_town;\\n tractorActivityData.StartStreet = postedTractorActivity.start_street;\\n tractorActivityData.Route = postedTractorActivity.route;\\n tractorActivityData.OperatorID = postedTractorActivity.operator_id;\\n tractorActivityData.IgnitionStatus = postedTractorActivity.ignition_status;\\n tractorActivityData.Latitude = postedTractorActivity.latitude ? postedTractorActivity.latitude : 0;\\n tractorActivityData.Longitude = postedTractorActivity.longitude ? postedTractorActivity.longitude : 0;\\n tractorActivityData.RevenueType = postedTractorActivity.revenue_type;\\n tractorActivityData.RevenueCurrency = postedTractorActivity.revenue_currency;\\n tractorActivityData.HectaresServiced = postedTractorActivity.hectares;\\n tractorActivityData.DistanceCovered = postedTractorActivity.total_distance;\\n\\n var tractorUpdateData = {};\\n tractorUpdateData.ActiveTimeToday = postedTractorActivity.total_active_time \u002B postedTractorActivity.total_inactive_time;\\n\\n\\t\\t\\tvar kinveyMetaData = modules.kinvey.entity();\\n tractorActivityData._acl = kinveyMetaData._acl;\\n tractorActivityData._kmd = kinveyMetaData._kmd;\\n \\n DailyTractorActivity.update(\\n {\\\u0022TractorID\\\u0022: tractorId, \\\u0022day\\\u0022:postedTractorActivity.day},\\n {$set:tractorActivityData}, {\\\u0022upsert\\\u0022:true},\\n function(err, updated) {\\n if( ! err ){\\n modules.logger.info(\u0027updated tractor activity for tractor with id of \u0027 \u002B tractorId);\\n// \\t\\t\\tmodules.logger.info( \\\u0022total active time is \\\u0022 \u002B tractorUpdateData.ActiveTimeToday );\\n\\n Tractor.update({\\\u0022TractorID\\\u0022: \u002BtractorId}, {$set: tractorUpdateData }, function(err, updatedTractor){\\n if( ! err ){\\n modules.logger.info(\u0027updated tractor detail for tractor with id of \u0027 \u002B tractorId);\\n response.body = {service:\u0027aeris tractor activity service\u0027};\\n response.complete();\\n }\\n else {\\n modules.logger.info(\\\u0022there was an error updating tractor details \\\u0022 \u002B tractorId );\\n response.body = {service:\u0027aeris tractor activity service\u0027};\\n response.complete();\\n }\\n });\\n }\\n else {\\n \\tmodules.logger.info(\\\u0022there was an error updating tractor activity detail\\\u0022 \u002B tractorId );\\n response.body = {service:\u0027aeris tractor activity service failed to update\u0027};\\n response.complete();\\n }\\n });\\n }\\n \\n \\telse {\\n modules.logger.info(\u0027no tractor id sent\u0027);\\n response.complete();\\n }\\n\\n\\n // Posted data sample\\n\\n /*{\\\u0022id\\\u0022:157,\\\u0022k_id\\\u0022:null,\\\u0022tractor_id\\\u0022:\\\u0022500507\\\u0022,\\\u0022day\\\u0022:\\\u00222019-04-14\\\u0022,\\\u0022total_active_time\\\u0022:2806,\\\u0022total_moving_time\\\u0022:2806,\\n \\\u0022total_inactive_time\\\u0022:7259,\\\u0022total_distance\\\u0022:6.47,\\\u0022last_journey_start_time\\\u0022:\\\u00222019-04-14T13:55:27.000Z\\\u0022,\\\u0022total_speed\\\u0022:0,\\n \\\u0022total_speed_counter\\\u0022:0,\\\u0022average_speed\\\u0022:0,\\\u0022start_active_date\\\u0022:\\\u00222019-04-14T13:36:22.000Z\\\u0022,\\\u0022last_active_date\\\u0022:\\\u00222019-04-14 16:43:12\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022\\\u0022,\\\u0022town\\\u0022:\\\u0022\\\u0022,\\\u0022street\\\u0022:\\\u0022\\\u0022,\\\u0022start_country\\\u0022:\\\u0022\\\u0022,\\\u0022start_town\\\u0022:\\\u0022\\\u0022,\\\u0022start_street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022route\\\u0022:null,\\\u0022operator_id\\\u0022:null,\\\u0022revenue_type\\\u0022:\\\u0022\\\u0022,\\\u0022revenue_currency\\\u0022:\\\u0022\\\u0022,\\\u0022hectares\\\u0022:0,\\\u0022ignition_status\\\u0022:null,\\n \\\u0022trips\\\u0022:null,\\\u0022trip_start_end_datetime\\\u0022:null,\\\u0022created_at\\\u0022:\\\u00222019-04-14 14:46:31\\\u0022,\\\u0022updated_at\\\u0022:\\\u00222019-04-14 14:57:23\\\u0022}\\n */\\n\\n}\\n\u0022\r\n },\r\n \u0022UpdateAerisTractorsOnPOSTFromAWSBACKEND\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var tractor_id = Number(request.body.tracker_id);\\n var updateData = request.body;\\n var tractorUpdateData = {};\\n \\n if( tractor_id ){\\n \\n var statusData = JSON.parse(updateData.status_from_2track);\\n \\n if( updateData.latitude \u0026\u0026 updateData.longitude ){\\n tractorUpdateData.PositionLatitude = updateData.latitude;\\n \\t\\t tractorUpdateData.PositionLongitude = updateData.longitude;\\n }\\n \\n tractorUpdateData.LastActiveTime = updateData.last_reported_time;\\n tractorUpdateData.FuelRawValue = statusData.fuelRawValue;\\n tractorUpdateData.IgnitionStatus = statusData.ignitionStatus;\\n tractorUpdateData.AssetState = statusData.assetState;\\n// tractorUpdateData.Status = statusData.ignitionStatus === \\\u0022On\\\u0022 ? 1 : 0;\\n tractorUpdateData.Speed = statusData.speed;\\n tractorUpdateData.Heading = statusData.heading;\\n tractorUpdateData.FuelLevelVoltage = statusData.fuelLevelVoltage;\\n tractorUpdateData.EngineHours = updateData.total_engine_hours ? Math.ceil((updateData.total_engine_hours)/3600) : 0;\\n// tractorUpdateData.FixedOdometerReading = updateData.total_distance_covered ? updateData.total_distance_covered: 0;\\n tractorUpdateData.TotalDistanceCovered = updateData.total_distance_covered ? updateData.total_distance_covered: 0;\\n\\n// tractorUpdateData.OperatorID = statusData.operator_id;\\n tractorUpdateData.TotalHectaresTilled\u002B= updateData.hectares;\\n tractorUpdateData.UpdatedAt = updateData.updated_at; //modules.moment.utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n tractorUpdateData._acl.lmt = new Date();\\n \\n // update the tractor detail\\n TractorDetail.update({\\\u0022TractorID\\\u0022:tractor_id}, {$set:tractorUpdateData},{\\\u0022multi\\\u0022:true}, function(err, updatedTractor){\\n if( !err ){\\n \\tmodules.logger.info(\u0027updated tractor detail having TractorID of \u0027 \u002B tractor_id );\\n response.body = {service: \u0027aeris tractor detail service\u0027}\\n \\t\\t\\tresponse.complete();\\n }\\n else {\\n modules.logger.info(\u0027errors updating \u0027 \u002B err );\\n response.body = {service: \u0027aeris tractor detail service\u0027}\\n response.complete();\\n\\n }\\n \\t\\t\\t })\\n\\n }\\n else { \\n modules.logger.info(\u0027exiting , data posted without tractor id \u0027 \u002B JSON.stringify(updateData));\\n response.complete();\\n }\\n\\n \\n //Sample posted data \\n\\n //[2019-04-14 16:13:03] local.INFO: {\\\u0022id\\\u0022:7,\\\u0022kinvey_creator_id\\\u0022:null,\\\u0022tractor_owner_id\\\u0022:null,\\\u0022tracker_id\\\u0022:\\\u0022500502\\\u0022,\\\u0022name\\\u0022:\\\u0022TRAXI MH6005(RSH 579 ZA)\\\u0022,\\\u0022attachments\\\u0022:null,\\\u0022latitude\\\u0022:9.897339,\\\u0022longitude\\\u0022:10.983771,\\\u0022operator_id\\\u0022:null,\\\u0022status\\\u0022:null,\\\u0022speed\\\u0022:0.08,\\\u0022total_hectares_serviced\\\u0022:null,\\\u0022data\\\u0022:null,\\\u0022is_deleted\\\u0022:null,\\\u0022k_id\\\u0022:null,\\\u0022receive_daily_updates\\\u0022:null,\\\u0022receive_sms_booking_pairing\\\u0022:null,\\\u0022user_id\\\u0022:null,\\\u0022kinvey_operator_id\\\u0022:null,\\\u0022status_from_2track\\\u0022:\\\u0022{\\\\\\\u0022assetUid\\\\\\\u0022:\\\\\\\u002295e1c2a6-e202-44c8-8a4b-037801801194\\\\\\\u0022,\\\\\\\u0022creationTime\\\\\\\u0022:1515104866638,\\\\\\\u0022lastModifiedTime\\\\\\\u0022:1515179131685,\\\\\\\u0022name\\\\\\\u0022:\\\\\\\u0022TRAXI MH6005(RSH 579 ZA)\\\\\\\u0022,\\\\\\\u0022vin\\\\\\\u0022:\\\\\\\u0022500502\\\\\\\u0022,\\\\\\\u0022assetId\\\\\\\u0022:\\\\\\\u0022500502\\\\\\\u0022,\\\\\\\u0022deviceId\\\\\\\u0022:\\\\\\\u00221333111468\\\\\\\u0022,\\\\\\\u0022licensePlate\\\\\\\u0022:\\\\\\\u0022RSH 579 ZA\\\\\\\u0022,\\\\\\\u0022sequenceNumber\\\\\\\u0022:1106,\\\\\\\u0022updateTime\\\\\\\u0022:1554699641,\\\\\\\u0022timeOfFix\\\\\\\u0022:1554699641,\\\\\\\u0022latitude\\\\\\\u0022:9.897339,\\\\\\\u0022longitude\\\\\\\u0022:10.983771,\\\\\\\u0022altitude\\\\\\\u0022:39560,\\\\\\\u0022speed\\\\\\\u0022:0.08,\\\\\\\u0022heading\\\\\\\u0022:0,\\\\\\\u0022satellites\\\\\\\u0022:6,\\\\\\\u0022fixStatus\\\\\\\u0022:0,\\\\\\\u0022hdop\\\\\\\u0022:22,\\\\\\\u0022carrier\\\\\\\u0022:0,\\\\\\\u0022rssi\\\\\\\u0022:-89,\\\\\\\u0022inputs\\\\\\\u0022:0,\\\\\\\u0022eventType\\\\\\\u0022:15,\\\\\\\u0022devicePowerVoltage\\\\\\\u0022:null,\\\\\\\u0022assetState\\\\\\\u0022:\\\\\\\u0022Off\\\\\\\u0022,\\\\\\\u0022altitude_NEW\\\\\\\u0022:3956,\\\\\\\u0022correlationId\\\\\\\u0022:\\\\\\\u00221106\\\\\\\u0022,\\\\\\\u0022deviceBatteryVoltage\\\\\\\u0022:4170,\\\\\\\u0022fuelLevelVoltage\\\\\\\u0022:0,\\\\\\\u0022fuelRawValue\\\\\\\u0022:267387135,\\\\\\\u0022gpsSpeed\\\\\\\u0022:2880,\\\\\\\u0022heading_NEW\\\\\\\u0022:0,\\\\\\\u0022ignitionStatus\\\\\\\u0022:0,\\\\\\\u0022latitude_NEW\\\\\\\u0022:9897339,\\\\\\\u0022locationTimestamp\\\\\\\u0022:1554699641000,\\\\\\\u0022locationValidity\\\\\\\u0022:0,\\\\\\\u0022longitude_NEW\\\\\\\u0022:10983771,\\\\\\\u0022mobileIdentificationNumber\\\\\\\u0022:\\\\\\\u00221333111468\\\\\\\u0022,\\\\\\\u0022timestamp\\\\\\\u0022:1554699641000,\\\\\\\u0022vehicleBatteryVoltage\\\\\\\u0022:0,\\\\\\\u0022vehicleStatusReason\\\\\\\u0022:15,\\\\\\\u0022accountId\\\\\\\u0022:\\\\\\\u0022100041\\\\\\\u0022,\\\\\\\u0022accountName\\\\\\\u0022:\\\\\\\u0022HelloTractorTestFleet\\\\\\\u0022,\\\\\\\u0022deviceId2\\\\\\\u0022:null,\\\\\\\u0022placeId\\\\\\\u0022:null,\\\\\\\u0022tagIds\\\\\\\u0022:[],\\\\\\\u0022makeModelId\\\\\\\u0022:null,\\\\\\\u0022make\\\\\\\u0022:null,\\\\\\\u0022model\\\\\\\u0022:null,\\\\\\\u0022year\\\\\\\u0022:null,\\\\\\\u0022initialDistance\\\\\\\u0022:0,\\\\\\\u0022distanceUnit\\\\\\\u0022:null,\\\\\\\u0022initialOperationalTime\\\\\\\u0022:null,\\\\\\\u0022operationalTimeUnit\\\\\\\u0022:null,\\\\\\\u0022dateOfBirth\\\\\\\u0022:null,\\\\\\\u0022assetType\\\\\\\u0022:null,\\\\\\\u0022customAttributes\\\\\\\u0022:[],\\\\\\\u0022placeUid\\\\\\\u0022:null,\\\\\\\u0022dataHex\\\\\\\u0022:\\\\\\\u0022830513331114680101010204525caad5795caad57905e636ce068bfd9400009a8b00000008000006000014ffa72f1630003e0f1000003267910000000000000000000000000ff000ff0ff000ff0000000000000000000000000000000000000000000100020000000000000000000000000000104a\\\\\\\u0022}\\\u0022,\\\u0022tractor_model_id\\\u0022:null,\\\u0022last_reported_time\\\u0022:\\\u00222019-04-08 05:00:41\\\u0022,\\\u0022group_id\\\u0022:null,\\\u0022address\\\u0022:null,\\\u0022created_at\\\u0022:\\\u00222019-04-10 12:18:25\\\u0022,\\\u0022updated_at\\\u0022:\\\u00222019-04-14 16:13:03\\\u0022} \\n\\n}\u0022\r\n },\r\n \u0022UpdateTwoTrackTractorsStatusOnPOSTFromAWSBACKEND\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var updateDataArr = request.body.data;\\n modules.logger.info(\\\u0022Tractors status posted \\\u0022 \u002B JSON.stringify(updateDataArr));\\n\\n var tractorStatusData = {};\\n var queueCount = 0; \\n if( updateDataArr.length ){\\n var trackerId;\\n \\tfor(var i=0; i\u003CupdateDataArr.length; i\u002B\u002B){\\n \\n var updateData = updateDataArr[i];\\n trackerId = \u002BupdateData.trackerId;\\n \\n tractorStatusData.LastActiveTime = updateData.lastReportUTCDate;\\n \\ttractorStatusData.Speed = updateData.speed;\\n \\ttractorStatusData.LastOdometerValue = updateData.odometer;\\n \\ttractorStatusData.PositionLatitude = updateData.lat;\\n tractorStatusData.PositionLongitude = updateData.lon;\\n \\ttractorStatusData.Street = updateData.street;\\n tractorStatusData.Country = updateData.country;\\n tractorStatusData.Town = updateData.town;\\n tractorStatusData.UpdatedAt = modules.moment().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n\\t\\t\\ttractorStatusData.IgnitionStatus = updateData.ignitionStatus;\\n \\ttractorStatusData.Status = updateData.ignitionStatus == \\\u0022On\\\u0022 ? 1 : 0;\\n tractorStatusData.TrackerID = trackerId;\\n tractorStatusData.ServiceProvider = \\\u00222TRACK\\\u0022;\\n\\n // Run the update \\n TractorDetail.update({\\\u0022TractorID\\\u0022:trackerId}, {$set:tractorStatusData}, function(err, updatedTractor){\\n if( ! err ){\\n modules.logger.info(\\\u0022updated tractor detail for tractor with ID of \\\u0022 \u002B tractorStatusData.TrackerID );\\n queueCount\u002B\u002B;\\n if( queueCount === updateDataArr.length ){\\n response.body = {service: \u0027twotrack tractor detail update status\u0027}\\n response.complete();\\n }\\n }\\n else {\\n modules.logger.info(\\\u0022Error occured \\\u0022);\\n queueCount\u002B\u002B;\\n\\t\\t\\t\\t\\tif( queueCount === updateDataArr.length ){\\n response.body = {service: \u0027twotrack tractor detail update status\u0027}\\n response.complete();\\n }\\n }\\n });\\n \\t\\t}\\n } else {\\n \\t\\tmodules.logger.info(\u0027exiting\u0027);\\n \\t\\treturn response.complete();\\n }\\n \\n \\n // Sample posted data \\n /* \\n \\n { \\n \\\u0022returnCode\\\u0022:\\\u0022200\\\u0022,\\n \\\u0022isSuccess\\\u0022:true,\\n \\\u0022data\\\u0022:[ \\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100001\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:0,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:0,\\n \\\u0022lon\\\u0022:0,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:0,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:-1,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00221900-01-01 00:00:00.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100002\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:9138086,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:6.0854,\\n \\\u0022lon\\\u0022:0.1011,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:198,\\n \\\u0022altitude\\\u0022:5752,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Akuse Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Eastern Region\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Ghana\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:04:38.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100003\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:183069,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:7.7928,\\n \\\u0022lon\\\u0022:8.8779,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:209,\\n \\\u0022altitude\\\u0022:9433,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022BN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-07-17 22:11:51.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100004\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:1252,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.9207,\\n \\\u0022lon\\\u0022:7.2557,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:159,\\n \\\u0022altitude\\\u0022:31079,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kuje\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Nasarawa\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222016-06-25 12:31:58.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100005\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:0,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:10.5416,\\n \\\u0022lon\\\u0022:7.4637,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:321,\\n \\\u0022altitude\\\u0022:64047,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Inuwa Wada Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kaduna\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Kaduna\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222015-11-27 14:32:20.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100006\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:9529754,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.6299,\\n \\\u0022lon\\\u0022:8.9803,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:159,\\n \\\u0022altitude\\\u0022:45753,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Kano\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222016-11-30 11:04:06.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100007\\\u0022,\\n \\\u0022speed\\\u0022:1,\\n \\\u0022odometer\\\u0022:-3907538,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0798,\\n \\\u0022lon\\\u0022:7.7003,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:46,\\n \\\u0022altitude\\\u0022:68633,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022A 236\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Kaduna\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-02-23 12:09:35.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100008\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11869727,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:10.8483,\\n \\\u0022lon\\\u0022:8.2028,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:136,\\n \\\u0022altitude\\\u0022:71589,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Anchau-Kuzuntu-Dutsen Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Dutsen Wai\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-06-03 01:51:49.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100009\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:18993850,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.1721,\\n \\\u0022lon\\\u0022:7.6811,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:39,\\n \\\u0022altitude\\\u0022:42687,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-05-13 20:26:12.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100010\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:707,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:13.0646,\\n \\\u0022lon\\\u0022:5.2165,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:112,\\n \\\u0022altitude\\\u0022:29814,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Abdulahi Fodio Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Sokoto\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Sokoto\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-01-01 18:19:19.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100011\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:320,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:0,\\n \\\u0022lon\\\u0022:0,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:0,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u002218-419 Obafemi Awolowo Way\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Abuja\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022FCT\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-01-20 00:00:00.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100012\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:1236,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.6028,\\n \\\u0022lon\\\u0022:8.4304,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:25,\\n \\\u0022altitude\\\u0022:51718,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:6,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-01-21 19:17:53.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100013\\\u0022,\\n \\\u0022speed\\\u0022:1,\\n \\\u0022odometer\\\u0022:0,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.0631,\\n \\\u0022lon\\\u0022:7.4257,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:335,\\n \\\u0022altitude\\\u0022:48280,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022495-637 Obafemi Awolowo Way\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Abuja\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022FCT\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-08-04 10:18:41.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100014\\\u0022,\\n \\\u0022speed\\\u0022:2,\\n \\\u0022odometer\\\u0022:60141,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:6.5444,\\n \\\u0022lon\\\u0022:7.0367,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:66,\\n \\\u0022altitude\\\u0022:6160,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:8,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022AN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-08-02 12:14:16.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100015\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:3557177,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:-1.209,\\n \\\u0022lon\\\u0022:36.8939,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022S\\\u0022,\\n \\\u0022headingDegree\\\u0022:195,\\n \\\u0022altitude\\\u0022:155814,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022123 Kamiti Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Githurai\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Nairobi County\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Kenya\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-12-09 07:13:37.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100016\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:1640958,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:6.8421,\\n \\\u0022lon\\\u0022:3.3251,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:327,\\n \\\u0022altitude\\\u0022:4318,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022OG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-02-11 00:05:02.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100017\\\u0022,\\n \\\u0022speed\\\u0022:6,\\n \\\u0022odometer\\\u0022:1348,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:6.0156,\\n \\\u0022lon\\\u0022:7.8308,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:81,\\n \\\u0022altitude\\\u0022:6713,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Okposi\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022EB\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-02-08 10:09:09.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100018\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:10774038,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:10.5236,\\n \\\u0022lon\\\u0022:7.4355,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:64240,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Crescent Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-01-14 13:42:03.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100019\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:4130287,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.5001,\\n \\\u0022lon\\\u0022:8.9282,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:253,\\n \\\u0022altitude\\\u0022:16344,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-08-30 16:52:56.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100020\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:153830,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.0978,\\n \\\u0022lon\\\u0022:5.8523,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:344,\\n \\\u0022altitude\\\u0022:11962,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Jima\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-07-22 15:16:14.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100021\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:4975856,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:0.0587,\\n \\\u0022lon\\\u0022:37.1525,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:43,\\n \\\u0022altitude\\\u0022:203345,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Laikipia County\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Kenya\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-04-11 14:09:47.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100022\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:4,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:0.0711,\\n \\\u0022lon\\\u0022:37.1459,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:312,\\n \\\u0022altitude\\\u0022:201426,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kalalu\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Central\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Kenya\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 09:03:46.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100023\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:0,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:0,\\n \\\u0022lon\\\u0022:0,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:0,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:-1,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022226 Wall St\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Eatontown\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NJ\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022US\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00221900-01-01 00:00:00.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100024\\\u0022,\\n \\\u0022speed\\\u0022:5,\\n \\\u0022odometer\\\u0022:46332,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:-1.2612,\\n \\\u0022lon\\\u0022:36.801,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022S\\\u0022,\\n \\\u0022headingDegree\\\u0022:356,\\n \\\u0022altitude\\\u0022:169030,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:8,\\n \\\u0022street\\\u0022:\\\u0022Karuna Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Nairobi\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Nairobi County\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Kenya\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-03-27 08:39:56.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100025\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:2446351,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:-0.5976,\\n \\\u0022lon\\\u0022:35.8351,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022S\\\u0022,\\n \\\u0022headingDegree\\\u0022:110,\\n \\\u0022altitude\\\u0022:275588,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Narok County\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Kenya\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-06-21 07:48:48.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100026\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:14289298,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0466,\\n \\\u0022lon\\\u0022:7.8879,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:55,\\n \\\u0022altitude\\\u0022:67839,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 14:05:03.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100027\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6556462,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.5677,\\n \\\u0022lon\\\u0022:7.4228,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:278,\\n \\\u0022altitude\\\u0022:57451,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Abuja - Kaduna - Zaria Express Way\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-02-17 16:26:17.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100028\\\u0022,\\n \\\u0022speed\\\u0022:8,\\n \\\u0022odometer\\\u0022:14746635,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3151,\\n \\\u0022lon\\\u0022:7.5566,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:144,\\n \\\u0022altitude\\\u0022:21898,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 09:07:41.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100029\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:9101598,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.647,\\n \\\u0022lon\\\u0022:7.7165,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:20,\\n \\\u0022altitude\\\u0022:64881,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Awon\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-11-03 10:37:43.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100030\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11769179,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:7.0377,\\n \\\u0022lon\\\u0022:3.4488,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:301,\\n \\\u0022altitude\\\u0022:16099,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Lemode\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022OG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 14:06:08.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100031\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:15637496,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.1367,\\n \\\u0022lon\\\u0022:6.4656,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:16735,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-08-13 08:46:01.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100033\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6602429,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:7.2849,\\n \\\u0022lon\\\u0022:8.3626,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:214,\\n \\\u0022altitude\\\u0022:17885,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Makurdi - Otupko Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022BN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 09:04:06.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100034\\\u0022,\\n \\\u0022speed\\\u0022:39,\\n \\\u0022odometer\\\u0022:15784252,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.395,\\n \\\u0022lon\\\u0022:11.0664,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:221,\\n \\\u0022altitude\\\u0022:23108,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:40:07.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100036\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:15667316,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3452,\\n \\\u0022lon\\\u0022:7.6054,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:71,\\n \\\u0022altitude\\\u0022:26164,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kanah-Ondo-Apawu\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 18:18:20.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100037\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:16750394,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:11.0345,\\n \\\u0022lon\\\u0022:7.9153,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:66447,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Zaria-Panbeguwa Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-03-12 00:00:12.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100038\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11684479,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3261,\\n \\\u0022lon\\\u0022:7.6498,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:2,\\n \\\u0022altitude\\\u0022:26168,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kanah-Ondo-Apawu\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:45:16.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100039\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:9746903,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:12.3995,\\n \\\u0022lon\\\u0022:9.9764,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:331,\\n \\\u0022altitude\\\u0022:37958,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KW\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-04-24 11:44:32.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100040\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:15921990,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:10.0544,\\n \\\u0022lon\\\u0022:7.3846,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:199,\\n \\\u0022altitude\\\u0022:56743,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-11 08:02:51.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100041\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:4714113,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0803,\\n \\\u0022lon\\\u0022:7.7022,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:253,\\n \\\u0022altitude\\\u0022:67527,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:8,\\n \\\u0022street\\\u0022:\\\u0022A236\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-11 12:09:31.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100042\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:10604648,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.8747,\\n \\\u0022lon\\\u0022:9.5176,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:236,\\n \\\u0022altitude\\\u0022:24253,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Shendam Central (B)\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022PL\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-06 09:47:01.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100043\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:1555161,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.0885,\\n \\\u0022lon\\\u0022:7.0666,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:323,\\n \\\u0022altitude\\\u0022:21699,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 05:55:33.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100044\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:12346493,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.4674,\\n \\\u0022lon\\\u0022:8.1668,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:230,\\n \\\u0022altitude\\\u0022:11888,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-07-29 07:53:42.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100045\\\u0022,\\n \\\u0022speed\\\u0022:7,\\n \\\u0022odometer\\\u0022:17283224,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3102,\\n \\\u0022lon\\\u0022:7.5535,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:70,\\n \\\u0022altitude\\\u0022:22582,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-03-20 13:07:15.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100046\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:14726748,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.4246,\\n \\\u0022lon\\\u0022:8.0983,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:12830,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-11-16 08:19:34.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100047\\\u0022,\\n \\\u0022speed\\\u0022:4,\\n \\\u0022odometer\\\u0022:19734366,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.4722,\\n \\\u0022lon\\\u0022:8.1732,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:207,\\n \\\u0022altitude\\\u0022:13972,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Bassa\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 15:39:22.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100048\\\u0022,\\n \\\u0022speed\\\u0022:14,\\n \\\u0022odometer\\\u0022:9716609,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.5008,\\n \\\u0022lon\\\u0022:8.1897,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:66,\\n \\\u0022altitude\\\u0022:16391,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-04-07 15:57:21.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100049\\\u0022,\\n \\\u0022speed\\\u0022:7,\\n \\\u0022odometer\\\u0022:3430511,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.8921,\\n \\\u0022lon\\\u0022:5.2971,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:265,\\n \\\u0022altitude\\\u0022:28539,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Masheru-Safo-Kizhi-Asa Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-06-11 07:41:00.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100050\\\u0022,\\n \\\u0022speed\\\u0022:28,\\n \\\u0022odometer\\\u0022:1707911,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3551,\\n \\\u0022lon\\\u0022:7.6499,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:343,\\n \\\u0022altitude\\\u0022:28812,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kanah-Ondo-Apawu\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:40:57.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100051\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11057536,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.535,\\n \\\u0022lon\\\u0022:7.5034,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:188,\\n \\\u0022altitude\\\u0022:62028,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 18:45:31.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100052\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:20209208,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0466,\\n \\\u0022lon\\\u0022:7.8879,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:1,\\n \\\u0022altitude\\\u0022:67696,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:8,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 14:07:47.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100053\\\u0022,\\n \\\u0022speed\\\u0022:9,\\n \\\u0022odometer\\\u0022:2677664,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.5782,\\n \\\u0022lon\\\u0022:8.3974,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:292,\\n \\\u0022altitude\\\u0022:13353,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 18:14:29.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100054\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:15136931,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.5155,\\n \\\u0022lon\\\u0022:7.4926,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:95,\\n \\\u0022altitude\\\u0022:59598,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Jere North\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-12-18 18:58:47.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100055\\\u0022,\\n \\\u0022speed\\\u0022:5,\\n \\\u0022odometer\\\u0022:11071737,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.277,\\n \\\u0022lon\\\u0022:7.6354,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:154,\\n \\\u0022altitude\\\u0022:16002,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 08:10:45.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100056\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:10358337,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.8044,\\n \\\u0022lon\\\u0022:6.941,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:229,\\n \\\u0022altitude\\\u0022:17408,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 15:54:13.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100057\\\u0022,\\n \\\u0022speed\\\u0022:6,\\n \\\u0022odometer\\\u0022:10282065,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.8209,\\n \\\u0022lon\\\u0022:6.8106,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:117,\\n \\\u0022altitude\\\u0022:13812,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Gurdi\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 14:54:28.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100058\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:209411,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.4186,\\n \\\u0022lon\\\u0022:7.5121,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:201,\\n \\\u0022altitude\\\u0022:17934,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Ara I\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 14:14:32.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100059\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6462119,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.4316,\\n \\\u0022lon\\\u0022:10.9829,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:109,\\n \\\u0022altitude\\\u0022:25917,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kaigama\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 18:02:58.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100060\\\u0022,\\n \\\u0022speed\\\u0022:13,\\n \\\u0022odometer\\\u0022:13846853,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3643,\\n \\\u0022lon\\\u0022:7.5874,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:148,\\n \\\u0022altitude\\\u0022:23576,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kanah-Ondo-Apawu\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 16:32:36.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100061\\\u0022,\\n \\\u0022speed\\\u0022:7,\\n \\\u0022odometer\\\u0022:16619285,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.384,\\n \\\u0022lon\\\u0022:7.5045,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:346,\\n \\\u0022altitude\\\u0022:18385,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 15:35:00.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100062\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11089755,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.8904,\\n \\\u0022lon\\\u0022:6.6238,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:88,\\n \\\u0022altitude\\\u0022:15045,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:36:40.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100063\\\u0022,\\n \\\u0022speed\\\u0022:6,\\n \\\u0022odometer\\\u0022:9700871,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.2891,\\n \\\u0022lon\\\u0022:7.6359,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:97,\\n \\\u0022altitude\\\u0022:18936,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 10:05:40.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100064\\\u0022,\\n \\\u0022speed\\\u0022:14,\\n \\\u0022odometer\\\u0022:6112982,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.7237,\\n \\\u0022lon\\\u0022:6.7864,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:12,\\n \\\u0022altitude\\\u0022:11015,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Yaba\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:52:18.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100065\\\u0022,\\n \\\u0022speed\\\u0022:5,\\n \\\u0022odometer\\\u0022:5549587,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.7645,\\n \\\u0022lon\\\u0022:8.5853,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:235,\\n \\\u0022altitude\\\u0022:44620,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022A2\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kura\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-11-12 14:58:03.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100066\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:12895854,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.4012,\\n \\\u0022lon\\\u0022:10.5949,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:118,\\n \\\u0022altitude\\\u0022:18995,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Yarima\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 19:58:55.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100067\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:16458427,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3211,\\n \\\u0022lon\\\u0022:9.6941,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:134,\\n \\\u0022altitude\\\u0022:15970,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Wukari-Amper Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Aundu\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-11-29 09:33:33.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100068\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:7547657,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.8202,\\n \\\u0022lon\\\u0022:9.5338,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:319,\\n \\\u0022altitude\\\u0022:21727,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022PL\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 13:46:27.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100069\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6742008,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.0217,\\n \\\u0022lon\\\u0022:7.2428,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:129,\\n \\\u0022altitude\\\u0022:36453,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Abuja\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 14:25:51.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100070\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:8396511,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:6.3091,\\n \\\u0022lon\\\u0022:8.1546,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:43,\\n \\\u0022altitude\\\u0022:6654,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Enugu-Abakaliki Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022EB\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 16:11:53.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100071\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:0,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:0,\\n \\\u0022lon\\\u0022:0,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:0,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-10-03 10:27:28.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100072\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:9759380,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:11.0341,\\n \\\u0022lon\\\u0022:7.9153,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:118,\\n \\\u0022altitude\\\u0022:67416,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Zaria-Panbeguwa Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-02 09:39:32.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100073\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5745880,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.1991,\\n \\\u0022lon\\\u0022:7.2153,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:4,\\n \\\u0022altitude\\\u0022:46505,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 11:29:40.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100074\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:4256833,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.0932,\\n \\\u0022lon\\\u0022:7.2133,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:213,\\n \\\u0022altitude\\\u0022:40297,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Madalla\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-03-20 06:07:18.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100075\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:3681495,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.4891,\\n \\\u0022lon\\\u0022:10.7924,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:284,\\n \\\u0022altitude\\\u0022:25604,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Gunduma\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 12:20:09.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100076\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:8082340,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0344,\\n \\\u0022lon\\\u0022:7.9155,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:270,\\n \\\u0022altitude\\\u0022:67337,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-03-18 08:33:36.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100077\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:14438162,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:7.839,\\n \\\u0022lon\\\u0022:11.0317,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:47,\\n \\\u0022altitude\\\u0022:20398,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 18:17:38.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100078\\\u0022,\\n \\\u0022speed\\\u0022:38,\\n \\\u0022odometer\\\u0022:11736993,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.323,\\n \\\u0022lon\\\u0022:7.7651,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:274,\\n \\\u0022altitude\\\u0022:18484,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:16:26.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100079\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11079132,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3467,\\n \\\u0022lon\\\u0022:7.6008,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:111,\\n \\\u0022altitude\\\u0022:25598,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zangwan Daji\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:03:43.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100080\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:0,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:0,\\n \\\u0022lon\\\u0022:0,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:0,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-08-07 14:45:30.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100081\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:14756117,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.3434,\\n \\\u0022lon\\\u0022:7.6004,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:132,\\n \\\u0022altitude\\\u0022:25117,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zangwan Daji\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 15:28:30.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100082\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:22508502,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:9.0932,\\n \\\u0022lon\\\u0022:7.2135,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:40621,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022A234\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Madalla\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-03-20 05:57:20.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100083\\\u0022,\\n \\\u0022speed\\\u0022:10,\\n \\\u0022odometer\\\u0022:7829867,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.228,\\n \\\u0022lon\\\u0022:7.4517,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:20,\\n \\\u0022altitude\\\u0022:21104,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 08:46:34.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100084\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:8834714,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:11.0802,\\n \\\u0022lon\\\u0022:7.7023,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:66678,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022A 236\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 00:01:15.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100085\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:7079117,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:7.7178,\\n \\\u0022lon\\\u0022:10.018,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:191,\\n \\\u0022altitude\\\u0022:14813,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Rafin Kada-Gembu Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:17:48.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100086\\\u0022,\\n \\\u0022speed\\\u0022:6,\\n \\\u0022odometer\\\u0022:8371643,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.2278,\\n \\\u0022lon\\\u0022:7.4351,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:287,\\n \\\u0022altitude\\\u0022:22298,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 07:37:30.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100087\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5126282,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0804,\\n \\\u0022lon\\\u0022:7.7022,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:274,\\n \\\u0022altitude\\\u0022:67926,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022A236\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 12:25:53.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100088\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:12492816,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0802,\\n \\\u0022lon\\\u0022:7.7022,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:67576,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022A236\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 19:14:23.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100089\\\u0022,\\n \\\u0022speed\\\u0022:9,\\n \\\u0022odometer\\\u0022:10681293,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.8126,\\n \\\u0022lon\\\u0022:6.7509,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:349,\\n \\\u0022altitude\\\u0022:19826,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Gurdi-Zago\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 15:05:03.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100090\\\u0022,\\n \\\u0022speed\\\u0022:1,\\n \\\u0022odometer\\\u0022:12679128,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.1167,\\n \\\u0022lon\\\u0022:8.1918,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:235,\\n \\\u0022altitude\\\u0022:50091,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Keffi Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Nasarawa\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-11-09 00:00:12.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100091\\\u0022,\\n \\\u0022speed\\\u0022:3,\\n \\\u0022odometer\\\u0022:10570997,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.8365,\\n \\\u0022lon\\\u0022:6.469,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:180,\\n \\\u0022altitude\\\u0022:18313,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-04-25 10:28:44.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100092\\\u0022,\\n \\\u0022speed\\\u0022:5,\\n \\\u0022odometer\\\u0022:21472399,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.4937,\\n \\\u0022lon\\\u0022:6.5121,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:94,\\n \\\u0022altitude\\\u0022:7724,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222017-09-12 08:22:59.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100093\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6350089,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.0884,\\n \\\u0022lon\\\u0022:7.1981,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:263,\\n \\\u0022altitude\\\u0022:38349,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:8,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022Federal Capital Territory\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 13:25:03.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100094\\\u0022,\\n \\\u0022speed\\\u0022:6,\\n \\\u0022odometer\\\u0022:442783,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:10.1793,\\n \\\u0022lon\\\u0022:5.3167,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:256,\\n \\\u0022altitude\\\u0022:34842,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022A1\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-06-23 00:00:12.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100095\\\u0022,\\n \\\u0022speed\\\u0022:10,\\n \\\u0022odometer\\\u0022:14836657,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3448,\\n \\\u0022lon\\\u0022:7.6008,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:146,\\n \\\u0022altitude\\\u0022:26177,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zangwan Daji\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 17:19:46.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100096\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:8882066,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3361,\\n \\\u0022lon\\\u0022:10.4355,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:152,\\n \\\u0022altitude\\\u0022:20279,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022A4\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Nasarawa\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:17:42.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100097\\\u0022,\\n \\\u0022speed\\\u0022:7,\\n \\\u0022odometer\\\u0022:1812464,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.325,\\n \\\u0022lon\\\u0022:7.5588,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:279,\\n \\\u0022altitude\\\u0022:20969,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 15:45:26.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100098\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5302720,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:11.0804,\\n \\\u0022lon\\\u0022:7.7021,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:108,\\n \\\u0022altitude\\\u0022:67275,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022A236\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Zaria\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 16:54:31.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100099\\\u0022,\\n \\\u0022speed\\\u0022:35,\\n \\\u0022odometer\\\u0022:2034494,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:10.1974,\\n \\\u0022lon\\\u0022:5.4033,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:4,\\n \\\u0022altitude\\\u0022:34040,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022A1\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kabchi\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-05-16 10:53:28.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100100\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:1104625,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:11.0065,\\n \\\u0022lon\\\u0022:7.8771,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:354,\\n \\\u0022altitude\\\u0022:65702,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Kinkiba\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-01-15 13:22:17.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100101\\\u0022,\\n \\\u0022speed\\\u0022:5,\\n \\\u0022odometer\\\u0022:13635279,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3661,\\n \\\u0022lon\\\u0022:7.5183,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:287,\\n \\\u0022altitude\\\u0022:15962,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 16:14:47.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100102\\\u0022,\\n \\\u0022speed\\\u0022:8,\\n \\\u0022odometer\\\u0022:5792972,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.3041,\\n \\\u0022lon\\\u0022:7.5041,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:181,\\n \\\u0022altitude\\\u0022:19940,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Tunga-Bakono\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 11:47:08.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100103\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5252242,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.4373,\\n \\\u0022lon\\\u0022:7.2827,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:311,\\n \\\u0022altitude\\\u0022:18352,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Gadabuke\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 19:03:29.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100104\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:8535616,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:11.0343,\\n \\\u0022lon\\\u0022:7.9155,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:98,\\n \\\u0022altitude\\\u0022:67779,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Zaria-Panbeguwa Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-07 12:13:42.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100105\\\u0022,\\n \\\u0022speed\\\u0022:11,\\n \\\u0022odometer\\\u0022:9516406,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.2655,\\n \\\u0022lon\\\u0022:10.5296,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:96,\\n \\\u0022altitude\\\u0022:15901,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:9,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-13 12:46:19.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100106\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:15068181,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:11.6029,\\n \\\u0022lon\\\u0022:8.4304,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:292,\\n \\\u0022altitude\\\u0022:51137,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Garun Babba\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 08:43:03.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100107\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6707504,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.52,\\n \\\u0022lon\\\u0022:11.1523,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:211,\\n \\\u0022altitude\\\u0022:24656,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:27:48.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100108\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5915006,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3966,\\n \\\u0022lon\\\u0022:10.5196,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:23,\\n \\\u0022altitude\\\u0022:15762,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022A4\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 16:35:09.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100109\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:6311064,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.3442,\\n \\\u0022lon\\\u0022:7.6024,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:347,\\n \\\u0022altitude\\\u0022:25964,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222018-08-31 12:03:32.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100110\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:1460200,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:6.7938,\\n \\\u0022lon\\\u0022:3.5784,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:149,\\n \\\u0022altitude\\\u0022:12213,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Ikorodu - Shagamu Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022OG\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 10:14:17.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100111\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:17219316,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:6.2187,\\n \\\u0022lon\\\u0022:7.0612,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:0,\\n \\\u0022altitude\\\u0022:10234,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Ada Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Awka\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022AN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-02 08:57:16.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100112\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:11624225,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:7.9872,\\n \\\u0022lon\\\u0022:10.9966,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:199,\\n \\\u0022altitude\\\u0022:24645,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022Bali - Jalingo Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Mai Fula\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 16:45:22.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100113\\\u0022,\\n \\\u0022speed\\\u0022:12,\\n \\\u0022odometer\\\u0022:11588096,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.3851,\\n \\\u0022lon\\\u0022:7.6545,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:230,\\n \\\u0022altitude\\\u0022:27332,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:12,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 19:03:19.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100114\\\u0022,\\n \\\u0022speed\\\u0022:15,\\n \\\u0022odometer\\\u0022:9619747,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.469,\\n \\\u0022lon\\\u0022:8.1697,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:294,\\n \\\u0022altitude\\\u0022:12229,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Bassan Zarangi\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:53:29.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100115\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:10933029,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:8.4974,\\n \\\u0022lon\\\u0022:7.7983,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:97,\\n \\\u0022altitude\\\u0022:27626,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:42:30.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100116\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5116039,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.4974,\\n \\\u0022lon\\\u0022:7.5178,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:177,\\n \\\u0022altitude\\\u0022:23373,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022NS\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-11 17:05:12.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100117\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:5332551,\\n \\\u0022isGPSValid\\\u0022:false,\\n \\\u0022lat\\\u0022:9.535,\\n \\\u0022lon\\\u0022:7.5034,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:189,\\n \\\u0022altitude\\\u0022:62267,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:0,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022KD\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 18:42:52.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100118\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:10557277,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:8.7051,\\n \\\u0022lon\\\u0022:10.8662,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:56,\\n \\\u0022altitude\\\u0022:16955,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022A4\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-02-20 09:09:14.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100119\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:3169350,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:6.7001,\\n \\\u0022lon\\\u0022:6.9281,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:346,\\n \\\u0022altitude\\\u0022:4453,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:10,\\n \\\u0022street\\\u0022:\\\u0022Unnamed Road\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022AN\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-11 14:44:40.0\\\u0022\\n },\\n { \\n \\\u0022trackerId\\\u0022:\\\u0022100120\\\u0022,\\n \\\u0022speed\\\u0022:0,\\n \\\u0022odometer\\\u0022:9980372,\\n \\\u0022isGPSValid\\\u0022:true,\\n \\\u0022lat\\\u0022:7.839,\\n \\\u0022lon\\\u0022:11.0317,\\n \\\u0022directionEW\\\u0022:\\\u0022E\\\u0022,\\n \\\u0022directionNS\\\u0022:\\\u0022N\\\u0022,\\n \\\u0022headingDegree\\\u0022:70,\\n \\\u0022altitude\\\u0022:20424,\\n \\\u0022ignitionStatus\\\u0022:\\\u0022On\\\u0022,\\n \\\u0022batteryVoltage\\\u0022:0,\\n \\\u0022satelliteNumber\\\u0022:11,\\n \\\u0022street\\\u0022:\\\u0022Mambila Plateau Rd\\\u0022,\\n \\\u0022town\\\u0022:\\\u0022Bali\\\u0022,\\n \\\u0022county\\\u0022:\\\u0022TR\\\u0022,\\n \\\u0022country\\\u0022:\\\u0022Nigeria\\\u0022,\\n \\\u0022lastReportUTCDate\\\u0022:\\\u00222019-04-14 17:20:26.0\\\u0022\\n }\\n ],\\n \\\u0022message\\\u0022:\\\u0022\\\u0022\\n}\\n */ \\n\\n}\u0022\r\n },\r\n \u0022UpdateAllTractorsDetailAddressOnPOSTFromAWSBACKEND\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var updateData = request.body;\\n var tractorId = \u002BupdateData.tractor_id;\\n \\n var tractorDetailUpdateData = {};\\n tractorDetailUpdateData.Street = updateData.street ? updateData.street : \u0027\u0027;\\n tractorDetailUpdateData.Town = updateData.town ? updateData.town: \u0027\u0027;\\n tractorDetailUpdateData.Country = updateData.country ? updateData.country : \u0027\u0027;\\n \\n TractorDetail.update({\\\u0022TractorID\\\u0022:tractorId}, {$set:tractorDetailUpdateData}, function(err, updatedTractor){\\n if( !err ){\\n modules.logger.info( \\\u0022successfully updated tractor address for tractorID \\\u0022 \u002B tractorId);\\n response.complete();\\n }\\n });\\n \\n \\n // Sample Data \\n /*\\n [ \\n \u0027tractor_id\u0027 =\u003E \u0027500182\u0027,\\n \u0027latitude\u0027 =\u003E 6.526657,\\n \u0027longitude\u0027 =\u003E 7.008498,\\n \u0027street\u0027 =\u003E \u0027Unnamed Road\u0027,\\n \u0027town\u0027 =\u003E \u0027 Umuabu\u0027,\\n \u0027country\u0027 =\u003E \u0027 Nigeria\u0027,\\n\\t] */\\n}\u0022\r\n },\r\n \u0022deprecated_getTractorLatLngSummaryForDateRange\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules) {\\n \\n// var Tractor = modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027);\\n// var findQuery = {updatedAt: {$gte:\\\u00222018-11-01\\\u0022, $lte:\\\u00222018-11-07\\\u0022}, TractorID:500645}\\n// //\\n// Tractor.find({TractorID:500645}, function(err, _summaries){\\n// \\tmodules.logger.info(JSON.stringify(_summaries));\\n// \\tresponse.complete();\\n// })\\n \\n// }\u0022\r\n },\r\n \u0022deprecated_update-daily-real-time-tractor-activity\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// //This endpoint fetches the data from 2track for activity summary and updates the active, idle and distance values\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment,\\n// requestContext = modules.requestContext, \\n// token = \\\u0022\\\u0022;\\n \\n// //var today = moment.utc().format(\u00272017-06-27\u0027);\\n// \\tvar today = moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n// //logger.info(\\\u0022Today\u0027s date is: \\\u0022\u002Btoday);\\n \\n// //Get 2track access token\\n// collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n// .then(function(accessToken) {\\n// token = accessToken;\\n \\n// },\\n// function(err) {\\n \\n// return response.error(err);\\n// });\\n \\n// modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027).find({day: today}, function (err, activities) {\\n\\n// activities.forEach(function(activity, a){\\n// //copy the data over to the new collection\\n// async.parallel({\\n// updateClone: async.apply(updateClone, activity)\\n// });\\n// }\\n// );\\n// //response.complete();\\n// \\t});\\n \\n// function updateClone(activity){\\n// //logger.info(\u0027\\\u0022\u0027\u002Bactivity.TractorID\u002B\u0027\\\u0022\u0027);\\n \\n// var payloadOptions = {\\n// token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// trackerId: \\\u0022\\\u0022\u002Bactivity.TractorID\u002B\\\u0022\\\u0022,\\n// startDateTime: \\\u0022\\\u0022\u002Btoday\u002B\\\u0022 00:00:00\\\u0022,\\n// endDateTime: \\\u0022\\\u0022\u002Btoday\u002B\\\u0022 23:59:59\\\u0022,\\n// timezoneDifference: 100\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/summary/activity\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n \\n// modules.request.request(requestOptions, function(err, resp, body) {\\n \\n// if(err) {\\n// logger.error(\\\u0022Error placing request to 2track\\\u0022);\\n// //return;\\n// } else {\\n// if(!resp.body.data[0]) {\\n// logger.error(\\\u0022Error: No data available for tractor \\\u0022\u002Bactivity.TractorID);\\n// //return;\\n// } else {\\n// var data = resp.body.data,\\n// startDate = new Date(\u0027\u0027\u002Btoday\u002B\u0027 00:00:00\u0027),\\n// endDate = new Date(),\\n// seconds = (endDate - startDate) / 1000;\\n \\n// var inactiveTime = parseInt((seconds - (resp.body.data[0].operateTime)).toFixed());\\n// //logger.error(\\\u0022inactiveTime for: \\\u0022\u002Bactivity.TractorID\u002B\\\u0022 is: \\\u0022 \u002BinactiveTime);\\n \\n// collectionAccess.collection(\u0027DailyTractorActivity\u0027).update(\\n// {\\n// TractorID: activity.TractorID, \\n// day: resp.body.data[0].summaryDate\\n// },\\n// {\\n// $set: {\\n// TotalTimeActive: resp.body.data[0].operateTime,\\n// TotalTimeIdle : inactiveTime,\\n// DistanceTravelled : resp.body.data[0].distance\\n// }\\n// }, function(err) {\\n// if(err) {\\n// //return response.error(err);\\n// logger.info(\\\u0022error\\\u0022);\\n// }\\n\\n// //return response.complete(200);\\n// logger.info(\\\u0022Successfully updated for tractor \\\u0022 \u002Bactivity.TractorID\u002B\\\u0022 on day: \\\u0022\u002B activity.day\u002B \\\u0022 with data: \\\u0022\u002Bresp.body.data[0].operateTime\u002B\\\u0022 \\\u0022\u002Bresp.body.data[0].distance\u002B \\\u0022 \\\u0022\u002B inactiveTime);\\n// });\\n// }\\n// }\\n \\n// });\\n \\n// }\\n \\n// //response.complete();\\n \\n// }\u0022\r\n },\r\n \u0022deprecated_aeris-tractors-location\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// /*\\n// This endpoint gets the status of each tractor from AERIS and updates it with the latest reading from the monitoring device\\n// */\\n \\n// var collectionAccess = modules.collectionAccess,\\n// async = modules.async,\\n// logger = modules.logger,\\n// moment = modules.moment,\\n// token = \\\u0022\\\u0022,\\n// JOHN_DEERE_5065 = 3,\\n// JOHN_DEERE_5075 = 19,\\n// MAHINDRA_6005 = 9;\\n// var req = modules.request;\\n \\n// //Get tractors and loop through the tractors\\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({ServiceProvider: \\\u0022AERIS\\\u0022}, function (err, tractors) {\\n\\n// tractors.forEach(function(tractor, a){\\n\\n// if(tractor.TractorID.toString().length === 6){\\n \\n// var payloadOptions = {\\n// \\\u0022tractor_id\\\u0022: \\\u0022\\\u0022\u002Btractor.TractorID\u002B\\\u0022\\\u0022\\n// },\\n// requestOptions = {\\n// url: \u0027https://cloud.hellotractor.com/api/v1/tractor/\u0027\u002Btractor.TractorID\u002B\u0027/location\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \u0027Accept\u0027: \u0027application/json\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n \\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// logger.info(\\\u0022Data returned is:\\\u0022 \u002B JSON.stringify(body.data));\\n// if(err) {\\n// return cb(err);\\n// } else {\\n// if(!body.data) {\\n// logger.info(\\\u0022There was no data in body for tractor: \\\u0022\u002B tractor.TractorID);\\n// return;\\n// } else {\\n// logger.info(\\\u0022Successfully placed http request for tractor status for: \\\u0022 \u002B tractor.TractorID);\\n \\n// async.parallel({\\n// updateAerisTractorData: async.apply(updateAerisTractorData, body, tractor.TractorID, tractor)\\n// });\\n// }\\n// }\\n\\n// //response.complete(200);\\n// });\\n// }\\n// }); //end forEach tractors\\n// });//end collectionAccess get all tractors\\n \\n\\n// function updateAerisTractorData(aerisData, cb, tractor) {\\n \\n// logger.info(\u0027AERIS data -\u003E last_reported_time\u0027 \u002B ((aerisData.last_reported_time)));\\n\\n// if(aerisData.length === 0) {\\n// logger.info(\\\u0022AERIS: No status for tractor \\\u0022 \u002B tractor.TractorID);\\n// return;\\n// }\\n \\n// var dataObject = {\\n// PositionLongitude: parseFloat(aerisData.longitude),\\n// PositionLatitude: parseFloat(aerisData.latitude),\\n// Speed: aerisData.speed,\\n// UpdatedAt: modules.moment().format(\u0027YYYY-MM-DD HH:mm:ss\u0027),\\n// LastActiveTime: aerisData.last_reported_time\\n// };\\n \\n// var fuel = getFuelPercentage(aerisData.status_from_2track, tractor);\\n// var heading = getHeading(aerisData.status_from_2track, tractor);\\n \\n// if (fuel){\\n// dataObject.FuelVolume = fuel;\\n// }\\n \\n// if (heading){\\n// dataObject.Heading = heading;\\n// }\\n \\n// dataObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n// //logger.info(\\\u0022LastActiveTime is: \\\u0022\u002B setObject.LastActiveTime);\\n \\n// collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: tractor.TractorID},\\n// {\\n// $set: dataObject\\n\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n\\n// //return response.complete(200);\\n// }); \\n \\n// logger.info(\\\u0022AERIS: Finished updating tractor: \\\u0022 \u002B tractor.TractorID \u002B \\\u0022 \\\u0022 \u002B aerisData.latitude \u002B \\\u0022 \\\u0022 \u002B aerisData.longitude);\\n// }\\n\\n \\n// var getFuelPercentage = function(status_from_2track, tractor){\\n// if (status_from_2track){\\n// var fuelRawValue = JSON.parse(status_from_2track).fuelRawValue;\\n// if (fuelRawValue \u0026\u0026 fuelRawValue != 0){\\n// var fuelLitres;\\n// if (tractor.TractorModelID == JOHN_DEERE_5065 || tractor.TractorModelID == JOHN_DEERE_5075){\\n// //John Deere 5065\\n// // fuelLitres = (-0.0151 * fuelRawValue) \u002B 74.763;\\n// fuelLitres = fuelRawValue/100.0;\\n// } else if (tractor.TractorModelID == MAHINDRA_6005) {\\n// //Mahindra 6005\\n// // fuelLitres = (-0.0201 * fuelRawValue * fuelRawValue) \u002B (0.6209 * fuelRawValue) \u002B 1.3056;\\n// fuelLitres = fuelRawValue/100.0;\\n// } else {\\n// //Others\\n// fuelLitres = 0.0; \\n// }\\n// return parseInt(fuelLitres);\\n// } else {\\n// return;\\n// }\\n// } else {\\n// return;\\n// }\\n// }\\n \\n// var getHeading = function(status_from_2track2, tractor){\\n// if (status_from_2track2){\\n// var heading = JSON.parse(status_from_2track2).heading;\\n// if (heading){\\n// return heading;\\n// }\\n// }\\n// return;\\n// }\\n\\n// }\\n\u0022\r\n },\r\n \u0022deprecated_temp-update-daily-activities-from-web-app\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment,\\n// requestContext = modules.requestContext,\\n// token = \\\u0022\\\u0022;\\n \\n// \\tvar today = moment.utc().format(\u00272017-05-02\u0027);\\n// modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027).find({day: today}, function (err, activities) {\\n\\n// activities.forEach(function(activity, a){\\n// //copy the data over to the new collection\\n// async.parallel({\\n// updateClone: async.apply(updateClone, activity)\\n// });\\n// }\\n \\n// );\\n// //response.complete();\\n// \\t});\\n \\n// function updateClone(activity){\\n// //logger.info(\u0027\\\u0022\u0027\u002Bactivity.TractorID\u002B\u0027\\\u0022\u0027);\\n \\n// var payloadOptions = {\\n// token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// trackerId: \\\u0022\\\u0022\u002Bactivity.TractorID\u002B\\\u0022\\\u0022,\\n// startDateTime: \\\u0022\\\u0022\u002Btoday\u002B\\\u0022 00:00:00\\\u0022,\\n// endDateTime: \\\u0022\\\u0022\u002Btoday\u002B\\\u0022 23:59:59\\\u0022,\\n// timezoneDifference: 100\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/summary/activity\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n \\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// //logger.info(\\\u0022about to make request\\\u0022);\\n// if(err) {\\n// logger.error(\\\u0022Error placing request to 2track\\\u0022);\\n// //return;\\n// } else {\\n// if(!resp.body.data[0]) {\\n// logger.error(\\\u0022Error: No data available for tractor \\\u0022\u002Bactivity.TractorID);\\n// //return;\\n \\n \\n// } else {\\n// var data = resp.body.data; \\n// //logger.info(\\\u0022Successfully placed http request for t \\\u0022\u002Bactivity.TractorID\u002B\\\u0022 and data is: \\\u0022 \u002B JSON.stringify(resp.body));\\n// var inactiveTime = 86400 - (resp.body.data[0].operateTime);\\n// //logger.error(\\\u0022inactiveTime: \\\u0022\u002BinactiveTime);\\n \\n// collectionAccess.collection(\u0027DailyTractorActivity\u0027).update(\\n// {\\n// TractorID: activity.TractorID, \\n// day: resp.body.data[0].summaryDate\\n// },\\n// {\\n// $set: {\\n// TotalTimeActive: resp.body.data[0].operateTime,\\n// TotalTimeIdle : inactiveTime,\\n// DistanceTravelled : resp.body.data[0].distance\\n// }\\n// }, function(err) {\\n// if(err) {\\n// //return response.error(err);\\n// logger.info(\\\u0022error\\\u0022);\\n// }\\n\\n// //return response.complete(200);\\n// logger.info(\\\u0022Successfully updated for tractor \\\u0022 \u002Bactivity.TractorID\u002B\\\u0022 on day: \\\u0022\u002B activity.day);\\n// });\\n// }\\n// }\\n \\n// });\\n \\n// }\\n \\n// }\u0022\r\n },\r\n \u0022deprecated_UpdateAerisTractorActiveTimeToday\u0022 : {\r\n \u0022code\u0022 : \u0022// //Runs every three minutes to retrieve the total active time for today\\n// //for all aeris tractors on cloud.hellotractor.com\\n// //Created by Abdulmajid on 19/06/2018\\n\\n// function onRequest(request, response, modules) {\\n// var tractorDetailCollection = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n// var log = modules.logger;\\n// var loggerCollection= modules.collectionAccess.collection(\\\u0022Logger\\\u0022);\\n// var LOG_ID = 105;\\n// var count = 0;\\n// var size = 0;\\n// var startTime = modules.moment().valueOf();\\n// var todaysDate = modules.moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n \\n \\n// loggerCollection.find({logID:LOG_ID}, {}, function(err1, logs){ \\n// tractorDetailCollection.find({TractorID: {$gte:500000}, LastActiveTime: {$gte:todaysDate}}, {}, function(err, docs){\\n// var startFrom = 0;\\n// if (logs[0].Message \u003C docs.length){\\n// startFrom = logs[0].Message;\\n// }\\n \\n// size = docs.length;\\n// count = startFrom;\\n// log.info(\\\u0022Size: \\\u0022\u002Bsize\u002B\\\u0022, Start From: \\\u0022\u002BstartFrom);\\n \\n// //Iterate through all tractors to request weather data via geonames api\\n// for (var i = startFrom; i \u003C docs.length; i\u002B\u002B){\\n// var tractorDetail = docs[i];\\n\\n// if (tractorDetail.TractorID){\\n// // modules.logger.info(JSON.stringify(booking));\\n// makeRequest(tractorDetail);\\n\\n// } else {\\n// count\u002B\u002B;\\n// \\t\\t\\t\\t\\t\\t\\t\\tshouldCompleteRequest(); \\n// } //End if booking is not 0\\n \\n// } //end for loop\\n// });\\n// });\\n \\n// var makeRequest = function (tractorDetail){\\n// \\tmodules.request.request(getRequestOptions(tractorDetail), function(err2, resp, body) {\\n// if(err2) {\\n// count\u002B\u002B;\\n// \\t\\t\\t\\t\\t\\tshouldCompleteRequest();\\n// } else {\\n// if(!body) {\\n// modules.logger.info(\\\u0022There was no data in body for booking: \\\u0022\u002B url);\\n// count\u002B\u002B;\\n// \\t\\t\\t\\t\\t\\t\\tshouldCompleteRequest(); \\n// } else {\\n// updateTractorDetailCollection(tractorDetail, body);\\n// }\\n// }\\n// }); //end request \\n// } \\n \\n// var updateTractorDetailCollection = function (tractorDetail, activityToday){ \\n// tractorDetailCollection.update({_id:tractorDetail._id}, \\n// {$set: {\\n// \\\u0022ActiveTimeToday\\\u0022:computeActiveTimeToday(activityToday), \\n// \\\u0022UpdatedAt\\\u0022:modules.moment().format(\u0027YYYY-MM-DD HH:mm:ss\u0027)\\n// }}, \\n// {upsert: false, _id:1}, \\n// function(tractorErr, tractorDetailDoc){\\n// \\t\\t\\tcount\u002B\u002B;\\n// shouldCompleteRequest();\\n// }); //End update tractor detail with active time today \\n// } //end updateTractorDetailCollection function \\n\\n\\n// var shouldCompleteRequest = function(){\\n// var duration = modules.moment().valueOf() - startTime;\\n// if (count \u003E= size || duration \u003E= 19000){\\n// log.info(\\\u0022Total: \\\u0022\u002Bcount);\\n\\n// //Update logger and finish task\\n// loggerCollection.update({logID:LOG_ID}, {$set: {Message:count}}, {upsert: false}, function(logErr, logDoc){\\n// response.complete(); \\n// }); //End update logger collection with last count \\n// }//end if \\n// }\\n// } //end onRequest function\\n\\n\\n// function computeActiveTimeToday(activityToday){\\n// try {\\n// if (activityToday[0]){\\n// var totalActiveTime = Number(activityToday[0].total_active_time) \u002B Number(activityToday[0].total_inactive_time);\\n// return totalActiveTime;\\n// } \\n// } catch(err){\\n// } \\n \\n// return 0;\\n// }\\n\\n// function getRequestOptions(tractorDetail){\\n// \\tvar url = \\\u0022https://cloud.hellotractor.com/api/v1/tractors/daily/activities/summary?tractor_id=\\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022\u0026day=\\\u0022\u002Bmodules.moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n// var requestOptions = {url:url, method: \u0027GET\u0027, \\n// \\t\\t\\t\\theaders: {\\n// \\t\u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \\t\u0027Accept\u0027: \u0027application/json\u0027\\n// \\t},\\n// json: true\\n// }; \\n// return requestOptions;\\n// }\u0022\r\n },\r\n \u0022deprecated_UpdateTractorDetailAddress\u0022 : {\r\n \u0022code\u0022 : \u0022// //Retrieves the country, state and town of tractors every 3 minutes from http://api.geonames.org\\n// //Logs the last tractor processed in the logger collection and continues from where it left off\\n// //Created by Abdulmajid on 2018/06/17\\n\\n// function onRequest(request, response, modules) {\\n// var tractorDetailCollection = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n// var log = modules.logger;\\n// var loggerCollection= modules.collectionAccess.collection(\\\u0022Logger\\\u0022);\\n// var LOG_ID = 104; //Unique ID to log tractor detail address updated endpoint\\n// var count = 0;\\n// var size = 0;\\n// var startTime = modules.moment().valueOf();\\n// var todaysDate = modules.moment.utc().format(\u0027YYYY-MM-DD\u0027);\\n// var todaysDateTime = modules.moment().utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n \\n// var shouldCompleteRequest = function(){\\n// var duration = modules.moment().valueOf() - startTime;\\n// if (count \u003E= size || duration \u003E= 19000){\\n// log.info(\\\u0022Total: \\\u0022\u002Bcount);\\n\\n// //Update logger and finish task\\n// loggerCollection.update({logID:LOG_ID}, {$set: {Message:count}}, {upsert: false}, function(logErr, logDoc){\\n// response.complete(); \\n// }); //End update logger collection with last count \\n// } //end if \\n// }\\n\\n// var updateTractorDetailCollection = function (tractorDetail, geoData){\\n// if (geoData.geonames){\\n// \\t\\t\\tmodules.logger.info(geoData.geonames[0].name);\\n// } \\n \\n// var filteredAddress = {\\n// \\\u0022Town\\\u0022:extractState(geoData), \\n// \\\u0022Country\\\u0022:extractCountry(geoData),\\n// \\\u0022Street\\\u0022:extractStreet(geoData)\\n// };\\n \\n// if (filteredAddress.Town || filteredAddress.Country || filteredAddress.Street){\\n// tractorDetailCollection.update({_id:tractorDetail._id}, \\n// {$set: filteredAddress},\\n// {upsert: false, _id:1}, \\n// function(tractorErr, bookingDoc){\\n// count\u002B\u002B;\\n// shouldCompleteRequest();\\n// }); //End update booking with local government \\n// } else {\\n// count\u002B\u002B;\\n// shouldCompleteRequest(); \\n// }\\n// } //end updateBookingsCollection function\\n \\n// var makeRequest = function (tractorDetail){\\n// \\tmodules.request.request(getRequestOptions(tractorDetail), function(err2, resp, body) {\\n// if(err2) {\\n// count\u002B\u002B;\\n// \\t\\t\\t\\t\\t\\tshouldCompleteRequest();\\n// } else {\\n// if(!body) {\\n// modules.logger.info(\\\u0022There was no data in body for booking: \\\u0022\u002B url);\\n// count\u002B\u002B;\\n// shouldCompleteRequest();\\n// } else {\\n// updateTractorDetailCollection(tractorDetail, body);\\n// }\\n// }\\n// }); //end request \\n// }\\n\\n// //Find last data logged\\n// loggerCollection.find({logID:LOG_ID}, {}, function(err1, logs){\\n \\n// //Find all tractors in the database: LastActiveTime: {$gte: todaysDate}\\n// var lastActiveTimeQuery = {LastActiveTime: {$gte:todaysDate}};\\n// tractorDetailCollection.find(lastActiveTimeQuery, {\\\u0022sort\\\u0022:{\\\u0022_id\\\u0022:1}}, function(err, docs){\\n \\n// //Start from where it left off\\n// var startFrom = 0;\\n// if (logs[0].Message \u003C docs.length){\\n// startFrom = logs[0].Message; \\n// }\\n \\n// size = docs.length;\\n// count = startFrom;\\n// log.info(\\\u0022Size: \\\u0022\u002Bsize\u002B\\\u0022, Start From: \\\u0022\u002BstartFrom);\\n \\n// //Iterate through all tractors to request weather data via geonames api\\n// for (var i = startFrom; i \u003C docs.length; i\u002B\u002B){\\n// \\t\\t\\tvar tractorDetail = docs[i];\\n \\n// if (tractorDetail.PositionLatitude \u0026\u0026 tractorDetail.PositionLongitude){\\n// // modules.logger.info(JSON.stringify(booking));\\n// makeRequest(tractorDetail);\\n \\n// } else {\\n// count\u002B\u002B;\\n// shouldCompleteRequest();\\n// //end if \\n// } //End if booking is not 0\\n \\n\\n// } //end for loop\\n// }); //end find bookings collection \\n// }); //end find logID data\\n// } //End onRequest function\\n\\n// function getRequestOptions(tractorDetail){\\n// var requestOptions = {url:\\\u0022http://api.geonames.org/findNearbyPlaceNameJSON?lat=\\\u0022\u002BtractorDetail.PositionLatitude\u002B\\\u0022\u0026lng=\\\u0022\u002BtractorDetail.PositionLongitude\u002B\\\u0022\u0026username=hellofuture\\\u0022, method: \u0027POST\u0027, \\n// \\t\\t\\t\\theaders: {\\n// \\t\u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \\t\u0027Accept\u0027: \u0027application/json\u0027\\n// \\t},\\n// json: true\\n// }; \\n// return requestOptions;\\n// }\\n\\n// function extractCountry(body){ \\n// if (body.geonames){\\n// \\t\\t\\treturn body.geonames[0].countryName;\\n// }\\n// return;\\n// \\t}\\n \\n \\n// function extractState(body){\\n// if (body.geonames){ \\n// \\t\\treturn body.geonames[0].adminName1;\\n// }\\n// return;\\n// }\\n\\n\\n// function extractStreet(body){\\n// if (body.geonames){\\n// \\t\\treturn body.geonames[0].name;\\n// } else {\\n// return;\\n// }\\n// }\u0022\r\n },\r\n \u0022deprecated_fetch-store-tractor-activities-one\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async,\\n// moment = modules.moment;\\n// var token = \\\u0022\\\u0022;\\n\\n// collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n// .then(function(accessToken) {\\n// token = accessToken;\\n \\n// },\\n// function(err) {\\n \\n// return response.error(err);\\n// });\\n \\n// modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({\\n// TractorID: {\\n// $gte: 100001,\\n// $lte: 100050\\n// }\\n// }, function (err, tractors) {\\n\\n// tractors.forEach(function(tractor, a){\\n// if(tractor.TractorID.toString().length === 6){\\n\\n// //Make request to 2track and store data in collection\\n// var startActivityId = tractor.LastActivityId ? tractor.LastActivityId : 0,\\n// payloadOptions = {\\n// token: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n// trackerId: tractor.TractorID,\\n// startActivityId: startActivityId,\\n// rowCount: 101,\\n// startUTCTime: \\\u0022\\\u0022,\\n// endUTCTime: \\\u0022\\\u0022\\n// },\\n// requestOptions = {\\n// url: \u0027https://hellotractor.2-track.com:8080/api/activity\u0027,\\n// method: \u0027POST\u0027,\\n// headers: {\\n// \u0027Content-Type\u0027: \u0027application/json\u0027,\\n// \u0027Accept\u0027: \u0027application/json\u0027,\\n// \u0027Version\u0027: \u0027v1\u0027\\n// },\\n// json: true,\\n// body: payloadOptions\\n// };\\n\\n// modules.request.request(requestOptions, function(err, resp, body) {\\n// if(err) {\\n// logger.error(\\\u0022Error placing request to 2track\\\u0022);\\n// return;\\n// } else {\\n// if(!body.data) {\\n// logger.error(\\\u0022Error: No data available for tractor\\\u0022);\\n// return;\\n// } else {\\n// //logger.info(\\\u0022Successfully placed http request for tractor updates for: \\\u0022 \u002B tractor.TractorID);\\n// async.parallel({\\n// saveTractorActivities: async.apply(saveTractorActivities, body.data, tractor.TractorID),\\n// updateTractorDetail: async.apply(updateTractorDetail, body.data, tractor.TractorID, tractor)\\n// });\\n// }\\n// }\\n// //response.complete(200);\\n// });\\n// }\\n// });\\n// });\\n \\n// function saveTractorActivities(tractorActivities, tractorId){\\n// //logger.info(\\\u0022in function saveTractorActivities and tractor activityId is: \\\u0022\u002Btractor.activityId);\\n \\n// tractorActivities.forEach(function(tractor, a) {\\n \\n// var entity = modules.kinvey.entity();\\n// entity.TractorID = tractorId;\\n// entity.ActivityID = tractor.activityId;\\n// entity.EventCode = tractor.eventCode;\\n// entity.EventName = tractor.eventName;\\n// entity.Speed = tractor.speed;\\n// entity.Odometer = tractor.odometer;\\n// entity.Idle = tractor.idle;\\n// entity.IsGPSValid = tractor.isGPSValid;\\n// entity.Lat = tractor.lat;\\n// entity.Lng = tractor.lon;\\n// entity.DirectionEW = tractor.directionEW;\\n// entity.DirectionNS = tractor.directionNS;\\n// entity.Altitude = tractor.altitude;\\n// entity.IgnitionStatus = tractor.ignitionStatus;\\n// entity.BatteryVoltage = tractor.batteryVoltage;\\n// entity.SatelliteNumber = tractor.satelliteNumber;\\n// entity.Street = tractor.street;\\n// entity.Town = tractor.town;\\n// entity.County = tractor.county;\\n// entity.Country = tractor.country;\\n// entity.ActivityUTCDate = tractor.activityUTCDate;\\n\\n// collectionAccess.collection(\u0027TractorActivityData\u0027).save(entity, function(err) {\\n// logger.info(\\\u0022Successfully saved data for tractor with ID: \\\u0022 \u002B tractorId);\\n// });\\n// });\\n \\n// //response.complete();\\n// }\\n \\n// //update coordinates and address of tractor, send geofence push notifications\\n// function updateTractorDetail(activities, cb, tractor) {\\n// //logger.info(\\\u0022Begining process for updating tractor and tractor data is:\\\u0022 \u002B tractor.TractorID);\\n\\n// if(activities.length === 0) {\\n// logger.info(\\\u0022No activities data for tractor \\\u0022 \u002B tractor.TractorID);\\n// return;\\n// //return cb();\\n// }\\n// var lastActivity = activities.reduce(function(prev, curr) {\\n// return prev.activityUTCDate \u003E curr.activityUTCDate ? prev : curr;\\n// });\\n\\n// var setObject = {\\n// LastActiveTime: lastActivity.activityUTCDate\\n// };\\n\\n// if(lastActivity.lat \u0026\u0026 lastActivity.lon) {\\n\\n// setObject.PositionLatitude = lastActivity.lat;\\n// setObject.PositionLongitude = lastActivity.lon;\\n// setObject.LastActivityId = lastActivity.activityId;\\n\\n// // if(lastActivity.country){\\n// // setObject.Street = lastActivity.street;\\n// // setObject.Town = lastActivity.town;\\n// // setObject.Country = lastActivity.country;\\n// // }\\n// setObject[\u0027_kmd.lmt\u0027] = moment().toISOString();\\n\\n// collectionAccess.collection(\u0027TractorDetail\u0027).update({TractorID: cb},\\n// {\\n// $set: setObject\\n\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n\\n// //return response.complete(200);\\n// });\\n\\n// }\\n// else{\\n// response.complete(400);\\n// //return cb();\\n// }\\n// }\\n// //response.complete();\\n// }\u0022\r\n },\r\n \u0022deprecated_update-2track-token\u0022 : {\r\n \u0022code\u0022 : \u0022// function onRequest(request, response, modules){\\n \\n// var collectionAccess = modules.collectionAccess,\\n// logger = modules.logger,\\n// async = modules.async;\\n// var req = modules.request;\\n \\n// req.get(\u0027https://cloud.hellotractor.com/kinvey/api/twotrack/token\u0027, function(error, resp, body){\\n// if (error){\\n// response.body = {error: error.message};\\n// response.complete(400);\\n// return;\\n// }\\n \\n// async.parallel({\\n// updateToken: async.apply(updateToken, body),\\n// });\\n \\n// logger.info(\\\u0022Successfully placed http request for token and body is: \\\u0022 \u002B body);\\n// response.complete();\\n// });\\n\\n// function updateToken(data) {\\n \\n// collectionAccess.collection(\u0027TwoTrackApiToken\u0027).update({id: 9228383772}, {\\n// $set: {\\n// token: data\\n// }\\n// }, function(err) {\\n// if(err) {\\n// return response.error(err);\\n// }\\n// response.body = {};\\n// return response.complete(200);\\n// });\\n// }\\n// }\u0022\r\n },\r\n \u0022PushNotificationWhenTractorNearby\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var bookingsCol = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var tractorsCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var userCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var notificationCol = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n var tractorOperatorCol = modules.collectionAccess.collection(\\\u0022TractorOperator\\\u0022);\\n var now = modules.moment().utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n var threeDaysLater = modules.moment().utc().add(3, \u0027days\u0027).format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n var count = 0;\\n var countBookings = 0;\\n var push = modules.push;\\n var log = modules.logger;\\n \\n \\n //retrieve paired bookings whose service date is between now and three days time \u0026\u0026 where tractor availability is true\\n //if bookings are found, for each booking, retrieve tractor and calculate distance between booking and tractor\\n //if distance is less than 30 km, find user and 1. send notification to agent, 2. save notification to Notifications, 3. update tractor availability to false\\n \\n \\n \\n bookingsCol.find({serviceDate: {\\\u0022$gt\\\u0022: now}, serviceDate: {\\\u0022$lte\\\u0022: threeDaysLater}, $or: [{bookingStatus: 1}, {bookingStatus: 2}], ReceiveTractorAvailabilityNotification: true}, {}, function(bookingsErr, bookings){\\n if (bookings){\\n countBookings = bookings.length;\\n log.info(\\\u0022Bookings found: \\\u0022\u002BcountBookings);\\n bookings.forEach(function(booking){\\n log.info(\\\u0022Processing booking: \\\u0022\u002Bbooking.bookingID);\\n calculateTractorDistance(booking, Number(booking.tractorPairedTo));\\n });\\n } else {\\n log.info(\\\u0022No bookings found\\\u0022); \\n response.complete(); \\n }\\n // modules.logger.info(bookings.length);\\n });\\n \\n \\n var calculateTractorDistance = function(booking, tractorId){\\n tractorsCol.findOne({TractorID: tractorId}, function(tractorErr, tractor){\\n if (tractor){\\n log.info(\\\u0022Tractor found: \\\u0022\u002Btractor.TractorID);\\n var distanceBetween = distance(tractor.PositionLatitude, tractor.PositionLongitude, booking.latitude, booking.longitude, \\\u0022K\\\u0022);\\n if (distanceBetween \u003C 15 \u0026\u0026 tractor.PositionLatitude != 0 \u0026\u0026 tractor.PositionLongitude != 0 \u0026\u0026 booking.latitude != 0 \u0026\u0026 booking.longitude != 0){\\n log.info(\\\u0022Distance: \\\u0022\u002BdistanceBetween);\\n pushNotificationToAgent(booking, tractor, distanceBetween);\\n } else {\\n log.info(\\\u0022Distance greater than 15: \\\u0022\u002BdistanceBetween);\\n count\u002B\u002B\\n shouldComplete();\\n }\\n } else {\\n log.info(\\\u0022Tractor not found: \\\u0022\u002BtractorId);\\n count\u002B\u002B;\\n shouldComplete();\\n }\\n });\\n }\\n \\n var pushNotificationToAgent = function(booking, tractor, distanceBetween){\\n userCol.findOne({\\\u0022_acl.creator\\\u0022: booking._acl.creator}, function(userErr, user){\\n if (user){\\n log.info(\\\u0022User found: \\\u0022\u002Buser._id);\\n tractorOperatorCol.findOne({OperatorID: tractor.OperatorID}, function(tractorOperatorErr, tractorOperator){\\n if (tractorOperator){\\n log.info(\\\u0022Operator found: \\\u0022\u002BtractorOperator.OperatorID);\\n var pushNotification = buildTractorNearbyNotification(user, tractor, booking, distanceBetween, tractorOperator);\\n var notificationToSave = buildNotificationToSave(pushNotification);\\n \\n notificationCol.save(notificationToSave, function(notificationErr){\\n log.info(\\\u0022Notificaiton saved\\\u0022);\\n \\n pushNotification.id = pushNotification._id;\\n push.sendPayload(user, {}, {}, pushNotification, function(res) {\\n log.info(\\\u0022Push notification sent\\\u0022); \\n bookingsCol.update({_id: booking._id}, {$set: {\\\u0022ReceiveTractorAvailabilityNotification\\\u0022: false}}, {upsert: false}, function(updateBookingErr, updatedBooking){\\n log.info(\\\u0022Booking updated\\\u0022);\\n count\u002B\u002B;\\n shouldComplete();\\n });\\n });\\n \\n });\\n } else {\\n log.info(\\\u0022Operator not found\\\u0022);\\n count\u002B\u002B;\\n shouldComplete();\\n }\\n });\\n // modules.kinvey.entity(notification);\\n } else {\\n log.info(\\\u0022User not found\\\u0022);\\n count\u002B\u002B;\\n shouldComplete();\\n }\\n });\\n }\\n \\n var shouldComplete = function(){\\n if (count \u003E= countBookings){\\n response.complete();\\n }\\n }\\n }\\n \\n function buildTractorNearbyNotification(user, tractor, booking, distance, tractorOperator){\\n var message, hectaresDistance;\\n if (booking.serviceType == 107){\\n message = \\\u0022Tractor \\\u0022\u002Btractor.license_plate_number\u002B\\\u0022 is \\\u0022\u002Bdistance\u002B\\\u0022 km away. Call the operator to make preparations for your \\\u0022\u002Bbooking.distanceToDestination\u002B\\\u0022 km \\\u0022\u002BgetServiceName(booking.serviceType)\u002B\\\u0022 request scheduled for \\\u0022\u002Bbooking.serviceDate;\\n hectaresDistance = booking.distanceToDestination;\\n } else{\\n message = \\\u0022Tractor \\\u0022\u002Btractor.license_plate_number\u002B\\\u0022 is \\\u0022\u002Bdistance\u002B\\\u0022 km away. Call the operator to make preparations for your \\\u0022\u002Bbooking.hectaresServiced\u002B\\\u0022 Ha \\\u0022\u002BgetServiceName(booking.serviceType)\u002B\\\u0022 request located at \\\u0022\u002Bbooking.farmLocation\u002B\\\u0022 scheduled for \\\u0022\u002Bbooking.serviceDate;\\n hectaresDistance = booking.hectaresServiced;\\n }\\n \\n var notification = {\\n message: message,\\n type: \\\u0022action\\\u0022,\\n _acl: user._acl,\\n userId: user._id,\\n read: false,\\n action: \\\u0022tractor_nearby\\\u0022,\\n tractorId: tractor.TractorID,\\n tractorName: tractor.TractorName,\\n licensePlate: tractor.license_plate_number,\\n farmLocation: booking.farmLocation,\\n hectaresDistance: hectaresDistance,\\n serviceType: booking.serviceType,\\n serviceDate: booking.serviceDate,\\n tractorDistance: distance,\\n orgID: booking.orgID,\\n operatorId: tractorOperator.OperatorID,\\n operatorPhone: tractorOperator.MobileNumber,\\n clusterID: booking.clusterID\\n };\\n \\n return modules.kinvey.entity(notification);\\n }\\n \\n function buildNotificationToSave(pNotification){\\n var notification = {\\n message: pNotification.message,\\n read: pNotification.read,\\n type: pNotification.type,\\n action: pNotification.action,\\n orgID: pNotification.orgID,\\n serviceType: pNotification.serviceType,\\n clusterID: pNotification.clusterID,\\n userId: pNotification.userId,\\n _id: pNotification._id,\\n _acl: pNotification._acl,\\n _kmd: pNotification._kmd,\\n extras: pNotification\\n } \\n \\n return notification;\\n }\\n \\n function distance (lat1, lon1, lat2, lon2, unit) {\\n var radlat1 = Math.PI * lat1/180;\\n var radlat2 = Math.PI * lat2/180;\\n var theta = lon1-lon2;\\n var radtheta = Math.PI * theta/180;\\n var dist = Math.sin(radlat1) * Math.sin(radlat2) \u002B Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\\n if (dist \u003E 1) {\\n dist = 1;\\n }\\n dist = Math.acos(dist);\\n dist = dist * 180/Math.PI;\\n dist = dist * 60 * 1.1515;\\n if (unit==\\\u0022K\\\u0022) {\\n dist = dist * 1.609344\\n }\\n if (unit==\\\u0022N\\\u0022) { \\n dist = dist * 0.8684 \\n }\\n return dist;\\n } \u0022\r\n },\r\n \u0022getTractorServiceTypes\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var serviceTypes = {\\n \u0027101\u0027: \u0027Tilling\u0027,\\n \u0027102\u0027: \u0027Ploughing\u0027,\\n \u0027103\u0027: \u0027Ridging\u0027,\\n \u0027104\u0027: \u0027Planting/Seeding\u0027,\\n \u0027105\u0027: \u0027Irrigating\u0027,\\n\\t\\t\u0027106\u0027: \u0027Harvesting\u0027,\\n \u0027107\u0027: \u0027Trailing\u0027,\\n \u0027108\u0027: \u0027Harvesting\u0027,\\n\\t\\t\u0027109\u0027: \u0027Harrowing\u0027,\\n \u0027110\u0027: \u0027Spreading\u0027,\\n \u0027113\u0027: \u0027Bioagtive\u0027,\\n \u0027114\u0027: \u0027Dozer\u0027,\\n \u0027115\u0027: \u0027Mower\u0027,\\n \u0027116\u0027: \u0027Drilling\u0027,\\n \u0027117\u0027: \u0027Rotavator\u0027,\\n \u0027118\u0027: \u0027Laser Leveler\u0027,\\n \u0027119\u0027: \u0027Threshing\u0027,\\n \u0027120\u0027: \u0027Threshing\u0027,\\n \u0027121\u0027: \u0027Blade Leveling\u0027\\n }\\n \\n response.complete();\\n \\n \\n}\u0022\r\n },\r\n \u0022SyncTractorsFromAWSBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var Log = modules.logger;\\n var tractor_data = request.body;\\n\\n // Save Tractor To TractorDetail collection \\n var tractor = {};\\n tractor.TractorID = tractor_data.tracker_id;\\n tractor.BookingRequests = true;\\n tractor.Characteristic = \\\u0022\\\u0022;\\n tractor.Country = \\\u0022Nigeria\\\u0022;\\n tractor.CreatedAt = tractor_data.created_at;\\n tractor.Currency = \\\u0022\\\u0022;\\n tractor.DailyTractorUpdates = true;\\n tractor.Efficiency = 0;\\n tractor.EngineHours = tractor_data.total_engine_hours;\\n tractor.FixedEngineHours = 0;\\n tractor.FuelVolume = 0;\\n tractor.Group = \\\u0022Atman Corporation\\\u0022;\\n tractor.Heading = 0;\\n tractor.ImplementsAttached = \\\u0022\\\u0022;\\n tractor.LastActiveTime = tractor_data.last_reported_time;\\n tractor.LastGeofenceNotificationTime = \\\u0022\\\u0022;\\n tractor.Latitude = tractor_data.latitude;\\n tractor.Longitude = tractor_data.longitude;\\n tractor.NeedToSendGeofenceOutNotification = true;\\n tractor.OperatorID = tractor_data.operator_id;\\n tractor.PositionLatitude = tractor_data.latitude;\\n tractor.PositionLongitude = tractor_data.longitude;\\n tractor.ServiceProvider = \\\u0022AERIS\\\u0022;\\n tractor.Speed = 0;\\n tractor.Status = 0;\\n tractor.Street = \\\u0022\\\u0022;\\n tractor.TotalDistanceCovered = tractor_data.total_distance_covered;\\n tractor.TotalHectaresTilled = 0;\\n tractor.Town = \\\u0022\\\u0022;\\n tractor.TractorModelID = tractor_data.tractor_model_id;\\n tractor.TractorName = tractor_data.name;\\n tractor.UpdatedAt = tractor_data.updated_at;\\n tractor.UtcOffset = 0;\\n tractor.WasImmobilized = false;\\n tractor.WasInArea = true;\\n tractor._acl = {\\\u0022creator\\\u0022:\\\u00225a8317528651f253f07b38fc\\\u0022,\\\u0022gr\\\u0022:true};\\n tractor.license_plate_number = \\\u0022\\\u0022;\\n tractor.FuelRawValue = 0;\\n tractor.IgnitionStatus = 0;\\n tractor.AssetState = \\\u0022Off\\\u0022;\\n tractor.FuelLevelVoltage = 0;\\n tractor._kmd = { \\\u0022lmt\\\u0022: \\\u00222019-05-05T11:24:36.965Z\\\u0022, \\\u0022ect\\\u0022: \\\u00222019-05-05T05:14:05.023Z\\\u0022};\\n\\nTractor.save(tractor, function(err, saved){\\n if(err){\\n Log.info(\u0027an error occured\u0027 \u002B err );\\n response.body = {\\\u0022service\\\u0022: \\\u0022syncing service : tractor not saved successfully\\\u0022};\\n response.complete();\\n }\\n Log.info(\\\u0022successfully saved tractor with the id of \\\u0022 \u002B tractor_data.tracker_id );\\n response.body = {\\\u0022service\\\u0022: \\\u0022syncing service : tractor saved successfully\\\u0022};\\n response.complete();\\n})\\n\\n }\\n \\n \u0022\r\n },\r\n \u0022updateTractorIDsToNewIDUsingOldID\u0022 : {\r\n \u0022code\u0022 : \u0022 var tractors = [\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0001-148\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500356,\\n \\\u0022OLD ID\\\u0022: 100084,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB148YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101228,\\n \\\u0022IMSI\\\u0022: 204043397060028,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066063554,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0002-149\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500376,\\n \\\u0022OLD ID\\\u0022: 100123,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB149YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101299,\\n \\\u0022IMSI\\\u0022: 204043397060077,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066099913,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0003-150\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500283,\\n \\\u0022OLD ID\\\u0022: 100036,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB150YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100949,\\n \\\u0022IMSI\\\u0022: 204043397059982,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066057663,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0004-151\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500264,\\n \\\u0022OLD ID\\\u0022: 100077,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB151YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100922,\\n \\\u0022IMSI\\\u0022: 204043397060003,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066085425,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0005-152\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500346,\\n \\\u0022OLD ID\\\u0022: 100066,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB152YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101217,\\n \\\u0022IMSI\\\u0022: 204043397060045,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066083651,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0006-153\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500375,\\n \\\u0022OLD ID\\\u0022: 100124,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB153YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101298,\\n \\\u0022IMSI\\\u0022: 204043397059986,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066090011,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0007-154\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500363,\\n \\\u0022OLD ID\\\u0022: 100052,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB154YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101252,\\n \\\u0022IMSI\\\u0022: 204043397060051,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066059511,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0008-155\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500349,\\n \\\u0022OLD ID\\\u0022: 100081,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB155YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101197,\\n \\\u0022IMSI\\\u0022: 204043397060016,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066085623,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0009-156\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500279,\\n \\\u0022OLD ID\\\u0022: 100026,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB156YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100944,\\n \\\u0022IMSI\\\u0022: 204043397059975,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066085664,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0010-157\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500289,\\n \\\u0022OLD ID\\\u0022: 100127,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB157YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101035,\\n \\\u0022IMSI\\\u0022: 204043397059989,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066084725,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0011-158\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500269,\\n \\\u0022OLD ID\\\u0022: 100041,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB158YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100929,\\n \\\u0022IMSI\\\u0022: 204043397060032,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066087009,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0012-159\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500353,\\n \\\u0022OLD ID\\\u0022: 100088,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB159YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101038,\\n \\\u0022IMSI\\\u0022: 204043397060000,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066086324,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0023-643\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500385,\\n \\\u0022OLD ID\\\u0022: 100062,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB643YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101322,\\n \\\u0022IMSI\\\u0022: 204043397060061,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066062895,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0024-644\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500274,\\n \\\u0022OLD ID\\\u0022: 100112,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB644YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100935,\\n \\\u0022IMSI\\\u0022: 204043397060063,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066088338,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0025-645\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500266,\\n \\\u0022OLD ID\\\u0022: 100076,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB645YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100924,\\n \\\u0022IMSI\\\u0022: 204043397059977,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066057440,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0026-646\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500383,\\n \\\u0022OLD ID\\\u0022: 100068,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB646YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101315,\\n \\\u0022IMSI\\\u0022: 204043397060047,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066062879,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0027-647\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500374,\\n \\\u0022OLD ID\\\u0022: 100125,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB647YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101297,\\n \\\u0022IMSI\\\u0022: 204043397059987,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066089005,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0028-648\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500345,\\n \\\u0022OLD ID\\\u0022: 100120,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB648YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101222,\\n \\\u0022IMSI\\\u0022: 204043397060074,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066057671,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0029-649\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500287,\\n \\\u0022OLD ID\\\u0022: 100060,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB649YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100955,\\n \\\u0022IMSI\\\u0022: 204043397060059,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066088965,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRJD0030-650\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500288,\\n \\\u0022OLD ID\\\u0022: 100122,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB650YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100960,\\n \\\u0022IMSI\\\u0022: 204043397060076,\\n \\\u0022BRAND\\\u0022: \\\u0022John Deere\\\u0022,\\n \\\u0022MODEL\\\u0022: 5065,\\n \\\u0022IMEI\\\u0022: 352431066085920,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0061-116\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500265,\\n \\\u0022OLD ID\\\u0022: 100043,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB116YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100923,\\n \\\u0022IMSI\\\u0022: 204043397059985,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066085896,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0062-128\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500273,\\n \\\u0022OLD ID\\\u0022: 100063,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB128YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100934,\\n \\\u0022IMSI\\\u0022: 204043397060042,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066054538,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0063-125\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500784,\\n \\\u0022OLD ID\\\u0022: 100067,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB125YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101317,\\n \\\u0022IMSI\\\u0022: 204043397060046,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066091340,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0065-126\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500344,\\n \\\u0022OLD ID\\\u0022: 100058,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB126YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101037,\\n \\\u0022IMSI\\\u0022: 204043397060057,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066084683,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0066-124\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500359,\\n \\\u0022OLD ID\\\u0022: 100101,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB124YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101246,\\n \\\u0022IMSI\\\u0022: 204043397059995,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066059776,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0067-119\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500262,\\n \\\u0022OLD ID\\\u0022: 100042,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB119YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100919,\\n \\\u0022IMSI\\\u0022: 204043397060033,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066059552,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0068-120\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500389,\\n \\\u0022OLD ID\\\u0022: 100034,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB120YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100933,\\n \\\u0022IMSI\\\u0022: 204043397059984,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066099145,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0069-115\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500275,\\n \\\u0022OLD ID\\\u0022: 100092,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB115YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100936,\\n \\\u0022IMSI\\\u0022: 204043397060024,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066100711,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0070-114\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500272,\\n \\\u0022OLD ID\\\u0022: 100037,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB114YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100932,\\n \\\u0022IMSI\\\u0022: 204043397060079,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066088874,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0071-113\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500354,\\n \\\u0022OLD ID\\\u0022: 100121,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB113YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101224,\\n \\\u0022IMSI\\\u0022: 204043397060075,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066055766,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0073-127\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500271,\\n \\\u0022OLD ID\\\u0022: 100038,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB127YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100931,\\n \\\u0022IMSI\\\u0022: 204043397060030,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066063570,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/MaxRetries\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0074-110\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500371,\\n \\\u0022OLD ID\\\u0022: 100126,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB110YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101279,\\n \\\u0022IMSI\\\u0022: 204043397059988,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066087561,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0076-122\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500355,\\n \\\u0022OLD ID\\\u0022: 100087,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB122YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101227,\\n \\\u0022IMSI\\\u0022: 204043397060007,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057846,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0077-121\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500388,\\n \\\u0022OLD ID\\\u0022: 100082,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB121YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101274,\\n \\\u0022IMSI\\\u0022: 204043397059999,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066086928,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0078-118\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500270,\\n \\\u0022OLD ID\\\u0022: 100040,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB118YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100930,\\n \\\u0022IMSI\\\u0022: 204043397060031,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066055998,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0079-111\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500373,\\n \\\u0022OLD ID\\\u0022: 100089,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB111YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101296,\\n \\\u0022IMSI\\\u0022: 204043397060019,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066062788,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0080-117\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500781,\\n \\\u0022OLD ID\\\u0022: 100090,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB117YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101196,\\n \\\u0022IMSI\\\u0022: 204043397060018,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066083602,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0081-677\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500366,\\n \\\u0022OLD ID\\\u0022: 100105,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB677YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101272,\\n \\\u0022IMSI\\\u0022: 204043397059991,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066055964,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0082-634\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500358,\\n \\\u0022OLD ID\\\u0022: 100104,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB634YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101245,\\n \\\u0022IMSI\\\u0022: 204043397059992,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057655,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0083-632\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500372,\\n \\\u0022OLD ID\\\u0022: 100107,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB632YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101295,\\n \\\u0022IMSI\\\u0022: 204043397060069,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066088999,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0084-641\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500284,\\n \\\u0022OLD ID\\\u0022: 100028,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB641YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100950,\\n \\\u0022IMSI\\\u0022: 204043397059981,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066094823,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0085-628\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500357,\\n \\\u0022OLD ID\\\u0022: 100059,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB628YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101230,\\n \\\u0022IMSI\\\u0022: 204043397060058,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066071383,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0086-633\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500368,\\n \\\u0022OLD ID\\\u0022: 100114,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB633YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101276,\\n \\\u0022IMSI\\\u0022: 204043397060065,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066086019,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0088-630\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500280,\\n \\\u0022OLD ID\\\u0022: 100075,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB630YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100946,\\n \\\u0022IMSI\\\u0022: 204043397060012,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057804,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0089-664\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500268,\\n \\\u0022OLD ID\\\u0022: 100097,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB664YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100926,\\n \\\u0022IMSI\\\u0022: 204043397060020,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057481,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0090-624\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500362,\\n \\\u0022OLD ID\\\u0022: 100053,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB624YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101250,\\n \\\u0022IMSI\\\u0022: 204043397060052,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057333,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0091-623\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500380,\\n \\\u0022OLD ID\\\u0022: 100061,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB623YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101312,\\n \\\u0022IMSI\\\u0022: 204043397060060,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066056103,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0092-626\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500386,\\n \\\u0022OLD ID\\\u0022: 100096,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB626YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101323,\\n \\\u0022IMSI\\\u0022: 204043397060025,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066088957,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0093-627\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500277,\\n \\\u0022OLD ID\\\u0022: 100079,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB627YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100940,\\n \\\u0022IMSI\\\u0022: 204043397060014,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066086316,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0094-625\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500378,\\n \\\u0022OLD ID\\\u0022: 100115,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB625YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101301,\\n \\\u0022IMSI\\\u0022: 204043397060066,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066099046,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0095-622\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500379,\\n \\\u0022OLD ID\\\u0022: 100056,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB622YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101302,\\n \\\u0022IMSI\\\u0022: 204043397060055,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066085805,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0096-621\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500276,\\n \\\u0022OLD ID\\\u0022: 100095,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB621YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100938,\\n \\\u0022IMSI\\\u0022: 204043397060022,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066091498,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0097-642\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500352,\\n \\\u0022OLD ID\\\u0022: 100093,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB642YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101041,\\n \\\u0022IMSI\\\u0022: 204043397060021,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057820,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0098-658\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500381,\\n \\\u0022OLD ID\\\u0022: 100064,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB658YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101313,\\n \\\u0022IMSI\\\u0022: 204043397060043,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066086415,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0099-659\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500278,\\n \\\u0022OLD ID\\\u0022: 100069,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB659YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100941,\\n \\\u0022IMSI\\\u0022: 204043397060041,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066063620,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0100-660.\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500281,\\n \\\u0022OLD ID\\\u0022: 100078,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB660YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100947,\\n \\\u0022IMSI\\\u0022: 204043397060013,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057796,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0102-661\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500350,\\n \\\u0022OLD ID\\\u0022: 100085,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB661YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101193,\\n \\\u0022IMSI\\\u0022: 204043397060029,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066100646,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0103-663\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500361,\\n \\\u0022OLD ID\\\u0022: 100055,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB663YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101249,\\n \\\u0022IMSI\\\u0022: 204043397060054,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057648,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0104-679\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500382,\\n \\\u0022OLD ID\\\u0022: 100113,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB679YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101314,\\n \\\u0022IMSI\\\u0022: 204043397060064,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057002,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0105-657\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500347,\\n \\\u0022OLD ID\\\u0022: 100103,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB657YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101200,\\n \\\u0022IMSI\\\u0022: 204043397059993,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066099681,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0106-656\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500348,\\n \\\u0022OLD ID\\\u0022: 100100,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB656YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101199,\\n \\\u0022IMSI\\\u0022: 204043397059996,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066100620,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0107-655\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500370,\\n \\\u0022OLD ID\\\u0022: 100109,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB655YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101278,\\n \\\u0022IMSI\\\u0022: 204043397060067,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066081804,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Pending\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0108-685\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500369,\\n \\\u0022OLD ID\\\u0022: 100108,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB685YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101277,\\n \\\u0022IMSI\\\u0022: 204043397060068,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066083560,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0109-684\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500360,\\n \\\u0022OLD ID\\\u0022: 100102,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB684YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101247,\\n \\\u0022IMSI\\\u0022: 204043397059994,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066087637,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0110-683\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500351,\\n \\\u0022OLD ID\\\u0022: 100116,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB683YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101044,\\n \\\u0022IMSI\\\u0022: 204043397060070,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066056095,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0111-682\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500367,\\n \\\u0022OLD ID\\\u0022: 100083,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB682YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101273,\\n \\\u0022IMSI\\\u0022: 204043397059997,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066086035,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0113-654\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500263,\\n \\\u0022OLD ID\\\u0022: 100050,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB654YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100921,\\n \\\u0022IMSI\\\u0022: 204043397060049,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066085797,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/MaxRetries\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0114-635\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500390,\\n \\\u0022OLD ID\\\u0022: 100049,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB635YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101251,\\n \\\u0022IMSI\\\u0022: 204043397060048,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066054462,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0115-637\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500282,\\n \\\u0022OLD ID\\\u0022: 100072,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB637YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100948,\\n \\\u0022IMSI\\\u0022: 204043397060009,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066055782,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0116-636\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500365,\\n \\\u0022OLD ID\\\u0022: 100106,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB636YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101269,\\n \\\u0022IMSI\\\u0022: 204043397059990,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057861,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0117-638\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500267,\\n \\\u0022OLD ID\\\u0022: 100098,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB638YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022TRUE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100925,\\n \\\u0022IMSI\\\u0022: 204043397060026,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066083594,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0118-653\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500364,\\n \\\u0022OLD ID\\\u0022: 100057,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB653YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731101268,\\n \\\u0022IMSI\\\u0022: 204043397060056,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066057275,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Delivery Impossible/Partial\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0119-676\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500387,\\n \\\u0022OLD ID\\\u0022: 100074,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB676YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100943,\\n \\\u0022IMSI\\\u0022: 204043397060011,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066085649,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n },\\n {\\n \\\u0022TRAXI ID\\\u0022: \\\u0022TRAXI/TRMH0120-631\\\u0022,\\n \\\u0022TRACTOR ID\\\u0022: 500285,\\n \\\u0022OLD ID\\\u0022: 100073,\\n \\\u0022LICENCE PLATE\\\u0022: \\\u0022YAB631YR\\\u0022,\\n \\\u0022EDIT AERTRAK\\\u0022: \\\u0022FALSE\\\u0022,\\n \\\u0022ESN\\\u0022: 1731100953,\\n \\\u0022IMSI\\\u0022: 204043397060010,\\n \\\u0022BRAND\\\u0022: \\\u0022Mahindra\\\u0022,\\n \\\u0022MODEL\\\u0022: 6005,\\n \\\u0022IMEI\\\u0022: 352431066085656,\\n \\\u0022ICCID\\\u0022: 89185000161110300000,\\n \\\u0022DEVICE TYPE\\\u0022: \\\u0022TTU12G400-G1000\\\u0022,\\n \\\u0022STATUS\\\u0022: \\\u0022Completed\\\u0022\\n }\\n];\\n\\n\\nvar tractorsHash = { 100026: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0009-156\u0027,\\n \u0027TRACTOR ID\u0027: 500279,\\n \u0027OLD ID\u0027: 100026,\\n \u0027LICENCE PLATE\u0027: \u0027YAB156YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100944,\\n IMSI: 204043397059975,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066085664,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100028: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0084-641\u0027,\\n \u0027TRACTOR ID\u0027: 500284,\\n \u0027OLD ID\u0027: 100028,\\n \u0027LICENCE PLATE\u0027: \u0027YAB641YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100950,\\n IMSI: 204043397059981,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066094823,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100034: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0068-120\u0027,\\n \u0027TRACTOR ID\u0027: 500389,\\n \u0027OLD ID\u0027: 100034,\\n \u0027LICENCE PLATE\u0027: \u0027YAB120YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100933,\\n IMSI: 204043397059984,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066099145,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027\u0027 },\\n 100036: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0003-150\u0027,\\n \u0027TRACTOR ID\u0027: 500283,\\n \u0027OLD ID\u0027: 100036,\\n \u0027LICENCE PLATE\u0027: \u0027YAB150YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100949,\\n IMSI: 204043397059982,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066057663,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100037: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0070-114\u0027,\\n \u0027TRACTOR ID\u0027: 500272,\\n \u0027OLD ID\u0027: 100037,\\n \u0027LICENCE PLATE\u0027: \u0027YAB114YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100932,\\n IMSI: 204043397060079,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066088874,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100038: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0073-127\u0027,\\n \u0027TRACTOR ID\u0027: 500271,\\n \u0027OLD ID\u0027: 100038,\\n \u0027LICENCE PLATE\u0027: \u0027YAB127YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100931,\\n IMSI: 204043397060030,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066063570,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/MaxRetries\u0027 },\\n 100040: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0078-118\u0027,\\n \u0027TRACTOR ID\u0027: 500270,\\n \u0027OLD ID\u0027: 100040,\\n \u0027LICENCE PLATE\u0027: \u0027YAB118YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100930,\\n IMSI: 204043397060031,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066055998,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100041: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0011-158\u0027,\\n \u0027TRACTOR ID\u0027: 500269,\\n \u0027OLD ID\u0027: 100041,\\n \u0027LICENCE PLATE\u0027: \u0027YAB158YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100929,\\n IMSI: 204043397060032,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066087009,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100042: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0067-119\u0027,\\n \u0027TRACTOR ID\u0027: 500262,\\n \u0027OLD ID\u0027: 100042,\\n \u0027LICENCE PLATE\u0027: \u0027YAB119YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100919,\\n IMSI: 204043397060033,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066059552,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100043: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0061-116\u0027,\\n \u0027TRACTOR ID\u0027: 500265,\\n \u0027OLD ID\u0027: 100043,\\n \u0027LICENCE PLATE\u0027: \u0027YAB116YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100923,\\n IMSI: 204043397059985,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066085896,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100049: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0114-635\u0027,\\n \u0027TRACTOR ID\u0027: 500390,\\n \u0027OLD ID\u0027: 100049,\\n \u0027LICENCE PLATE\u0027: \u0027YAB635YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027\u0027,\\n ESN: 1731101251,\\n IMSI: 204043397060048,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066054462,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027\u0027 },\\n 100050: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0113-654\u0027,\\n \u0027TRACTOR ID\u0027: 500263,\\n \u0027OLD ID\u0027: 100050,\\n \u0027LICENCE PLATE\u0027: \u0027YAB654YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100921,\\n IMSI: 204043397060049,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066085797,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/MaxRetries\u0027 },\\n 100052: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0007-154\u0027,\\n \u0027TRACTOR ID\u0027: 500363,\\n \u0027OLD ID\u0027: 100052,\\n \u0027LICENCE PLATE\u0027: \u0027YAB154YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101252,\\n IMSI: 204043397060051,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066059511,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100053: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0090-624\u0027,\\n \u0027TRACTOR ID\u0027: 500362,\\n \u0027OLD ID\u0027: 100053,\\n \u0027LICENCE PLATE\u0027: \u0027YAB624YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101250,\\n IMSI: 204043397060052,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057333,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100055: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0103-663\u0027,\\n \u0027TRACTOR ID\u0027: 500361,\\n \u0027OLD ID\u0027: 100055,\\n \u0027LICENCE PLATE\u0027: \u0027YAB663YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101249,\\n IMSI: 204043397060054,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057648,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100056: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0095-622\u0027,\\n \u0027TRACTOR ID\u0027: 500379,\\n \u0027OLD ID\u0027: 100056,\\n \u0027LICENCE PLATE\u0027: \u0027YAB622YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101302,\\n IMSI: 204043397060055,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066085805,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100057: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0118-653\u0027,\\n \u0027TRACTOR ID\u0027: 500364,\\n \u0027OLD ID\u0027: 100057,\\n \u0027LICENCE PLATE\u0027: \u0027YAB653YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101268,\\n IMSI: 204043397060056,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057275,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100058: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0065-126\u0027,\\n \u0027TRACTOR ID\u0027: 500344,\\n \u0027OLD ID\u0027: 100058,\\n \u0027LICENCE PLATE\u0027: \u0027YAB126YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101037,\\n IMSI: 204043397060057,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066084683,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100059: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0085-628\u0027,\\n \u0027TRACTOR ID\u0027: 500357,\\n \u0027OLD ID\u0027: 100059,\\n \u0027LICENCE PLATE\u0027: \u0027YAB628YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101230,\\n IMSI: 204043397060058,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066071383,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100060: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0029-649\u0027,\\n \u0027TRACTOR ID\u0027: 500287,\\n \u0027OLD ID\u0027: 100060,\\n \u0027LICENCE PLATE\u0027: \u0027YAB649YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100955,\\n IMSI: 204043397060059,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066088965,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100061: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0091-623\u0027,\\n \u0027TRACTOR ID\u0027: 500380,\\n \u0027OLD ID\u0027: 100061,\\n \u0027LICENCE PLATE\u0027: \u0027YAB623YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101312,\\n IMSI: 204043397060060,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066056103,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100062: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0023-643\u0027,\\n \u0027TRACTOR ID\u0027: 500385,\\n \u0027OLD ID\u0027: 100062,\\n \u0027LICENCE PLATE\u0027: \u0027YAB643YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101322,\\n IMSI: 204043397060061,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066062895,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100063: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0062-128\u0027,\\n \u0027TRACTOR ID\u0027: 500273,\\n \u0027OLD ID\u0027: 100063,\\n \u0027LICENCE PLATE\u0027: \u0027YAB128YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100934,\\n IMSI: 204043397060042,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066054538,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100064: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0098-658\u0027,\\n \u0027TRACTOR ID\u0027: 500381,\\n \u0027OLD ID\u0027: 100064,\\n \u0027LICENCE PLATE\u0027: \u0027YAB658YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101313,\\n IMSI: 204043397060043,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066086415,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100066: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0005-152\u0027,\\n \u0027TRACTOR ID\u0027: 500346,\\n \u0027OLD ID\u0027: 100066,\\n \u0027LICENCE PLATE\u0027: \u0027YAB152YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101217,\\n IMSI: 204043397060045,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066083651,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100067: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0063-125\u0027,\\n \u0027TRACTOR ID\u0027: 500784,\\n \u0027OLD ID\u0027: 100067,\\n \u0027LICENCE PLATE\u0027: \u0027YAB125YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101317,\\n IMSI: 204043397060046,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066091340,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027\u0027 },\\n 100068: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0026-646\u0027,\\n \u0027TRACTOR ID\u0027: 500383,\\n \u0027OLD ID\u0027: 100068,\\n \u0027LICENCE PLATE\u0027: \u0027YAB646YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101315,\\n IMSI: 204043397060047,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066062879,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100069: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0099-659\u0027,\\n \u0027TRACTOR ID\u0027: 500278,\\n \u0027OLD ID\u0027: 100069,\\n \u0027LICENCE PLATE\u0027: \u0027YAB659YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100941,\\n IMSI: 204043397060041,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066063620,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100072: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0115-637\u0027,\\n \u0027TRACTOR ID\u0027: 500282,\\n \u0027OLD ID\u0027: 100072,\\n \u0027LICENCE PLATE\u0027: \u0027YAB637YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100948,\\n IMSI: 204043397060009,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066055782,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100073: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0120-631\u0027,\\n \u0027TRACTOR ID\u0027: 500285,\\n \u0027OLD ID\u0027: 100073,\\n \u0027LICENCE PLATE\u0027: \u0027YAB631YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100953,\\n IMSI: 204043397060010,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066085656,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100074: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0119-676\u0027,\\n \u0027TRACTOR ID\u0027: 500387,\\n \u0027OLD ID\u0027: 100074,\\n \u0027LICENCE PLATE\u0027: \u0027YAB676YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100943,\\n IMSI: 204043397060011,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066085649,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100075: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0088-630\u0027,\\n \u0027TRACTOR ID\u0027: 500280,\\n \u0027OLD ID\u0027: 100075,\\n \u0027LICENCE PLATE\u0027: \u0027YAB630YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100946,\\n IMSI: 204043397060012,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057804,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100076: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0025-645\u0027,\\n \u0027TRACTOR ID\u0027: 500266,\\n \u0027OLD ID\u0027: 100076,\\n \u0027LICENCE PLATE\u0027: \u0027YAB645YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100924,\\n IMSI: 204043397059977,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066057440,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100077: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0004-151\u0027,\\n \u0027TRACTOR ID\u0027: 500264,\\n \u0027OLD ID\u0027: 100077,\\n \u0027LICENCE PLATE\u0027: \u0027YAB151YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100922,\\n IMSI: 204043397060003,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066085425,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100078: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0100-660.\u0027,\\n \u0027TRACTOR ID\u0027: 500281,\\n \u0027OLD ID\u0027: 100078,\\n \u0027LICENCE PLATE\u0027: \u0027YAB660YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100947,\\n IMSI: 204043397060013,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057796,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100079: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0093-627\u0027,\\n \u0027TRACTOR ID\u0027: 500277,\\n \u0027OLD ID\u0027: 100079,\\n \u0027LICENCE PLATE\u0027: \u0027YAB627YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100940,\\n IMSI: 204043397060014,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066086316,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100081: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0008-155\u0027,\\n \u0027TRACTOR ID\u0027: 500349,\\n \u0027OLD ID\u0027: 100081,\\n \u0027LICENCE PLATE\u0027: \u0027YAB155YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101197,\\n IMSI: 204043397060016,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066085623,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100082: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0077-121\u0027,\\n \u0027TRACTOR ID\u0027: 500388,\\n \u0027OLD ID\u0027: 100082,\\n \u0027LICENCE PLATE\u0027: \u0027YAB121YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101274,\\n IMSI: 204043397059999,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066086928,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027\u0027 },\\n 100083: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0111-682\u0027,\\n \u0027TRACTOR ID\u0027: 500367,\\n \u0027OLD ID\u0027: 100083,\\n \u0027LICENCE PLATE\u0027: \u0027YAB682YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101273,\\n IMSI: 204043397059997,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066086035,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100084: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0001-148\u0027,\\n \u0027TRACTOR ID\u0027: 500356,\\n \u0027OLD ID\u0027: 100084,\\n \u0027LICENCE PLATE\u0027: \u0027YAB148YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101228,\\n IMSI: 204043397060028,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066063554,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100085: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0102-661\u0027,\\n \u0027TRACTOR ID\u0027: 500350,\\n \u0027OLD ID\u0027: 100085,\\n \u0027LICENCE PLATE\u0027: \u0027YAB661YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101193,\\n IMSI: 204043397060029,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066100646,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100087: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0076-122\u0027,\\n \u0027TRACTOR ID\u0027: 500355,\\n \u0027OLD ID\u0027: 100087,\\n \u0027LICENCE PLATE\u0027: \u0027YAB122YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731101227,\\n IMSI: 204043397060007,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057846,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100088: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0012-159\u0027,\\n \u0027TRACTOR ID\u0027: 500353,\\n \u0027OLD ID\u0027: 100088,\\n \u0027LICENCE PLATE\u0027: \u0027YAB159YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731101038,\\n IMSI: 204043397060000,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066086324,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100089: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0079-111\u0027,\\n \u0027TRACTOR ID\u0027: 500373,\\n \u0027OLD ID\u0027: 100089,\\n \u0027LICENCE PLATE\u0027: \u0027YAB111YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731101296,\\n IMSI: 204043397060019,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066062788,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100090: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0080-117\u0027,\\n \u0027TRACTOR ID\u0027: 500781,\\n \u0027OLD ID\u0027: 100090,\\n \u0027LICENCE PLATE\u0027: \u0027YAB117YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101196,\\n IMSI: 204043397060018,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066083602,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027\u0027 },\\n 100092: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0069-115\u0027,\\n \u0027TRACTOR ID\u0027: 500275,\\n \u0027OLD ID\u0027: 100092,\\n \u0027LICENCE PLATE\u0027: \u0027YAB115YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100936,\\n IMSI: 204043397060024,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066100711,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100093: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0097-642\u0027,\\n \u0027TRACTOR ID\u0027: 500352,\\n \u0027OLD ID\u0027: 100093,\\n \u0027LICENCE PLATE\u0027: \u0027YAB642YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101041,\\n IMSI: 204043397060021,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057820,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100095: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0096-621\u0027,\\n \u0027TRACTOR ID\u0027: 500276,\\n \u0027OLD ID\u0027: 100095,\\n \u0027LICENCE PLATE\u0027: \u0027YAB621YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100938,\\n IMSI: 204043397060022,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066091498,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100096: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0092-626\u0027,\\n \u0027TRACTOR ID\u0027: 500386,\\n \u0027OLD ID\u0027: 100096,\\n \u0027LICENCE PLATE\u0027: \u0027YAB626YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101323,\\n IMSI: 204043397060025,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066088957,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100097: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0089-664\u0027,\\n \u0027TRACTOR ID\u0027: 500268,\\n \u0027OLD ID\u0027: 100097,\\n \u0027LICENCE PLATE\u0027: \u0027YAB664YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100926,\\n IMSI: 204043397060020,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057481,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100098: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0117-638\u0027,\\n \u0027TRACTOR ID\u0027: 500267,\\n \u0027OLD ID\u0027: 100098,\\n \u0027LICENCE PLATE\u0027: \u0027YAB638YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731100925,\\n IMSI: 204043397060026,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066083594,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100100: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0106-656\u0027,\\n \u0027TRACTOR ID\u0027: 500348,\\n \u0027OLD ID\u0027: 100100,\\n \u0027LICENCE PLATE\u0027: \u0027YAB656YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101199,\\n IMSI: 204043397059996,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066100620,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100101: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0066-124\u0027,\\n \u0027TRACTOR ID\u0027: 500359,\\n \u0027OLD ID\u0027: 100101,\\n \u0027LICENCE PLATE\u0027: \u0027YAB124YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101246,\\n IMSI: 204043397059995,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066059776,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100102: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0109-684\u0027,\\n \u0027TRACTOR ID\u0027: 500360,\\n \u0027OLD ID\u0027: 100102,\\n \u0027LICENCE PLATE\u0027: \u0027YAB684YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101247,\\n IMSI: 204043397059994,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066087637,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100103: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0105-657\u0027,\\n \u0027TRACTOR ID\u0027: 500347,\\n \u0027OLD ID\u0027: 100103,\\n \u0027LICENCE PLATE\u0027: \u0027YAB657YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101200,\\n IMSI: 204043397059993,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066099681,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100104: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0082-634\u0027,\\n \u0027TRACTOR ID\u0027: 500358,\\n \u0027OLD ID\u0027: 100104,\\n \u0027LICENCE PLATE\u0027: \u0027YAB634YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101245,\\n IMSI: 204043397059992,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057655,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100105: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0081-677\u0027,\\n \u0027TRACTOR ID\u0027: 500366,\\n \u0027OLD ID\u0027: 100105,\\n \u0027LICENCE PLATE\u0027: \u0027YAB677YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731101272,\\n IMSI: 204043397059991,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066055964,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100106: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0116-636\u0027,\\n \u0027TRACTOR ID\u0027: 500365,\\n \u0027OLD ID\u0027: 100106,\\n \u0027LICENCE PLATE\u0027: \u0027YAB636YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101269,\\n IMSI: 204043397059990,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057861,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100107: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0083-632\u0027,\\n \u0027TRACTOR ID\u0027: 500372,\\n \u0027OLD ID\u0027: 100107,\\n \u0027LICENCE PLATE\u0027: \u0027YAB632YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101295,\\n IMSI: 204043397060069,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066088999,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100108: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0108-685\u0027,\\n \u0027TRACTOR ID\u0027: 500369,\\n \u0027OLD ID\u0027: 100108,\\n \u0027LICENCE PLATE\u0027: \u0027YAB685YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101277,\\n IMSI: 204043397060068,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066083560,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100109: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0107-655\u0027,\\n \u0027TRACTOR ID\u0027: 500370,\\n \u0027OLD ID\u0027: 100109,\\n \u0027LICENCE PLATE\u0027: \u0027YAB655YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101278,\\n IMSI: 204043397060067,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066081804,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100112: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0024-644\u0027,\\n \u0027TRACTOR ID\u0027: 500274,\\n \u0027OLD ID\u0027: 100112,\\n \u0027LICENCE PLATE\u0027: \u0027YAB644YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100935,\\n IMSI: 204043397060063,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066088338,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100113: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0104-679\u0027,\\n \u0027TRACTOR ID\u0027: 500382,\\n \u0027OLD ID\u0027: 100113,\\n \u0027LICENCE PLATE\u0027: \u0027YAB679YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101314,\\n IMSI: 204043397060064,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066057002,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100114: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0086-633\u0027,\\n \u0027TRACTOR ID\u0027: 500368,\\n \u0027OLD ID\u0027: 100114,\\n \u0027LICENCE PLATE\u0027: \u0027YAB633YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101276,\\n IMSI: 204043397060065,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066086019,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100115: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0094-625\u0027,\\n \u0027TRACTOR ID\u0027: 500378,\\n \u0027OLD ID\u0027: 100115,\\n \u0027LICENCE PLATE\u0027: \u0027YAB625YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101301,\\n IMSI: 204043397060066,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066099046,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100116: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0110-683\u0027,\\n \u0027TRACTOR ID\u0027: 500351,\\n \u0027OLD ID\u0027: 100116,\\n \u0027LICENCE PLATE\u0027: \u0027YAB683YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101044,\\n IMSI: 204043397060070,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066056095,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100120: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0028-648\u0027,\\n \u0027TRACTOR ID\u0027: 500345,\\n \u0027OLD ID\u0027: 100120,\\n \u0027LICENCE PLATE\u0027: \u0027YAB648YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731101222,\\n IMSI: 204043397060074,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066057671,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100121: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0071-113\u0027,\\n \u0027TRACTOR ID\u0027: 500354,\\n \u0027OLD ID\u0027: 100121,\\n \u0027LICENCE PLATE\u0027: \u0027YAB113YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027TRUE\u0027,\\n ESN: 1731101224,\\n IMSI: 204043397060075,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066055766,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100122: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0030-650\u0027,\\n \u0027TRACTOR ID\u0027: 500288,\\n \u0027OLD ID\u0027: 100122,\\n \u0027LICENCE PLATE\u0027: \u0027YAB650YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731100960,\\n IMSI: 204043397060076,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066085920,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100123: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0002-149\u0027,\\n \u0027TRACTOR ID\u0027: 500376,\\n \u0027OLD ID\u0027: 100123,\\n \u0027LICENCE PLATE\u0027: \u0027YAB149YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101299,\\n IMSI: 204043397060077,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066099913,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 },\\n 100124: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0006-153\u0027,\\n \u0027TRACTOR ID\u0027: 500375,\\n \u0027OLD ID\u0027: 100124,\\n \u0027LICENCE PLATE\u0027: \u0027YAB153YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101298,\\n IMSI: 204043397059986,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066090011,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100125: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0027-647\u0027,\\n \u0027TRACTOR ID\u0027: 500374,\\n \u0027OLD ID\u0027: 100125,\\n \u0027LICENCE PLATE\u0027: \u0027YAB647YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101297,\\n IMSI: 204043397059987,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066089005,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Completed\u0027 },\\n 100126: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRMH0074-110\u0027,\\n \u0027TRACTOR ID\u0027: 500371,\\n \u0027OLD ID\u0027: 100126,\\n \u0027LICENCE PLATE\u0027: \u0027YAB110YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101279,\\n IMSI: 204043397059988,\\n BRAND: \u0027Mahindra\u0027,\\n MODEL: 6005,\\n IMEI: 352431066087561,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Pending\u0027 },\\n 100127: \\n { \u0027TRAXI ID\u0027: \u0027TRAXI/TRJD0010-157\u0027,\\n \u0027TRACTOR ID\u0027: 500289,\\n \u0027OLD ID\u0027: 100127,\\n \u0027LICENCE PLATE\u0027: \u0027YAB157YR\u0027,\\n \u0027EDIT AERTRAK\u0027: \u0027FALSE\u0027,\\n ESN: 1731101035,\\n IMSI: 204043397059989,\\n BRAND: \u0027John Deere\u0027,\\n MODEL: 5065,\\n IMEI: 352431066084725,\\n ICCID: 89185000161110300000,\\n \u0027DEVICE TYPE\u0027: \u0027TTU12G400-G1000\u0027,\\n STATUS: \u0027Delivery Impossible/Partial\u0027 } \\n }\\n \\n\\nfunction onRequest(request, response, modules) {\\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var tractor_ids_arr = [];\\n var Log = modules.logger;\\n var count = 0;\\n var old_id;\\n var new_id;\\n \\tfor(var i=0; i\u003Ctractors.length;i\u002B\u002B)\\n {\\n (function(i){\\n \\t old_id = tractors[i][\\\u0022OLD ID\\\u0022];\\n \\t new_id = tractorsHash[old_id][\\\u0022TRACTOR ID\\\u0022];\\n \\n Tractor.update( {TractorID:old_id}, {$set: {TractorID:new_id} },\\n function(err, saved){\\n \\tif(err){\\n Log.info(\u0027error updating tractor with an ID of \u0027 \u002B old_id \u002B \\\u0022 with new ID of \\\u0022 \u002B new_id );\\n count\u002B\u002B;\\n if( count === tractors.length ){\\n response.complete();\\n }\\n }\\n else {\\n Log.info(\u0027successfully updated tractor with the id of \u0027 \\n \u002B tractors[i][\\\u0022OLD ID\\\u0022] \u002B \u0027 with new ID of \u0027 \u002B tractorsHash[ tractors[i][\\\u0022OLD ID\\\u0022]][\\\u0022TRACTOR ID\\\u0022] );\\n count\u002B\u002B\\n if( count === tractors.length ){\\n response.complete();\\n }\\n }\\n });\\n }).call(this, i)\\n }\\n}\\n\u0022\r\n },\r\n \u0022generateAndStoreSubscriptionCode\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n const SubscriptionCode = modules.collectionAccess.collection(\u0027TrackerIds\u0027);\\n const kinvey = modules.kinvey;\\n \\n var generateUniqueUid = function() {\\n return Math.random().toString(36).substring(2, 15) \u002B\\n Math.random().toString(36).substring(2, 15);\\n }\\n \\n var sub_code = generateUniqueUid();\\n \\n // Persist the code to storage \\n var subcription_code_object = kinvey.entity();\\n subcription_code_object.tracker_id = sub_code;\\n \\n \\n SubscriptionCode.save(subcription_code_object, function(err, saved_object){\\n if( err ) {\\n response.body = {\\n success: false,\\n error: new Error(err).message,\\n data: null,\\n code: 400\\n }\\n }\\n \\n else {\\n response.body = {\\n success: true,\\n error: null,\\n data: sub_code,\\n code: 200\\n }\\n }\\n \\n response.complete(); \\n })\\n \\n}\\n\\n\u0022\r\n },\r\n \u0022attemptLogin\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n\\tvar http = modules.request;\\n var request_endpoint = \u0027https://baas.kinvey.com/user/kid_bkFYnCzzzb/login\u0027\\n var request_data = {\\n username: request.body.email,\\n password: request.body.password\\n }\\n \\n http.request({\\n uri: request_endpoint,\\n method:\u0027POST\u0027,\\n headers: {\\n \u0027Content-Type\u0027:\u0027application/json\u0027,\\n \u0027Accept\u0027:\u0027application/json\u0027,\\n \u0027Authorization\u0027: \u0027Basic a2lkX2JrRlluQ3p6emI6ZTczMWY5YTI4NTgzNDkwMGEzNWMyODEzZGQxNzYyYzI=\u0027\\n },\\n \\n body: JSON.stringify(request_data),\\n \\n }, function(error, res, body){\\n if(res.status === 200 ){\\n response.body = {\\n success:true,\\n error: null,\\n data: body,\\n code: 200\\n };\\n \\n return response.complete();\\n }\\n \\n response.body = {\\n \\t success:false,\\n error: error,\\n data: body,\\n code: 400\\n }\\n \\n });\\n \\n}\\n\\n\u0022\r\n },\r\n \u0022HandleTractorsAlertsEventFromAWSBACKEND\u0022 : {\r\n \u0022code\u0022 : \u0022//Captures alerts (deviceOffline, lowBattery, stopThreshold, unpluggedDevice) pushed from AWS \\n//and sends notifications (push and email) to all users concerned\\n//Created by Abdulmajid on 16th May 2019, Updated on 21st June 2019\\n\\nfunction onRequest(request, response, modules) {\\n var tractorOwnerCol = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n var tractorDetailCol = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var usersCol = modules.collectionAccess.collection(\u0027user\u0027);\\n var userAccountsCol = modules.collectionAccess.collection(\u0027UserAccounts\u0027);\\n var notificationCol = modules.collectionAccess.collection(\u0027Notification\u0027);\\n var tractorOperatorCol = modules.collectionAccess.collection(\u0027TractorOperator\u0027);\\n var logger = modules.logger;\\n var pushModule = modules.push;\\n var emailModule = modules.email;\\n var userAcctCreatorIds = [];\\n var countNotificationsSaved = 0;\\n var alertBody = request.body;\\n var supportEmail = \\\u0022Hello Tractor \u003Csupport@hellotractor.com\u003E\\\u0022;\\n var dummyEmail = \\\u0022abdulmajid@hellotractor.com\\\u0022;\\n var appsEmail = \\\u0022apps2@hellotractor.com\\\u0022;\\n var alertEmail = \\\u0022aerishellotractor@yahoo.com\\\u0022;\\n\\n modules.logger.info(\\\u0022Data posted \\\u0022 \u002B JSON.stringify(alertBody));\\n \\n if (alertBody){\\n\\n //Validate the alert body for success\\n var alert = alertBody;\\n if (alert.code == 200){\\n\\n //Alert was successful, continue\\n var alertData = alert.data;\\n var tractorId = Number(alertData.tractor_id); //Convert tractor id to an integer\\n\\n logger.info(\\\u0022Alert type: \\\u0022\u002BalertData.alert_type);\\n \\n //Find the tractor in tractor detail collection\\n tractorDetailCol.findOne({\\\u0022TractorID\\\u0022: tractorId}, function (tractorErr, tractor) {\\n if (!tractor || tractorErr) { //If tractor doesnt exist or an error occured, end\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n finish();\\n } else {\\n //The tractor has been found\\n logger.info(\\\u0022Tractor found: \\\u0022\u002Btractor.TractorName);\\n \\n //If an operator was assigned to tractor, find tractor operator\\n if (tractor.OperatorID){\\n \\n //Find operator\\n tractorOperatorCol.findOne({\\\u0022OperatorID\\\u0022:tractor.OperatorID}, function(tractorOperatorErr, tractorOperator){\\n //Find users (parent and child) and push notification to them with operator details\\n findUsersAndPushNotification(alertData, tractor, tractorOperator);\\n });\\n } else {\\n //Find users (parent and child) and push notification to them \\n findUsersAndPushNotification(alertData, tractor, null);\\n }\\n }\\n });\\n } else {\\n //Alert was not a successful one, so end\\n finish();\\n }\\n } else {\\n //Alert does not have body, so end\\n finish();\\n }\\n \\n function findUsersAndPushNotification(alertData, tractor, tractorOperator){ \\n //Add creator Id of child accounts to userAcctCreatorIds\\n userAccountsCol.find({\\\u0022_acl.creator\\\u0022: tractor._acl.creator}, function(userActErr, userActs){\\n if (userActs){\\n userActs.forEach(function(userAct){\\n userAcctCreatorIds.push(userAct.accountHolderId);\\n });\\n }\\n\\n //Add creator id of parent tractor owner account\\n userAcctCreatorIds.push(tractor._acl.creator);\\n logger.info(userAcctCreatorIds); //Log tractor owner creator ids\\n\\n //Find users with creator ids in array\\n usersCol.find({\\\u0022_acl.creator\\\u0022: {$in: userAcctCreatorIds}}, function(userErr, users){\\n \\n //Check if users with those creator ids exist\\n if (users){ \\n\\n //If users exists, find corresponding tractor owner for each user\\n users.forEach(function(user){\\n tractorOwnerCol.findOne({\\\u0022_acl.creator\\\u0022:user._acl.creator}, function(tractorOwnerErr, tractorOwner){\\n if (tractorOwner \u0026\u0026 canReceiveNotification(tractorOwner, alertData)){\\n //Build notification for the traget tractor owner\\n var entity = buildNotification(alertData, user, tractorOwner, tractor, tractorOperator)\\n //Build push notification here\\n logger.info(\\\u0022Notification built\\\u0022);\\n\\n //Save notification to Notification collection\\n notificationCol.save(entity, function(notificationErr, savedNotification){\\n logger.info(\\\u0022Notification saved\\\u0022);\\n \\n //Check if the tractor owner has email notifications turned on\\n\\n //Build the email subject based on the alert type\\n var title = getMessageTitle(entity.action, tractor);\\n logger.info(\\\u0022Notification email title created\\\u0022);\\n\\n \\n //Send email notification to tractor owner\\n emailModule.send(supportEmail, tractorOwner.username, title, JSON.stringify(entity.message), supportEmail, null, null, appsEmail, function(emailErr, emailResult){\\n logger.info(\\\u0022New email sent\\\u0022);\\n\\n //Assign a unique id to that notification on the user\u0027s device\\n entity.id = tractor.TractorID \u002B entity.action;\\n logger.info(JSON.stringify(entity));\\n\\n //Send a push notification to that user \\n pushModule.sendMessage(user, JSON.stringify(savedNotification), function(pushErr, pushResult) {\\n logger.info(\\\u0022Push notification sent\\\u0022);\\n countNotificationsSaved\u002B\u002B;\\n canFinish(users);\\n });\\n });\\n });\\n } else {\\n //That tractor owner could not be found in the tractor owner collection\\n countNotificationsSaved\u002B\u002B;\\n canFinish(users);\\n }\\n });\\n });\\n } else {\\n //No users match the creator id in the creator ids array\\n finish();\\n } \\n });\\n });\\n }\\n \\n function buildNotification(alertData, user, tractorOwner, tractor, tractorOperator){\\n var alertType = alertData.alert_type;\\n var notification = {};\\n var lastActiveTime = dateToHumanReadable(tractor.LastActiveTime);\\n var alerts = JSON.parse(alertData.alerts);\\n modules.logger.info(\\\u0022Alerts stringify: \\\u0022\u002BJSON.stringify(alerts));\\n var actualValue, unit;\\n if (alerts \u0026\u0026 alerts[0] \u0026\u0026 alerts[0].actualValue){\\n var baseAlertDetails = alerts[0];\\n actualValue = baseAlertDetails.actualValue[0].value? Number(baseAlertDetails.actualValue[0].value).toFixed(2): 0;\\n unit = baseAlertDetails.actualValue[0].unit;\\n // modules.logger.info(\\\u0022Alerts property exists: \\\u0022\u002BactualValue\u002B\\\u0022, \\\u0022\u002Bunit);\\n }\\n notification._acl = user._acl;\\n notification.userId = user._acl.creator; \\n notification.tractorId = tractor.TractorID;\\n notification.operatorId = tractor.OperatorID;\\n notification.country = tractor.Country;\\n notification.street = tractor.Street;\\n notification.town = tractor.Town;\\n notification.tractorName = tractor.TractorName;\\n notification.type = \\\u0022alert\\\u0022; //TODO: Change to action on production\\n notification.read = false;\\n \\n if (alertType == \\\u0022deviceOffline\\\u0022){\\n notification.action = \\\u0022device_offline\\\u0022;\\n notification.message = \\\u0022Device Offline! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been offline since \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n \\n } else if(alertType == \\\u0022lowBattery\\\u0022){\\n notification.action = \\\u0022low_battery\\\u0022;\\n notification.message = \\\u0022Low Battery! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has low (\\\u0022\u002BactualValue\u002B\\\u0022 \\\u0022\u002Bunit\u002B\\\u0022) battery voltage. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country; \\n \\n } else if (alertType == \\\u0022stopThreshold\\\u0022){\\n notification.action = \\\u0022stop_threshold\\\u0022;\\n notification.message = \\\u0022Stopped! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has stopped. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n \\n } else if (alertType == \\\u0022unpluggedDevice\\\u0022){\\n notification.action = \\\u0022unplugged_device\\\u0022;\\n if (tractorOperator){\\n notification.message = \\\u0022Tampering alert! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been unplugged. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country\u002B\\\u0022 and operated by \\\u0022\u002BtractorOperator.OperatorName;\\n } else {\\n notification.message = \\\u0022Tampering alert! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been unplugged. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n }\\n } else {\\n notification.action = \\\u0022\\\u0022;\\n notification.message = \\\u0022\\\u0022;\\n }\\n var notificationToSave = modules.kinvey.entity(notification); \\n notificationToSave.extras = JSON.parse(JSON.stringify(notification));\\n notificationToSave.data = alertData;\\n\\n return notificationToSave;\\n }\\n \\n function getMessageTitle(alertType, tractor){\\n logger.info(\\\u0022MessageTitle: \\\u0022\u002BalertType);\\n if (alertType == \\\u0022device_offline\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) is offline\\\u0022;\\n } else if (alertType == \\\u0022low_battery\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has low battery\\\u0022; \\n } else if (alertType == \\\u0022stop_threshold\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has stopped\\\u0022;\\n } else if (alertType == \\\u0022unplugged_device\\\u0022){\\n return \\\u0022Critical! \\\u0022\u002Btractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) \\\u0022\u002B\\\u0022 has been tampered with\\\u0022;\\n } else {\\n return \\\u0022Tractor Alert\\\u0022;\\n }\\n }\\n\\n var dateToHumanReadable = function(date) {\\n return modules.moment(date).format(\\\u0022dddd Do MMMM YYYY LT\\\u0022) \u002B \\\u0022 UTC\\\u0022;\\n } \\n \\n function canFinish(users){\\n modules.logger.info(\\\u0022canFinish\\\u0022);\\n if (users.length == countNotificationsSaved){\\n response.complete();\\n }\\n }\\n\\n function finish(){\\n modules.logger.info(\u0027alert posted\u0027);\\n response.complete();\\n }\\n\\n var canReceiveNotification = function (tractorOwner, alertData){\\n var alertType = alertData.alert_type;\\n if (alertType == \\\u0022deviceOffline\\\u0022 \u0026\u0026 tractorOwner.tractorOfflineNotifications){\\n return true;\\n } else if (alertType == \\\u0022lowBattery\\\u0022 \u0026\u0026 tractorOwner.batteryAlertNotifications){\\n return true;\\n } else if (alertType == \\\u0022stopThreshold\\\u0022 \u0026\u0026 tractorOwner.tractorStoppedNotifications){\\n return true;\\n } else if (alertType == \\\u0022unpluggedDevice\\\u0022 \u0026\u0026 tractorOwner.deviceUnpluggedNotifications){\\n return true;\\n } else {\\n return false;\\n }\\n } \\n}\u0022\r\n },\r\n \u0022generateMultipleSubCodes\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var SubscriptionCode = modules.collectionAccess.collection(\u0027TrackerIds\u0027);\\n var serial = 700000; \\n var start = 0;\\n var count = 0;\\n var Log = modules.logger;\\n var end = 101;\\n var subscriptionCodeArray = [];\\n\\n for( var i=1; i\u003C= end;i\u002B\u002B )\\n {\\n try { \\n throw i\\n }\\n catch(ii){\\n var subscription = modules.kinvey.entity();\\n Log.info( ii );\\n \\t\\t\\tsubscription.tracker_id = serial\u002Bii;\\n \\t\\t\\tsubscriptionCodeArray.push( subscription.tracker_id );\\n \\t\\t\\tSubscriptionCode.save( subscription , function(err, done){\\n \\t\\tstart\u002B\u002B;\\n \\t\\tif( err ){\\n Log.info( \u0027There was an error \u0027 \u002B new Error(err).message );\\n response.complete();\\n\\t\\t\\t\\t}\\n \\tif( start === end ){\\n Log.info( \u0027Done creating the \u0027 \u002B start \u002B \u0027 subscription code\u0027 );\\n \\t response.body = subscriptionCodeArray;\\n \\t response.complete(); \\n }\\n \\n })\\n }\\n\\n }\\n \\n \\n}\u0022\r\n },\r\n \u0022UpdateOrgIdOfTestAccounts\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\tvar userIds = [\u002757755c856a0ce9903c9d3360\u0027,\u002757a32ef51286159774582f6e\u0027,\u0027584ab380a82816222bb6d235\u0027,\u0027595d1e186d7414261985b7ee\u0027,\u00275880ceab2775caa763da389e\u0027,\u00275880a40eb51efa0054073db5\u0027,\u0027588621ca4bf2860e29506232\u0027,\u002758ad707fd7f0c00f677d0386\u0027,\u002759675180aa94bb31662d0542\u0027,\u002759693c14d9e084db0ed13c61\u0027,\u002759693f125091bdd865488844\u0027,\u0027596c83e1aaff309d209d03bf\u0027,\u0027596c926c47ce5fb83e7bb60d\u0027,\u0027596e007222b97f07224e5148\u0027,\u00275970ad82e37359542c9224d5\u0027,\u00275970bb1fd9e084db0efeb585\u0027,\u00275971c91dd9e084db0e051899\u0027,\u00275978baeebb9a08bd5f973694\u0027,\u00275979b5bcb1a40d825f25c327\u0027,\u0027590dfe014cdaa8cc46317f95\u0027,\u0027590e3a5403c033054bb47296\u0027,\u002759119fd27f26c7f677dc1ec2\u0027,\u002759119fc666396a6a5a033b24\u0027,\u00275914835937af0ce271ce4781\u0027,\u0027591c480d7f26c7f677fffc75\u0027,\u002759244b26f6c276070450a95c\u0027,\u00275926b59b2d2abd0b48f5033c\u0027,\u00275c4acae51be4947c2a82c969\u0027,\u00275cc1b61c0d81981916435db1\u0027,\u00275926eaff412a52876283c3e9\u0027,\u0027594a57373148999f14c6fd19\u0027,\u0027594a5e61c6cc75e018a58728\u0027,\u0027594a683d95a78b6652defd99\u0027,\u0027594a6e2695a78b6652df067e\u0027,\u0027594a6eb8fb78dc8541572ab8\u0027,\u0027594a6ee43a75447a71e0b28d\u0027,\u0027594a6f07fdd3007a204b4b90\u0027,\u0027594a6f5797ff353725fd8579\u0027,\u0027594a6f6d97ff353725fd87b0\u0027,\u0027594a6f9497ff353725fd889f\u0027,\u0027594a6fa997ff353725fd88d7\u0027,\u0027594a6fd13148999f14c788f1\u0027,\u0027580f7b6296db64743e9bb919\u0027,\u0027574370f9d9f4789c35cb0338\u0027,\u002759649de496a2e4ce722cac50\u0027,\u002759692ec2aaff309d20887db7\u0027,\u0027597876aad9e084db0e2d9293\u0027,\u002759789e7522b97f07228e4a6a\u0027,\u0027597a108eed54c22e2dac70c2\u0027,\u0027597a10bb0068fddd63048e47\u0027,\u0027597a1129bc01340f44fe7a1f\u0027,\u0027597a15690068fddd6304aa37\u0027,\u0027597b20a5bc01340f44049d5d\u0027,\u0027597b6d63da41c985393d60e4\u0027,\u002759fc516562142d61702ba3f4\u0027,\u0027599597dd57a0ac6131e3a3a7\u0027,\u0027597f85f9223ed6cc64ee4d88\u0027,\u0027573e280d8b6dec5a0a19e8d3\u0027,\u00275981d7e3db498fb8698fc4bf\u0027,\u00275981deeea7e3a72002e18b57\u0027,\u002759832f73bac152c62b9e3e8b\u0027,\u002759833e4d4bf677be29ca95b3\u0027,\u0027598452896bcc6cd6286e9677\u0027,\u00275984646e2e7d8e5057f4c99f\u0027,\u002757d59a8ae442d5cd62fff18a\u0027,\u00275989dddda98d39d52ff6de94\u0027,\u0027598abc86a98d39d52ffbe64f\u0027,\u0027598b31b4a98d39d52ffe817b\u0027,\u0027598bad3f0a9cd91972d87289\u0027,\u002759918c22996ab5127d256fcd\u0027,\u00275991d0cdad79140d50e1a03f\u0027,\u00275994541f9e31abd55344c086\u0027,\u00275994b75f072de6d901c43366\u0027,\u00275995511abd51c9fe6c82dab1\u0027,\u0027599552bd2065fcf86c0e5fc0\u0027,\u0027599b229abd51c9fe6c95b2e0\u0027,\u002759a02bdaa86d05de4f82721f\u0027,\u002759aff545e884417c04ee20fd\u0027,\u002759aff91e68c53f4a04558583\u0027,\u002759affd086c3eec5704e9e34f\u0027,\u002759affe9a3044bb86044a7d81\u0027,\u002759afff3c6c3eec5704e9eba5\u0027,\u002759b0009c14ee5050048d59f2\u0027,\u002759b001821de368500469e67a\u0027,\u002759b001fe253ea95d04cff24a\u0027,\u002759b002ef68c53f4a0455acc2\u0027,\u002759b004c2e884417c04ee6329\u0027,\u002759b0064dacf229560435e891\u0027,\u002759b0083a253ea95d04d00a5c\u0027,\u002759b0098e68c53f4a0455c4f0\u0027,\u002759b00a516c3eec5704ea14b0\u0027,\u002759b00c026c3eec5704ea1b9c\u0027,\u002759b014dce3ca225a046ad714\u0027,\u002759b015abffa95a8c04e0b3ac\u0027,\u002759b0226968c53f4a04562725\u0027,\u002759b0be08acf2295604389bd2\u0027,\u002759b0bfa58be17b630433e69b\u0027,\u002759b140a6ffa95a8c04e535e3\u0027,\u002759b2b9d8253ea95d04db6677\u0027,\u002759b2bc1d3044bb8604560a7d\u0027,\u002759b2bccf14ee50500498d9d6\u0027,\u002759b2bd60829a57510498744f\u0027,\u002759b69fb13044bb86046cfb22\u0027,\u002759b9130e666de6dd686ec0d5\u0027,\u002759ba19772956d208391461fb\u0027,\u002759ba31991da0293553f57881\u0027,\u002759ba70021da0293553f6e6ca\u0027,\u002759ba72e8444b82101008de09\u0027,\u002759bbb4201da0293553fdb765\u0027,\u002759bbb67793fb1a4b3fbf657b\u0027,\u002759bbb5400d2d000e39497a89\u0027,\u002759bbb76970e1a5af611a5be5\u0027,\u002759bbec962956d208391e6738\u0027,\u002759bc2c36a4359e427b73a8e5\u0027,\u002759bfc6e53957270a10c9962b\u0027,\u002759c8da3e57f0e7db0439456f\u0027,\u002759c8e50b4b8e59835001b402\u0027,\u002759cbadacf2a357b87910d060\u0027,\u002759ccc6dcf2a357b879146caf\u0027,\u002759d371a077d93b4c45ea0bf9\u0027,\u002759db4eaaeac3a7be79a0dcd4\u0027,\u002759ddfe8b0316794906e37ab4\u0027,\u002759e60c91602ab435acc98f4f\u0027,\u002759e794b5c4e088352e955b33\u0027,\u002759e8b2cef471b935d4b30756\u0027,\u002759ea859ea1c6270c5aba3d07\u0027,\u002759f0b19f41189d6db7cb8152\u0027,\u002759f0e330dc32af6c0e81c891\u0027,\u002759f72dcf54d7f86185c1c38b\u0027,\u002759f87cd822007259c01ec633\u0027,\u002759f87d43a7be19616aa0729b\u0027,\u002759fb0fd68275075ad4238eaa\u0027,\u00275a006e7762142d617038da14\u0027,\u00275a1423574fdd9839b3d91b03\u0027,\u00275a2e1bd8ccaefc7c9871f9c0\u0027,\u00275a621b6cbb0c8d08f577c1c9\u0027,\u00275a780db3272e722e375b34a0\u0027,\u00275a81a40e70545c51289cb8bd\u0027,\u00275a8daa17dace1e70f4fd29e5\u0027,\u00275a9807a6aadf852d1e3611f5\u0027,\u00275ab3ee0b0265ee1eeef72913\u0027,\u00275abb684e34fcd45ca018000d\u0027,\u00275ac8cdc66c6c072f1ab37283\u0027,\u00275b0c1e7ddc7f736e7b2c52d5\u0027,\u00275b0d37c034d5081b1a182c54\u0027,\u00275b1a6e32b64219456096fd62\u0027,\u00275b0ea9d06ea97e7e0d5aab72\u0027,\u00275b2b75acec708e78196fb86a\u0027,\u00275b2fe92bbe3a4735a9703c8a\u0027,\u00275b3ba2d77f20c939e41c61a7\u0027,\u0027590ba4790bda67ce2a9e242f\u0027,\u00275a5f722ebb9512014010d057\u0027,\u0027597f2fbc06bc90625230fb14\u0027,\u00275981f7eddb498fb869907ad6\u0027,\u0027598441c5e0dad61876b95ebe\u0027,\u0027599453d6bce993cf532f8729\u0027,\u002759b77da5acf22956045ccf52\u0027,\u002759b8fc9249665b910c54cdb3\u0027,\u002759bbbad370e1a5af611a6f1a\u0027,\u002759bbbca893fb1a4b3fbf8886\u0027,\u002759bbbdd932e59719494a55c9\u0027,\u002759bbcc54a543fc0932a86c49\u0027,\u002759cb82e783fa92e10440805d\u0027,\u002759e7712d998e2b587472f3d2\u0027,\u002759edbeee07d30f0bfc21ba68\u0027,\u00275a006b28a1fc7e0799e0fa30\u0027,\u00275a17dda9ee5e4a7959752e97\u0027,\u00275a4e0c6ef39f437e698725e4\u0027,\u00275a5f7b6d50518b24649c8dd5\u0027,\u00275a6078d46915eb0706c1c0dd\u0027,\u00275a827b28c6265606b5eae28a\u0027,\u00275a8e5db1cce302426fc33930\u0027,\u00275a9ece06aadf852d1e4a49b0\u0027,\u00275aa25e5422764d7bdbd9297b\u0027,\u00275abebfcfc92757629c9501f8\u0027,\u00275abedbc415e7187c15c678a9\u0027,\u00275adf331e4c356779d5336e8b\u0027,\u00275b0e92a49e8a967e08900288\u0027,\u00275b801fb4e0738f05bfb750ef\u0027,\u00275b802cc89789c1262f7b0fe2\u0027,\u00275b8afa5e21c8c67a83d62451\u0027,\u00275c5c40cb45e75e68f283a8d4\u0027,\u00275c5c5774c892215f50c7d315\u0027,\u00275c684fa9c341455f55b551db\u0027,\u00275ca8372186f15650735548ac\u0027,\u00275cb813d815266c5a4df92397\u0027,\u0027598ad07cbac152c62bcfb83a\u0027,\u00275af40bd426860c399aba621b\u0027,\u00275c040de2a8df1f4ec30f70d9\u0027,\u00275c08be0e8a7e2a7e4632f1c3\u0027,\u00275c0a99d7e7fad106f6c370a7\u0027,\u00275c5a8e941be4947c2af2ddd2\u0027,\u00275a8831637ab19c0d42abd747\u0027,\u00275c5bc107c892215f50c3b6ea\u0027,\u00275c828bce0d5f9d0c944e5fee\u0027,\u00275cc1b2fd21125a1911533f04\u0027,\u0027598ad681bac152c62bcfd9ef\u0027,\u002759c8d84f8c59558e131dd898\u0027];\\n var userCol = modules.collectionAccess.collection(\u0027user\u0027);\\n var tractorOwnerCol = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n var bookingAgentCol = modules.collectionAccess.collection(\u0027BookingAgents\u0027);\\n \\n var doc = {orgID: \\\u0022111\\\u0022};\\n bookingAgentCol.update({\\\u0022_acl.creator\\\u0022: {$in: userIds}}, {$set: doc}, {multi: true, upsert: false}, function(err){\\n modules.logger.info(\\\u0022Docs Updated\\\u0022);\\n response.complete();\\n });\\n}\u0022\r\n },\r\n \u0022PostDataToAwsBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\n var Model = modules.collectionAccess.collection(\u0027FarmMeasures\u0027);\\n var httpClient = modules.request;\\n var aws_backend_syncronize_url = \u0027https://cloud.hellotractor.com/api/v1/farmMeasures\u0027;\\n var count = 0;\\n var skip = 0;\\n var modelCount = 0;\\n var log = modules.logger;\\n var Logger = modules.collectionAccess.collection(\u0027Logger\u0027);\\n \\n var makePostRequest = function(data){\\n httpClient.post({\\n uri: aws_backend_syncronize_url,\\n method: \u0027POST\u0027,\\n json:data\\n },function(err, res, body){\\n \\t count\u002B\u002B;\\n if( count == modelCount ){\\n response.complete();\\n modules.logger.info(\\\u0022done\\\u0022);\\n }\\n })\\n\\n }\\n \\n \\n Logger.find({logID:998}, function(err, val){\\n \\n \\t\\tmodules.logger.info(\\\u0022The log count is \\\u0022 \u002B val[0].Message );\\n Model.find({},{\\\u0022limit\\\u0022:1000, \\\u0022skip\\\u0022: val[0].Message }, function(err, docs){\\n if ( docs.length === 0 ) {\\n modules.logger.info(\\\u0022successfully posted all farm measures\\\u0022);\\n response.complete();\\n }\\n \\t\\t \\tmodelCount = docs.length; \\n \\n \\tdocs.forEach( function(doc){\\n \\tmakePostRequest(doc);\\n count\u002B\u002B;\\n \\n if( count == modelCount ){\\n Logger.update({logID:998}, {$set:{\\\u0022Message\\\u0022: val[0].Message\u002B=400 }}, function(err, updated){\\n log.info(\\\u0022successfully updated log count\\\u0022);\\n response.complete();\\n });\\n \\t }\\n \\n \\t});\\n \\n });\\n \\n })\\n \\n \\n }\\n\\n \\n\\n\\n\\n\u0022\r\n },\r\n \u0022syncUserProfileImageUrl\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Model = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n var http = modules.request;\\n var filesHash = {};\\n var uri = \u0027https://\u0027 \u002B request.headers.host \u002B \u0027/blob/\u0027 \u002B modules.backendContext.getAppKey();\\n var headers = {\\n \\t \\\u0022Authorization\\\u0022: request.headers.authorization\\n\\t}\\n\\n http.get({\\n uri:uri,\\n headers: headers\\n }, function(error, res, body){\\n if(error){\\n modules.logger.info( error.message );\\n response.complete(400);\\n }\\n \\t\\n var count = 0;\\n var images = JSON.parse(body);\\n for(var i=0; i \u003C images.length;i\u002B\u002B){\\n filesHash[images[i]._id] = images[i]._downloadURL;\\n count\u002B\u002B;\\n if( count === images.length){\\n \\n Model.find({}, function(err, docs){\\n var savedCount = 0;\\n if( err ){\\n modules.logger.info(\\\u0022error occured\\\u0022 \u002B err.message);\\n response.complete(400);\\n }\\n \\n for(var i=0; i\u003Cdocs.length;i\u002B\u002B){\\n \\n if( docs[i].ProfileImage \u0026\u0026 docs[i].ProfileImage._id ){\\n \\tif( filesHash[docs[i].ProfileImage._id] ){\\n Model.update({_id: docs[i]._id}, {$set:{profile_image_url: filesHash[docs[i].ProfileImage._id]}}, \\n function(error, updated){\\n if( error ){\\n modules.logger.info(\\\u0022error updating doc\\\u0022);\\n response.complete(400);\\n }\\n \\t\\tmodules.logger.info(\\\u0022successfully updated doc profile_image_url\\\u0022);\\n \\t\\tsavedCount\u002B\u002B;\\n \\tif( savedCount === docs.length){\\n modules.logger.info(\\\u0022Done updating\\\u0022);\\n response.complete(200);\\n }\\n \\t\\t\\n })\\n }\\n else {\\n \\t\\tsavedCount\u002B\u002B;\\n \\tif( savedCount === docs.length){\\n modules.logger.info(\\\u0022Done updating\\\u0022);\\n response.complete(200);\\n } \\n }\\n }\\n else {\\n savedCount\u002B\u002B;\\n \\tif( savedCount === docs.length){\\n modules.logger.info(\\\u0022Done updating\\\u0022);\\n response.complete(200);\\n }\\n }\\n }\\n \\n }) \\n \\n }\\n\\n }\\n\\n });\\n\\n}\u0022\r\n },\r\n \u0022PostBookingsDataToBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\n var Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n var httpClient = modules.request;\\n var aws_backend_syncronize_url = \u0027https://cloud.hellotractor.com/api/v1/synchronize/\u0027;\\n \\n var count = 0;\\n var modelCount = 0;\\n var index = 0;\\n var Logger = modules.logger;\\n \\n var makePostRequest = function(data){\\n httpClient.postAsync({\\n uri: aws_backend_syncronize_url,\\n method: \u0027POST\u0027,\\n json:data\\n }).then( \\n \\t\\tfunction(res, body){\\n count\u002B\u002B;\\n if( count == modelCount ){\\n response.complete();\\n }\\n },function(error){\\n if( error ){\\n Logger.info(\\\u0022An error occured\\\u0022 \u002B new Error(error).message );\\n response.complete()\\n\\n }\\n })\\n \\n };\\n \\n// var postAllBookingsInChunk = function(indexCount){\\n// var bookingsCount=3318, limit=200, skip=0;\\n// if( index \u003E 0 ){\\n// skip\u002B= limit;\\n// }\\n \\n// bookingsCount-= limit;\\n// if( bookingsCount \u003C 0 ){\\n// return;\\n// }\\n \\n// Booking.find({},{\\\u0022limit\\\u0022: limit, \\\u0022skip\\\u0022: skip}, function(err, docs){\\n// modelCount = docs.length; \\n// var booking_agent;\\n// docs.forEach( function(doc){\\n// if( doc.bookingAgentData != null ){\\n// if( booking_agent = JSON.parse(doc.bookingAgentData) ){\\n// doc.booking_agent_name = booking_agent.name ? booking_agent.name : \\\u0022\\\u0022;\\n// doc.booking_agent_phone = booking_agent.phone ? booking_agent.phone : \\\u0022\\\u0022 ;\\n// doc.booking_agent_latitude = booking_agent.latitude ? booking_agent.latitude :\\\u0022\\\u0022 ;\\n// doc.booking_agent_longitude = booking_agent.longitude ? booking_agent.longitude : \\\u0022\\\u0022;\\n// doc.booking_agent_profile_image_url = booking_agent.profileImageURL ? booking_agent.profileImageURL :\\\u0022\\\u0022;\\n// }\\n// }\\n \\n// makePostRequest(doc);\\n \\n// });\\n// });\\n \\n// postAllBookingsInChunk(indexCount\u002B1);\\n \\n// }\\n \\n\\n Booking.find({},{\\\u0022limit\\\u0022: 200, \\\u0022skip\\\u0022:3357}, function(err, docs){\\n modelCount = docs.length; \\n var booking_agent;\\n docs.forEach( function(doc){\\n if( doc.bookingAgentData != null ){\\n if( booking_agent = JSON.parse(doc.bookingAgentData) ){\\n doc.booking_agent_name = booking_agent.name ? booking_agent.name : \\\u0022\\\u0022;\\n doc.booking_agent_phone = booking_agent.phone ? booking_agent.phone : \\\u0022\\\u0022 ;\\n doc.booking_agent_latitude = booking_agent.latitude ? booking_agent.latitude :\\\u0022\\\u0022 ;\\n doc.booking_agent_longitude = booking_agent.longitude ? booking_agent.longitude : \\\u0022\\\u0022;\\n doc.booking_agent_profile_image_url = booking_agent.profileImageURL ? booking_agent.profileImageURL :\\\u0022\\\u0022;\\n }\\n }\\n \\n makePostRequest(doc);\\n \\n });\\n });\\n \\n}\\n\u0022\r\n },\r\n \u0022HandleTractorFuelDataPostedFromAWSBackend\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n modules.logger.info(\u0027fuel data posted\u0027);\\n}\u0022\r\n },\r\n \u0022ComputeTempFuelVolumes\u0022 : {\r\n \u0022code\u0022 : \u0022//Retrieves the current fuel raw value of recently updated tractors, \\n//converts the raw value to fuel litres and fuel volume and updates\\n//the PrevTempFuelData field\\n//Created by Abdulmajid on 2nd July 2019, Last Update: 24th February 2020\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var fuelCalibrationResultsCol = modules.collectionAccess.collection(\\\u0022FuelCalibrationResults\\\u0022);\\n var logCol = modules.collectionAccess.collection(\\\u0022Logs\\\u0022);\\n var dateTimeAgo = modules.moment.utc().subtract(1, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var dateTimeAgoThirtyMins = modules.moment.utc().subtract(30, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022); \\n var countTractorsToUpdate = 0;\\n var log = modules.logger;\\n\\n var tractorDetailQuery = {\\n $and: [\\n {LastActiveTime: {$gt: dateTimeAgoThirtyMins}},\\n {UpdatedAt: {$gt: dateTimeAgo}}\\n ]\\n };\\n var now = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var log = modules.logger;\\n\\n tractorDetailCol.find(tractorDetailQuery, function(tractorErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0){\\n countTractorsToUpdate = tractorDetailList.length;\\n log.info(\\\u0022Tractors were found: \\\u0022\u002BcountTractorsToUpdate);\\n fetchFuelCalibrationResults(tractorDetailList);\\n } else {\\n log.info(\\\u0022No tractors found meeting the query parameters, \\\u0022\u002BtractorErr);\\n shouldFinish();\\n }\\n });\\n\\n var fetchFuelCalibrationResults = function(tractorDetailList){\\n // Create an array of all the tractor model id\u0027s\\n var tractorModelIdArr = tractorDetailList.reduce(function(acc, tractor, index){\\n if (tractor.TractorModelID) acc.push(tractor.TractorModelID);\\n return acc;\\n }, []);\\n\\n log.info(\\\u0022Tractor model id array created, \\\u0022\u002BJSON.stringify(tractorModelIdArr));\\n //Retrieve calibration results for tractor models in array and map each result to tractor model\\n fuelCalibrationResultsCol.find({tractorModelId: {$in: tractorModelIdArr}}, function(fuelCalibrationErr, fuelCalibrationList){\\n if (fuelCalibrationList \u0026\u0026 fuelCalibrationList.length \u003E 0){\\n var tractorModelCalibrationMap = fuelCalibrationList.reduce(function(acc, fuelCalibration, index){\\n acc[fuelCalibration.tractorModelId] = fuelCalibration;\\n return acc;\\n }, {});\\n\\n log.info(\\\u0022About to compute fuel volumes for all tractors, \\\u0022\u002BJSON.stringify(tractorModelCalibrationMap));\\n computeFuelVolumesForTractors(tractorDetailList, tractorModelCalibrationMap);\\n } else {\\n log.info(\\\u0022Fuel calibration result not found for tractor model array: \\\u0022\u002BJSON.stringify(tractorModelIdArr))\\n response.complete()\\n }\\n });\\n }\\n\\n var computeFuelVolumesForTractors = function(tractorDetailList, tractorModelCalibrationMap){\\n tractorDetailList.forEach(function(tractorDetail){\\n if (tractorDetail.TractorModelID \u0026\u0026 tractorDetail.FuelRawValue){\\n var tempFuelVols = computeTempFuelFolumeForTractor(tractorDetail, tractorModelCalibrationMap[tractorDetail.TractorModelID]);\\n log.info(\\\u0022Update prev temp fuel volumes: \\\u0022\u002BJSON.stringify(tempFuelVols));\\n var prevTempFuelData = {PrevTempFuelData: tempFuelVols};\\n tractorDetailCol.update({TractorID: tractorDetail.TractorID}, {$set: prevTempFuelData}, {upsert: false, multi: true}, function(updateErr, updateDoc){\\n log.info(\\\u0022Tractor ID:- \\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022 updated successfully - \\\u0022\u002BJSON.stringify(tempFuelVols));\\n updateFuelLog(tractorDetail, prevTempFuelData);\\n }); \\n\\n } else {\\n log.info(\\\u0022Temp fuel volumes is empty: \\\u0022\u002BtractorDetail.TractorID);\\n countTractorsToUpdate--;\\n shouldFinish(); \\n }\\n });\\n }\\n\\n var updateFuelLog = function (tractorDetail, prevTempFuelData){\\n var fuelLevel = Number(tractorDetail.FuelVolume?(tractorDetail.FuelVolume).toFixed(0):0);\\n \\tvar fuelLitres = Number(tractorDetail.FuelLitres?(tractorDetail.FuelLitres).toFixed(0):0);\\n var operatorId = tractorDetail.OperatorID;\\n\\n var fuelHistory = {_acl: tractorDetail._acl, TractorID: tractorDetail.TractorID, FuelLevel: fuelLevel, FuelLitres: fuelLitres,\\n CreatedAt: now, UpdatedAt: now, OperatorID: operatorId, TractorAddress: tractorDetail.Street\u002B\\\u0022, \\\u0022\u002BtractorDetail.Town\u002B\\\u0022, \\\u0022\u002BtractorDetail.Country,\\n TractorName: tractorDetail.TractorName, TractorModelID: tractorDetail.TractorModelID, FuelRawValue: tractorDetail.FuelRawValue,\\n ImplementsAttached: tractorDetail.ImplementsAttached\\n };\\n\\n fuelHistory = modules.kinvey.entity(fuelHistory);\\n var fuelLog = modules.kinvey.entity({\\n message: fuelHistory,\\n type: \\\u0022fuel_update\\\u0022,\\n extras: prevTempFuelData\\n });\\n\\n logCol.save(fuelLog, function(fuelLogErr, fuelLog){\\n modules.logger.info(\\\u0022Fuel log saved for \\\u0022\u002BtractorDetail.TractorID);\\n countTractorsToUpdate--;\\n shouldFinish();\\n });\\n } \\n \\n var shouldFinish = function (){\\n if (countTractorsToUpdate \u003C= 0){\\n log.info(\\\u0022Compute temp fuel volumes finished successfully\\\u0022);\\n response.complete();\\n }\\n } \\n}\\n\\nfunction computeTempFuelFolumeForTractor(tractorDetail, tractorCalibration){\\n var fuelRawValue = tractorDetail.FuelRawValue; \\n var lastActiveTime = tractorDetail.LastActiveTime; \\n\\n var prevTempFuelData = tractorDetail.PrevTempFuelData? tractorDetail.PrevTempFuelData: [];\\n var minMeasurableRawValue = tractorCalibration.MinMeasurableRawValue;\\n var maxMeasurableRawValue = tractorCalibration.MaxMeasurableRawValue;\\n var minMeasurableLitres = tractorCalibration.MinMeasurableLitres;\\n var maxMeasurableLitres = tractorCalibration.MaxMeasurableLitres;\\n var reserveLitres = tractorCalibration.ReserveLitres;\\n var maxLitres = tractorCalibration.MaxLitres;\\n var intercept = tractorCalibration.intercept;\\n var gradient = tractorCalibration.gradient;\\n\\n var fuelLitres;\\n if (fuelRawValue \u003C maxMeasurableRawValue \u0026\u0026 fuelRawValue \u003E minMeasurableRawValue){\\n fuelLitres = (gradient * fuelRawValue) \u002B intercept;\\n fuelLitres = fuelLitres \u003E maxMeasurableLitres? maxMeasurableLitres: fuelLitres \u003C minMeasurableLitres? minMeasurableLitres: fuelLitres;\\n } else {\\n if (gradient \u003C 0){ //Negative graph of values\\n fuelLitres = fuelRawValue \u003E= maxMeasurableRawValue? minMeasurableLitres: maxMeasurableLitres;\\n } else { //Positive graph of values\\n fuelLitres = fuelRawValue \u003E= maxMeasurableRawValue? maxMeasurableLitres: minMeasurableLitres;\\n }\\n }\\n\\n var fuelData = {};\\n var fuelVolume = fuelLitres/maxMeasurableLitres * 100.0;\\n fuelData.FuelLitres = parseFloat(fuelLitres.toFixed(0));\\n fuelData.FuelVolume = parseFloat(fuelVolume.toFixed(0));\\n fuelData.FuelRawValue = fuelRawValue;\\n fuelData.LastActiveTime = lastActiveTime;\\n prevTempFuelData.push(fuelData);\\n\\n return prevTempFuelData;\\n}\u0022\r\n },\r\n \u0022PopulateFuelHistoryAndSendAlert\u0022 : {\r\n \u0022code\u0022 : \u0022//For all new updated tractors, extracts the PrevTempFuelData, filters the noise \\n//from the group of fuel data and saves the data in FuelHistory\\n//Created by Abdulmajid on 2nd July 2019, Updated: 17th Feb 2020\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var tractorOperatorCol = modules.collectionAccess.collection(\\\u0022TractorOperator\\\u0022); \\n var notificationCol = modules.collectionAccess.collection(\u0027Notification\u0027);\\n var userCol = modules.collectionAccess.collection(\u0027user\u0027);\\n var tractorOwnerCol = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n var fuelHistoryCol = modules.collectionAccess.collection(\u0027FuelHistory\u0027);\\n var userAccountsCol = modules.collectionAccess.collection(\u0027UserAccounts\u0027);\\n\\n //Notification modules\\n var pushModule = modules.push;\\n var emailModule = modules.email;\\n\\n var today = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var dateTimeAgo = modules.moment.utc().subtract(2, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var countTractorsToUpdate = 0;\\n// var tractorDetailQuery = {LastActiveTime: {$gt: dateTimeAgo}};\\n \\tvar dateTimeAgoThirtyMins = modules.moment.utc().subtract(30, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n \\n var tractorDetailQuery = {\\n $and: [\\n {LastActiveTime: {$gt: dateTimeAgoThirtyMins}},\\n {UpdatedAt: {$gt: dateTimeAgo}}\\n ]\\n };\\n \\n var hellotractorSupport = \u0027Hello Tractor \u003Csupport@hellotractor.com\u003E\u0027;\\n //var dummyEmail = \u0027abdulmajid@hellotractor.com\u0027;\\n var log = modules.logger;\\n \\n var n = 5; //Smoothning threshold\\n var outlierThresh = 20; //Outliers over 20% are not tolorated\\n var tractorCreatorIds = [];\\n var tractorOperatorIdOperatorMap = {};\\n\\n //Fuel change constants\\n var fuelChangeType = {\\n NORMAL: \\\u0022Normal\\\u0022,\\n DROP: \\\u0022Drop\\\u0022,\\n RISE: \\\u0022Rise\\\u0022\\n };\\n\\n //Find all recently updated tractors within the last 5 minutes\\n tractorDetailCol.find(tractorDetailQuery, function(tractorErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0){\\n countTractorsToUpdate = tractorDetailList.length;\\n modules.logger.info(\\\u0022Count Tractors Updated: \\\u0022\u002BcountTractorsToUpdate);\\n tractorDetailList.forEach(function(tractorDetail){\\n tractorCreatorIds.push(tractorDetail._acl.creator);\\n });\\n\\n\\n //TODO: Add fiel name to query and refactor map to be OperatorID to tractorOperator\\n tractorOperatorCol.find({\\\u0022_acl.creator\\\u0022: {$in: tractorCreatorIds}}, function(tractorOperatorErr, tractorOperatorList){\\n if (tractorOperatorList \u0026\u0026 tractorOperatorList.length \u003E 0){\\n tractorOperatorList.forEach(function(tractorOperator){\\n tractorOperatorIdOperatorMap[tractorOperator.OperatorID] = tractorOperator;\\n });\\n }\\n\\n tractorDetailList.forEach(function(tractorDetail){\\n var fuelData = getSmoothenedFuelData(tractorDetail);\\n if (fuelData != null){\\n //Go ahead to: \\n // 1. Update the FuelVolume and FuelLitres on TractorDetail and save fuelData to FuelHistory\\n // 2. Compare the initial FuelVolume and NewFuelVolume, an send alert for increase or decrease by 20%,\\n // 3. Reset the PrevTempFuelData array to empty\\n alertUserOfSuddenChangeAndUpdateTractor(tractorDetail, fuelData);\\n\\n } else {\\n log.info(\\\u0022Filtered fuel data is null\\\u0022);\\n countTractorsToUpdate--;\\n shouldFinish();\\n }\\n });\\n });\\n\\n } else {\\n log.info(\\\u0022Tractors not found\\\u0022);\\n shouldFinish();\\n }\\n });\\n\\n var getSmoothenedFuelData = function (tractorDetail){\\n var tempFuelValues = tractorDetail.PrevTempFuelData;\\n if (tempFuelValues \u0026\u0026 tempFuelValues.length \u003E= n){\\n var count = tempFuelValues.length;\\n var totalFuelLitres = 0;\\n var averageFuelLitres = 0;\\n \\n tempFuelValues.forEach(function(fuelValue){\\n totalFuelLitres \u002B= fuelValue.FuelLitres;\\n });\\n \\n averageFuelLitres = totalFuelLitres/count;\\n var newTempFuelValues = tempFuelValues;\\n\\n tempFuelValues.forEach(function(fuelValue){\\n var percentChange = Math.abs((fuelValue.FuelLitres - averageFuelLitres)/averageFuelLitres * 100);\\n if (percentChange \u003E outlierThresh \u0026\u0026 newTempFuelValues.length \u003E 1){\\n newTempFuelValues.pop(fuelValue);\\n }\\n });\\n \\n var newTotalFuelLitres = 0; \\n var newTotalFuelVolume = 0;\\n var newTotalRawValue = 0;\\n\\n newTempFuelValues.forEach(function(fuelValue){\\n newTotalFuelLitres \u002B= fuelValue.FuelLitres;\\n newTotalFuelVolume \u002B= fuelValue.FuelVolume;\\n newTotalRawValue \u002B= fuelValue.FuelRawValue;\\n });\\n \\n count = newTempFuelValues.length;\\n var newAverageFuelVolume = newTotalFuelVolume/count;\\n var newAverageFuelLitres = newTotalFuelLitres/count;\\n var newAverageFuelRawValue = newTotalRawValue/count;\\n \\n var data = {\\n FuelLitres: parseFloat(newAverageFuelLitres.toFixed(0)),\\n FuelVolume: parseFloat(newAverageFuelVolume.toFixed(0)),\\n FuelRawValue: parseFloat(newAverageFuelRawValue.toFixed(0))\\n };\\n \\n return data;\\n }\\n \\n return;\\n }\\n\\n /**\\n * Initiates a push notification when there\u0027s a sudden change in tractor fuel level\\n * @param {*} tractorDetail The tractor whose fuel level has changed\\n * @param {*} newFuelData \\n */\\n var alertUserOfSuddenChangeAndUpdateTractor = function (tractorDetail, newFuelData){\\n var initFuelVol = tractorDetail.FuelVolume, finalFuelVol = newFuelData.FuelVolume;\\n var fuelChange = initFuelVol - finalFuelVol;\\n //Notifications are sent when the fuel volume (%) changes by more than 15%\\n log.info(\\\u0022Fuel Diff: \\\u0022\u002BfuelChange);\\n\\n if (finalFuelVol != 0 \u0026\u0026 finalFuelVol != 100){\\n if (fuelChange \u003E 10 \u0026\u0026 tractorDetail.Speed \u003C= 3){\\n //There was a sudden drop in fuel level while tractor is idle (travelling less than 3m/s)\\n log.info(\\\u0022Fuel data dropped\\\u0022);\\n findUserAndSendNotification(tractorDetail, initFuelVol, finalFuelVol, newFuelData, fuelChangeType.DROP);\\n } else if (fuelChange \u003C -10 \u0026\u0026 tractorDetail.Speed \u003C= 3){\\n //There was a sudden increase in fuel level while tractor is idle (travelling less than 3m/s)\\n log.info(\\\u0022Fuel data rose\\\u0022);\\n findUserAndSendNotification(tractorDetail, initFuelVol, finalFuelVol, newFuelData, fuelChangeType.RISE);\\n } else {\\n //Normal change in fuel level: No notification required, just update tractor\\n log.info(\\\u0022Fuel data changed normally 1\\\u0022);\\n updateTractorFuelVolume(tractorDetail, newFuelData);\\n }\\n } else {\\n //Normal change in fuel level: No notification required, just update tractor\\n log.info(\\\u0022Fuel data changed normally 2\\\u0022);\\n updateTractorFuelVolume(tractorDetail, newFuelData); \\n }\\n }\\n\\n //Builds the notification to be sent (with a message of rise or drop) to the user\\n var buildNotificaton = function (type, tractorDetail, user, tractorOwner, initFuelVol, finalFuelVol, newFuelData){\\n\\n log.info(\\\u0022Tractor Owner User id: \\\u0022\u002Buser._acl.creator);\\n\\n var notificationMessage;\\n var action;\\n if (type == fuelChangeType.DROP){\\n notificationMessage = tractorDetail.TractorName \u002B \\\u0022 (\\\u0022 \u002B tractorDetail.TractorID \u002B \\\u0022) has a sudden drop in fuel from \\\u0022\u002BinitFuelVol\u002B\\\u0022% to \\\u0022\u002BfinalFuelVol\u002B\\\u0022%\\\u0022;\\n action = \\\u0022fuel_change_drop\\\u0022;\\n } else {\\n notificationMessage = tractorDetail.TractorName \u002B \\\u0022 (\\\u0022 \u002B tractorDetail.TractorID \u002B \\\u0022) has a sudden rise in fuel from \\\u0022\u002BinitFuelVol\u002B\\\u0022% to \\\u0022\u002BfinalFuelVol\u002B\\\u0022%\\\u0022;\\n action = \\\u0022fuel_change_rise\\\u0022;\\n }\\n\\n var notification = {\\n _acl: user._acl,\\n userId: user._acl.creator,\\n tractorId: tractorDetail.TractorID,\\n operatorId: tractorDetail.OperatorID,\\n operatorId: tractorDetail.OperatorID,\\n country: tractorDetail.Country,\\n street: tractorDetail.Street,\\n town: tractorDetail.Town,\\n tractorName: tractorDetail.TractorName,\\n read: false,\\n message: notificationMessage,\\n type: \u0027alert\u0027,\\n action: action,\\n tractorModelID: tractorDetail.TractorModelID,\\n engineHours: tractorDetail.EngineHours,\\n data: JSON.parse(JSON.stringify(newFuelData))\\n };\\n\\n var notificationToSave = modules.kinvey.entity(notification); \\n notificationToSave.extras = JSON.parse(JSON.stringify(notification)); \\n return notificationToSave;\\n }\\n\\n\\n /**\\n * Sends a push notification and/or email to the creator of that tractor\\n * @param {*} tractorDetail The tractor whose fuel level changed beyond 20%\\n * @param {*} initFuelVol The previous fuel volume (%)\\n * @param {*} finalFuelVol The new fuel volume (%)\\n * @param {*} newFuelData The fuel information to be updated: FuelVolume and FuelLitres\\n * @param {*} fuelChangeType The type of change that occured: Can be Normal, Rise or Drop\\n */\\n var findUserAndSendNotification = function (tractorDetail, initFuelVol, finalFuelVol, newFuelData, fuelChangeType){\\n userCol.findOne({\\\u0022_acl.creator\\\u0022: tractorDetail._acl.creator}, function(userErr, user){\\n if (user){\\n log.info(\\\u0022User found \\\u0022\u002BJSON.stringify(user));\\n tractorOwnerCol.findOne({\\\u0022_acl.creator\\\u0022: tractorDetail._acl.creator}, function(tractorOwnerErr, tractorOwner){\\n if (tractorOwner){\\n log.info(\\\u0022Tractor owner found\\\u0022);\\n var notification = buildNotificaton(fuelChangeType, tractorDetail, user, tractorOwner, initFuelVol, finalFuelVol, newFuelData);\\n notificationCol.save(notification, function(notificationErr, notificationSaved){\\n notificationSaved.id = tractorDetail.TractorID\u002Buser._id\u002B\\\u0022FUELCHANGE\\\u0022;\\n log.info(\\\u0022Notification saved\\\u0022);\\n pushModule.sendMessage(user, JSON.stringify(notificationSaved), function(pushErr, pushResult) {\\n log.info(\\\u0022Push notification sent to \\\u0022\u002Buser.username);\\n if (tractorOwner.emailNotifications){\\n log.info(\\\u0022Email notifications true\\\u0022);\\n var emailTitle = notificationSaved.message;\\n var emailBody = notificationSaved.message;\\n // JSON.stringify(tractorOwner.username) //TODO: Replace dummyEmail in production\\n emailModule.send(hellotractorSupport, JSON.stringify(tractorOwner.username), emailTitle, emailBody, function(emailErr, emailResult) {\\n log.info(\\\u0022Email notifications sent to \\\u0022\u002BJSON.stringify(tractorOwner.username));\\n updateTractorFuelVolume(tractorDetail, newFuelData);\\n });\\n } else {\\n log.info(\\\u0022Email notifications false\\\u0022);\\n updateTractorFuelVolume(tractorDetail, newFuelData);\\n }\\n }); \\n });\\n } else {\\n log.info(\\\u0022Tractor owner not found \\\u0022\u002BtractorDetail._acl.creator);\\n updateTractorFuelVolume(tractorDetail, newFuelData);\\n }\\n });\\n \\n } else {\\n log.info(\\\u0022User not found\\\u0022);\\n updateTractorFuelVolume(tractorDetail, newFuelData);\\n }\\n });\\n }\\n\\n //Updates the TractorDetail collection with the newest fuel information (FuelVolume and FuelLitres)\\n var updateTractorFuelVolume = function (tractorDetail, newFuelData){\\n var fuelData = {\\n FuelVolume: newFuelData.FuelVolume,\\n FuelLitres: newFuelData.FuelLitres,\\n PrevTempFuelData: []\\n }; //Reset prev temp fuel data and update fuel volume and fuel litres\\n \\n tractorDetailCol.update({TractorID: tractorDetail.TractorID}, {$set: fuelData}, {upsert: false}, function(updateErr, updateData){\\n log.info(\\\u0022Tractor \\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022 updated successfully: \\\u0022\u002BJSON.stringify(newFuelData));\\n updateFuelHistoryCol(tractorDetail, fuelData, newFuelData);\\n });\\n }\\n\\n\\n var updateFuelHistoryCol = function (tractorDetail, fuelData, newFuelData){\\n var fuelLevel = parseFloat(fuelData.FuelVolume?(fuelData.FuelVolume).toFixed(0):0);\\n \\tvar fuelLitres = parseFloat(fuelData.FuelLitres?(fuelData.FuelLitres).toFixed(0):0);\\n var tractorOperator = tractorOperatorIdOperatorMap[tractorDetail.OperatorID];\\n var operatorName = tractorOperator? tractorOperator.OperatorName:\\\u0022Operator Unassigned\\\u0022;\\n var operatorId = tractorOperator? tractorOperator.OperatorID:null;\\n\\n var fuelHistory = {\\n _acl: tractorDetail._acl,\\n TractorID: tractorDetail.TractorID,\\n FuelLevel: fuelLevel,\\n FuelLitres: fuelLitres,\\n CreatedAt: today,\\n UpdatedAt: today,\\n OperatorName: operatorName,\\n OperatorID: operatorId,\\n \\tTractorAddress: buildTractorAddress(tractorDetail.Street, tractorDetail.Town, tractorDetail.Country),\\n TractorName: tractorDetail.TractorName,\\n TractorModelID: tractorDetail.TractorModelID,\\n FuelRawValue: newFuelData.FuelRawValue,\\n PositionLatitude: tractorDetail.PositionLatitude,\\n PositionLongitude: tractorDetail.PositionLongitude,\\n LastActiveTime: tractorDetail.LastActiveTime,\\n ImplementsAttached: tractorDetail.ImplementsAttached \\n };\\n\\n fuelHistory = modules.kinvey.entity(fuelHistory);\\n fuelHistoryCol.save(fuelHistory, function(fuelHistoryErr, fuelHistory){\\n modules.logger.info(\\\u0022Fuel history saved for \\\u0022\u002BtractorDetail.TractorID);\\n countTractorsToUpdate--;\\n shouldFinish();\\n });\\n }\\n\\n var buildTractorAddress = function (street, town, country){\\n var address = street? street: \\\u0022\\\u0022;\\n if (town){\\n address \u002B= address?\\\u0022, \\\u0022\u002Btown: town;\\n }\\n\\n if (country){\\n address \u002B= address?\\\u0022, \\\u0022\u002Bcountry: country;\\n }\\n\\n return address;\\n }\\n\\n var shouldFinish = function (){\\n if(countTractorsToUpdate \u003C= 0){\\n response.complete();\\n }\\n }\\n}\u0022\r\n },\r\n \u0022FireMaintenanceAlert\u0022 : {\r\n \u0022code\u0022 : \u0022//Sends maintenance notification (push and email) to the user (parent and child)\\n//with the list of maintenance having the specified engine hours and tractor model\\n//for all recently updated tractors\\n//Created by Abdulmajid on 2nd July 2019, Updated on 26th March 2020\\n\\nfunction onRequest(request, response, modules) {\\n\\n var tractorOwnerCol = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n var tractorDetailCol = modules.collectionAccess.collection(\u0027TractorDetail\u0027); \\n var userCol = modules.collectionAccess.collection(\u0027user\u0027);\\n var userAccountsCol = modules.collectionAccess.collection(\u0027UserAccounts\u0027);\\n var maintenanceRepoCol = modules.collectionAccess.collection(\u0027MaintenanceRepo\u0027);\\n var notificationCol = modules.collectionAccess.collection(\u0027Notification\u0027);\\n var maintenanceHistoryCol = modules.collectionAccess.collection(\\\u0022MaintenanceHistory\\\u0022);\\n var emailModule = modules.email;\\n var pushModule = modules.push;\\n var log = modules.logger;\\n var hellotractorSupport = \u0027Hello Tractor \u003Csupport@hellotractor.com\u003E\u0027;\\n var dummyEmail = \u0027abdulmajid@hellotractor.com\u0027;\\n var dateTimeOneMinuteAgo = modules.moment.utc().subtract(1, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var dateTimeThirtyMinutesAgo = modules.moment.utc().subtract(30, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var now = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n\\n var userAccountsMap = {};\\n var countNotificationsToSend = 0;\\n var countNotificationsToSendPerTractorOwner = 0;\\n\\n //Query tractor detail collection\\n var tractorDetailQuery = {UpdatedAt: {$gte: dateTimeOneMinuteAgo}, LastActiveTime: {$gte: dateTimeThirtyMinutesAgo}};\\n tractorDetailCol.find(tractorDetailQuery, function(tractorDetailErr, tractorDetailList){\\n\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0){\\n log.info(\\\u0022Number of tractors found: \\\u0022\u002BtractorDetailList.length);\\n var tractorDetailsMap = {};\\n var tractorModelIds = [];\\n var tractorCreatorIds = [];\\n\\n tractorDetailList.forEach(function(tractorDetail){\\n if (tractorDetail.TractorModelID != null){\\n var currTractorDetails = tractorDetailsMap[tractorDetail._acl.creator];\\n if (!currTractorDetails) currTractorDetails = []; \\n currTractorDetails.push(tractorDetail);\\n tractorDetailsMap[tractorDetail._acl.creator] = currTractorDetails; \\n tractorModelIds.push(tractorDetail.TractorModelID);\\n tractorCreatorIds.push(tractorDetail._acl.creator);\\n }\\n });\\n\\n log.info(tractorModelIds.length\u002B\\\u0022 tractor non-unique tractor models found and \\\u0022\u002BtractorCreatorIds\u002B\\\u0022 non-unique tractor owners found\\\u0022);\\n tractorModelIds = tractorModelIds.filter (function (value, index, array) { \\n return array.indexOf (value) == index;\\n });\\n\\n tractorCreatorIds = tractorCreatorIds.filter (function (value, index, array) { \\n return array.indexOf (value) == index;\\n });\\n\\n log.info(\\\u0022About to fetch maintenance list for \\\u0022\u002BtractorModelIds.length\u002B\\\u0022 tractor models owned by \\\u0022\u002BtractorCreatorIds.length\u002B\\\u0022 tractor owners\\\u0022);\\n fetchMaintenanceList(tractorModelIds, tractorDetailsMap, tractorCreatorIds);\\n } else {\\n log.info(\\\u0022No tractors found to be updated one minute ago\\\u0022)\\n shouldFinish(); \\n }\\n });\\n\\n var fetchMaintenanceList = function(tractorModelIds, tractorDetailsMap, tractorCreatorIds){\\n maintenanceRepoCol.find({tractorModelId: {$in: tractorModelIds}}, function(tractorMaintenanceErr, tractorMaintenanceList){\\n if (tractorMaintenanceList){\\n modules.logger.info(\\\u0022Maintenance fetched: \\\u0022\u002BtractorMaintenanceList.length);\\n var tractorMaintenanceMap = {};\\n tractorMaintenanceList.forEach(function(maintenanceItem){\\n var tractorMaintenance = tractorMaintenanceMap[maintenanceItem.tractorModelId];\\n if (!tractorMaintenance) tractorMaintenance = [];\\n tractorMaintenance.push(maintenanceItem);\\n tractorMaintenanceMap[maintenanceItem.tractorModelId] = tractorMaintenance;\\n });\\n\\n findTractorOwners(tractorModelIds, tractorDetailsMap, tractorCreatorIds, tractorMaintenanceMap);\\n } else {\\n log.info(\\\u0022Tractor maintenance not found for tractor models: \\\u0022\u002BJSON.stringify(tractorModelIds));\\n shouldFinish();\\n }\\n });\\n }\\n\\n var findTractorOwners = function(tractorModelIds, tractorDetailsMap, tractorCreatorIds, tractorMaintenanceMap){\\n tractorOwnerCol.find({\\n $and: [\\n {\\\u0022_acl.creator\\\u0022: {$in: tractorCreatorIds}},\\n {maintenanceNotifications: true}\\n ]\\n }, function(tractorOwnerErr, tractorOwners){\\n if (tractorOwners \u0026\u0026 tractorOwners.length \u003E 0){\\n countNotificationsToSend = tractorOwners.length; //Total number of parent tractor owners to send notification\\n log.info(tractorOwners.length \u002B \\\u0022 tractor owners found\\\u0022);\\n var tractorOwnersMap = {};\\n tractorOwners.forEach(function(tractorOwner){\\n tractorOwnersMap[tractorOwner._acl.creator] = tractorOwner;\\n });\\n\\n findCorrespondingChildAccounts(tractorModelIds, tractorDetailsMap, tractorCreatorIds, tractorMaintenanceMap, tractorOwners, tractorOwnersMap);\\n } else {\\n log.info(\\\u0022No tractor owner found to own these tractors or receive maintenance notifications\\\u0022);\\n shouldFinish();\\n }\\n });\\n }\\n\\n var findCorrespondingChildAccounts = function(tractorModelIds, tractorDetailsMap, tractorCreatorIds, tractorMaintenanceMap, tractorOwners, tractorOwnersMap){\\n var creatorIdAccountHolderIdListMap = {};\\n userAccountsCol.find({\\\u0022_acl.creator\\\u0022: {$in: tractorCreatorIds}}, function(userAccountColErr, userAccounts){\\n if (userAccounts \u0026\u0026 userAccounts.length \u003E 0){\\n userAccounts.forEach(function(userAccount){\\n //Creates a map of tractor owner creator id to user accounts\\n var tractorOwnerUserAccounts = userAccountsMap[userAccount._acl.creator];\\n if (!tractorOwnerUserAccounts) tractorOwnerUserAccounts = [];\\n tractorOwnerUserAccounts.push(userAccount);\\n userAccountsMap[userAccount._acl.creator] = tractorOwnerUserAccounts;\\n\\n //Creates a map of tractor owner creator id to user account holder ids\\n var accountHolderIdList = creatorIdAccountHolderIdListMap[userAccount._acl.creator];\\n if (!accountHolderIdList) accountHolderIdList = [];\\n accountHolderIdList.push(userAccount.accountHolderId);\\n creatorIdAccountHolderIdListMap[userAccount._acl.creator] = accountHolderIdList;\\n });\\n\\n log.info(\\\u0022Count user accounts found: \\\u0022\u002BuserAccounts.length);\\n }\\n //Go ahead and find users even if child accounts were not found\\n findUsers(tractorModelIds, tractorDetailsMap, tractorCreatorIds, tractorMaintenanceMap, tractorOwners, tractorOwnersMap, creatorIdAccountHolderIdListMap);\\n });\\n }\\n\\n var findUsers = function(tractorModelIds, tractorDetailsMap, tractorCreatorIds, tractorMaintenanceMap, tractorOwners, tractorOwnersMap, creatorIdAccountHolderIdListMap){\\n tractorOwners.forEach(function(tractorOwner){\\n var tractorOwnerTractors = tractorDetailsMap[tractorOwner._acl.creator];\\n var userCreatorIds = [];\\n userCreatorIds.push(tractorOwner._acl.creator);\\n if (creatorIdAccountHolderIdListMap[tractorOwner._acl.creator])\\n userCreatorIds = userCreatorIds.concat(creatorIdAccountHolderIdListMap[tractorOwner._acl.creator]);\\n userCol.find({\\\u0022_acl.creator\\\u0022: {$in: userCreatorIds}}, function(userErr, users){\\n if (users \u0026\u0026 users.length \u003E 0){\\n var tractorIdFilteredTractorMaintenanceList = filterTractorsRequiringMaintenance(tractorMaintenanceMap, tractorOwnerTractors);\\n log.info(users.length\u002B\\\u0022 users found for \\\u0022\u002BtractorOwner._acl.creator);\\n notifyUsersIfNeccessary(tractorOwner, users, tractorOwnerTractors, tractorIdFilteredTractorMaintenanceList, tractorCreatorIds);\\n } else {\\n log.info(\\\u0022Couldn\u0027t find users for \\\u0022\u002BtractorOwner._acl.creator\u002B\\\u0022, \\\u0022\u002BtractorOwner.username);\\n countNotificationsToSend--;\\n shouldFinish();\\n }\\n });\\n });\\n }\\n\\n var filterTractorsRequiringMaintenance = function(tractorMaintenanceMap, tractorOwnerTractors){\\n var tractorIdFilteredTractorMaintenanceList = {};\\n tractorOwnerTractors.forEach(function(tractorOwnerTractor){\\n log.info(\\\u0022Main tractor id: \\\u0022\u002BtractorOwnerTractor.TractorID\u002B\\\u0022, model id: \\\u0022\u002BtractorOwnerTractor.TractorModelID);\\n var tractorMaintenanceList = tractorMaintenanceMap[tractorOwnerTractor.TractorModelID];\\n if (tractorMaintenanceList){ //Maintenance exists for tractor model\\n modules.logger.info(\\\u0022Tractor maintenance list exist for \\\u0022\u002BtractorOwnerTractor.TractorID\u002B\\\u0022: \\\u0022\u002BtractorMaintenanceList.length);\\n var maintenanceList = tractorIdFilteredTractorMaintenanceList[tractorOwnerTractor.TractorID];\\n tractorMaintenanceList.forEach(function(maintenance){\\n var lastMaintenanceNotification = tractorOwnerTractor.LastMaintenanceNotificationEngineHours? tractorOwnerTractor.LastMaintenanceNotificationEngineHours: 0;\\n var tractorEngineHours = (tractorOwnerTractor.FixedEngineHours? tractorOwnerTractor.FixedEngineHours: 0) \u002B tractorOwnerTractor.EngineHours;\\n if ((tractorEngineHours % maintenance.engineHours ) == 0 \u0026\u0026 tractorEngineHours \u003E lastMaintenanceNotification){\\n if (!maintenanceList) maintenanceList = [];\\n maintenanceList.push(maintenance);\\n tractorIdFilteredTractorMaintenanceList[tractorOwnerTractor.TractorID] = maintenanceList;\\n }\\n });\\n }\\n\\n modules.logger.info(\\\u0022Filtered maintenance count for \\\u0022\u002BtractorOwnerTractor.TractorID);\\n });\\n \\n return tractorIdFilteredTractorMaintenanceList;\\n }\\n\\n var notifyUsersIfNeccessary = function(tractorOwner, users, tractorOwnerTractors, tractorIdFilteredTractorMaintenanceList, tractorCreatorIds){\\n if (tractorIdFilteredTractorMaintenanceList \u0026\u0026 tractorOwnerTractors){\\n countNotificationsToSendPerTractorOwner = users.length * tractorOwnerTractors.length;\\n log.info(\\\u0022About to notify users about maintenance alerts\\\u0022)\\n users.forEach(function(user){\\n tractorOwnerTractors.forEach(function(tractor){\\n var maintenanceList = tractorIdFilteredTractorMaintenanceList[tractor.TractorID];\\n if (maintenanceList \u0026\u0026 maintenanceList.length \u003E 0){\\n var checks = maintenanceList.reduce(function(acc, maintenance, index){\\n acc.push(maintenance.maintenanceCheck);\\n return acc;\\n }, []);\\n var notificationPerUserPerTractor = buildNotification(tractor, tractorOwner, user, maintenanceList, checks);\\n var maintenanceHistoryListPerUserPerTractor = buildMaintenanceHistory(user, tractor, tractorOwner, maintenanceList);\\n saveAndSendMaintenanceHistoryAndNotification(tractor, tractorOwner, user, notificationPerUserPerTractor, maintenanceHistoryListPerUserPerTractor, checks);\\n } else {\\n log.info(\\\u0022Tractor not due for maintenance \\\u0022\u002Btractor.TractorID);\\n countNotificationsToSendPerTractorOwner--;\\n if (countNotificationsToSendPerTractorOwner \u003C= 0) {\\n countNotificationsToSend--;\\n shouldFinish();\\n }\\n }\\n });\\n \\n })\\n } else {\\n log.info(\\\u0022No notification to send for \\\u0022\u002BtractorOwner._acl.creator);\\n countNotificationsToSend--;\\n shouldFinish();\\n }\\n }\\n\\n var buildNotification = function (tractorDetail, tractorOwner, user, maintenanceList, checks){\\n var tractorEngineHours = (tractorDetail.FixedEngineHours? tractorDetail.FixedEngineHours: 0) \u002B tractorDetail.EngineHours;\\n var notificationMessage = (maintenanceList.length \u003C 4)? \\n notificationMessage = tractorDetail.TractorName \u002B \\\u0022 (\\\u0022 \u002B tractorDetail.TractorID \u002B \\\u0022) is due for \\\u0022\u002BtractorEngineHours\u002B\\\u0022-hour maintenance: \\\u0022 \u002B checks.join(\u0027, \u0027):\\n notificationMessage = tractorDetail.TractorName \u002B \\\u0022 (\\\u0022 \u002B tractorDetail.TractorID \u002B \\\u0022) is due for \\\u0022\u002BtractorEngineHours\u002B\\\u0022-hour maintenance: You have \\\u0022\u002Bchecks.length\u002B\\\u0022 pending maintenance activities\\\u0022;\\n\\n var notification = {\\n _acl: user._acl,\\n userId: user._acl.creator,\\n tractorId: tractorDetail.TractorID,\\n operatorId: tractorDetail.OperatorID,\\n operatorId: tractorDetail.OperatorID,\\n country: tractorDetail.Country,\\n street: tractorDetail.Street,\\n town: tractorDetail.Town,\\n tractorName: tractorDetail.TractorName,\\n read: false,\\n message: notificationMessage,\\n type: \u0027action\u0027,\\n action: \u0027maintenance\u0027,\\n tractorModelID: tractorDetail.TractorModelID,\\n engineHours: tractorDetail.EngineHours,\\n data: JSON.parse(JSON.stringify(maintenanceList))\\n };\\n\\n var notificationToSave = modules.kinvey.entity(notification); \\n notificationToSave.extras = JSON.parse(JSON.stringify(notification)); \\n return notificationToSave;\\n }\\n\\n var buildMaintenanceHistory = function(user, tractorDetail, tractorOwner, maintenanceList){\\n var maintenanceHistoryList = [];\\n maintenanceList.forEach(function(maintenance){\\n var tractorEngineHours = (tractorDetail.FixedEngineHours? tractorDetail.FixedEngineHours: 0) \u002B tractorDetail.EngineHours;\\n var maintenance = {\\n _acl: user._acl,\\n createdAt: now,\\n updatedAt: now,\\n dateDone: \\\u0022\\\u0022,\\n done: 0,\\n engineHours: tractorEngineHours,\\n maintenanceHours: maintenance.engineHours,\\n maintenanceCheck: maintenance.maintenanceCheck,\\n tractorId: tractorDetail.TractorID,\\n tractorModelId: tractorDetail.TractorModelID,\\n latitude: tractorDetail.PositionLatitude,\\n longitude: tractorDetail.PositionLongitude,\\n lastActiveTime: tractorDetail.LastActiveTime\\n }\\n\\n var maintenanceToSave = modules.kinvey.entity(maintenance);\\n maintenanceHistoryList.push(maintenanceToSave);\\n })\\n \\n return maintenanceHistoryList;\\n }\\n\\n var saveAndSendMaintenanceHistoryAndNotification = function(tractorDetail, tractorOwner, user, notificationPerUserPerTractor, maintenanceHistoryListPerUserPerTractor, checks){\\n var tractorEngineHours = (tractorDetail.FixedEngineHours? tractorDetail.FixedEngineHours: 0) \u002B tractorDetail.EngineHours;\\n var tractorUpdateDoc = {\\\u0022LastMaintenanceNotificationEngineHours\\\u0022: tractorEngineHours};\\n tractorDetailCol.update({_id: tractorDetail._id}, {$set: tractorUpdateDoc}, {upsert: false}, function(tractorUpdatedErr, tractorUpdatedDoc){\\n maintenanceHistoryCol.insert(maintenanceHistoryListPerUserPerTractor, function(maintenanceHistoryErr, maintenanceHistoryResult){\\n notificationCol.save(notificationPerUserPerTractor, function(notificationErr, notificationSaved){\\n notificationSaved.id = tractorOwner._id \u002B tractorDetail.TractorID \u002B notificationPerUserPerTractor.action;\\n pushModule.sendMessage(user, JSON.stringify(notificationSaved), function(pushErr, pushResult) {\\n var emailTitle = tractorDetail.TractorName \u002B \\\u0022 (\\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022) is due for \\\u0022\u002BtractorEngineHours\u002B\\\u0022-hour maintenance\\\u0022;\\n var emailBody = tractorDetail.TractorName \u002B \\\u0022 (\\\u0022 \u002B tractorDetail.TractorID \u002B \\\u0022) is due for \\\u0022\u002BtractorEngineHours\u002B\\\u0022-hour maintenance: \\\\n\\\u0022 \u002B createNumberedList(checks);\\n // JSON.stringify(tractorOwner.username) //TODO: Replace dummyEmail in production\\n emailModule.send(hellotractorSupport, JSON.stringify(tractorOwner.username), emailTitle, emailBody, function(emailErr, emailResult) {\\n log.info(\\\u0022Errors: \\\u0022\u002BtractorUpdatedErr\u002B\\\u0022, \\\u0022\u002BmaintenanceHistoryErr\u002B\\\u0022, \\\u0022\u002BnotificationErr\u002B\\\u0022, \\\u0022\u002BpushErr\u002B\\\u0022, \\\u0022\u002BemailErr);\\n countNotificationsToSendPerTractorOwner--;\\n if (countNotificationsToSendPerTractorOwner \u003C= 0){\\n countNotificationsToSend--;\\n shouldFinish();\\n }\\n });\\n });\\n });\\n })\\n });\\n }\\n\\n var shouldFinish = function(){\\n if (countNotificationsToSend \u003C= 0){\\n modules.logger.info(\\\u0022Should Finish: \\\u0022\u002BcountNotificationsToSend);\\n response.complete();\\n }\\n }\\n \\n var createNumberedList = function(maintenanceDescList){\\n var orderedList = \\\u0022\\\\n\\\u0022;\\n for(var i = 0; i \u003C maintenanceDescList.length; i\u002B\u002B){\\n orderedList \u002B= (i\u002B1) \u002B \\\u0022. \\\u0022\u002BmaintenanceDescList[i]\u002B\\\u0022\\\\n\\\u0022;\\n }\\n\\n return orderedList;\\n }\\n}\u0022\r\n },\r\n \u0022ExportTractorOperatorIDAndTractorID\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var tractorIdOperatorId = {};\\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n Tractor.find({}, function(err, docs){\\n \\n if( err ){\\n modules.logger.info(err.message);\\n response.error(\\\u0022there was an error\\\u0022);\\n }\\n \\n docs.reduce( function(tractorIdMap, tractor){\\n tractorIdMap[tractor.TractorID] = tractor.OperatorID\\n return tractorIdOperatorId;\\n \\n }, tractorIdOperatorId)\\n \\n modules.logger.info(\\\u0022The map is \\\u0022 \u002B JSON.stringify(tractorIdOperatorId));\\n response.complete();\\n \\n });\\n \\n \\n}\u0022\r\n },\r\n \u0022updateTractorCreator\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Tractor = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022)\\n var tractorIDsToUpdateCreator = [501022,501032,501037]\\n var newOwnerCreator = \\\u00225d3f1cc7ecc87c44b90447d7\\\u0022\\n Tractor.find({\\\u0022TractorID\\\u0022: { $in: tractorIDsToUpdateCreator }}, function(err, docs){\\n if( err ) {\\n modules.logger.info(\\\u0022Whoops! there was an error \\\u0022 \u002B err.message)\\n return response.error( err );\\n }\\n var count = 0;\\n \\n //log the old records\\n modules.logger.info( JSON.stringify(docs));\\n \\n // update the doc creator \\n \\tdocs.forEach( function(doc){\\n Tractor.update({\\\u0022TractorID\\\u0022: doc.TractorID}, {$set:{\\\u0022_acl.creator\\\u0022:newOwnerCreator}}, function(err, done){\\n if(err){\\n modules.logger.info(\\\u0022Whoops! an error occured \\\u0022 \u002B err.message );\\n response.error(err)\\n }\\n else {\\n count\u002B\u002B;\\n if( count === docs.length){\\n modules.logger.info(\\\u0022updation successfull\\\u0022)\\n response.complete();\\n }\\n }\\n })\\n \\n })\\n \\n \\n })\\n \\n}\u0022\r\n },\r\n \u0022PostTractorOperatorIDToAWS\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var Client = modules.request;\\n var totalTractorsCount = 1319\\n var currentTractorsCount = 0\\n var totalLoop = 10;\\n var data = [];\\n \\n var postTractorOperatorID = function(){\\n var count = currentTractorsCount\u002B\u002B;\\n if( count \u003E= totalTractorsCount ){\\n modules.logger.info(\\\u0022nothing else for this worker\\\u0022);\\n response.complete();\\n }\\n Client.postAsync({\\n uri: \\\u0022https://cloud.hellotractor.com/api/v1/posttest\\\u0022,\\n method: \\\u0022POST\\\u0022,\\n json: {\\\u0022name\\\u0022: \\\u0022paul\\\u0022}\\n }).then( function(res, body){\\n \\n \\tmodules.logger.info( \\\u0022The response data is \\\u0022 \u002B res );\\n modules.logger.info( \\\u0022The response body is \\\u0022 \u002B body );\\n\\n postTractorOperatorID();\\n \\n }, function(err){\\n \\n modules.logger.info(\\\u0022Whoops! there was an error\\\u0022)\\n postTractorOperatorID();\\n\\n })\\n }\\n \\n for(var i=0; i\u003CtotalLoop; i\u002B\u002B){\\n postTractorOperatorID();\\n }\\n \\n \\n}\u0022\r\n },\r\n \u0022CreateUserApi\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var httpClient = modules.request;\\n var cnt = 0;\\n \\n var usersObj = [\\n {\\n \\\u0022username\\\u0022: \\\u0022bwibopatrick@gmail.com\\\u0022,\\n \\t\\t\\t\\\u0022password\\\u0022: \\\u0022bwibopatrick\\\u0022,\\n \\t\\t\\t\\\u0022first_name\\\u0022:\\\u0022Bwibo\\\u0022,\\n \\t\\t\\t\\\u0022last_name\\\u0022: \\\u0022Patrick\\\u0022,\\n \\t\\t\\t\\\u0022phone\\\u0022: \\\u0022727433259\\\u0022,\\n \\t\\t\\t\\\u0022orgIDs\\\u0022:\\\u00226000\\\u0022,\\n \\t\\t\\t\\\u0022user_type\\\u0022: \\\u00222\\\u0022,\\n \\t\\t\\t\\\u0022email\\\u0022:\\\u0022bwibopatrick@gmail.com\\\u0022,\\n },\\n \\n {\\n \\\u0022username\\\u0022: \\\u0022erastusadongo@gmail.com\\\u0022,\\n \\t\\t\\t\\\u0022password\\\u0022: \\\u0022erastusadongo\\\u0022,\\n \\t\\t\\t\\\u0022first_name\\\u0022:\\\u0022Erastus \\\u0022,\\n \\t\\t\\t\\\u0022last_name\\\u0022: \\\u0022Adongo\\\u0022,\\n \\t\\t\\t\\\u0022phone\\\u0022: \\\u0022735488307\\\u0022,\\n \\t\\t\\t\\\u0022orgIDs\\\u0022:\\\u002260002\\\u0022,\\n \\t\\t\\t\\\u0022user_type\\\u0022: \\\u00222\\\u0022,\\n \\t\\t\\t\\\u0022email\\\u0022:\\\u0022erastusadongo@gmail.com\\\u0022,\\n },\\n {\\n \\\u0022username\\\u0022: \\\u0022knyakibwoga@gmail.com\\\u0022,\\n \\t\\t\\t\\\u0022password\\\u0022: \\\u0022knyakibwoga\\\u0022,\\n \\t\\t\\t\\\u0022first_name\\\u0022:\\\u0022Kepha\\\u0022,\\n \\t\\t\\t\\\u0022last_name\\\u0022: \\\u0022Nyakibuonga\\\u0022,\\n \\t\\t\\t\\\u0022phone\\\u0022: \\\u0022727845849\\\u0022,\\n \\t\\t\\t\\\u0022orgIDs\\\u0022:\\\u00226004\\\u0022,\\n \\t\\t\\t\\\u0022user_type\\\u0022: \\\u00222\\\u0022,\\n \\t\\t\\t\\\u0022email\\\u0022:\\\u0022knyakibwoga@gmail.com\\\u0022,\\n },\\n \\n {\\n \\\u0022username\\\u0022: \\\u0022moonstone254@gmail.com\\\u0022,\\n \\t\\t\\t\\\u0022password\\\u0022: \\\u0022moonstone254\\\u0022,\\n \\t\\t\\t\\\u0022first_name\\\u0022:\\\u0022Lydia\\\u0022,\\n \\t\\t\\t\\\u0022last_name\\\u0022: \\\u0022Makori\\\u0022,\\n \\t\\t\\t\\\u0022phone\\\u0022: \\\u0022702417235\\\u0022,\\n \\t\\t\\t\\\u0022orgIDs\\\u0022:\\\u00226005\\\u0022,\\n \\t\\t\\t\\\u0022user_type\\\u0022: \\\u00222\\\u0022,\\n \\t\\t\\t\\\u0022email\\\u0022:\\\u0022moonstone254@gmail.com\\\u0022,\\n },\\n \\n {\\n \\\u0022username\\\u0022: \\\u0022wemoadams1234@gmail.com\\\u0022,\\n \\t\\t\\t\\\u0022password\\\u0022: \\\u0022wemoadams1234\\\u0022,\\n \\t\\t\\t\\\u0022first_name\\\u0022:\\\u0022Moses\\\u0022,\\n \\t\\t\\t\\\u0022last_name\\\u0022: \\\u0022Emmanuel\\\u0022,\\n \\t\\t\\t\\\u0022phone\\\u0022: \\\u0022713057127\\\u0022,\\n \\t\\t\\t\\\u0022orgIDs\\\u0022:\\\u00226006\\\u0022,\\n \\t\\t\\t\\\u0022user_type\\\u0022: \\\u00222\\\u0022,\\n \\t\\t\\t\\\u0022email\\\u0022:\\\u0022wemoadams1234@gmail.com\\\u0022,\\n },\\n \\n {\\n \\\u0022username\\\u0022: \\\u0022moruma57@gmail.com\\\u0022,\\n \\t\\t\\t\\\u0022password\\\u0022: \\\u0022moruma57\\\u0022,\\n \\t\\t\\t\\\u0022first_name\\\u0022:\\\u0022Moses\\\u0022,\\n \\t\\t\\t\\\u0022last_name\\\u0022: \\\u0022Odhiambo Oruma\\\u0022,\\n \\t\\t\\t\\\u0022phone\\\u0022: \\\u0022722221876\\\u0022,\\n \\t\\t\\t\\\u0022orgIDs\\\u0022:\\\u00226007\\\u0022,\\n \\t\\t\\t\\\u0022user_type\\\u0022: \\\u00222\\\u0022,\\n \\t\\t\\t\\\u0022email\\\u0022:\\\u0022moruma57@gmail.com\\\u0022,\\n },\\n \\n \\n ];\\n \\n var createUser = function(userObj){\\n \\n httpClient.request({\\n \\t\\t\\turi: \\\u0022https://baas.kinvey.com/user/kid_bkFYnCzzzb\\\u0022,\\n \\t\\tjson: userObj,\\n \\t\\tmethod:\\\u0022POST\\\u0022,\\n \\t\\theaders: {\\n \\\u0022Authorization\\\u0022:\\\u0022Basic a2lkX2JrRlluQ3p6emI6OTIyNjYwNWI3YjA5NDc3YWI3ZmZiZTVkYmFiNWUxODE===\\\u0022\\n }\\n \\t\\t\\t}, function(res,body){\\n modules.logger.info(\\\u0022request successful\\\u0022);\\n \\t\\t\\t\\tresponse.body = body;\\n \\t\\t\\t cnt\u002B\u002B\\n \\n if( usersObj.length === cnt ){\\n response.complete();\\n }\\n\\n }, function(error){\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B error.message);\\n cnt\u002B\u002B;\\n if( usersObj.length === cnt ){\\n response.complete();\\n }\\n \\n })\\n }\\n \\n usersObj.forEach(createUser);\\n \\n}\\n\\n\\n// function onRequest(request, response, modules) {\\n \\n// var httpClient = modules.request;\\n// var cnt = 0;\\n \\n// var usersObj = [\\n// {\\n// \\\u0022username\\\u0022: \\\u0022test_paul\\\u0022,\\n// \\t\\t\\t\\\u0022password\\\u0022: \\\u0022123456\\\u0022,\\n// }\\n// ];\\n \\n// var createUser = function(userObj){\\n \\n// httpClient.request({\\n// \\t\\t\\turi: \\\u0022https://baas.kinvey.com/user/kid_bkFYnCzzzb/login\\\u0022,\\n// \\t\\tjson: userObj,\\n// \\t\\tmethod:\\\u0022POST\\\u0022,\\n// \\t\\theaders: {\\n// \\\u0022Authorization\\\u0022:\\\u0022Basic a2lkX2JrRlluQ3p6emI6OTIyNjYwNWI3YjA5NDc3YWI3ZmZiZTVkYmFiNWUxODE===\\\u0022\\n// }\\n// \\t\\t\\t}, function(res,body){\\n// modules.logger.info(\\\u0022request successful\\\u0022);\\n// \\t\\t\\t\\tresponse.body = body;\\n// \\t\\t\\t cnt\u002B\u002B\\n \\n// if( usersObj.length === cnt ){\\n// response.complete();\\n// }\\n\\n// }, function(error){\\n// modules.logger.info(\\\u0022There was an error \\\u0022 \u002B error.message);\\n// cnt\u002B\u002B;\\n// if( usersObj.length === cnt ){\\n// response.complete();\\n// }\\n \\n// })\\n// }\\n \\n// usersObj.forEach(createUser);\\n \\n// }\\n\\n\u0022\r\n },\r\n \u0022AutomateReportsGeneration\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n * Sends an email report and/or push notification to tractor owners requiring automated tractor activities which\\n * can either be sent weekly, monthly or quarterly\\n * Created by Abdulmajid on 22nd August 2019\\n * @param {*} request \\n * @param {*} response \\n * @param {*} modules \\n */\\n\\nfunction onRequest(request, response, modules) {\\n var tractorOwnerCol = modules.collectionAccess.collection(\\\u0022TractorOwner\\\u0022)\\n var userCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var userAccountsCol = modules.collectionAccess.collection(\\\u0022UserAccounts\\\u0022);\\n var notificationCol = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n var pushEmail = modules.email;\\n var push = modules.push;\\n var counter = 0;\\n var log = modules.logger;\\n var moment = modules.moment;\\n\\n var debugProps = {\\n nowHourMinutes: modules.moment.utc().format(\\\u0022HH:mm\\\u0022),\\n fromEmail: \\\u0022Hello Tractor \u003Csupport@hellotractor.com\u003E\\\u0022,\\n now: moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n nowDay: moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022),\\n nowV2: moment.utc().format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n nowISO: moment.utc().toISOString(),\\n oneHourAgoISO: moment.utc().subtract(1, \\\u0022hours\\\u0022).toISOString(),\\n oneWeekAgo: moment.utc().subtract(1, \\\u0022weeks\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n oneMonthAgo: moment.utc().subtract(1, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n threeMonthsAgo: moment.utc().subtract(3, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n oneWeekAgoDay: moment.utc().subtract(1, \\\u0022weeks\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022),\\n oneMonthAgoDay: moment.utc().subtract(1, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022),\\n threeMonthsAgoDay: moment.utc().subtract(3, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022),\\n nowHourMinutes: \\\u002217:00\\\u0022,\\n csvReportUri: \\\u0022https://cloud.hellotractor.com/report/log/csv/\\\u0022,\\n appEmail: \\\u0022apps2@hellotractor.com\\\u0022\\n }\\n\\n var releaseProps = {\\n nowHourMinutes: moment.utc().format(\\\u0022HH:mm\\\u0022),\\n fromEmail: \\\u0022Hello Tractor \u003Csupport@hellotractor.com\u003E\\\u0022,\\n now: moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n nowV2: moment.utc().format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n nowISO: moment.utc().toISOString(),\\n oneHourAgoISO: moment.utc().subtract(1, \\\u0022hours\\\u0022).toISOString(),\\n oneWeekAgo: moment.utc().subtract(1, \\\u0022weeks\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n oneMonthAgo: moment.utc().subtract(1, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n threeMonthsAgo: moment.utc().subtract(3, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm\\\u0022),\\n oneWeekAgoDay: moment.utc().subtract(1, \\\u0022weeks\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022),\\n oneMonthAgoDay: moment.utc().subtract(1, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022),\\n threeMonthsAgoDay: moment.utc().subtract(3, \\\u0022months\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022),\\n nowDay: moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022), \\n nowHourMinutes: moment.utc().format(\\\u0022HH:mm\\\u0022),\\n csvReportUri: \\\u0022https://cloud.hellotractor.com/report/log/csv/\\\u0022,\\n appEmail: \\\u0022apps2@hellotractor.com\\\u0022\\n } \\n\\n var props = releaseProps; //TODO: Replace with releaseProps in production;\\n\\n log.info(\\\u0022Initializations: \\\u0022\u002Bprops.nowISO);\\n log.info(\\\u0022Timestamp- nowV2: \\\u0022\u002Bprops.nowV2);\\n\\n //Tractor owner query\\n var tractorOwnerQuery = {\\n $and: [\\n {\\\u0022tractorActivityReports\\\u0022: true},\\n {\\n $or: [\\n {\\\u0022lastAutomatedReportTime\\\u0022: {$exists: false}}, \\n {$and: [{\\\u0022lastAutomatedReportTime\\\u0022: {$lte: props.oneWeekAgo}}, {\\\u0022reportInterval\\\u0022: 0}]},\\n {$and: [{\\\u0022lastAutomatedReportTime\\\u0022: {$lte: props.oneMonthAgo}}, {\\\u0022reportInterval\\\u0022: 1}]},\\n {$and: [{\\\u0022lastAutomatedReportTime\\\u0022: {$lte: props.threeMonthsAgo}}, {\\\u0022reportInterval\\\u0022: 2}]}\\n ]\\n },\\n {\\n $or: [\\n {\\\u0022endWorkingTime\\\u0022: props.nowHourMinutes}, \\n {\\\u0022endWorkingTime\\\u0022: {$exists: false}}\\n ]\\n }\\n ]\\n }\\n\\n //Find tractor owners requiring automated tractor activity reports\\n tractorOwnerCol.find(tractorOwnerQuery, function(tractorOwnerErr, tractorOwnerList){\\n if (tractorOwnerList \u0026\u0026 tractorOwnerList.length \u003E 0){\\n log.info(\\\u0022Tractor owners list: \\\u0022\u002BtractorOwnerList.length);\\n counter = tractorOwnerList.length;\\n tractorOwnerList.forEach(function(tractorOwner){\\n var tractorDetailQuery = {\\\u0022_acl.creator\\\u0022: tractorOwner._acl.creator};\\n \\n //For each tractor owner, find their corresponding tractors\\n tractorDetailCol.find(tractorDetailQuery, function(tractorDetailErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0){\\n var userAccountsQuery = {\\\u0022_acl.creator\\\u0022: tractorOwner._acl.creator}; \\n\\n //For each tractor owner, find all user accounts associated with the user\\n userAccountsCol.find(userAccountsQuery, function(userAccountsErr, userAccountsList){\\n //Create an array of creatorIds requiring tractor activity reports\\n var userIds = userAccountsList.map(function(userAccount){\\n return userAccount.accountHolderId;\\n });\\n\\n userIds.push(tractorOwner._acl.creator); //Add the main creator id to the user ids array\\n\\n log.info(\\\u0022Tractor detail length: \\\u0022\u002BtractorDetailList.length);\\n var reportInterval = tractorOwner.reportInterval;\\n var tractorListCSV = buildTractorsCSVList(tractorDetailList);\\n var dateRange = getReportDateRange(reportInterval);\\n var timeZone = getTimeZone(tractorOwner);\\n var body = buildRequestBody(tractorOwner, tractorListCSV, dateRange, timeZone);\\n var reportsUri = props.csvReportUri;\\n log.info(\\\u0022Initial reports request body: \\\u0022\u002BJSON.stringify(body));\\n executeReportsRequest(body, reportsUri, userIds, tractorOwner, dateRange, tractorListCSV);\\n });\\n } else {\\n log.info(\\\u0022No tractor found for tractor owner\\\u0022);\\n counter--\\n canFinish(); \\n }\\n });\\n });\\n\\n } else {\\n log.info(\\\u0022No tractor owner exists meeting query criteria\\\u0022);\\n canFinish();\\n }\\n });\\n\\n var canFinish = function (){\\n if (counter \u003C= 0){\\n log.info(\\\u0022Finished:: AutomateReportsGeneration\\\u0022);\\n response.complete();\\n }\\n }\\n\\n /**\\n * Makes a request against the AWS CSV report enpoint - https://cloud.hellotractor.com/report/log/csv/\\n * @param {*} reportsRequestBody The body of the report including tractors in csv, customer name, customer email, and timezone\\n * @param {*} reportsUri The AWS CSV report endpoint\\n * @param {*} userIds The users (main and sub-account) who should receive the report\\n * @param {*} tractorOwner The main tractor owner to whom the reports belong to\\n * @param {*} dateRange The start and end date separated by the pipe character\\n * @param {*} tractorListCSV The list of tractors separated by comma\\n */\\n\\n var executeReportsRequest = function(reportsRequestBody, reportsUri, userIds, tractorOwner, dateRange, tractorListCSV){\\n var header = {\\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022};\\n var options = {method: \\\u0022POST\\\u0022, uri: reportsUri, body: JSON.stringify(reportsRequestBody), headers: header};\\n log.info(\\\u0022Options: \\\u0022\u002BJSON.stringify(options));\\n modules.request.request(options, function(reportsError, reportsRes, reportsBody){\\n if (reportsError || !reportsBody){\\n log.info(\\\u0022An error occured or report body was empty: \\\u0022\u002BJSON.stringify(reportsError));\\n log.info(\\\u0022Error occured: \\\u0022\u002BJSON.stringify(reportsRes));\\n log.info(\\\u0022Error occured, reports body: \\\u0022\u002BJSON.stringify(reportsBody));\\n counter--;\\n canFinish();\\n } else {\\n log.info(\\\u0022Reports body: \\\u0022\u002BJSON.parse(reportsBody));\\n log.info(\\\u0022Reports sent to: \\\u0022\u002BtractorOwner.username);\\n sendCSVReportToSubAccounts(JSON.parse(reportsBody), userIds, tractorOwner, dateRange, tractorListCSV);\\n }\\n });\\n }\\n\\n /**\\n * Build the CSV endpoint request body\\n * @param {*} tractorOwner The main tractor owner to whom the reports belong to\\n * @param {*} tractorCSVList The list of tractors separated by comma\\n * @param {*} dateRange The start and end date separated by the pipe character\\n * @param {*} timeZone Timezone of the tractor owner based on the phone number\\n */\\n var buildRequestBody = function(tractorOwner, tractorCSVList, dateRange, timeZone){\\n var body = {\\n dates: dateRange,\\n tractor_ids: tractorCSVList,\\n customer_name: tractorOwner.first_name,\\n customer_email: tractorOwner.username\\n };\\n if (timeZone) body.tz = timeZone;\\n return body;\\n }\\n\\n /**\\n * Builds the report date range (start and end date) based on the report interval\\n * @param {*} reportInterval The report interval which can either be one week, one month, or three months\\n * @returns A pipe separated character of start time and end time\\n */\\n var getReportDateRange = function (reportInterval){\\n var startTime = \\\u0022\\\u0022, endTime = props.nowDay;\\n if (reportInterval == 0){ //Weekly report\\n startTime = props.oneWeekAgoDay;\\n } else if (reportInterval == 1){ //Monthly report\\n startTime = props.oneMonthAgoDay;\\n } else if (reportInterval == 2){ //Quarterly report\\n startTime = props.threeMonthsAgoDay;\\n } else {\\n startTime = props.oneWeekAgoDay; \\n }\\n\\n return startTime \u002B\\\u0022|\\\u0022\u002BendTime;\\n }\\n\\n\\n\\n /**\\n * Builds the reports date messaging which can either be \\\u0022last week\\\u0022, \\\u0022last month\\\u0022, and \\\u0022last quarter\\\u0022\\n * @param {*} reportInterval The interval can either be 0 = weekly, 1 = monthly, or 2 = quarterly\\n * @returns The report interval messaging\\n */\\n var getReportsDateMessaging = function (reportInterval){\\n var messaging = \\\u0022\\\u0022;\\n if (reportInterval == 0){ //Weekly report\\n messaging = \\\u0022last week\\\u0022;\\n } else if (reportInterval == 1){ //Monthly report\\n messaging = \\\u0022last month\\\u0022;\\n } else if (reportInterval == 2){ //Quarterly report\\n messaging = \\\u0022last quarter\\\u0022;\\n } else {\\n messaging = \\\u0022last week\\\u0022; \\n }\\n\\n return messaging;\\n }\\n\\n /**\\n * Builds the user\u0027s time zone using the user\u0027s phone number country code\\n * @param {*} user The user object retrieved from the User\u0027s collection\\n * @returns The user\u0027s three-character timezone\\n */\\n var getTimeZone = function(user){\\n // var countryCode = tractorOwner.phone? tractorOwner.phone.lastIndexOf(needle, 0) === 0\\n var timeZone, phone = user.phone? user.phone: \\\u0022\\\u0022;\\n if (phone.lastIndexOf(CountryCodesTZMap.NG.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.NG.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.KE.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.KE.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.MW.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.MW.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.IN.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.IN.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.PK.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.PK.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.SN.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.SN.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.MZ.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.MZ.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.CI.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.CI.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.GH.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.GH.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.BD.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.BD.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.UG.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.UG.TZ;\\n } else if (phone.lastIndexOf(CountryCodesTZMap.AO.Code, 0) === 0){\\n timeZone = CountryCodesTZMap.AO.TZ;\\n } else {\\n timeZone = \\\u0022\\\u0022;\\n }\\n\\n return timeZone;\\n }\\n\\n /**\\n * Builds a csv list of tractor id\u0027s for which reports will be generated \\n * @param {*} tractorList The array list of tractors retrieved from the TractorDetail collection\\n * @returns A csv tractor list \\n */\\n var buildTractorsCSVList = function (tractorList){\\n var separator = \\\u0022\\\u0022, tractorIds = \\\u0022\\\u0022;\\n tractorList.forEach(function(tractor){\\n tractorIds = tractorIds \u002B separator \u002B tractor.TractorID;\\n separator = \\\u0022,\\\u0022;\\n });\\n\\n return tractorIds;\\n }\\n\\n /**\\n * Generates a CSV report and sends the report to the users involved\\n * @param {*} reportsBody The response body of hitting the CSV report endpoint\\n * @param {*} userIds The user ids requiring the maintenance information \\n * @param {*} tractorOwner The main tractor owner requiring the csv report\\n * @param {*} dateRange The start time and end time of the report\\n * @param {*} tractorListCSV The tractor id\u0027s in csv\\n */\\n var sendCSVReportToSubAccounts = function (reportsBody, userIds, tractorOwner, dateRange, tractorListCSV){\\n var usersQuery = {\\\u0022_acl.creator\\\u0022: {$in: userIds}};\\n var countReportsToSend = 0;\\n userCol.find(usersQuery, function(usersErr, userList){\\n countReportsToSend = userList.length;\\n log.info(\\\u0022Users found: \\\u0022\u002BuserList.length);\\n userList.forEach(function(user){\\n var reportsDateMessaging = getReportsDateMessaging(tractorOwner.reportInterval);\\n var notification = buildNotification(tractorOwner, user, dateRange, reportsDateMessaging, tractorListCSV);\\n push.sendMessage(user, notification);\\n log.info(\\\u0022Push notification sent to \\\u0022\u002Buser.username \u002B\\\u0022, \\\u0022\u002Bnotification.message);\\n notificationCol.save(notification, function(notificationErr, notificationSaved){\\n if (tractorOwner._acl.creator != user._acl.creator){\\n var emailMessage = \\\u0022Click the link below to download your automated tractor activity report.\\\\n\\\u0022\u002BreportsBody.download_link;\\n pushEmail.send(props.fromEmail, user.username, notification.title, emailMessage);\\n log.info(\\\u0022Email sent to \\\u0022\u002Buser.username\u002B\\\u0022, \\\u0022\u002BemailMessage);\\n }\\n \\n countReportsToSend--;\\n if (countReportsToSend \u003C= 0){\\n tractorOwnerCol.update({_id: tractorOwner._id}, {$set: {lastAutomatedReportTime: props.nowV2}}, {upsert: false}, function(tractorOwnerUpdateErr, tractorOwnersUpdated){\\n counter--;\\n canFinish();\\n });\\n }\\n })\\n });\\n });\\n }\\n\\n /**\\n * Builds a notification object to be sent to the user \\n * \\n * @param {*} tractorOwner The main tractor owner requiring the CSV report\\n * @param {*} user The user (main or sub) to receive the notification\\n * @param {*} dateRange The date range (start time or end time) separated using pipe characters\\n * @param {*} reportsDateMessaging The date-range messaging to be appended to the notification message\\n * @param {*} tractorListCSV A list of tractor ids comma separated\\n */\\n var buildNotification = function (tractorOwner, user, dateRange, reportsDateMessaging, tractorListCSV){\\n var message = \\\u0022Your automated tractor activity reports for \\\u0022\u002BreportsDateMessaging\u002B\\\u0022 has been sent to \\\u0022\u002Buser.username;\\n var notification = {\\n _acl: user._acl,\\n message: message,\\n userId: user._acl.creator,\\n read: false,\\n type: \\\u0022alert\\\u0022,\\n title: \\\u0022Automated Tractor Reports\\\u0022,\\n action: \\\u0022automated_tractor_reports\\\u0022,\\n orgID: user.orgIDs\\n }\\n \\n notification = modules.kinvey.entity(notification);\\n var extras = JSON.parse(JSON.stringify(notification));\\n extras.tractorIDs = \\\u0022[\\\u0022\u002BtractorListCSV\u002B\\\u0022]\\\u0022;\\n notification.extras = JSON.stringify(extras);\\n notification.id = notification._id;\\n return notification; \\n }\\n\\n //An object mapping of country codes and timezone to countries\\n var CountryCodesTZMap = {\\n NG: {\\n Code: \\\u0022\u002B234\\\u0022,\\n TZ: \\\u0022WAT\\\u0022\\n },\\n KE: {\\n Code: \\\u0022\u002B254\\\u0022,\\n TZ: \\\u0022EAT\\\u0022\\n },\\n MW: {\\n Code: \\\u0022\u002B265\\\u0022,\\n TZ: \\\u0022CAT\\\u0022\\n },\\n IN: {\\n Code: \\\u0022\u002B91\\\u0022,\\n TZ: \\\u0022IST\\\u0022\\n },\\n PK: {\\n Code: \\\u0022\u002B92\\\u0022,\\n TZ: \\\u0022PST\\\u0022\\n },\\n SN: {\\n Code: \\\u0022\u002B221\\\u0022,\\n TZ: \\\u0022GMT\\\u0022\\n },\\n MZ: {\\n Code: \\\u0022\u002B258\\\u0022,\\n TZ: \\\u0022GMT\\\u0022\\n },\\n CI: {\\n Code: \\\u0022\u002B225\\\u0022,\\n TZ: \\\u0022GMT\\\u0022\\n },\\n GH: {\\n Code: \\\u0022\u002B233\\\u0022,\\n TZ: \\\u0022GMT\\\u0022\\n },\\n BD: {\\n Code: \\\u0022\u002B880\\\u0022,\\n TZ: \\\u0022BST\\\u0022\\n },\\n UG: {\\n Code: \\\u0022\u002B256\\\u0022,\\n TZ: \\\u0022EAT\\\u0022\\n },\\n AO: {\\n Code: \\\u0022\u002B244\\\u0022,\\n TZ: \\\u0022WAT\\\u0022\\n }\\n }\\n}\u0022\r\n },\r\n \u0022TractorWorkingOvertimeAlert\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n * Sends a push/email notification to the tractor owner whose tractors \\n * are working overtime\\n * Created by Abdulmajid on 20th August 2019, Updated: 9th March 2020\\n * @param {*} request \\n * @param {*} response \\n * @param {*} modules \\n */\\n\\nfunction onRequest(request, response, modules) {\\n var tractorOwnerCol = modules.collectionAccess.collection(\\\u0022TractorOwner\\\u0022)\\n var userCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var userAccountsCol = modules.collectionAccess.collection(\\\u0022UserAccounts\\\u0022);\\n var notificationCol = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n\\n var pushEmail = modules.email;\\n var push = modules.push;\\n var counter = 0;\\n var log = modules.logger;\\n var moment = modules.moment;\\n\\n var debugProps = {\\n today: moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022),\\n thirtyMinutesAgo: moment.utc().subtract(30, \\\u0022minute\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n oneMinuteAgo: moment.utc().subtract(1, \\\u0022minute\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n fromEmail: \\\u0022Hello Tractor \u003Csupport@hellotractor.com\u003E\\\u0022,\\n nowISO: moment.utc().toISOString(),\\n oneHourAgoISO: moment.utc().subtract(1, \\\u0022hours\\\u0022).toISOString(),\\n now: moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022)\\n }\\n\\n var releaseProps = {\\n today: moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022),\\n thirtyMinutesAgo: moment.utc().subtract(30, \\\u0022minute\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n oneMinuteAgo: moment.utc().subtract(1, \\\u0022minute\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n fromEmail: \\\u0022Hello Tractor \u003Csupport@hellotractor.com\u003E\\\u0022,\\n nowISO: moment.utc().toISOString(),\\n oneHourAgoISO: moment.utc().subtract(1, \\\u0022hours\\\u0022).toISOString(),\\n now: moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022) \\n }\\n\\n var props = releaseProps;\\n\\n log.info(\\\u0022Today: \\\u0022\u002Bprops.nowISO);\\n log.info(\\\u0022One Hour Ago: \\\u0022\u002Bprops.oneHourAgoISO);\\n log.info(\\\u0022One minute ago: \\\u0022\u002Bprops.oneMinuteAgo);\\n\\n //Finds tractor owners with working hours notification enabled\\n var tractorDetailQuery = \\n {\\n $and: [\\n {LastActiveTime: {$gte: props.thirtyMinutesAgo}},\\n {UpdatedAt: {$gte: props.oneMinuteAgo}},\\n {$or: [{LastWorkingHourNotificationTime: {$lte: props.oneHourAgoISO}}, {LastWorkingHourNotificationTime: {$exists: false}}]}\\n ]\\n }; \\n\\n //Find tractors recently updated and working beyond working hours\\n tractorDetailCol.find(tractorDetailQuery, function(tractorDetailErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0){\\n //Create a map of creator id to tractors of that user\\n log.info(\\\u0022Tractors found: \\\u0022\u002BtractorDetailList.length);\\n var creatorIdTractorDetailListMap = tractorDetailList.reduce(function(acc, tractorDetail, index){\\n if (!acc[tractorDetail._acl.creator]) acc[tractorDetail._acl.creator] = [];\\n acc[tractorDetail._acl.creator].push(tractorDetail);\\n return acc;\\n }, {});\\n\\n log.info(\\\u0022Creator ID Tractor List Map: \\\u0022\u002BJSON.stringify(creatorIdTractorDetailListMap));\\n //Find corresponding tractor owners willing to accept working hours notifications\\n var tractorOwnerQuery = {workingHoursNotifications: true, \u0027_acl.creator\u0027: {$in: Object.keys(creatorIdTractorDetailListMap)}};\\n tractorOwnerCol.find(tractorOwnerQuery, function(tractorOwnerListErr, tractorOwnerList){\\n if (tractorOwnerList \u0026\u0026 tractorOwnerList.length \u003E 0){\\n findUsersAndSendNotification(tractorOwnerList, creatorIdTractorDetailListMap);\\n } else {\\n log.info(\\\u0022Corresponding tractor owners were not found\\\u0022);\\n response.complete();\\n }\\n });\\n } else {\\n log.info(\\\u0022No tractor meeting the query criteria found to be recently updated\\\u0022);\\n response.complete();\\n }\\n });\\n\\n var findUsersAndSendNotification = function (tractorOwnerList, creatorIdTractorDetailListMap){\\n log.info(\\\u0022Tractor owners found: \\\u0022\u002BtractorOwnerList.length);\\n var filteredTractorOwnerList = [];\\n tractorOwnerList.forEach(function(tractorOwner){\\n var startTime = props.today \u002B\\\u0022 \\\u0022\u002BtractorOwner.startWorkingTime\u002B\\\u0022:00\\\u0022;\\n var endTime = props.today \u002B \\\u0022 \\\u0022\u002BtractorOwner.endWorkingTime\u002B\\\u0022:00\\\u0022;\\n var tractorsForOwner = creatorIdTractorDetailListMap[tractorOwner._acl.creator];\\n var filteredTractorsForOwner = tractorsForOwner.filter(function(tractor, index){\\n return (tractor.LastActiveTime \u003C startTime || tractor.LastActiveTime \u003E endTime);\\n })\\n\\n if (filteredTractorsForOwner.length \u003C 1){\\n delete creatorIdTractorDetailListMap[tractorOwner._acl.creator];\\n } else {\\n creatorIdTractorDetailListMap[tractorOwner._acl.creator] = filteredTractorsForOwner;\\n filteredTractorOwnerList.push(tractorOwner);\\n }\\n\\n });\\n\\n log.info(\\\u0022Filtered tractor owner list: \\\u0022\u002BJSON.stringify(filteredTractorOwnerList));\\n log.info(\\\u0022Filtered Creator ID Tractor Detail List Map: \\\u0022\u002BJSON.stringify(creatorIdTractorDetailListMap));\\n\\n if (filteredTractorOwnerList \u0026\u0026 filteredTractorOwnerList.length){\\n counter = filteredTractorOwnerList.length;\\n filteredTractorOwnerList.forEach(function(tractorOwner){\\n var tractorDetailList = creatorIdTractorDetailListMap[tractorOwner._acl.creator];\\n var tractorNamesTractorID = formatTractorNamesTractorID(tractorDetailList);\\n userAccountsCol.find({\\\u0022_acl.creator\\\u0022: tractorOwner._acl.creator}, function(userAccountErr, userAccountList){\\n var userIds = [];\\n if (userAccountList \u0026\u0026 userAccountList.length \u003E 0){\\n userIds = userAccountList.map(function(userAccount){\\n return userAccount.accountHolderId;\\n });\\n }\\n\\n userIds.push(tractorOwner._acl.creator);\\n\\n userCol.find({\\\u0022_acl.creator\\\u0022: {$in: userIds}}, function(userErr, users){\\n if (users \u0026\u0026 users.length \u003E 0){\\n var countUsers = users.length;\\n users.forEach(function(user){\\n var notification = buildNotification(user, tractorDetailList, tractorNamesTractorID);\\n push.sendMessage(user, JSON.stringify(notification), function(pushNotificationErr, pushNotificationResult){\\n log.info(\\\u0022Push notification sent to \\\u0022\u002Buser.username \u002B\\\u0022, \\\u0022\u002Bnotification.message);\\n pushEmail.send(props.fromEmail, user.username, notification.title, notification.message);\\n log.info(\\\u0022Email sent to \\\u0022\u002Buser.username\u002B\\\u0022, \\\u0022\u002Bnotification.message);\\n \\n //Save the working hours notification in Notification collection\\n notificationCol.save(notification, function(notificationErr, notificationSaved){\\n countUsers--; \\n if (countUsers \u003C= 0) updateTractorDetail(tractorNamesTractorID, notification, tractorOwner);\\n });\\n });\\n });\\n } else {\\n log.info(\\\u0022Push notification not sent to \\\u0022\u002BtractorOwner.username\u002B\\\u0022, user does not exist\\\u0022);\\n counter--;\\n canFinish();\\n }\\n });\\n });\\n })\\n } else {\\n log.info(\\\u0022None of the tractor owners have tractors working overtime\\\u0022);\\n canFinish();\\n }\\n }\\n\\n var canFinish = function (){\\n if (counter \u003C= 0){\\n response.complete();\\n }\\n }\\n\\n var updateTractorDetail = function(tractorNamesTractorID, notification, tractorOwner){\\n tractorDetailCol.update(\\n {\\\u0022TractorID\\\u0022: {$in: tractorNamesTractorID.TractorIDsArr}},\\n {$set: {LastWorkingHourNotificationTime: props.nowISO, \u0027_kmd.lmt\u0027: new Date()}}, \\n {upsert: false, multi: true},\\n function(tractorOwnerUpdateErr, tractorOwnerUpdate){\\n log.info(\\\u0022Done updating tractor owner collection for \\\u0022\u002BtractorOwner.username);\\n counter--;\\n canFinish();\\n });\\n }\\n}\\n\\nfunction buildNotification(user, tractorDetailList, tractorNamesTractorID){\\n var message = tractorDetailList.length \u003E 1? (\\\u0022We noticed that the following tractors were working overtime: \\\u0022\u002BtractorNamesTractorID.TractorNamesCSV): \\\u0022We noticed that \\\u0022\u002BtractorNamesTractorID.TractorNamesCSV\u002B\\\u0022 was working overtime\\\u0022;\\n var notification = {\\n _acl: user._acl,\\n message: message,\\n userId: user._acl.creator,\\n read: false,\\n type: \\\u0022alert\\\u0022,\\n title: tractorDetailList.length \u003E 1? \\\u0022Tractors Working Overtime\\\u0022: \\\u0022Tractor Working Overtime\\\u0022,\\n action: \\\u0022tractor_working_overtime\\\u0022,\\n tractorId: tractorDetailList[0].TractorID,\\n tractorName: tractorDetailList[0].TractorName,\\n data: JSON.stringify(tractorNamesTractorID.filteredList),\\n orgID: user.orgIDs\\n }\\n\\n notification = modules.kinvey.entity(notification);\\n var extras = JSON.parse(JSON.stringify(notification));\\n delete extras[\\\u0022data\\\u0022];\\n notification.extras = JSON.stringify(extras);\\n notification.id = notification._id;\\n return notification;\\n}\\n\\nfunction formatTractorNamesTractorID (tractorDetailList){\\n var tractorsCSV = \\\u0022\\\u0022;\\n var separator = \\\u0022\\\u0022;\\n var tractorIds = [];\\n var filteredList = [];\\n tractorDetailList.forEach(function(tractor){\\n tractorsCSV \u002B= separator \u002B tractor.TractorName \u002B \\\u0022 (\\\u0022\u002Btractor.TractorID \u002B \\\u0022: \\\u0022\u002Btractor.LastActiveTime \u002B\\\u0022 UTC)\\\u0022;\\n separator = \\\u0022, \\\u0022;\\n tractorIds.push(tractor.TractorID);\\n filteredList.push({TractorID: tractor.TractorID, TractorName: tractor.TractorName, LastActiveTime: tractor.LastActiveTime})\\n });\\n\\n return {TractorNamesCSV: tractorsCSV, TractorIDsArr: tractorIds, filteredList: filteredList};\\n}\u0022\r\n },\r\n \u0022_UpdateTractorOwnerOrgId\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var TractorOwnerCol = modules.collectionAccess.collection(\\\u0022TractorOwner\\\u0022);\\n var UserCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var log = modules.logger;\\n var userCount = 0;\\n \\n log.info(\\\u0022Init\\\u0022);\\n \\n UserCol.find({user_type: {$exists: false}}, function(userErr, userList) {\\n if (userList) {\\n log.info(\\\u0022User collection \\\u0022 \u002B userList.length);\\n userList.forEach(function(user) {\\n TractorOwnerCol.findOne({\\\u0022username\\\u0022: user.username}, function(tractorOwnerErr, tractorOwner) {\\n userCount\u002B\u002B;\\n if (tractorOwner){\\n TractorOwnerCol.update({username: tractorOwner.username}, {$set: {orgID: user.orgIDs}}, {upsert: false, multi: false}, function(updateTractorOwnerErr, tractorOwnerUpdate){\\n log.info(\\\u0022Tractor owner updated: \\\u0022\u002B tractorOwner.username);\\n if (userCount \u003E= userList.length) {\\n log.info(\\\u0022Completed: \\\u0022 \u002B \\\u0022User Account: \\\u0022\u002BuserCount); \\n log.info(JSON.stringify(tractorOwner));\\n response.complete();\\n }\\n });\\n } else {\\n if (userCount \u003E= userList.length){\\n log.info(\\\u0022Completed: \\\u0022 \u002B \\\u0022User Account: \\\u0022\u002BuserCount); \\n log.info(JSON.stringify(tractorOwner));\\n response.complete();\\n }\\n }\\n });\\n });\\n } else {\\n log.info(\\\u0022Query failed : \\\u0022 \u002B userErr);\\n response.complete();\\n }\\n });\\n }\\n \u0022\r\n },\r\n \u0022_ProperlyFormatOrgIDsInUserCollection\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var userCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var countUsers = 0;\\n var totalUsers = 0;\\n\\n userCol.find({}, function(userErr, users){\\n if (users){\\n totalUsers = users.length;\\n\\n users.forEach(function(user){\\n if (user.orgIDs){\\n var orgId = String(user.orgIDs);\\n userCol.update({_id: user._id}, {$set: {orgIDs: orgId}}, {upsert: false, multi: false}, function(userUpdatedErr, userUpdated){\\n countUsers\u002B\u002B;\\n finish();\\n });\\n } else {\\n countUsers\u002B\u002B\\n finish();\\n }\\n });\\n } else {\\n modules.logger.info(\\\u0022Users not found\\\u0022);\\n finish();\\n }\\n });\\n \\n var finish = function(){\\n if (countUsers \u003E= totalUsers){\\n modules.logger.info(\\\u0022Users retrieved: \\\u0022\u002BtotalUsers);\\n response.complete();\\n } \\n }\\n \\n// response.complete();\\n}\u0022\r\n },\r\n \u0022_UpdateStatusOfTractorsForThoseAssignedOperators\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var now = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022) \\n var log = modules.logger;\\n var countTractors = 0;\\n var countTractorsUpdated = 0;\\n var tractorsUpdatedArr = [];\\n tractorDetailCol.find({ Status: 0 }, function (tractorDetailErr, tractorDetailList) {\\n countTractors = tractorDetailList.length;\\n tractorDetailList.forEach(function (tractor) {\\n var operatorId = tractor.OperatorID;\\n if (operatorId \u0026\u0026 operatorId \u003E 0) {\\n tractorDetailCol.update({ _id: tractor._id }, {$set: {Status: 1, UpdatedAt: now}}, {upsert: false, multi: false}, function (tractorUpdateErr, tractorUpdated) {\\n countTractors--;\\n countTractorsUpdated\u002B\u002B;\\n tractorsUpdatedArr.push(tractor.TractorID);\\n finish();\\n });\\n } else {\\n countTractors--;\\n finish();\\n }\\n });\\n });\\n\\n var finish = function () {\\n if (countTractors \u003C= 0) {\\n log.info(\\\u0022Done: \\\u0022\u002BcountTractorsUpdated);\\n log.info(JSON.stringify(tractorsUpdatedArr));\\n response.complete();\\n }\\n }\\n\\n \\n\\n // var tractorStatusUpdated = [\\n // 501545,\\n // 500233,\\n // 501101,\\n // 501754,\\n // 501601,\\n // 500236,\\n // 500457,\\n // 500246,\\n // 500690,\\n // 501554,\\n // 501556,\\n // 500560,\\n // 501749,\\n // 500247,\\n // 500561,\\n // 501562,\\n // 501301,\\n // 500821,\\n // 502142,\\n // 501788\\n // ]\\n\\n // log.info(\\\u0022Now: \\\u0022\u002Bnow);\\n\\n // tractorDetailCol.update({TractorID: {$in: tractorStatusUpdated}}, {$set: {UpdatedAt: now}}, {upsert: false, multi: true}, function(tractorsUpdatedErr, tractorsUpdatedData){\\n // log.info(\\\u0022Done: \\\u0022\u002BtractorsUpdatedData\u002B\\\u0022, Err: \\\u0022\u002BtractorsUpdatedErr);\\n // response.complete();\\n // });\\n}\u0022\r\n },\r\n \u0022UpdateTractorGeofenceV2\u0022 : {\r\n \u0022code\u0022 : \u0022 /**\\n * Updates the geofence information of an array of tractors for the tractor ids passed in the request body.\\n * Created by Abdulmajid/Sulaiman on 26th September 2019\\n * @param request \\n * - The http request containing tractorIds, geofence latitude,\\n * - geofence longitude, updated at, need to send geofence notification, \\n * - geofence created, and was in area.\\n * @param response\\n * - The http response\\n * @param modules \\n * - The javascript modules\\n */\\n\\nfunction onRequest(request, response, modules) {\\n var log = modules.logger;\\n var tractorIds = request.body.tractorIds;\\n var geofenceLatitude = request.body.latitude;\\n var geofenceLongitude = request.body.longitude;\\n var updatedAt = request.body.updatedAt;\\n var needToSendGeofenceNotification = request.body.needToSendGeofenceNotification;\\n var geofenceCreated = request.body.geofenceCreated;\\n var wasInArea = request.body.wasInArea;\\n var countNotificationsSent = 0;\\n \\n if (!tractorIds){\\n return response.error(400);\\n }\\n \\n log.info(JSON.stringify(request.body)); \\n \\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var tractorDetailQuery = {TractorID: {$in: tractorIds}};\\n\\n var tractorDetailData = {\\n Latitude: geofenceLatitude,\\n Longitude: geofenceLongitude,\\n NeedToSendGeofenceOutNotification: needToSendGeofenceNotification,\\n WasInArea: wasInArea,\\n LastGeofenceNotificationTime: \u0027\u0027,\\n UpdatedAt: updatedAt\\n }\\n \\n tractorDetailCol.update(tractorDetailQuery, {$set: tractorDetailData}, {multi: true, upsert: false}, function(tractorDetailErrUpdated, tractorDetailUpdated){\\n log.info(\\\u0022Finished updating geofence info for \\\u0022\u002BtractorIds);\\n if (geofenceCreated){\\n tractorDetailCol.find(tractorDetailQuery, function(tractorDetailErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 !tractorDetailErr){\\n countNotificationsSent = tractorDetailList.length;\\n sendGeofenceNotification(tractorDetailList);\\n } else {\\n log.info(\\\u0022An error occured while trying find tractors with ids: \\\u0022\u002BtractorIds);\\n return response.error(400);\\n }\\n });\\n } else {\\n log.info(\\\u0022No need to send notification\\\u0022);\\n finish();\\n }\\n });\\n\\n var sendGeofenceNotification = function(tractorDetailList){\\n tractorDetailList.forEach(function(tractor){\\n c_sendGeoFenceNotification(tractor, \u0027geofenceCreated\u0027, function(err2) {\\n countNotificationsSent--;\\n finish();\\n }); \\n });\\n }\\n\\n var finish = function (){\\n if (countNotificationsSent \u003C= 0){\\n response.complete();\\n }\\n }\\n}\\n\\n\\n\u0022\r\n },\r\n \u0022_UploadMaintenanceCSVSheet\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var data = [\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022fill\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Keep the tank completely filled after each day of work\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Water tank\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the lubricant oil level in the engine\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022 clean and dust\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the air filter dust exhaust valve\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Exhaust valve\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Drain\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Drain the decenter pre-filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the radiator mask and vanes\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Radiator\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the tightness of the fuel and cooling system air filter clamps\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the engine lubricant oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the engine oil filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the fuel filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean fuel tank screen filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Tank screen filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check belt tension\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Belt tension\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check engine valve clearance\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine valve \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the pressures, spray and integrity of the injector nozzles\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Injector nozzles \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the turbo charger rotor slack\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Rotor slack\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Drain and Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Drain and clean engine cooling system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Cooling system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Change\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Change engine coolant\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine coolant\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the slack of the water pump\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Water tank\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check fuel tank\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel tank\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the main filtering element on the engine air filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine air filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the safety filter element on the engine\u0027s air filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine air filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the free play of the clutch pedal\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Clutch pedal\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Lubricate \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lubricate the journal felt and the dual clutch bearing \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Clutch bearing \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the clutch and drive system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Clutch and Drive system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the radiator mask and vanes\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Radiator mask\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the tightness of the wheel nuts\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Wheel nuts\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the tire Pressure\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Tire \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the level of lubricant oil in the gearbox, final drive and hydroulics\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Gearbox\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Lubricate \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lubricate rear axle bearing\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Rear axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the protective cover of the group and gearshift lever\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Gearsift lever\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the gearbox breather\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Gearbox\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check and Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the breather cap of the hydroulic system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Breather cap\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the Hydroulic system pressure\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydroulic system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the hydroulic system suction filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydroulic system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the pressure of the 3-point hyroulic system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Gearbox\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the oil and filter in the gearbox, final drive and hydroulic system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydroulic system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Hydroulic system oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydroulic system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check yhe operation of the gearbox and splitter/creeper\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Gearbox\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the gearbox breather\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Gearbox\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the hydroulic sensitivity system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hyroulic sensitivity system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the free play of the service brake\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the free play of the park brake\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the level of the brake fluid\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the service and brake system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the brake fluid\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Lubricate \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lubricate the front axle bearing(4 x 4) and the wheel hub( 4 x 2 )\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle and Wheel hub\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the tightness of the wheel nuts\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Wheel nuts\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the tire \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Tire \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Lubricate \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lubricate the front axle journals\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Axle journals\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the front axle breather\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Axle breather\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the level of lubricant oil in the differential and front-wheel drive axle gear( 4x4 )\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Axle gear\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the lubricant oil in the front axle wheel hubs \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the throttle system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Throttle system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the lubricant oil in the front axle differential\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the slack of the front wheel hub bearing (4x2)\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front wheel\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the front axle/steering system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Axle/ Stearing system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the streering system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Steering system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the wheel toe-in (4x2 or 4x4 )\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Wheel\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the general condition of the steering rod terminals \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Steering rods\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the conditions of the cardian shaft\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Cardian shaft\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the air conditioner condenser\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air Conditioner condenser\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the condition and tension of the air compressor and alternator\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air Compressor and alternator\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean the cap air filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Cap air filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Wash\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Wash the cap air reciculation filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air reciculation filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Replace the cap reciculation filter and air filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Cap reciculation filter and air filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1000\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Remove\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Remove the roof cover and clean the box and the entire air conditioning system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air conditioning system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Proper operation and adjustment of all work and auxiliary lights\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Auxiliary lights\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the indicator lights, audible alarms and instruments for proper operation\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Indicator lights\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Operation of all start-up safety switches\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Start-up switches \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the electronic systems for proper operation\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Electronic systems\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the electronic components for their proper operation\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Electronic componenet\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the tightness of the battery\u0027s cables and mounting . In addition to Check the battery\u0027s condition, coatthe terminals with petroleum jelly \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Battery\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 250\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Load conditions on the alternator \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Alternator\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation of the starter motor\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Starter motor\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the operation and general condition of the electrical system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Electrical system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the condition of wiring hernesses and their fasteners\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022fasteners\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Lubricate \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lubricate the grease fittings (except the front anxle journals and the rear axle bearing )\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Axle bearing \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check the safety guards are in place and have legible adhesives \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Safety guards are \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Engage\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Enagege the hydroulic systems and the PTO to check their functionality\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydroulic system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Check tightening torgue of the ROPS bolts\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 57,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022ROPS bolts\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Valtra BL88\\\u0022,\\n \\\u0022engineHours\\\u0022: 500\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022General tractor inspection\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Tractor \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Coolant\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Coolant\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lights\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Lights\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Roll over protection frame\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Protection frame\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Seat belt\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Seat belt\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Transmission oil level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Oil level\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Grease the rear axle\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Rear axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Greasing the pivot system of the 2WD front axle\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Greasing the 4WD front axle\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Brake reservoir oil level \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Reservoir oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Battery\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Battery\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Grease the 3-point linkage\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u00223-point linkage\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Wheels and tyres\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Wheel and tyres\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Braking distance\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Belt tension\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Belt tension\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Change the engine oil filter cartridge\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter catridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Cooler\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Cooler\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Transmission oil filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Oil filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Parking brake lever\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Oil pipe - Hydrostatic steering\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydrostatic steering\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Braking distance\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Braking\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Cooler\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Cooler\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Parking brake lever\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil filter cartridge\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter catridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Front axle/final drive unit level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Mechanical clutch control\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Clutch control\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Oil pipes - Hydrostatic steering\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydrostatic steering\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine drive belt tension\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Belt \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Transmission oil filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Oil filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Differential lock system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Lock system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Front wheel hub bearings\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front wheel\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Braking system with Safety Brakes valve\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brakes\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Air filter catridge and safety catridge \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Safety catridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Drain water\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Bleeding air and water from the filters and fuel system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Coolant and flushing the circuit\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Coolant \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Transmission oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Transmission oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Replace\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Front axle/final drive units oil level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean engine air filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air flter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Front and rear hydroulic brake circuits\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 46,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake circuits\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Tiger 80.4E\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Coolant \\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Coolant\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Lights\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Lights\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 10\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Rear axle\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Rear axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u00224WD front axle\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clutch and brake fluid reservoir level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fluid reservoir\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Battery\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Battery\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Grease\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Rear 3-point linkage\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Rear 3-point linkage\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Wheels and tyres\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Wheels and tyres\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 50\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Braking distance\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brakes\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine drive belt/s tension\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine drive\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil filter cartridges\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter catridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine coolant radiator\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Radiator\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel pre-filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Parking brake lever\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Screen wash system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Wash\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Air conditioning system filters\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Air conditioning system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Oil lines\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 100\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Braking distance\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine oil filter cattridges\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter catridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine coolant radiator\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Coolant radiator\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Parking brake lever\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Brake lever\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Front axle/final drives oil level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Screen wash system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Screen wash system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Oil lines\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 300\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine drive belt/s tension\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine drive\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Engine valve clearances and fuel injectors\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine valve \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Transmission oil filters\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Oil filter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Differentials lock system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Lock sytsem\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 600\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Injection pump\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Injection pump\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Air filter cartridge\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Filter cattridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Fuel pre-filter\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022fuel Filter \\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Starter motor\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Starter\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Rear brakes hydraulic circuit\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydraulic circuit\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Air conditioning system filters\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022System filters\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Cab heating system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Heating system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Cab air conditioning system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Conditioning system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Clean\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Hydraulic clutch circuit\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Clutch circuit\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Coolant level\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Coolant\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Transmission oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Transmission oil\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Front axle/final drives oil\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Front axle\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Clean engine air cleaner\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Engine cleaner\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Renew \\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Air filter internal safety cartridge or after the main catridge has been cleaned 3 times\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Internal safety catridge\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Bleeding the fuel system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel system\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Bleeding the fuel prefilter( Specific filter for cold climates)\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Fuel profilers\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n },\\n {\\n \\\u0022maintenanceActivity\\\u0022: \\\u0022Check\\\u0022,\\n \\\u0022maintenanceCheck\\\u0022: \\\u0022Bleeding the hydroulic circuit of the hydrostatic steering system\\\u0022,\\n \\\u0022tractorModelId\\\u0022: 45,\\n \\\u0022maintenanceComponent\\\u0022: \\\u0022Hydroulic circuit\\\u0022,\\n \\\u0022tractorModel\\\u0022: \\\u0022Same Laser 130\\\u0022,\\n \\\u0022engineHours\\\u0022: 1200\\n }\\n ];\\n\\n var maintenanceRepoCol = modules.collectionAccess.collection(\\\u0022MaintenanceRepo\\\u0022);\\n var today = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n\\n data.forEach(function(maintenance){\\n maintenance.createdAt = today;\\n maintenance.updatedAt = today;\\n maintenanceRepoCol.save(modules.kinvey.entity(maintenance), function(saveErr, savedMaintenance){\\n count\u002B\u002B;\\n finish();\\n });\\n });\\n \\n var count = 0;\\n var finish = function(){\\n if (count \u003E= data.length){\\n modules.logger.info(\\\u0022Done: \\\u0022\u002Bcount);\\n response.complete();\\n }\\n }\\n}\u0022\r\n },\r\n \u0022updateTractorDetailOnUpdateFromQueue\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n response.complete();\\n}\u0022\r\n },\r\n \u0022TestConsumer\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var bookingsCol = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var query = {orgID:\\\u00226022\\\u0022};\\n var updateDoc = {$set: {\\n \\\u0022orgID\\\u0022: \\\u0022111\\\u0022\\n }};\\n var options = {upsert: false, multi: true};\\n bookingsCol.update(query, updateDoc, options, function(updateErr, updateDoc){\\n modules.logger.info(\\\u0022Bookings updated: \\\u0022\u002BJSON.stringify(updateDoc)\u002B\\\u0022, \\\u0022\u002BJSON.stringify(updateErr));\\n response.complete();\\n });\\n}\u0022\r\n },\r\n \u0022PushRecentBookings\u0022 : {\r\n \u0022code\u0022 : \u0022//Sends a CSV report of service bookings every 5 minutes to emails\\n//Created on 21/10/2019 by Abdulmajid\\nfunction onRequest(request, response, modules) {\\n var fiveMinutesAgo = modules.moment.utc().subtract(5, \\\u0022minutes\\\u0022).format(\u0027YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\u0027); //.format(\\\u0022YYYY-MM-DD\\\u0022); //.format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022)\\n modules.logger.info(\\\u0022Five minutes ago: \\\u0022\u002BfiveMinutesAgo);\\n var email = modules.email;\\n var kinvey = modules.kinvey;\\n var cServiceBookings = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var cEmails = modules.collectionAccess.collection(\\\u0022Emails\\\u0022);\\n\\n //Constants\\n var from = \\\u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\\\u0022;\\n var to = \\\u0022abubakar@hellotractor.com, david@hellotractor.com\\\u0022;\\n var cc = \\\u0022deborah@hellotractor.com\\\u0022;\\n var bcc = \\\u0022apps2@hellotractor.com\\\u0022;\\n var replyTo = \\\u0022Hello Tractor App \u003Capps2@hellotractor.com\u003E\\\u0022;\\n var subject = \\\u0022New Bookings Report (5 Minutes Ago)\\\u0022;\\n var emailType = \\\u0022HTBookingCSVReport\\\u0022;\\n var userType = \\\u00220\\\u0022; //Hello Tractor Admin\\n var query = {\\\u0022_kmd.ect\\\u0022: {$gte: fiveMinutesAgo}};\\n\\n cServiceBookings.find(query, function(\\n err,\\n serviceBookings\\n ) {\\n if (err || serviceBookings.length \u003C 1) {\\n modules.logger.info(\\\u0022No service bookings found: \\\u0022\u002Berr);\\n response.complete();\\n } else {\\n modules.logger.info(\\\u0022Bookings found: \\\u0022\u002BserviceBookings.length);\\n var report = buildBookingsReport(serviceBookings);\\n pushCSVBookingsReport(\\n response,\\n email,\\n cEmails,\\n kinvey,\\n from,\\n to,\\n subject,\\n report,\\n replyTo,\\n cc,\\n bcc,\\n emailType,\\n userType\\n );\\n }\\n });\\n}\\n\\nfunction buildBookingsReport(serviceBookings) {\\n //Extract headers\\n var report = \\\u0022\\\u0022;\\n var comma = \\\u0022,\\\u0022;\\n var headers = \\\u0022_id,creator,ect,Service Date,Booking Id,BookingAgentID,Tractor Paired To,\\\u0022\u002B\\n \\\u0022Operator ID,Booking Status,Cluster Id,Created At,Updated At,Distance To Destination,\\\u0022\u002B\\n \\\u0022Farm Location,Farmer Name,Farmer Phone,Gender,Hectares Serviced,Latitude,Longitude,Org Id,Primary Crop,Secondary Crop, BAName, BAPhone, Service Type\\\u0022\u002B\\\u0022\\\\n\\\u0022;\\n\\n \\n\\n report \u002B= headers;\\n\\n serviceBookings.forEach(function(booking){\\n var bookingAgent = booking.bookingAgentData? JSON.parse(booking.bookingAgentData):\\\u0022\\\u0022;\\n var row = \\n toString(booking._id) \u002B comma \u002B \\n toString(booking._acl.creator) \u002B comma \u002B\\n toString(booking._kmd.ect) \u002B comma \u002B\\n toString(booking.serviceDate) \u002B comma \u002B\\n toString(booking.bookingID) \u002B comma \u002B\\n toString(booking.bookingAgentID) \u002B comma \u002B \\n toString(booking.tractorPairedTo) \u002B comma \u002B\\n toString(booking.OperatorID) \u002B comma \u002B\\n bookingStatus(booking.bookingStatus) \u002B comma \u002B\\n toString(booking.clusterID) \u002B comma \u002B\\n toString(booking.createdAt) \u002B comma \u002B\\n toString(booking.updatedAt) \u002B comma \u002B\\n toString(booking.distanceToDestination) \u002B comma \u002B\\n toString(booking.farmLocation) \u002B comma \u002B\\n toString(booking.farmerName) \u002B comma \u002B\\n toString(booking.farmerPhone) \u002B comma \u002B\\n toString(booking.gender) \u002B comma \u002B\\n toString(booking.hectaresServiced) \u002B comma \u002B\\n toString(booking.latitude) \u002B comma \u002B\\n toString(booking.longitude) \u002B comma \u002B\\n toString(booking.orgID) \u002B comma \u002B\\n toString(booking.primaryCrop) \u002B comma \u002B\\n toString(booking.secondaryCrop) \u002B comma \u002B\\n toString(bookingAgent?bookingAgent.name:\\\u0022\\\u0022) \u002B comma \u002B\\n toString(bookingAgent?bookingAgent.phone:\\\u0022\\\u0022) \u002B comma \u002B\\n getServiceName(booking.serviceType) \u002B \\\u0022\\\\n\\\u0022;\\n report \u002B= row; \\n });\\n \\n return report;\\n}\\n\\nfunction toString(text){\\n return JSON.stringify(text);\\n}\\n\\n\\n\\n\\n\\nfunction getServiceName (serviceCode) {\\n var service_name;\\n switch (serviceCode) {\\n case \\\u0022109\\\u0022:\\n service_name = \u0027Harrowing\u0027\\n break;\\n case \\\u0022104\\\u0022:\\n service_name = \u0027Planting/Seeding\u0027\\n break;\\n case \\\u0022105\\\u0022:\\n service_name = \u0027Irrigating\u0027\\n break;\\n case \\\u0022102\\\u0022:\\n service_name = \u0027Ploughing\u0027\\n break;\\n case \\\u0022101\\\u0022:\\n service_name = \u0027Tilling\u0027\\n break;\\n case \\\u0022103\\\u0022:\\n service_name = \u0027Ridging\u0027\\n break;\\n case \\\u0022107\\\u0022:\\n service_name = \u0027Trailing\u0027\\n break;\\n case \\\u0022108\\\u0022:\\n service_name = \u0027Harvesting\u0027\\n break;\\n case \\\u0022106\\\u0022:\\n service_name = \u0027Harvesting\u0027\\n break;\\n case \\\u0022110\\\u0022:\\n service_name = \u0027Spreading\u0027\\n break;\\n case \\\u0022112\\\u0022:\\n service_name = \u0027Sprayer\u0027\\n break;\\n case \\\u0022113\\\u0022:\\n service_name = \u0027Bioagtive\u0027\\n break;\\n case \\\u0022114\\\u0022:\\n service_name = \u0027Dozer\u0027\\n break;\\n case \\\u0022115\\\u0022:\\n service_name = \u0027Mower\u0027\\n break;\\n default:\\n service_name = \\\u0022Service Code: \\\u0022\u002BserviceCode;\\n break;\\n }\\n return service_name;\\n }\\n\\n\\n\\n\\n\\n\\n\\n//Sends the provided report to the user\u0027s email\\nfunction pushCSVBookingsReport(\\n response,\\n email,\\n cEmails,\\n kinvey,\\n from,\\n to,\\n subject,\\n report,\\n replyTo,\\n cc,\\n bcc,\\n emailType,\\n userType\\n) {\\n email.send(\\n from, //from\\n to, //to\\n subject, //subject\\n report, //text_body\\n replyTo, //reply_to\\n null, //html_body\\n cc, //cc\\n bcc, //bcc\\n function(err, result) {\\n if (err) {\\n response.complete();\\n } else {\\n var mail = {\\n _acl: kinvey.entity()._acl,\\n _kmd: kinvey.entity()._kmd,\\n from: from,\\n message: report,\\n to: to,\\n cc: cc,\\n bcc: bcc,\\n emailType: emailType,\\n userType: userType,\\n reply_to: replyTo\\n };\\n\\n cEmails.save(mail, function(err2) {\\n// response.body = mail;\\n response.complete();\\n });\\n }\\n }\\n );\\n}\\n\\nfunction bookingStatus(status){\\n if (status == 0){\\n return \\\u0022New\\\u0022;\\n } else if (status == 1 || status == 2){\\n return \\\u0022Paired\\\u0022;\\n } else if (status == 3){\\n return \\\u0022Completed\\\u0022\\n } else {\\n return \\\u0022Unknown Status\\\u0022;\\n }\\n}\u0022\r\n },\r\n \u0022PushAdNotificationToCustomer\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var push = modules.push;\\n var usersCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var notificationCol = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n var pushModule = modules.push;\\n var logger = modules.logger;\\n var count = 0;\\n \\n var customers = [\\\u0022abedkithome@gmail.com\\\u0022,\\\u0022aemservices95@gmail.com\\\u0022,\\\u0022akinyikisia@gmail.com\\\u0022,\\\u0022albertkiprotichmisoi@gmail.com\\\u0022,\\\u0022andrewcheruiyot@gmail.com\\\u0022,\\\u0022angelinechemutai72@gmail.com\\\u0022,\\\u0022boscomulwa2018@gmail.com\\\u0022,\\\u0022bwibopatrick@gmail.com\\\u0022,\\\u0022Carolinengina97@gmail.com\\\u0022,\\\u0022cetiang05@gmail.com\\\u0022,\\\u0022charlesmakau@gmail.com\\\u0022,\\\u0022charlesodhiambo36@gmail.com\\\u0022,\\\u0022chepkwonykibitok@gmail.com\\\u0022,\\\u0022ckavere@yahoo.com\\\u0022,\\\u0022colcher2012@yahoo.com\\\u0022,\\\u0022cooperativelessos@yahoo.com\\\u0022,\\\u0022davidkayi004@gmail.com\\\u0022,\\\u0022Davidkimeli45@gmail.com\\\u0022,\\\u0022e.nyakeriga@gmail.com\\\u0022,\\\u0022erastusadongo@gmail.com\\\u0022,\\\u0022fdikir@gmail.com\\\u0022,\\\u0022franciskihara0@gmail.com\\\u0022,\\\u0022githaigajm16@gmail.com\\\u0022,\\\u0022henry.emuye@rentco.co.ke\\\u0022,\\\u0022hezngeno@yahoo.co.uk\\\u0022,\\\u0022imbo.fred@gmail.com\\\u0022,\\\u0022jakaluore@gmail.com\\\u0022,\\\u0022james.wabala@gmail.com\\\u0022,\\\u0022jeff.tirop@gmail.com\\\u0022,\\\u0022jimmykemboi72@gmail.com\\\u0022,\\\u0022johnkoech2009@gmail.com\\\u0022,\\\u0022josemwangi2003@gmail.com\\\u0022,\\\u0022juliuskibet29@yahoo.com\\\u0022,\\\u0022juliussugut@yahoo.com\\\u0022,\\\u0022kandyandrew98@gmail.com\\\u0022,\\\u0022kenkipngorem@gmail.com\\\u0022,\\\u0022kenmusomba@gmail.com\\\u0022,\\\u0022kennedymk2015@gmail.com\\\u0022,\\\u0022kennethsaruni@gmail.com\\\u0022,\\\u0022kimagrovet@gmail.com\\\u0022,\\\u0022kimanijohn608@gmail.com\\\u0022,\\\u0022kimutaikigen123@gmail.com\\\u0022,\\\u0022kimutaimeli@gmail.com\\\u0022,\\\u0022kipsangjohn@gmail.com\\\u0022,\\\u0022kiptelatele@gmail.com\\\u0022,\\\u0022kiroreypius@gmail.com\\\u0022,\\\u0022kjoshuamatata@yahoo.com\\\u0022,\\\u0022knyakibwoga@gmail.com\\\u0022,\\\u0022korirjonah37@gmail.com\\\u0022,\\\u0022malanachola@gmail.com\\\u0022,\\\u0022martinkyengo2016@gmail.com\\\u0022,\\\u0022marymasaku@gmail.com\\\u0022,\\\u0022mashsang74@gmail.com\\\u0022,\\\u0022moonstone254@gmail.com\\\u0022,\\\u0022moruma57@gmail.com\\\u0022,\\\u0022mr.peterwanga@gmail.com\\\u0022,\\\u0022mungaip19@gmail.com\\\u0022,\\\u0022mutua60@gmail.com\\\u0022,\\\u0022mutungimagdalene@gmail.com\\\u0022,\\\u0022mutwotapaul@yahoo.com\\\u0022,\\\u0022mwololo.nfcc@yahoo.com\\\u0022,\\\u0022n.kosgei01@gmail.com\\\u0022,\\\u0022ndetei@yahoo.com\\\u0022,\\\u0022nicholaskiptoo64@gmail.com\\\u0022,\\\u0022nundoroto@gmail.com\\\u0022,\\\u0022nziliajoseph4@gmail.com\\\u0022,\\\u0022nzomot@gmail.com\\\u0022,\\\u0022okalmugan@gmail.com\\\u0022,\\\u0022Okapu.law@gmail.com\\\u0022,\\\u0022okisaimoffats@gmail.com\\\u0022,\\\u0022omadirechosit@gmail.com\\\u0022,\\\u0022pasilizarutto@gmail.com\\\u0022,\\\u0022patricketyang21@gmail.com\\\u0022,\\\u0022paulinakemey@gmail.com\\\u0022,\\\u0022paulkemei8066@gmail.com\\\u0022,\\\u0022petrorotich@yahoo.com\\\u0022,\\\u0022philipmasai@gmail.com\\\u0022,\\\u0022pkaranja22@gmail.com\\\u0022,\\\u0022rugut49@gmail.com\\\u0022,\\\u0022samuelkamiri1977@gmail.com\\\u0022,\\\u0022samwelkiboor1970@gmail.com\\\u0022,\\\u0022sawelink@yahoo.com\\\u0022,\\\u0022shadrackyaloh@gmail.com\\\u0022,\\\u0022silasimbayi2007@yahoo.co.uk\\\u0022,\\\u0022silvestermunyao@gmail.com\\\u0022,\\\u0022stanleykiptanui9@gmail.com\\\u0022,\\\u0022taruskennedy52@gmail.com\\\u0022,\\\u0022timskaru@agrimechafrica.co.ke\\\u0022,\\\u0022titusgicheru@gmail.com\\\u0022,\\\u0022tkeng2018@gmail.com\\\u0022,\\\u0022trixnnoli@gmail.com\\\u0022,\\\u0022waltersang@gmail.com\\\u0022,\\\u0022wambuawaita1980@gmail.com\\\u0022,\\\u0022waruibenson@gmail.com\\\u0022,\\\u0022wemoadams1234@gmail.com\\\u0022,\\\u0022wilfredketer@gmail.com\\\u0022,\\\u0022wilfredkipkorir2@gmail.com\\\u0022,\\\u0022yegoearnest@gmail.com\\\u0022];\\n usersCol.find({username: {$in: customers}}, function (err, users){\\n logger.info(\u0027Users found\u0027\u002Busers.length);\\n sendNotification(users);\\n });\\n \\n function sendNotification(users){\\n count = users.length;\\n users.forEach(function(user){\\n var notification = buildNotification(user);\\n notificationCol.save(notification, function(err, notificationSaved){\\n logger.info(\\\u0022Notification saved\\\u0022);\\n pushModule.sendMessage(user, JSON.stringify(notification), function(pushErr, pushResult){\\n logger.info(\\\u0022Message sent\\\u0022);\\n count--;\\n shouldFinish(count);\\n });\\n });\\n });\\n }\\n\\n function shouldFinish(count){\\n if (count \u003C= 0){\\n response.complete();\\n }\\n }\\n \\n function buildNotification(user){\\n var message = \\\u0022Hello \\\u0022\u002Buser.first_name\u002B\\\u0022, save up to KSh 202,100 when you purchase a John Deere 5075E MFWD Tractor from 18 - 29th Nov. 2019. Visit www.hellotractor.com to learn more or call \u002B254 724 443 389\\\u0022;\\n var notification = {\\n _acl: user._acl,\\n message: message,\\n userId: user._acl.creator,\\n read: false,\\n type: \\\u0022alert\\\u0022,\\n title: \\\u0022Black Friday\\\u0022,\\n action: \\\u0022ad\\\u0022,\\n orgID: user.orgIDs\\n };\\n\\n return modules.kinvey.entity(notification);\\n }\\n }\u0022\r\n },\r\n \u0022updateUserOrgIdByEmail\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n\\n const User = modules.collectionAccess.collection(\u0027user\u0027);\\n const TractorOwner = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n const userEmail = request.body.email;\\n const orgId = request.body.orgId;\\n \\n if(! userEmail || ! orgId ){\\n return response.complete(422);\\n }\\n \\n const stringOrgId = orgId.toString();\\n modules.logger.info(\\\u0022The email is \\\u0022 \u002B userEmail \u002B \\\u0022 and the orgID is \\\u0022 \u002B orgId );\\n // Update the user orgId \\n User.update({email: userEmail}, {\\\u0022$set\\\u0022:{orgIDs: stringOrgId}}, function(err, doc){\\n if( err ){\\n return response.complete(422);\\n }\\n \\n // Update the user tractorOwner orgId\\n TractorOwner.update({email: userEmail}, {\\\u0022$set\\\u0022:{orgID: stringOrgId} }, function(err, doc){\\n if( err ){\\n \\treturn response.complete(422);\\n \\t}\\n response.body = {updated:true};\\n return response.complete(200);\\n })\\n })\\n \\n}\u0022\r\n },\r\n \u0022UpdateTractorsRealTimeLocation\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n modules.logger.info(\u0027data posted, count is \u0027 \u002B request.body.count);\\n response.complete();\\n}\u0022\r\n },\r\n \u0022getFuelDataByTractorId\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n const tractorId = Number(request.body.tractorId);\\n const day = request.body.day;\\n const FuelHistory = modules.collectionAccess.collection(\u0027FuelHistory\u0027);\\n \\n FuelHistory.find({TractorID: tractorId, CreatedAt: {$gte: day}}, function(err, tractorFuelHistory){\\n if( err ) return response.error();\\n \\n \\t if( ! tractorFuelHistory.length || !tractorFuelHistory ){\\n \\t\\tresponse.body = {error: \\\u0022can\\\\\u0027t find tractor fuel history with the tractorId of \\\u0022 \u002B tractorId}\\n \\t\\t\\treturn response.complete(422);\\n \\t \\t}\\n \\n if(tractorFuelHistory.length){\\n const lastFuelEntry = tractorFuelHistory[tractorFuelHistory.length - 1];\\n const firstFuelEntry = tractorFuelHistory[0]\\n \\tresponse.body = {\\n \\t\\tfinal_fuel_litres: lastFuelEntry ? lastFuelEntry.FuelLitres : 0,\\n \\t\\tinitial_fuel_litres: firstFuelEntry ? firstFuelEntry.FuelLitres: 0,\\n \\ttractor_id: tractorId\\n \\t};\\n \\t return response.complete();\\n \\n } else {\\n response.body = {\\n \\tmessage: \\\u0022The provided tractorId has no fuel data history for the provided day\\\u0022\\n \\t};\\n return response.complete(422);\\n } \\n \\n });\\n \\n}\u0022\r\n },\r\n \u0022TriggerPushNotification\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var userCol = modules.collectionAccess.collection(\u0027user\u0027);\\n var userAccountsCol = modules.collectionAccess.collection(\u0027UserAccounts\u0027);\\n var notificationCol = modules.collectionAccess.collection(\u0027Notification\u0027);\\n var pushModule = modules.push;\\n \\n var userId = request.body.userId;\\n var receipients = request.body.receipients;\\n var orgId = request.body.orgId;\\n var title = request.body.title;\\n var message = request.body.message;\\n var count = 0;\\n\\n var received = [];\\n \\n modules.logger.info(JSON.stringify(request.body));\\n \\n if (userId \u0026\u0026 receipients \u0026\u0026 orgId \u0026\u0026 title \u0026\u0026 message){\\n modules.logger.info(\\\u0022User id, receipients, orgId, title and message exists\\\u0022);\\n userCol.findOne({\\\u0022_acl.creator\\\u0022: userId}, function(userSenderErr, userSender){\\n if (!userSender){\\n response.body = {message: \\\u0022Failed to send push notification. Unauthorized user\\\u0022};\\n response.error(\\\u0022Failed to send push notification. Unauthorized user request\\\u0022);\\n }\\n \\n modules.logger.info(\\\u0022Sender found: \\\u0022\u002BuserSender.username);\\n userCol.find({\\\u0022username\\\u0022: {$in: receipients}}, function(receipientErr, receipientList){\\n if (!receipientList){\\n response.body = \\\u0022Failed to send push notifications. No receipient found\\\u0022;\\n response.error(\\\u0022Failed to send push notifications. No receipient found\\\u0022);\\n }\\n \\n modules.logger.info(\\\u0022Receipients found: \\\u0022\u002BreceipientList.length);\\n count = receipientList.length;\\n receipientList.forEach(function(receipient){\\n var notification = modules.kinvey.entity(buildNotification(userId, receipient._acl, message, title, orgId));\\n notificationCol.save(notification, function(err, notificationSaved){\\n modules.logger.info(\\\u0022Notification saved\\\u0022);\\n pushModule.sendMessage(receipient, JSON.stringify(notification), function(pushErr, pushResult){\\n modules.logger.info(\\\u0022Message sent to: \\\u0022\u002Breceipient.username);\\n received.push(receipient.username);\\n count--;\\n shouldFinish();\\n });\\n });\\n \\n });\\n })\\n }); \\n } else {\\n modules.logger.info(\\\u0022Some fields are missing\\\u0022);\\n response.error(\\\u0022Some fields are missing\\\u0022);\\n }\\n \\n var shouldFinish = function(){\\n if (count \u003C= 0){\\n response.body = {status: 200, message: \\\u0022Message sent\\\u0022, received: received}\\n response.complete();\\n }\\n } \\n \\n var buildNotification = function(userId, acl, message, title, orgId) {\\n return {\\n _acl: acl, \\n title: title,\\n message: message,\\n userId: userId,\\n read: false,\\n type: \\\u0022alert\\\u0022,\\n action: \\\u0022ad\\\u0022,\\n orgID: orgId \\n }\\n } \\n }\u0022\r\n },\r\n \u0022PopulateDemoData\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n const TractorDetail = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n \\n const getTractorDetail = function(count){\\n \\n var TractorID = 601570 \u002B count;\\n var TractorName = \\\u0022HTDEMO\\\u0022 \u002B count;\\n return {\\n \\\u0022ActiveTimeToday\\\u0022: 16853,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022Ksh\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 79,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022HTDEMO\\\u0022 \u002Bcount,\\n \\\u0022Heading\\\u0022: 193,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222020-01-21 11:46:32\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u0022\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 1579172410038,\\n \\\u0022PositionLatitude\\\u0022: 0.298896,\\n \\\u0022PositionLongitude\\\u0022: 30.179938,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Muthangari\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 711,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Nairobi\\\u0022,\\n \\\u0022TractorID\\\u0022: TractorID ,\\n \\\u0022TractorModelID\\\u0022: 19,\\n \\\u0022TractorName\\\u0022: TractorName,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222020-01-21 11:53:06\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225e26e75b443e190015fd0bee\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022HT 472 NAI\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 75\\n }\\n }\\n \\n const count = 21;\\n var start = 1;\\n \\n while( start \u003C count ){\\n var tractorDetail = getTractorDetail(start);\\n TractorDetail.save(tractorDetail, function(err, tractorDetail){\\n if(!err){\\n modules.logger.info(\u0027new tractor created with tractorID of \u0027 \u002B tractorDetail.TractorID);\\n } \\n })\\n start\u002B\u002B;\\n if(start === count ){\\n modules.logger.info(\u0027DONE\u0027);\\n response.complete();\\n }\\n }\\n \\n \\n}\u0022\r\n },\r\n \u0022PopulateDemoBookings\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n\\t Booking.remove({bookingAgentID: \\\u00221579600001000\\\u0022}, function(err, done){\\n modules.logger.info(\u0027done\u0027);\\n response.complete();\\n })\\n \\n var getBooking = function(count){\\n \\n var bookingID = (1579619103763 \u002B count) * 2 ;\\n var clusterID = ( 1579619106135 \u002B count ) * 2;\\n var randDay = count \u003C 9 ? \\\u00220\\\u0022 \u002B count : count;\\n var serviceDate = \\\u00222020-02-\\\u0022 \u002B randDay;\\n var serviceTypeId = Math.floor( Math.random(1, 10) );\\n var serviceType = 100 \u002B serviceTypeId;\\n var hectaresServiced = (count * 2 / 10 * count )\\n \\n var booking = {\\n \\\u0022BAAgreeToPairing\\\u0022: false,\\n \\\u0022BAServiceDate\\\u0022: \\\u00222020-01-21\\\u0022,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022ReceiveTractorAvailabilityNotification\\\u0022: true,\\n \\\u0022bookingAgentData\\\u0022: \\\u0022{\\\\\\\u0022_id\\\\\\\u0022:\\\\\\\u00225e26f2b46706a300167614a3\\\\\\\u0022,\\\\\\\u0022bookingAgentID\\\\\\\u0022:1579600001000,\\\\\\\u0022country\\\\\\\u0022:\\\\\\\u0022Nigeria\\\\\\\u0022,\\\\\\\u0022createdAt\\\\\\\u0022:\\\\\\\u00222020-01-21 15:46:44\\\\\\\u0022,\\\\\\\u0022latitude\\\\\\\u0022:0.0,\\\\\\\u0022longitude\\\\\\\u0022:0.0,\\\\\\\u0022name\\\\\\\u0022:\\\\\\\u0022Htdemo Booking Agent \\\\\\\u0022,\\\\\\\u0022orgID\\\\\\\u0022:\\\\\\\u00226045\\\\\\\u0022,\\\\\\\u0022password\\\\\\\u0022:\\\\\\\u0022yebOqrQ13s2wNzDzSdJiIg\\\\\\\\u003d\\\\\\\\u003d\\\\\\\u0022,\\\\\\\u0022phone\\\\\\\u0022:\\\\\\\u002208000000000\\\\\\\u0022,\\\\\\\u0022profileImage\\\\\\\u0022:\\\\\\\u0022http://storage.googleapis.com/449962836b6c4ea5b59b03abd32fbedb/1579600001000_1579611692155_booking_agent_profile_image.jpg/1579600001000_1579611692155_booking_agent_profile_image.jpg\\\\\\\u0022,\\\\\\\u0022profileImageURL\\\\\\\u0022:\\\\\\\u0022http://storage.googleapis.com/449962836b6c4ea5b59b03abd32fbedb/1579600001000_1579611692155_booking_agent_profile_image.jpg/1579600001000_1579611692155_booking_agent_profile_image.jpg\\\\\\\u0022,\\\\\\\u0022syncStatus\\\\\\\u0022:1,\\\\\\\u0022updatedAt\\\\\\\u0022:\\\\\\\u00222020-01-21 13:01:41\\\\\\\u0022,\\\\\\\u0022userId\\\\\\\u0022:\\\\\\\u00225e26f2b46706a300167614a3\\\\\\\u0022,\\\\\\\u0022username\\\\\\\u0022:\\\\\\\u002208000000000\\\\\\\u0022}\\\u0022,\\n \\\u0022bookingAgentID\\\u0022: \\\u00221579600001000\\\u0022,\\n \\\u0022bookingID\\\u0022: bookingID,\\n \\\u0022bookingStatus\\\u0022: 0,\\n \\\u0022clusterID\\\u0022: clusterID,\\n \\\u0022distanceToDestination\\\u0022: 0,\\n \\\u0022farmLocation\\\u0022: \\\u002265 Muguga Green, Nairobi, Kenya\\\u0022,\\n \\\u0022farmerName\\\u0022: \\\u0022Bohra\\\u0022,\\n \\\u0022farmerPhone\\\u0022: \\\u0022\u002B254 7066845431\\\u0022,\\n \\\u0022farmerTitle\\\u0022: 0,\\n \\\u0022gender\\\u0022: 0,\\n \\\u0022createdAt\\\u0022: \\\u00222020-01-20\\\u0022,\\n \\\u0022hectaresServiced\\\u0022: hectaresServiced,\\n \\\u0022latitude\\\u0022: -1.2583604,\\n \\\u0022longitude\\\u0022: 36.7906792,\\n \\\u0022orgID\\\u0022: \\\u00226045\\\u0022,\\n \\\u0022primaryCrop\\\u0022: \\\u0022Beans\\\u0022,\\n \\\u0022secondaryCrop\\\u0022: \\\u0022\\\u0022,\\n \\\u0022serviceDate\\\u0022: serviceDate,\\n \\\u0022serviceType\\\u0022: serviceType,\\n \\\u0022syncStatus\\\u0022: 1,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225e26f2b46706a300167614a3\\\u0022\\n }\\n\\t\\t}\\n \\n return booking;\\n }\\n \\n var start = 1;\\n var end = 31;\\n var Booking = modules.collectionAccess.collection(\u0027ServiceBookings\u0027);\\n while ( start \u003C end )\\n {\\n var booking = getBooking(start);\\n Booking.save(booking, function(err, booking){\\n if(!err){\\n modules.logger.info(\u0027booking created successfully having ID of \u0027 \u002B booking.bookingID);\\n }\\n })\\n \\n start\u002B\u002B;\\n if( start === end ){\\n response.complete();\\n }\\n }\\n\\n\\t\\n\\n}\u0022\r\n },\r\n \u0022ComputeDailyFuelConsumed\u0022 : {\r\n \u0022code\u0022 : \u0022//Computes daily fuel consumed from FuelHistory collection every 1 minute\\n//for every updated tractor in TractorDetail\\n//Updated by Abdulmajid on 7th February 2020, Updated: 26th February 2020\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n var dailyFuelConsumedCol = modules.collectionAccess.collection(\\\u0022DailyFuelConsumed\\\u0022);\\n var log = modules.logger;\\n var fiveMinutesAgo = modules.moment.utc().subtract(5, \\\u0022minutes\\\u0022).format(\u0027YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\u0027); //2020-02-05T17:22:48.126Z\\n var todaysDate = modules.moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022); //2020-02-05\\n var twoMinutesAgo = modules.moment.utc().subtract(2, \\\u0022minutes\\\u0022).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022); //2020-02-05 23:09:32\\n // var now = modules.moment.utc().format(\u0027YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\u0027); //2020-02-05T17:23:48.126Z\\n var counter = 0;\\n var tractorQuery = {\\n $or: [\\n {\\\u0022_kmd.lmt\\\u0022: {$gte: twoMinutesAgo}},\\n {\\\u0022UpdatedAt\\\u0022: {$gte: twoMinutesAgo}},\\n ]\\n }\\n \\n tractorDetailCol.find(tractorQuery, function(tractorDetailErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0 \u0026\u0026 !tractorDetailErr){\\n counter = tractorDetailList.length;\\n log.info(\\\u0022Found tractors: \\\u0022\u002Bcounter);\\n tractorDetailList.forEach(function(tractorDetail){\\n fuelHistoryCol.find(\\n {$and: [\\n {TractorID: tractorDetail.TractorID},\\n {\\\u0022CreatedAt\\\u0022: {$gte: todaysDate}}\\n ]},\\n {sort: {\\\u0022_kmd.ect\\\u0022: 1}},\\n function(fuelHistoryErr, fuelHistoryList){\\n if (fuelHistoryList \u0026\u0026 fuelHistoryList.length \u003E 0 \u0026\u0026 !fuelHistoryErr){\\n var fuelConsumedLitresForDay = computeFuelConsumedForDay(fuelHistoryList);\\n saveFuelConsumedForTractorForDay(fuelConsumedLitresForDay, tractorDetail, todaysDate)\\n } else{\\n log.info(\\\u0022No fuel history found for \\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022 for \\\u0022\u002BtodaysDate);\\n counter--;\\n finish();\\n }\\n }\\n );\\n })\\n } else {\\n log.info(\\\u0022Could not find tractors: \\\u0022\u002BtractorDetailErr);\\n finish();\\n }\\n });\\n \\n var computeFuelConsumedForDay = function (fuelHistoryList){\\n var totalFuelConsumed = 0;\\n for (var i = 0; i \u003C fuelHistoryList.length; i\u002B\u002B){\\n if (fuelHistoryList.length \u003E (i \u002B 1)){\\n var currFuelLitres = fuelHistoryList[i].FuelLitres;\\n var nextFuelLitres = fuelHistoryList[i \u002B 1].FuelLitres;\\n if (currFuelLitres \u003E nextFuelLitres) totalFuelConsumed \u002B= (currFuelLitres - nextFuelLitres);\\n }\\n } \\n return totalFuelConsumed;\\n }\\n\\n\\n var saveFuelConsumedForTractorForDay = function(fuelConsumedLitresForDay, tractorDetail, todaysDate){\\n var dailyFuelConsumed = {\\n _acl: tractorDetail._acl,\\n _kmd: modules.kinvey.entity()._kmd,\\n Day: todaysDate,\\n FinalLatitude: tractorDetail.PositionLatitude,\\n FinalLongitude: tractorDetail.PositionLongitude,\\n TractorID: tractorDetail.TractorID,\\n FuelLitres: fuelConsumedLitresForDay,\\n TractorModelID: tractorDetail.TractorModelID,\\n ActiveTimeToday: tractorDetail.ActiveTimeToday,\\n CreatedAt: modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n UpdatedAt: modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n ImplementsAttached: tractorDetail.ImplementsAttached? tractorDetail.ImplementsAttached.split(\\\u0022,\\\u0022): [],\\n OperatorID: tractorDetail.OperatorID? [tractorDetail.OperatorID]: [],\\n LastActiveTime: tractorDetail.LastActiveTime,\\n }\\n\\n dailyFuelConsumedCol.update({\\n $and: [\\n {Day: todaysDate},\\n {TractorID: tractorDetail.TractorID}\\n ]\\n }, {$set: dailyFuelConsumed}, \\n {upsert: true},\\n function(updateFuelConsumedErr, updateFuelConsumedRes){\\n log.info(\\\u0022Daily fuel consumed saved for \\\u0022\u002BtractorDetail.TractorID \u002B \\\u0022 for \\\u0022 \u002B todaysDate);\\n counter--;\\n finish();\\n })\\n }\\n\\n var finish = function(){\\n if (counter == 0){\\n log.info(\\\u0022Finished computing fuel consumed\\\u0022);\\n response.complete();\\n }\\n }\\n}\u0022\r\n },\r\n \u0022_ComputeDailyFuelConsumedInit\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n * Compute fuel consumed for previously computed fuel volumes\\n * stored in the FuelHistory collection. \\n * Use skip and limit to avoid timing constraints\\n * Updated by Abdulmajid on 6th February 2020\\n */\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n var dailyFuelConsumedCol = modules.collectionAccess.collection(\\\u0022DailyFuelConsumed\\\u0022);\\n var log = modules.logger;\\n var todaysDate = modules.moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022); //2020-02-05\\n var tractorCounter = 0;\\n var fuelDaysCounter = 0;\\n\\n tractorDetailCol.find({\\\u0022_kmd.lmt\\\u0022: {$gt: \\\u00222020-02-13\\\u0022}}, {sort: {\\\u0022_kmd.ect\\\u0022: -1}, skip: 15, limit: 2}, function(tractorDetailErr, tractorDetailList){\\n tractorCounter = tractorDetailList.length;\\n log.info(\\\u0022Tractors found: \\\u0022\u002BtractorDetailList.length);\\n tractorDetailList.forEach(function(tractorDetail){\\n fuelHistoryCol.find({TractorID: tractorDetail.TractorID}, {sort: {\\\u0022_kmd.ect\\\u0022: 1}}, function(fuelHistoryListErr, fuelHistoryList){\\n if (fuelHistoryList \u0026\u0026 fuelHistoryList.length \u003E 0 \u0026\u0026 !fuelHistoryListErr){\\n var tractorDayFuelHistoryListMap = {};\\n fuelHistoryList.forEach(function(fuelHistory){\\n var day = modules.moment(fuelHistory._kmd.ect).format(\\\u0022YYYY-MM-DD\\\u0022);\\n var fuelHistoryListForDayForTractor = tractorDayFuelHistoryListMap[day];\\n if (!fuelHistoryListForDayForTractor) fuelHistoryListForDayForTractor = [];\\n fuelHistoryListForDayForTractor.push(fuelHistory);\\n tractorDayFuelHistoryListMap[day] = fuelHistoryListForDayForTractor;\\n })\\n\\n fuelDaysCounter = Object.keys(tractorDayFuelHistoryListMap).length;\\n log.info(\\\u0022Fuel days for \\\u0022\u002BtractorDetail.TractorID \u002B\\\u0022 count \\\u0022\u002BfuelDaysCounter);\\n if (fuelDaysCounter){\\n for (var day in tractorDayFuelHistoryListMap){\\n var fuelHistoryListForDay = tractorDayFuelHistoryListMap[day];\\n var fuelConsumedLitresForDay = computeFuelConsumedForDay(fuelHistoryListForDay);\\n saveFuelConsumedForTractorForDay(fuelConsumedLitresForDay, tractorDetail, day);\\n }\\n } else {\\n log.info(\\\u0022No fuel history found for \\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022 for \\\u0022\u002BtodaysDate);\\n tractorCounter--;\\n finish();\\n }\\n } else{\\n log.info(\\\u0022No fuel history found for \\\u0022\u002BtractorDetail.TractorID\u002B\\\u0022 for \\\u0022\u002BtodaysDate);\\n tractorCounter--;\\n finish();\\n }\\n })\\n });\\n });\\n\\n var computeFuelConsumedForDay = function (fuelHistoryList){\\n var totalFuelConsumed = 0;\\n for (var i = 0; i \u003C fuelHistoryList.length; i\u002B\u002B){\\n if (fuelHistoryList.length \u003E (i \u002B 1)){\\n var currFuelLitres = fuelHistoryList[i].FuelLitres;\\n var nextFuelLitres = fuelHistoryList[i \u002B 1].FuelLitres;\\n if (currFuelLitres \u003E= nextFuelLitres) totalFuelConsumed \u002B= (currFuelLitres - nextFuelLitres);\\n }\\n } \\n return totalFuelConsumed;\\n }\\n\\n var saveFuelConsumedForTractorForDay = function(fuelConsumedLitresForDay, tractorDetail, day){\\n var dailyFuelConsumed = {\\n _acl: tractorDetail._acl,\\n Day: day,\\n _kmd: modules.kinvey.entity()._kmd,\\n FinalLatitude: tractorDetail.PositionLatitude,\\n FinalLongitude: tractorDetail.PositionLongitude,\\n TractorID: tractorDetail.TractorID,\\n FuelLitres: fuelConsumedLitresForDay,\\n TractorModelID: tractorDetail.TractorModelID,\\n ActiveTimeToday: null,\\n CreatedAt: modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n UpdatedAt: modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022),\\n ImplementsAttached: tractorDetail.ImplementsAttached? tractorDetail.ImplementsAttached.split(\\\u0022,\\\u0022): [],\\n OperatorID: [tractorDetail.OperatorID],\\n LastActiveTime: modules.moment(day).format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022)\\n }\\n\\n dailyFuelConsumedCol.update({\\n TractorID: tractorDetail.TractorID,\\n Day: day\\n },\\n {$set: dailyFuelConsumed},\\n {multi: false, upsert: true},\\n function(updateFuelConsumedErr, updateFuelConsumedRes){\\n log.info(\\\u0022Daily fuel consumed saved for \\\u0022\u002BtractorDetail.TractorID \u002B \\\u0022 for \\\u0022 \u002B day \u002B \\\u0022, \\\u0022\u002BupdateFuelConsumedRes \u002B \\\u0022, \\\u0022\u002BupdateFuelConsumedErr);\\n fuelDaysCounter--;\\n if (fuelDaysCounter === 0) {\\n tractorCounter--;\\n }\\n finish();\\n })\\n }\\n\\n\\n var finish = function(){\\n if (tractorCounter \u003C= 0){\\n log.info(\\\u0022Finished computing fuel consumed\\\u0022);\\n response.complete();\\n }\\n }\\n}\u0022\r\n },\r\n \u0022__updateTractorLocationOnPostFromLocationService\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n const Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n const tractorLocationUpdate = request.body;\\n\\tvar tractor = {}\\n\\n var getFormattedDateAndTime = function(timestamp){\\n var seconds = new Date(timestamp*1000).toISOString()\\n seconds = seconds.split(\\\u0022T\\\u0022);\\n var date = seconds[1].split(\\\u0022.\\\u0022)[0]\\n var dateAndTime = seconds[0] \u002B \\\u0022 \\\u0022 \u002B date;\\n return dateAndTime;\\n }\\n \\n if(tractorLocationUpdate.latitude \u0026\u0026 tractorLocationUpdate.longitude){\\n \\n tractor.PositionLatitude = tractorLocationUpdate.latitude;\\n \\ttractor.PositionLongitude = tractorLocationUpdate.longitude;\\n \\n }\\n \\n tractor.Status = tractorLocationUpdate.ignitionStatus;\\n tractor.IgnitionStatus = tractorLocationUpdate.ignitionStatus;\\n tractor.Speed = tractorLocationUpdate.speed;\\n tractor.AssetState = tractorLocationUpdate.ignitionStatus == 1 ? \\\u0022On\\\u0022 : \\\u0022Off\\\u0022;\\n\\n \\n var last_active_time = getFormattedDateAndTime(tractorLocationUpdate.updateTime);\\n \\n if( last_active_time != \\\u00221970-01-01 00:00:00\\\u0022){\\n tractor.LastActiveTime = last_active_time\\n }\\n \\n tractor.UpdatedAt = modules.moment.utc().format(\u0027YYYY-MM-DD HH:mm:ss\u0027);\\n tractor.FuelLevelVoltage = tractorLocationUpdate.fuelLevelVoltage;\\n tractor.FuelRawValue = tractorLocationUpdate.fuelRawValue;\\n \\n if(tractorLocationUpdate.street \u0026\u0026 tractorLocationUpdate.town \u0026\u0026 tractorLocationUpdate.country){\\n \\ttractor.Street = tractorLocationUpdate.street;\\n \\t\\ttractor.Town = tractorLocationUpdate.town;\\n \\t\\ttractor.Country = tractorLocationUpdate.country;\\n }\\n \\n\\n\\tvar ASSET_ID = Number(tractorLocationUpdate.assetId);\\n \\n Tractor.update({TractorID: ASSET_ID}, {$set:tractor}, function(err, updated){\\n \\n if(err){\\n modules.logger.info(\u0027cannot find tractor with ID of \u0027 \u002B tractorLocationUpdate.assetId )\\n }\\n \\n if( updated ){\\n \\t\\tmodules.logger.info(\u0027successfully updated tractor with the id of \u0027 \u002B tractorLocationUpdate.assetId);\\n }\\n \\t\\t\\n })\\n \\n response.complete(200);\\n}\u0022\r\n },\r\n \u0022playground\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n const Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n Tractor.find({\\\u0022LastActiveTime\\\u0022: {\\\u0022$gte\\\u0022: \\\u00222020-03-09\\\u0022}}, function(err, activeTractors){\\n \\n if( err ){\\n modules.logger.info(\\\u0022There was an error \\\u0022 \u002B err.message);\\n response.complete();\\n }\\n modules.logger.info(\\\u0022we had \\\u0022 \u002B activeTractors.length \u002B \\\u0022 tractors active for \\\u0022 \u002B activeTractors[activeTractors.length-1].LastActiveTime)\\n })\\n response.complete();\\n \\n}\u0022\r\n },\r\n \u0022genericUpdate\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n modules.logger.info(\\\u0022Started\\\u0022);\\n const collection = modules.collectionAccess.collection(request.body.collectionName);\\n \\n collection.update(\\n \\t request.body.query,\\n {$set:request.body.changes}, {\\\u0022upsert\\\u0022:false},\\n function(err, updated) {\\n \\n response.body = {\\\u0022success\\\u0022: false}\\n if (!err) {\\n response.body = {\\\u0022success\\\u0022: true, \\\u0022updated\\\u0022: updated};\\n } else {\\n response.body = {\\\u0022success\\\u0022: false}\\n }\\n modules.logger.info(\\\u0022Completing response\\\u0022);\\n response.complete();\\n }\\n )\\n modules.logger.info(\\\u0022Finished?\\\u0022);\\n}\\n\u0022\r\n },\r\n \u0022_FixTractorDetailGeofence\u0022 : {\r\n \u0022code\u0022 : \u0022var tractorDetailDocs = {\\n \\\u0022100003\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u0022576d164fc2a105e65b9101d0\\\u0022,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,103,104\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00226.6903\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00227.0551\\\u0022,\\n \\\u0022OperatorID\\\u0022: 200010,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022TractorID\\\u0022: 100003,\\n \\\u0022TractorName\\\u0022: \\\u0022ST - Adani-Enugu\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022573f5f1dc974a4187580c2a1\\\u0022\\n },\\n \\\u0022LastActivityId\\\u0022: 2222252,\\n \\\u0022PositionLatitude\\\u0022: 7.7928,\\n \\\u0022PositionLongitude\\\u0022: 8.8779,\\n \\\u0022Street\\\u0022: \\\u0022Unnamed Road\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022RAND\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222017-07-17 22:11:51.0\\\u0022,\\n \\\u0022EngineHours\\\u0022: 12,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:03.172Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222016-06-24T11:15:27.189Z\\\u0022\\n },\\n \\\u0022TotalDistanceCovered\\\u0022: 0,\\n \\\u0022LastOdometerValue\\\u0022: 183069,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100003,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022100004\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u002257a9a17f560f24772f788b49\\\u0022,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,104,103,105,106,107\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00228.921\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00227.2557\\\u0022,\\n \\\u0022OperatorID\\\u0022: 200012,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022TractorID\\\u0022: 100004,\\n \\\u0022TractorName\\\u0022: \\\u0022ST - Sauka-Abuja\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022573f5f1dc974a4187580c2a1\\\u0022\\n },\\n \\\u0022LastActivityId\\\u0022: 467405,\\n \\\u0022PositionLatitude\\\u0022: 8.9207,\\n \\\u0022PositionLongitude\\\u0022: 7.2557,\\n \\\u0022Street\\\u0022: \\\u0022Unnamed Road\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Kuje\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022RAND\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222016-06-25 12:31:58.0\\\u0022,\\n \\\u0022EngineHours\\\u0022: 0,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022TotalDistanceCovered\\\u0022: 0,\\n \\\u0022license_plate_number\\\u0022: \\\u0022\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:02.866Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222016-08-09T09:25:19.373Z\\\u0022\\n },\\n \\\u0022LastOdometerValue\\\u0022: 1252,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100004,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022100006\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u0022581f98301cefe568583e635d\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,109,103,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022Nigerian naira\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022EngineHours\\\u0022: 68,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222016-11-30 11:04:06.0\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002211.683303399360158,11.683303399360158,11.683303399360158,11.683303399360158,11.683303399360158,11.683303399360158,11.683303399360158,11.685544898044192,11.687786378591534,11.688682703072708,11.689131192548386,11.689131192548386,11.689131192548386,11.689131192548386,11.689131192548386,11.689131192548386,11.690027512677046,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.690475999974769,11.688234541194724,11.684200066675727,11.682855228779388,11.67657912285859,11.670303203203286,11.66402681320257,11.655508886333045,11.646990369864753,11.638471920713469,11.629953210696781,11.621882509664195,11.614708137952661,11.607085617267693,11.602601336516168,11.599014254145425,11.593184572223475,11.591390976307318,11.58959736887455,11.58735509705865,11.586009791021313,11.586458117605316,11.586458117605316,11.586458117605316,11.586906771913686,11.586906771913686,11.58825207363273,11.58959736887455,11.59004568970237,11.59004568970237,11.59004568970237,11.59004568970237,11.589148718886381,11.589148718886381,11.58825207363273,11.58825207363273,11.587803421484338,11.58735509705865,11.58735509705865,11.58735509705865,11.58735509705865,11.58735509705865,11.588700396619245,11.59094265763846,11.595426797246038,11.599014254145425,11.602601336516168,11.609776019752015,11.616053305665764,11.626366151870771,11.634436722940638,11.643852093354933,11.652818925845343,11.661785140581939,11.668509775777737,11.674786064356036,11.683751897545326,11.69316559523332\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00228.942913338541985,8.942913338541985,8.942913338541985,8.942913338541985,8.942913338541985,8.942913338541985,8.942913338541985,8.947948850691319,8.955730609595776,8.96625928580761,8.978161253035069,8.990520872175694,9.002422504127027,9.01295118033886,9.021648578345774,9.028057381510735,9.03217725455761,9.035839475691317,9.03767041862011,9.038586057722567,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.038128070533276,9.037212766706944,9.035839475691317,9.035381488502026,9.03492383658886,9.032634906470776,9.031719602644444,9.030803963541986,9.029888324439526,9.028973020613192,9.028973020613192,9.029888324439526,9.029888324439526,9.029888324439526,9.029888324439526,9.029888324439526,9.029888324439526,9.029888324439526,9.02943067252636,9.028973020613192,9.028973020613192,9.028973020613192,9.028973020613192,9.028973020613192,9.027141742408276,9.025310799479485,9.017071053385733,9.011120237410069,9.003338143229485,8.994182758033276,8.98548536002636,8.975872322916985,8.96625928580761,8.9571039006114,8.950237445533276,8.947033211588861,8.944744281470777,8.942913338541985,8.94337099045515,8.94337099045515,8.94337099045515,8.94337099045515,8.94337099045515,8.94428662955761,8.944744281470777,8.94428662955761,8.94428662955761,8.94428662955761,8.94428662955761,8.945659920573235,8.947033211588861,8.94886415451765,8.950237445533276,8.9516107365489,8.953899666666985,8.95527295768261,8.95801953971386,8.960308469831944\\\u0022,\\n \\\u0022OperatorID\\\u0022: 200024,\\n \\\u0022PositionLatitude\\\u0022: 11.6299,\\n \\\u0022PositionLongitude\\\u0022: 8.9803,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Unnamed Road\\\u0022,\\n \\\u0022TotalHectaresTilled\\\u0022: 63.98039999999998,\\n \\\u0022Town\\\u0022: \\\u0022\\\u0022,\\n \\\u0022TractorID\\\u0022: 100006,\\n \\\u0022TractorModelID\\\u0022: 1,\\n \\\u0022TractorName\\\u0022: \\\u0022Smart Tractor\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022574370f9d9f4789c35cb0338\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:03.691Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222016-11-06T20:53:04.706Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022ABJ-100006\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022LastActivityId\\\u0022: 577372,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 72,\\n \\\u0022LastOdometerValue\\\u0022: 9529754,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100006,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022100007\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u0022576a4551e7e23c1c6af98181\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,103,104,105,106,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022Kenyan shilling\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 2342,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022101,106\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222018-02-23 12:09:35.0\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002210.968369429166206,10.969268011196519,10.969268011196519,10.969268011196519,10.970616208269321,10.97331258396556,10.978255985215984,10.984996703973835,10.994882703309676,11.003420659297309,11.013755263714485,11.02678572107173,11.039815600981564,11.051496753102958,11.063177769151824,11.073510600202674,11.083842737545897,11.096420985404299,11.109447438997163,11.123372079376106,11.137744758124983,11.15346441226369,11.170979474486504,11.187595241426743,11.202863263855992,11.214987121837828,11.232947348195168,11.239682186029667,11.245518808624833,11.250457599309273,11.25360024265837,11.25674318053576,11.259436912077993,11.261232609492504,11.262579457404454,11.262579457404454,11.261232609492504,11.257192027934865,11.25090645650642,11.241927206634047,11.234743210710949,11.225314232296705,11.213190807561734,11.200169004170773,11.188044525221741,11.172775721729545,11.157506443459999,11.143583764565616,11.131456921820774,11.120677082039979,11.109896843575331,11.099565298272527,11.089682823153924,11.079350563051927,11.071264277758601,11.064525536087595,11.05868527761734,11.053294065278743,11.04610540864066,11.038916905000146,11.032177420199105,11.02678572107173,11.022741881839204,11.01824877163074,11.012856817180994,11.007464763978293,11.00252185212558,10.998028433387537,10.994882703309676,10.99173726880121,10.988142210344721,10.985895564557177,10.98409784065328,10.983199303730652,10.981401563407424,10.979604141277685,10.977806708208213,10.976458214799925,10.97555965463244,10.974211480112007,10.972413685084664,10.96971763033732,10.967470515252176,10.968369429166206\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00227.740582972764969,7.720441259443761,7.71311715245247,7.704877406358718,7.693891078233719,7.678784877061844,7.664136327803135,7.652692347764969,7.642163671553135,7.633008286356926,7.624310888350011,7.615155503153801,7.607373744249343,7.601880580186844,7.597760707139968,7.594556137919426,7.5931828469038,7.591809555888176,7.592267543077469,7.594556137919426,7.599133998155594,7.60783139616251,7.619275376200675,7.632092982530595,7.645367905497551,7.656812220811844,7.673291712999344,7.682904750108719,7.691144496202468,7.699384242296219,7.707623988389968,7.718610316514968,7.730969935655594,7.743787206709386,7.757520116865635,7.7744572609663,7.790479101240636,7.807416245341301,7.824353724718094,7.839459925889968,7.851819545030593,7.86326352506876,7.871960923075676,7.877912074327469,7.879285365343094,7.878369726240636,7.876538783311845,7.875623144209385,7.874707505106926,7.87424985319376,7.873792201280595,7.873792201280595,7.871960923075676,7.868756689131261,7.86692574620247,7.865552455186843,7.863721176981926,7.861890234053136,7.860059291124345,7.856854721903802,7.85319283604622,7.849988266825677,7.847241684794425,7.843121811747552,7.836255356669426,7.830304540693759,7.824353724718094,7.8184025734663,7.813367396593095,7.807874232530594,7.801923081278802,7.797345556318761,7.794141322374344,7.791394740343093,7.787732519209386,7.783154994249345,7.779035121202468,7.775372900068761,7.772626318037509,7.768506444990635,7.7634709328413,7.755689173936845,7.75065366178751,7.746991440653801\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 200008,\\n \\\u0022PositionLatitude\\\u0022: 11.0798,\\n \\\u0022PositionLongitude\\\u0022: 7.7003,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022,\\n \\\u0022Speed\\\u0022: 1,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022A 236\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 5595,\\n \\\u0022TotalHectaresTilled\\\u0022: 241.3,\\n \\\u0022Town\\\u0022: \\\u0022Zaria\\\u0022,\\n \\\u0022TractorID\\\u0022: 100007,\\n \\\u0022TractorModelID\\\u0022: 3,\\n \\\u0022TractorName\\\u0022: \\\u002255-i7 Tractor \\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 14:34:56\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022574370f9d9f4789c35cb0338\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022135762\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-30T14:34:56.637Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222016-06-22T07:59:13.273Z\\\u0022\\n }\\n },\\n \\\u0022100017\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225938572c944525fa3b90dd2c\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,103,104,105,106,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 47,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022vcdp111\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-02-08 10:09:09.0\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00226.4006249698685185,6.4006249698685185,6.399019342800156,6.397949144076344,6.397414043873856,6.394737868077313,6.3915269050987025,6.387780478485175,6.382428345296009,6.377076156182538,6.370653655414687,6.365301343432165,6.358878695359991,6.351920486162613,6.344962516118979,6.331045961026744,6.303211393282941,6.287687741514472,6.274840437762916,6.268951900991439,6.264133776030762,6.259851183135003,6.255033307477385,6.251821143512776,6.249144547327627,6.24753844972999,6.245932347203625,6.244326239749767,6.242720127369673,6.240578747631807,6.23522542665143,6.2314778694695505,6.232013141193195,6.233084016296322,6.2357606945509145,6.2395082211258455,6.242184866577926,6.244861831639559,6.24753844972999,6.252356394449881,6.258245118425702,6.266810628703741,6.278052460054905,6.287687741514472,6.29518202212718,6.304817319254159,6.3176642146443776,6.3294401164378815,6.338004118890134,6.346568312386502,6.355667174623511,6.363160469661226,6.370118526689532,6.376541034157717,6.379216971895849,6.380822661112007,6.382963461172944,6.385104252285823,6.3867099230453634,6.388850698491669,6.392597117267979,6.395808406715248,6.398484243718457,6.4027656870461715,6.406512003803913,6.410258293057541,6.414004554791266,6.419891434279956,6.423102551927795,6.426848719187138,6.429524393266931,6.431664989026081,6.432735450107755,6.432735450107755,6.432735450107755,6.433805575770027,6.4332705132206,6.432200053265949,6.431664989026081,6.430059459759979,6.428989326210783,6.425778245712027,6.424172697861498,6.423102551927795,6.42256714494521,6.42149699563573,6.419356357094327,6.416680296382352,6.413469471422766,6.411328799152853,6.4097232057573414,6.4097232057573414,6.4097232057573414,6.413469471422766,6.414539637598028\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00228.166347779333591,8.166347779333591,8.151268735527992,8.142651803791525,8.13403520733118,8.125418610870836,8.115724772214888,8.105492144823074,8.095798306167126,8.087181709706782,8.07964202016592,8.072641119360924,8.06617833673954,8.060254342854023,8.05486913770437,8.045713752508163,8.03332731127739,8.034942671656609,8.043021149933338,8.04732944816351,8.05217619985342,8.057561740279198,8.064562976360321,8.072641119360924,8.082334958016872,8.091490007936953,8.098491244018078,8.104953691363335,8.111954927444458,8.118955828249454,8.132957965135576,8.155577033758163,8.17065641283989,8.180349916219713,8.192197903990746,8.201891742646694,8.210508674383163,8.21697112172842,8.222895115613937,8.232588954269886,8.242282792925835,8.251438178122044,8.259516321122646,8.265978768467905,8.27244121581316,8.277826756238937,8.282673507928848,8.28644335269928,8.287520594894886,8.288059048354626,8.289674744009972,8.289674744009972,8.289674744009972,8.289674744009972,8.289674744009972,8.289136290550232,8.288597501814365,8.287520594894886,8.28590489923954,8.283750750124454,8.280519358813763,8.276211060583591,8.271902762353418,8.268671371042728,8.264363072812557,8.260593228042126,8.255746476352215,8.250899389386179,8.247129544615744,8.242821246385574,8.237974494695663,8.232588954269886,8.22612650692463,8.219663724303246,8.213201276957989,8.205661587417126,8.19973759353161,8.193275146186352,8.187889605760574,8.183042854070663,8.178195767104626,8.172810561954973,8.167963474988937,8.164193630218506,8.16150102764368,8.159346878528595,8.156115487217903,8.151807188987734,8.148037344217302,8.144805952906609,8.142651803791525,8.14319059252739,8.14319059252739,8.144805952906609,8.145344741642475\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 6.0156,\\n \\\u0022PositionLongitude\\\u0022: 7.8308,\\n \\\u0022Speed\\\u0022: 6,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Unnamed Road\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022Town\\\u0022: \\\u0022Okposi\\\u0022,\\n \\\u0022TractorID\\\u0022: 100017,\\n \\\u0022TractorModelID\\\u0022: 8,\\n \\\u0022TractorName\\\u0022: \\\u0022VCDP EBONYI\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022license_plate_number\\\u0022: \\\u0022vcdp Ebonyi 111\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225937bcc903f5fcc4201ee286\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:03.660Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-06-07T19:42:36.977Z\\\u0022\\n },\\n \\\u0022LastActivityId\\\u0022: 96896916,\\n \\\u0022LastOdometerValue\\\u0022: 1348,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100017,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022100018\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u0022580f7c54a56e04b64d17c82d\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022Nigerian naira\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Latitude\\\u0022: \\\u00225.132716055814091,5.133171872446192,5.13362802268376,5.13408383866409,5.13408383866409,5.134539654318615,5.134539654318615,5.134539654318615,5.134539654318615,5.134539654318615,5.134995803577819,5.135451618580394,5.135907433257078,5.136363581537649,5.136363581537649,5.134539654318615,5.132260238856277,5.1299804813160845,5.127244895092555,5.1240534743323485,5.121773687493688,5.119038066130716,5.117214423367859,5.115846604399381,5.114478782507515,5.113110957693023,5.1117431299566976,5.110375299299299,5.1090074657216045,5.104903947474478,5.1035361022233205,5.102168254055759,5.100800402972521,5.099888389314654,5.098976374361194,5.098064692062178,5.09715267451869,5.096696832236612,5.095328969498485,5.094872791971046,5.093961103848573,5.093504925350224,5.09259323528764,5.09259323528764,5.0916812099791455,5.090769183377108,5.090313336568006,5.089401308026338,5.088945460247905,5.088033429767144,5.087577581019634,5.087121731949246,5.086665548600272,5.085753848844831,5.0852976645265136,5.0852976645265136,5.084385962834052,5.084385962834052,5.083929777546644,5.08301807391767,5.082561887661427,5.082561887661427,5.082106035040218,5.081193994871639,5.08073814128265,5.080282287371191,5.079826099178055,5.078914389742647,5.078458200581451,5.077546489211592,5.077090299082592,5.076178585778802,5.0757223946822645,5.07435448738122,5.072986577180261,5.072074858077774,5.070706943045794,5.069794886759677,5.0693390251159345,5.067971104288984,5.066603180565718,5.0661469827035805,5.065235253946914,5.064323189937024,5.063411124640472,5.0624993920257415,5.061587324157063,5.061131456724939,5.060219386927636,5.059307315844714,5.058395577446743,5.0579393737955884,5.057027633470914,5.056571428855822,5.054747609098303,5.052923784205701,5.052011702847501,5.050187870255235,5.048819908950231,5.047451944759712,5.046083977684506,5.04471600772534,5.043348034883012,5.038787881942042,5.036508127450971,5.034683917322972,5.0333159233605915,5.030579926806464,5.029211924216256,5.027843918751653,5.02647591041342,5.025107899202345,5.023739885119177,5.022371868164719,5.021003848339735,5.020092056188761,5.019179928772669,5.01735600410627,5.01598797376309,5.014619940553008,5.01279566915208,5.010971726651065,5.007779731525913,5.006411681130581,5.005043627873756,5.004131479447123,5.003219329748994,5.002763421422621,5.001395360538672,5.000939450942012,5.000027296796067,4.998659230195581,4.998203318694188,4.997291160737964,4.995467175018974,4.994099098898006,4.993186935230207,4.990906687512837,4.989538601879313,4.988170513393837,4.9858905822541235,4.98361030919094,4.980418180816754,4.97722570293256,4.975857588814333,4.972665422817049,4.971297299221366,4.969929172784036,4.968561043505859,4.9671929113875875,4.965368842152639,4.964000703410747,4.964000703410747,4.963544433853652,4.96308849800005,4.961720354529195,4.960808145966162,4.960808145966162,4.960808145966162,4.960808145966162,4.960352208222126,4.95989627016319,4.95989627016319,4.958984059079617,4.958071846735896,4.956247752291388,4.954879594647218,4.950775104723753,4.9484947101949315,4.94484646343889,4.943478282215767,4.942110098166747,4.940741911292606,4.939373721594132,4.9384614822159625,4.937549241582798,4.936181045296746,4.936181045296746,4.936181045296746,4.936181045296746,4.936637333727278,4.938005529072102,4.939373721594132,4.940741911292606,4.9411978625544695,4.942566048487217,4.943934231594577,4.94484646343889,4.94530241187581,4.946214641835351,4.9484947101949315,4.949862881050298,4.952599214271762,4.955335536169014,4.958071846735896,4.961264417415253,4.964912573541924,4.967648844403614,4.969016975575506,4.970385103907047,4.970385103907047,4.970385103907047,4.969929172784036,4.968561043505859,4.965824776430022,4.964456638633913,4.961720354529195,4.960352208222126,4.957615907102445,4.956247752291388,4.953511434170701,4.952599214271762,4.952599214271762,4.952599214271762,4.952599214271762,4.952599214271762,4.952599214271762,4.9539673766363075,4.956247752291388,4.956703692869144,4.958984059079617,4.96308849800005,4.964456638633913,4.970385103907047,4.972665422817049,4.9767697765465915,4.979505998143932,4.986346502313906,4.988626765876557,4.991362938093241,4.991818854351879,4.993186935230207,4.998659230195581,5.002763421422621,5.006411681130581,5.010515823729001,5.010971726651065,5.01279566915208,5.0141637061839806,5.015531740349997,5.016443872865434,5.01735600410627,5.017811902253023,5.019179928772669,5.020547952423594,5.022371868164719,5.022828096794296,5.025107899202345,5.0255641259166675,5.030124037590784,5.031947926521501,5.036508127450971,5.039699981887226,5.045171886706401,5.0479078218185345,5.053835530307421,5.0624993920257415,5.067971104288984,5.07435448738122,5.078458200581451,5.082561887661427,5.086665548600272,5.091225363816473,5.093504925350224,5.095784812751116,5.101256242341453,5.104903947474478,5.10763962922439,5.110375299299299,5.112198961545929,5.113110957693023,5.114478782507515,5.116302433066966,5.117214423367859,5.117214423367859,5.117214423367859,5.115390441466361,5.114022618599719,5.112654792810731,5.111286964100151,5.110831131861908,5.110831131861908,5.111286964100151,5.112654792810731,5.114934612149241,5.117214423367859,5.119950052531561,5.123597317253356,5.128156869780892,5.1299804813160845,5.13362802268376,5.13408383866409,5.134995803577819,5.135451618580394,5.135451618580394,5.133171872446192,5.131804087640573,5.131348270031165,5.1299804813160845,5.1299804813160845,5.1295246624040605,5.1295246624040605,5.1295246624040605,5.1295246624040605,5.1295246624040605,5.1295246624040605\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00228.514507561922073,8.513591922819614,8.513134270906448,8.51221863180399,8.511760979890823,8.511303327977657,8.510845340788364,8.510387688875198,8.510387688875198,8.509930036962032,8.509930036962032,8.509930036962032,8.509930036962032,8.510387688875198,8.511760979890823,8.517711795866491,8.520916365087032,8.524578250944616,8.527782820165157,8.53144470602274,8.534191288053988,8.536937870085238,8.539226800203322,8.540600091218948,8.541973382234573,8.542889021337032,8.543346673250198,8.54517761617899,8.546093255281447,8.548839837312698,8.550213128328323,8.55067078024149,8.551586419343948,8.552044071257114,8.552959710359573,8.55341736227274,8.554333001375198,8.554790653288364,8.555706292390823,8.555706292390823,8.555706292390823,8.555706292390823,8.555706292390823,8.555706292390823,8.55616394430399,8.55616394430399,8.55616394430399,8.556621931493282,8.556621931493282,8.556621931493282,8.556621931493282,8.557079583406448,8.557079583406448,8.557537235319614,8.557995222508907,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557537235319614,8.557079583406448,8.556621931493282,8.556621931493282,8.55616394430399,8.55616394430399,8.555706292390823,8.555248640477657,8.555248640477657,8.554790653288364,8.554333001375198,8.554333001375198,8.55341736227274,8.552502058446407,8.552502058446407,8.552044071257114,8.551586419343948,8.55067078024149,8.55067078024149,8.550213128328323,8.550213128328323,8.54792419821024,8.547466546297073,8.547466546297073,8.547008894383907,8.546550907194614,8.546093255281447,8.545635603368282,8.545635603368282,8.54517761617899,8.54517761617899,8.544719964265823,8.544719964265823,8.544719964265823,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.544262312352657,8.543804325163364,8.543346673250198,8.543346673250198,8.54243103414774,8.541515730321406,8.540600091218948,8.540142439305782,8.538769148290159,8.537853509187698,8.537395857274532,8.536022566258907,8.535106927156448,8.532360345125198,8.529156111180784,8.527782820165157,8.525036238133907,8.523662947118282,8.522289656102659,8.520916365087032,8.519543074071407,8.516796492040157,8.514965213835241,8.514507561922073,8.513134270906448,8.51221863180399,8.50947204977274,8.507183454930782,8.50123230367899,8.49848572164774,8.496654778718948,8.492534905672073,8.488872684538364,8.48749939352274,8.48475281149149,8.483379520475864,8.480632938444614,8.478801995515823,8.475597761571407,8.47376648336649,8.47101990133524,8.469646610319614,8.467815667390823,8.466442376375198,8.464153446257114,8.462322503328322,8.459575921297075,8.455456048250198,8.453167118132114,8.44904724508524,8.447216302156448,8.444469720125198,8.440807498991491,8.43806091696024,8.43531433492899,8.433483392000198,8.431194461882114,8.42982117086649,8.427990227937698,8.427532576024532,8.426159285008907,8.423870354890823,8.422497063875198,8.419750481843948,8.417003899812698,8.414257317781448,8.410137444734573,8.404644280672073,8.39960876852274,8.39686218649149,8.39319996535778,8.39136902242899,8.388164788484572,8.386791497468948,8.383129276335238,8.379467390477657,8.378094099462034,8.375347182154655,8.37397389113903,8.371227309107779,8.370312005281448,8.368938714265825,8.36848072707653,8.367107436060905,8.366192132234575,8.365276493132114,8.364360854029654,8.36298756301403,8.359325677156448,8.352001234889032,8.348797000944614,8.340557254850864,8.329113274812698,8.324993401765823,8.313091434538364,8.310344852507114,8.306224979460238,8.304851688444614,8.3016474545002,8.3016474545002,8.3016474545002,8.3016474545002,8.3016474545002,8.304851688444614,8.308971561491488,8.31446472555399,8.320415541529655,8.322246819734573,8.324993401765823,8.32728199660778,8.33002857863903,8.331401869654655,8.33277516067028,8.334606438875198,8.33826832473278,8.341472893953323,8.345134779810905,8.346050418913364,8.348339349031448,8.348797000944614,8.351085931062698,8.351543582975864,8.35291687399149,8.353374525904655,8.353832513093948,8.353832513093948,8.353832513093948,8.353832513093948,8.353832513093948,8.353832513093948,8.353832513093948,8.353832513093948,8.353832513093948,8.352459222078323,8.352001234889032,8.351085931062698,8.34925465285778,8.34650807082653,8.34467712789774,8.342846184968948,8.341472893953323,8.341472893953323,8.341472893953323,8.343303836882114,8.348797000944614,8.354290165007114,8.359783329069614,8.368023075163364,8.37397389113903,8.379467390477657,8.384502567350864,8.392742313444614,8.395488895475864,8.400066755712032,8.40418629348278,8.408306501805782,8.411510735750198,8.415172956883907,8.419750481843948,8.426616936922073,8.429363518953323,8.437145613133907,8.440349847078323,8.443096429109575,8.45179382711649,8.461406864225864,8.471935540437698,8.477428704500198,8.48475281149149,8.494823835790157,8.502147942781448,8.508556745946407,8.517254143953325,8.522289656102659,8.524120599031448,8.53144470602274,8.532360345125198\\\u0022,\\n \\\u0022OperatorID\\\u0022: 200022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022TractorID\\\u0022: 100018,\\n \\\u0022TractorName\\\u0022: \\\u0022Tohfan 5503-1\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022580f7b6296db64743e9bb919\\\u0022\\n },\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022LastActivityId\\\u0022: 95965906,\\n \\\u0022PositionLatitude\\\u0022: 10.5236,\\n \\\u0022PositionLongitude\\\u0022: 7.4355,\\n \\\u0022Street\\\u0022: \\\u0022Crescent Road\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Zaria\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-01-14T13:32:02.171Z\\\u0022,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-01-14 13:42:03.0\\\u0022,\\n \\\u0022EngineHours\\\u0022: 1112,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:03.005Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222016-10-25T15:37:56.413Z\\\u0022\\n },\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 1335,\\n \\\u0022LastOdometerValue\\\u0022: 10774038,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100018,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022100027\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u0022591dc3261d1446a550d408f0\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102,109,103,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: null,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022EngineHours\\\u0022: 545,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-04-24 17:42:01.0\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00227.323563599380041,7.317687229032866,7.315755136308585,7.314064465176215,7.312213166290722,7.310361527178573,7.308751313218685,7.307382859576424,7.306336313950473,7.305772967435108,7.305128809421868,7.304645939718976,7.304323693738604,7.304001780081477,7.303921301630968,7.303760344686493,7.303357619515714,7.303035705162897,7.302633311895925,7.302069628156755,7.301586755149597,7.301023070091121,7.300379237792276,7.299976509576268,7.299735072007859,7.299654592789412,7.299654592789412,7.299654592789412,7.299654592789412,7.299654592789412,7.2995741135565,7.299493634309099,7.299332675770872,7.299171384615581,7.299010425961392,7.298688508479254,7.298366590765456,7.297883381200348,7.297400503673788,7.296917293065279,7.296273454857269,7.295870722945253,7.295548803204171,7.295307363246389,7.295226883231532,7.295226883231532,7.295307363246389,7.295548803204171,7.295951202844339,7.296434414496121,7.296917293065279,7.297400503673788,7.298044340260046,7.298768987871511,7.299493634309099,7.300056988736792,7.30062067501295,7.301184028020995,7.301586755149597,7.301908670545648,7.302311064464774,7.302713790578283,7.303277140949242,7.304001780081477,7.3048068963445685,7.305772967435108,7.30689999230906,7.307866058874637,7.308993078468995,7.30995914050835,7.310844390704281,7.311649494636795,7.312374120189906,7.313098744567013,7.31374255853861,7.3143062275499675,7.3147890868096095,7.315352754499409,7.315755136308585,7.3161575177549505,7.3164797551970855,7.31680165986052,7.317123564291722,7.317445801036235,7.31849232062292,7.319297078215892,7.320585352431132,7.321229155600599,7.321873290382878,7.322517091692917,7.323080749617992,7.324207730789761,7.324610104610567,7.325012810608047,7.325334709112325,7.325656607384142,7.326059312436069,7.3263007357691805,7.32654215897152,7.327105811806664,7.327508183010918,7.327749605559069,7.328393730918612,7.328715626980592,7.328957048874439,7.329601172488174,7.329762120111983,7.33024529517049,7.33024529517049,7.3303257688732835,7.3303257688732835,7.3303257688732835,7.33024529517049,7.330164821453144,7.330164821453144,7.330084347721256,7.330084347721256,7.3299230676776395,7.3299230676776395,7.3298425939020895,7.329762120111983,7.329762120111983,7.329762120111983,7.329762120111983,7.3298425939020895,7.3299230676776395,7.330406242561547,7.33056718989445,7.331050031544189,7.331211311179714,7.33145273172082,7.331694152131079,7.3317746255720735,7.331855098998539,7.331855098998539,7.331855098998539,7.331855098998539,7.3317746255720735,7.331694152131079,7.331694152131079,7.33145273172082,7.331130837636916,7.331050031544189,7.33056718989445,7.3303257688732835,7.329762120111983,7.329440224806212,7.329198803174213,7.328554678978678,7.3282327828003915,7.327669131390899,7.327347234572823,7.326944863223232,7.3263007357691805,7.325898363474645,7.325656607384142,7.325495658277303,7.32509328525591,7.324288205582975,7.323563599380041,7.322275666310587,7.321631864651959,7.321148680255241\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00228.220258504152298,8.218716569244862,8.21822974830866,8.217661455273628,8.217255771160126,8.217012025415897,8.216606341302395,8.216362930834293,8.216444067656996,8.216444067656996,8.216444067656996,8.216444067656996,8.216444067656996,8.216606341302395,8.216687478125095,8.216930888593197,8.217336907982826,8.217742592096329,8.21822974830866,8.218797706067562,8.219528272747993,8.220339976251125,8.221313618123531,8.222368732094765,8.223504982888699,8.224560096859932,8.225534074008465,8.226426914334297,8.22748202830553,8.228618279099464,8.229754529893398,8.230809643864632,8.232027031481264,8.2331632822752,8.234381005167961,8.235598392784595,8.23681578040123,8.238033168017864,8.239169418811798,8.240549080073833,8.241766802966596,8.242903053760529,8.244039304554462,8.245175555348396,8.246555216610432,8.247772604227066,8.248989991843699,8.250288851559162,8.251506239175797,8.252885900437834,8.254184424877167,8.255401812493801,8.256375789642334,8.257349766790867,8.2584860175848,8.259541131556034,8.260271698236465,8.261083401739597,8.2616513594985,8.26213851571083,8.262706473469734,8.263193629682064,8.263680450618267,8.264248743653297,8.2647355645895,8.265060111880302,8.265384994447231,8.265709541738033,8.265952952206135,8.266196362674236,8.266277499496937,8.266358971595764,8.266440108418465,8.266440108418465,8.266440108418465,8.266440108418465,8.266440108418465,8.266358971595764,8.266196362674236,8.266115225851536,8.265871815383434,8.265790678560734,8.265628404915331,8.265466131269932,8.265060111880302,8.2646544277668,8.263680450618267,8.263274766504765,8.262787610292435,8.26213851571083,8.261570222675802,8.260271698236465,8.259703405201435,8.259135447442532,8.2584860175848,8.257918059825897,8.257430903613567,8.256862945854664,8.256538063287735,8.255482949316502,8.254996128380299,8.254508972167969,8.253453858196735,8.252967037260532,8.252561353147032,8.251506239175797,8.251100219786167,8.250207379460335,8.249882832169533,8.24939601123333,8.248908855021,8.248422034084797,8.247204646468163,8.246555216610432,8.245986923575401,8.245256692171097,8.244607262313366,8.243958167731762,8.24322760105133,8.242497034370901,8.241036236286162,8.24030566960573,8.2395751029253,8.238357715308666,8.23746521025896,8.23689691722393,8.235517255961895,8.234786689281464,8.23365043848753,8.233082145452498,8.232514187693596,8.231377936899662,8.23105338960886,8.23048509657383,8.229511119425295,8.229024298489094,8.228293731808662,8.22796918451786,8.227644301950932,8.22731975466013,8.226670324802399,8.226426914334297,8.226021230220795,8.225371800363064,8.224966116249561,8.224478960037231,8.22431668639183,8.22415441274643,8.223748728632927,8.223586454987526,8.223261572420597,8.223099298775196,8.223018161952494,8.222937025129795,8.222612477838991,8.222693614661694,8.222612477838991,8.222531341016293,8.222287595272062,8.22196304798126,8.221394754946232,8.221313618123531,8.221394754946232\\\u0022,\\n \\\u0022PositionLatitude\\\u0022: 9.5351,\\n \\\u0022PositionLongitude\\\u0022: 7.5034,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Unnamed Road\\\u0022,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022Town\\\u0022: \\\u0022\\\u0022,\\n \\\u0022TractorID\\\u0022: 100027,\\n \\\u0022TractorModelID\\\u0022: 8,\\n \\\u0022TractorName\\\u0022: \\\u0022JD02 (Jibril)\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022591dc2511d1446a550d405dc\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:03.642Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-05-18T15:52:06.278Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022ABC0000\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: false,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222018-08-08T21:32:06.988Z\\\u0022,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022LastActivityId\\\u0022: 97214720,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 3,\\n \\\u0022LastOdometerValue\\\u0022: 6567593,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100027,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022100111\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225917ec10236217e752cfb100\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022105\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: null,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022EngineHours\\\u0022: 2098,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-04-02 08:57:16.0\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00226.416730272744577,6.418094958714589,6.419459641028245,6.421506657641429,6.423553666023529,6.426282997724661,6.428329986890892,6.430376967817453,6.43242394050177,6.433788584377686,6.433788584377686,6.433106262897817,6.429694641757609,6.425600666171988,6.419459641028245,6.412636192904151,6.406495011500763,6.398989022755068,6.39284767720324,6.387388641459815,6.381929547490127,6.375787997236554,6.368963966238156,6.363504676116118,6.356680481889721,6.351903492049282,6.346444020801816,6.341666935996007,6.33757225664367,6.333477544790312,6.330747718842129,6.3273354161160125,6.325288023663105,6.321875684887845,6.31914579765611,6.317780848638541,6.317098372779649,6.316415896020812,6.3157334183621465,6.3157334183621465,6.315050939803728,6.31436846034567,6.3136859799880485,6.3136859799880485,6.3136859799880485,6.315050939803728,6.317098372779649,6.319828270814621,6.323923090855576,6.32938280045657,6.334842452351386,6.340984491695177,6.348491329302622,6.355315632175583,6.360775009297484,6.364869504087182,6.36964637342199,6.375105598221859,6.38124715665231,6.389435786689618,6.3969419157703795,6.402400849500083,6.406495011500763,6.409906788076152,6.410589140652801,6.410589140652801,6.409906788076152,6.409906788076152,6.4085420801841435,6.407859724868961\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00226.9858304783701906,6.982397250831127,6.979650668799877,6.974157504737377,6.968664340674878,6.959737613797188,6.952184848487378,6.941198520362376,6.929525546729565,6.9199125096201906,6.9109857827425,6.900686100125314,6.891073063015937,6.881460025906562,6.871846988797188,6.863607242703438,6.856740787625313,6.850560978055001,6.845754459500313,6.84232123196125,6.840947940945625,6.839574649929999,6.837514713406563,6.837514713406563,6.83682806789875,6.837514713406563,6.838201358914375,6.838888004422188,6.840947940945625,6.84232123196125,6.844381168484688,6.847127750515938,6.850560978055001,6.854680851101874,6.859487369656563,6.862233951687813,6.865667179226875,6.868413761258126,6.872533634305,6.876653507351876,6.881460025906562,6.88626654446125,6.890386417508125,6.893819645047189,6.896566227078437,6.902059391140939,6.906179264187813,6.9116727635264406,6.917852237820625,6.924032382667065,6.930212192237377,6.935705356299877,6.93913858383894,6.941198520362376,6.942571476101875,6.943258121609688,6.943258121609688,6.943258121609688,6.943258121609688,6.942571476101875,6.941884830594063,6.93913858383894,6.935705356299877,6.930212192237377,6.924032382667065,6.917852237820625,6.909612491726875,6.901372745633125,6.894506290555,6.88626654446125\\\u0022,\\n \\\u0022OperatorID\\\u0022: 85538,\\n \\\u0022PositionLatitude\\\u0022: 6.2187,\\n \\\u0022PositionLongitude\\\u0022: 7.0612,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Ada Road\\\u0022,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022Town\\\u0022: \\\u0022Awka\\\u0022,\\n \\\u0022TractorID\\\u0022: 100111,\\n \\\u0022TractorModelID\\\u0022: 7,\\n \\\u0022TractorName\\\u0022: \\\u0022JD/BUJ0009/NR\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022574370f9d9f4789c35cb0338\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-17T08:53:03.369Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-05-14T05:33:04.728Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022BUJ999089\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-03-31T20:27:01.866Z\\\u0022,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022LastActivityId\\\u0022: 121376025,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 3281,\\n \\\u0022LastOdometerValue\\\u0022: 17219316,\\n \\\u0022IgnitionStatus\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022TrackerID\\\u0022: 100111,\\n \\\u0022ServiceProvider\\\u0022: \\\u00222TRACK\\\u0022\\n },\\n \\\u0022500022\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225a8721da8452c20d3f2e9ca4\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 3015,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022traxi\\\u0022,\\n \\\u0022Heading\\\u0022: 129,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-08-30 17:52:48\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00224.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.066367820899903,4.091582267957389,4.091582267957389,4.116795252467211,4.116795252467211,4.116795252467211,4.116795252467211,4.142008107237246,4.142008107237246,4.167219824177699,4.1924307328438015,4.217643503325779,4.24285244643447,4.268061235420033,4.29326886235796,4.318475656753626,4.343681948069075,4.368886728514719,4.368886728514719,4.368886728514719,4.394091330471018,4.394091330471018,4.394091330471018,4.394091330471018,4.394091330471018,4.394091330471018,4.394091330471018,4.419294411904374,4.444499644982109,4.469701676444838,4.469701676444838,4.5201024665394804,4.595697068276792,4.746864765154221,4.822435259779707,4.897999684539018,4.998735382415435,5.0490974423487165,5.0742773421320955,5.149812796462205,5.174988069194163,5.2505091928256755,5.326023506683554,5.351191999285435,5.426691244595952,5.4770191666837205,5.5525049260867645,5.602822179807057,5.67828975425818,5.778899682125109,5.854343995919609,5.954920104675401,6.03034278728308,6.130886806311416,6.23141421009374,6.281669377401285,6.382165451923777,6.432408281725098,6.482644146082241,6.5077600374430284,6.532874672961941,6.557988047876566,6.5831001574257435,6.5831001574257435,6.6082113298981575,6.633323225642752,6.633323225642752,6.633323225642752,6.6082113298981575,6.6082113298981575,6.5831001574257435,6.557988047876566,6.557988047876566,6.5077600374430284,6.532874672961941,6.482644146082241,6.432408281725098,6.40728865140855,6.357043352700854,6.331919693005137,6.281669377401285,6.25654239782352,6.23141421009374,6.206284818987344,6.1560197790097675,6.181151562665053,6.181151562665053,6.181151562665053,6.206284818987344,6.23141421009374,6.25654239782352,6.306795144052856,6.331919693005137,6.382165451923777,6.432408281725098,6.482644146082241,6.557988047876566,6.5831001574257435,6.6584315104046246,6.708644221977778,6.783953906082237,6.834153607276044,6.9094459274986075,6.959632713458318,7.009813801067792,7.03490232095751,7.085077950947852,7.1101623897045565,7.13524545866273,7.210486399430758,7.360933650594215,7.461201544049257,7.561449121558782,7.68672283364648,7.7618718171541845,7.862046002200682,7.937161122126721,7.987232353081259,8.062324523463067,8.112378013517171,8.212468914672069,8.312532264750889,8.487583597536805,8.63756487380022,8.762501288867588,8.887398376177813,9.01225058680247,9.162018831956166,9.33666778517616,9.486297695476749,9.586013338254432,9.735532599075231,9.835175763160805,9.93478856418252,10.03437104063878,10.133923231081123,10.183687919233675,10.283192320116935,10.382666368207852,10.482108783655264,10.581519606638585,10.705737392795712,10.805075005886437,10.929200451041279,11.053275309056952,11.152495671662322,11.226889806035341,11.326051708393827,11.375619462852763,11.44995573108001,11.499502839209365,11.549039918115973,11.598569560443893,11.648089431434572,11.796596303269443,11.870820325000041,11.994481192077005,12.093369366505888,12.192220985893153,12.291036097209378,12.340429260561713,12.439187938412717,12.537909736244224,12.636593720289701,12.735239285369303,12.784548350686954,12.83384648117367,12.907776858323592,13.006316568185197,13.08019446193074,13.154051535450945,13.252492904463516,13.301697858815594,13.375487530049247,13.44925493749982,13.473838924681644,13.473838924681644,13.498420058782019,13.54757603271809,13.522998987599335,13.572149886021817,13.596720869335238,13.596720869335238,13.596720869335238,13.621288978504717,13.621288978504717,13.621288978504717,13.621288978504717,13.621288978504717,13.64585649006412,13.64585649006412,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.670419815592389,13.64585649006412,13.621288978504717,13.621288978504717,13.596720869335238,13.572149886021817,13.54757603271809,13.498420058782019,13.44925493749982,13.42466777528767,13.326297897496731,13.301697858815594,13.301697858815594,13.277096628041315,13.227886365986507,13.203276690385138,13.17866518753667,13.17866518753667,13.154051535450945,13.129435085496594,13.104815515327061,13.08019446193074,13.03094498405588,12.9324150306755,12.907776858323592,12.88313527716836,12.858491925580662,12.858491925580662,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.83384648117367,12.809198294501705,12.809198294501705,12.809198294501705,12.83384648117367,12.83384648117367,12.858491925580662,12.858491925580662,12.907776858323592,12.9324150306755,12.95705109715591,13.03094498405588,13.055571276682466,13.08019446193074,13.08019446193074,13.129435085496594,13.129435085496594,13.154051535450945,13.227886365986507,13.227886365986507,13.252492904463516,13.301697858815594,13.326297897496731,13.326297897496731,13.375487530049247,13.400079072855988,13.42466777528767,13.498420058782019,13.522998987599335,13.522998987599335,13.54757603271809,13.54757603271809,13.54757603271809,13.572149886021817,13.621288978504717,13.621288978504717,13.64585649006412,13.694980254327392,13.694980254327392,13.694980254327392,13.694980254327392,13.694980254327392,13.694980254327392,13.694980254327392,13.694980254327392,13.670419815592389,13.64585649006412,13.596720869335238,13.522998987599335,13.400079072855988,13.326297897496731,13.252492904463516,13.203276690385138,13.17866518753667,13.154051535450945,13.055571276682466,13.006316568185197,12.95705109715591,12.858491925580662,12.858491925580662,12.83384648117367,12.759894038278532,12.685921608744225,12.587256963214545,12.513233230091206,12.439187938412717,12.414502349932137,12.414502349932137,12.365123170501125,12.340429260561713,12.266336197600232,12.24163267207841,12.216928146117564,12.167512178925849,12.118085709358837,12.118085709358837,12.118085709358837,12.093369366505888,12.093369366505888,12.06865139469177,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.043930486903744,12.019206647352625,11.994481192077005,11.96975379766745,11.96975379766745,11.96975379766745,11.945024140596013,11.945024140596013,11.870820325000041,11.84608166118564,11.771850930652493,11.722353179348946,11.623330432187894,11.57380517842431,11.474729715184344,11.400401257849298,11.350836497296573,11.301264771906126,11.17729671596212,11.078083805414813,10.805075005886437,10.60636687872947,10.482108783655264,10.382666368207852,10.357801140243035,10.258319229368988,10.183687919233675,10.133923231081123,10.03437104063878,9.959686707395484,9.959686707395484,9.884986596603603,9.860082451033458,9.785358412552718,9.735532599075231,9.710617562773113,9.660781932313583,9.660781932313583,9.635861347307328,9.586013338254432,9.486297695476749,9.386550730497495,9.286777698491663,9.211926611320898,9.137061979292124,9.112103709135798,9.037218453866148,8.987283643246608,8.78748355309646,8.537583255089253,8.337544042501039,8.212468914672069,8.162427926524234,8.062324523463067,8.03729545309986,7.937161122126721,7.736824528155176,7.661671095487833,7.611562870758931,7.586506725900056,7.511329553261893,7.360933650594215,7.235564274492326,7.03490232095751,6.934539822393719,6.884350700709736,6.783953906082237,6.758852090868564,6.6584315104046246,6.633323225642752,6.633323225642752,6.5831001574257435,6.6082113298981575,6.5831001574257435,6.532874672961941,6.557988047876566,6.432408281725098,6.40728865140855,6.306795144052856,6.25654239782352,6.23141421009374,6.1560197790097675,6.10575264934998,6.005203941076255,5.954920104675401,5.929778125151571,5.879489732500933,5.854343995919609,5.804049132723949,5.728595765950164,5.577664259209847,5.451855899920122,5.376359456346726,5.351191999285435,5.200163007924559,5.0742773421320955,4.897999684539018,4.772056078962826,4.671286327006654,4.4949021729115115,4.343681948069075,4.29326886235796,4.24285244643447,4.268061235420033,4.24285244643447,4.116795252467211,3.9655011891725267,3.940282846347171,3.8898442063713654,3.8646242534810513,3.8646242534810513,3.839403216133546,3.839403216133546,3.7889585764951232,3.8141810991639677,3.8141810991639677,3.8141810991639677,3.8141810991639677,3.8141810991639677,3.839403216133546,3.839403216133546,3.8646242534810513\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00225.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.874641910195351,5.950477682054043,6.102148219943046,6.380210816860199,6.708831042051315,7.0121731236577025,7.264957241714002,7.366071492433548,7.467185407876968,7.416629120707512,7.517743036150932,7.568299658596516,7.64413509517908,7.694691717624664,7.745249345898628,7.795805633068085,7.846363261342049,7.947477176785469,7.998033799231053,8.073869571089745,8.124425858259201,8.200261630117893,8.225539773702621,8.250818252563477,8.250818252563477,8.301375545561314,8.326654024422169,8.301375545561314,8.301375545561314,8.301375545561314,8.326654024422169,8.326654024422169,8.326654024422169,8.377211652696133,8.377211652696133,8.402489796280861,8.478324227035046,8.50360371172428,8.554159998893738,8.579438477754595,8.62999577075243,8.655274249613285,8.705830536782742,8.680552393198012,8.731110021471979,8.756388165056705,8.806944452226164,8.8322239369154,8.857502415776253,8.933337852358818,8.958616331219673,9.00917261838913,9.085008390247822,9.186122305691242,9.236678928136826,9.31251436471939,9.337792843580246,9.413628615438938,9.464184902608395,9.540021009743215,9.565298818051815,9.641134925186632,9.666413068771362,9.716970697045326,9.742248840630054,9.792805463075638,9.843362756073475,9.893919043242931,9.919197522103786,9.995033293962479,10.045590922236443,10.07086906582117,10.121425688266754,10.171982981264591,10.222539603710175,10.247817412018774,10.323653519153595,10.374210812151432,10.45004591345787,10.525881685316563,10.576437637209892,10.626995265483856,10.702831372618673,10.778666138648985,10.879779718816279,10.955615490674974,11.082008220255375,11.183122135698795,11.233678422868252,11.334792338311672,11.385349966585636,11.46118439733982,11.511742025613785,11.537020169198513,11.562298648059368,11.61285627633333,11.663412898778915,11.688691042363642,11.764526478946209,11.789804622530935,11.8150844424963,11.8150844424963,11.865640729665756,11.840362250804901,11.865640729665756,11.890918873250484,11.890918873250484,11.916198022663593,11.916198022663593,11.916198022663593,11.966754645109177,12.017310932278631,12.042590752243996,12.067868895828724,12.093146704137325,12.118424847722054,12.168982475996016,12.2195390984416,12.270096726715565,12.371210977435112,12.472324557602406,12.522881180047987,12.623995430767538,12.725109010934831,12.851501405239105,12.952613979578018,13.079007379710674,13.20540077984333,13.306513689458368,13.407626934349537,13.508741855621336,13.609854765236378,13.68569154292345,13.736248165369036,13.761526308953762,13.837360739707949,13.86264156550169,13.88791970908642,13.938475996255873,13.938475996255873,13.963754139840603,13.989032618701458,14.039588905870914,14.090147539973257,14.115426018834114,14.140704162418842,14.191260449588299,14.241816736757757,14.26709521561861,14.342932328581812,14.368209801614285,14.393488280475141,14.393488280475141,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.444044567644596,14.418766424059866,14.418766424059866,14.368209801614285,14.342932328581812,14.342932328581812,14.292373359203339,14.241816736757757,14.216538593173027,14.191260449588299,14.140704162418842,14.064866714179516,14.014310762286184,13.938475996255873,13.913198187947273,13.86264156550169,13.837360739707949,13.812082596123219,13.736248165369036,13.710969686508177,13.635135255753994,13.609854765236378,13.559298142790793,13.534020334482195,13.508741855621336,13.432907089591026,13.331791833043098,13.230679258704185,13.154842481017113,13.053729236125946,12.952613979578018,12.876779548823832,12.775665633380413,12.750387154519558,12.750387154519558,12.725109010934831,12.699831202626227,12.674551382660866,12.649273239076136,12.59871695190668,12.548159323632717,12.497602701187134,12.447045408189295,12.34593115746975,12.320653349161146,12.244817577302458,12.168982475996016,12.14370433241129,12.067868895828724,12.017310932278631,11.941476501524448,11.890918873250484,11.739248670637608,11.663412898778915,11.562298648059368,11.334792338311672,11.183122135698795,11.05672974139452,10.930337347090244,10.728109516203403,10.601717457175255,10.525881685316563,10.4753240570426,10.424767434597015,10.374210812151432,10.323653519153595,10.247817412018774,10.222539603710175,10.07086906582117,9.995033293962479,9.919197522103786,9.843362756073475,9.792805463075638,9.716970697045326,9.716970697045326,9.641134925186632,9.59057729691267,9.514742530882359,9.38835047185421,9.28723655641079,9.160844162106514,8.983894474804401,8.882780224084854,8.806944452226164,8.705830536782742,8.554159998893738,8.402489796280861,8.351932168006897,8.276097737252712,8.200261630117893,8.174983486533165,8.124425858259201,8.073869571089745,7.998033799231053,7.972755655646325,7.922197692096233,7.896919548511505,7.846363261342049,7.795805633068085,7.770527489483357,7.694691717624664,7.618856951594353,7.467185407876968,7.416629120707512,7.315514869987964,7.189122810959817,7.088008895516395,6.986894980072974,6.8605025857687,6.759388670325279,6.658274419605732,6.5571605041623116,6.481324732303619,6.430768445134163,6.380210816860199,6.3296541944146165,6.304376050829888,6.279097907245158,6.203262135386466,6.152704507112504,6.127426363527774,6.001033969223499,5.77352799475193,5.647135600447655,5.2679577469825745,5.0910090655088425,4.989895150065422,4.91405937820673,4.888781234622002,4.838224612176419,4.8129454627633095,4.762389175593853,4.711831212043762,4.610717296600341,4.509604722261429,4.43376861512661,4.408490471541882,4.357932843267918,4.332654699683189,4.231540784239769,4.1809844970703125,4.1051483899354935,4.0545907616615295,4.004034474492073,3.978756330907345,3.978756330907345,3.9534781873226166,3.9281987026333804,3.8270847871899605,3.751250021159649,3.7006927281618114,3.7006927281618114,3.7006927281618114,3.6754142493009567,3.6754142493009567,3.650136105716228,3.650136105716228,3.650136105716228,3.6248579621315002,3.574299998581409,3.5995784774422646,3.5995784774422646,3.5995784774422646,3.5995784774422646,3.549022190272808,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.574299998581409,3.5995784774422646,3.650136105716228,3.7006927281618114,3.776528164744377,3.8270847871899605,3.8270847871899605,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8523639366030693,3.8270847871899605,3.8018066436052322,3.7259705364704128,3.6248579621315002,3.574299998581409,3.498464561998844,3.4479079395532604,3.422629795968533,3.2962377369403835,3.2709582522511487,3.1445658579468727,2.942338027060032,2.8159456327557564,2.7401112020015717,2.714831717312336,2.6389966160058975,2.6389966160058975,2.563161179423332,2.4873260781168938,2.3862121626734734,2.3862121626734734,2.335655204951763,2.335655204951763,2.335655204951763,2.3103763908147816,2.285098247230053,2.285098247230053,2.259819433093071,2.259819433093071,2.2092628106474876,2.234541289508343,2.234541289508343,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.2092628106474876,2.234541289508343,2.285098247230053,2.3103763908147816,2.3862121626734734,2.4114903062582016,2.462047263979912,2.4873260781168938,2.563161179423332,2.6137184724211693,2.8159456327557564,3.018173798918724,3.2962377369403835,3.4479079395532604,3.549022190272808,3.8018066436052322,4.004034474492073,4.130426868796349,4.2820970714092255,4.484325237572193,4.737110696732998,5.01517329365015,5.29323723167181,5.369071662425995,5.444907769560814,5.470185913145542,5.546021685004234,5.697692222893238,5.77352799475193,5.849363766610622,5.89992005378008,6.076870076358319,6.253818422555924,6.304376050829888,6.430768445134163,6.5571605041623116,6.885780729353428,7.0121731236577025,7.189122810959817,7.239679098129273,7.34079334884882,7.366071492433548,7.391350977122784\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 8.819431,\\n \\\u0022PositionLongitude\\\u0022: 6.783216,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 2.75,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Zui\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 13086,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022FCT\\\u0022,\\n \\\u0022TractorID\\\u0022: 500022,\\n \\\u0022TractorModelID\\\u0022: 5,\\n \\\u0022TractorName\\\u0022: \\\u0022TRAXI/TRCIH0004-666\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:09:32\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022license_plate_number\\\u0022: \\\u0022YAB666YR\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022593aa855ecdebb2558589e6f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:24.273Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-02-16T18:24:26.131Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 3000\\n },\\n \\\u0022500032\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225a8727268452c20d3f2ea9c8\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 2398,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022traxi\\\u0022,\\n \\\u0022Heading\\\u0022: 13,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-09-04 13:18:36\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00224.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.2687901100746215,4.335264231418505,4.4848075721800456,4.617707354240458,4.750584247323218,4.83361980769208,4.866830925281535,4.866830925281535,4.90004006976798,4.933248900296566,4.983057190641745,5.049462143096121,5.099262902816422,5.165656231689587,5.198849792888859,5.248639187811516,5.315016410944216,5.348203680854284,5.414570474750773,5.464340376599979,5.514107811749314,5.58045589237263,5.6467981352465255,5.713131115607682,5.746294730498299,5.8126178224669625,5.8623536005487304,5.9120852796607295,5.97838867100303,6.061254351463469,6.127539542910127,6.210382196537419,6.276648744095952,6.342905196883585,6.409154799828534,6.44227554750228,6.4919524457913145,6.525069434190528,6.574738143958488,6.591293501711899,6.624402224639826,6.6409559201363315,6.674062638331241,6.690614659258047,6.707165786299516,6.756816454411616,6.773365657222768,6.78991395939704,6.78991395939704,6.78991395939704,6.78991395939704,6.78991395939704,6.78991395939704,6.756816454411616,6.773365657222768,6.723716684067837,6.707165786299516,6.674062638331241,6.6575103908783335,6.6409559201363315,6.6409559201363315,6.607848306739447,6.591293501711899,6.574738143958488,6.5416264419158905,6.525069434190528,6.508512212311066,6.4919524457913145,6.4919524457913145,6.458834944798971,6.458834944798971,6.458834944798971,6.4257152766139205,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.44227554750228,6.458834944798971,6.458834944798971,6.4919524457913145,6.525069434190528,6.574738143958488,6.591293501711899,6.6409559201363315,6.6575103908783335,6.674062638331241,6.707165786299516,6.723716684067837,6.740266685249421,6.773365657222768,6.823010852643877,6.872649237372655,6.9222827722018,7.004994933410676,7.087692425783477,7.170373749057532,7.269572975553948,7.3522207260618195,7.434854759173979,7.5174719134191,7.600074679380027,7.666145926950505,7.732205259416212,7.781742811982422,7.831276505080483,7.864294479847882,7.897309826646708,7.946827729856297,7.9963416518120205,8.06234842474718,8.111847935196602,8.14484322954603,8.194330903250732,8.227319379466197,8.27679876650278,8.309780357493315,8.359247375870257,8.375735210525832,8.408709777876282,8.458164542151447,8.491130750630518,8.557056320137601,8.606491604000174,8.655920764532913,8.721817644942448,8.771231272831654,8.853574458452906,8.902970805684367,8.968823323933913,9.018204051647752,9.067578025726272,9.100490128425236,9.133400527164586,9.166306563042184,9.215660723657473,9.248559116619184,9.314347657695969,9.347236792046488,9.396565491093284,9.42944683743381,9.495200780130075,9.560942103953186,9.643100885309906,9.692386889104572,9.725240315075085,9.774513571685771,9.80735890735963,9.873039474482274,9.922290398316603,9.971534908173917,10.037182564918076,10.102816581168469,10.168437533735261,10.217643500944696,10.283240484160771,10.348824174576498,10.414393829397573,10.447173820948711,10.529107826041066,10.561875011537044,10.627399879646665,10.692910360361644,10.742034275171116,10.791149542382081,10.823889147367424,10.840257115410038,10.856624517392339,10.889357288574436,10.92208514587952,10.938448051712347,10.971171481984758,11.003890960456081,11.036607135118189,11.05296369235449,11.069318679444784,11.11838045881014,11.134732442905309,11.151083508526,11.200131510633906,11.216478560669803,11.249171200302369,11.281858814889537,11.31454369598275,11.347224518143193,11.379901928647575,11.412574931242126,11.445245159005829,11.461578202191543,11.49424178394683,11.510571991400829,11.559558235892862,11.59221141403001,11.62485979012766,11.673825996769486,11.739100381297655,11.836982965296325,11.902218574703115,11.934830187078557,12.032643085914629,12.097831498366503,12.16300401733171,12.211872600379237,12.244447520954683,12.293300725604716,12.309583658017441,12.342145837443345,12.42353322388193,12.472353968673936,12.537433869727534,12.60249733624111,12.667543961370136,12.732573992773077,12.797587677880378,12.878830480917648,12.960047280024217,13.025001983825504,13.089939331142853,13.15485989626265,13.219761968149893,13.28464807957293,13.333301366353014,13.430577559395724,13.47920137804401,13.511611874038342,13.511611874038342,13.544017639231622,13.560218541060982,13.560218541060982,13.5764193158062,13.5764193158062,13.5764193158062,13.527815307840555,13.511611874038342,13.47920137804401,13.4629946443139,13.446787139144199,13.398157072528397,13.349516846018847,13.333301366353014,13.317084798956602,13.300867471338274,13.252207676595365,13.252207676595365,13.235986015317076,13.235986015317076,13.235986015317076,13.235986015317076,13.219761968149893,13.219761968149893,13.203538147366382,13.187313248717256,13.15485989626265,13.138630791875206,13.122401267455745,13.106170997822337,13.073705941999151,13.041237593650044,13.008764983012512,12.992526592381154,12.976287466530499,12.960047280024217,12.943806360854687,12.943806360854687,12.943806360854687,12.943806360854687,12.943806360854687,12.943806360854687,12.943806360854687,12.943806360854687,12.943806360854687,12.976287466530499,12.960047280024217,12.960047280024217,12.960047280024217,12.960047280024217,12.943806360854687,12.927563403209303,12.927563403209303,12.911320042129908,12.895075952160267,12.895075952160267,12.895075952160267,12.878830480917648,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.86258330271312,12.846336053078463,12.846336053078463,12.830087752726728,12.830087752726728,12.830087752726728,12.830087752726728,12.830087752726728,12.830087752726728,12.830087752726728,12.86258330271312,12.878830480917648,12.927563403209303,12.943806360854687,12.960047280024217,13.025001983825504,13.05747246453101,13.15485989626265,13.171086946975642,13.203538147366382,13.219761968149893,13.219761968149893,13.219761968149893,13.219761968149893,13.219761968149893,13.219761968149893,13.219761968149893,13.235986015317076,13.268428256321824,13.268428256321824,13.268428256321824,13.300867471338274,13.349516846018847,13.430577559395724,13.430577559395724,13.430577559395724,13.446787139144199,13.4629946443139,13.4629946443139,13.511611874038342,13.544017639231622,13.5764193158062,13.625012717315217,13.641208408622866,13.641208408622866,13.641208408622866,13.641208408622866,13.641208408622866,13.625012717315217,13.625012717315217,13.592618332619892,13.5764193158062,13.560218541060982,13.544017639231622,13.544017639231622,13.527815307840555,13.47920137804401,13.446787139144199,13.414367536738546,13.398157072528397,13.398157072528397,13.349516846018847,13.300867471338274,13.252207676595365,13.203538147366382,13.122401267455745,13.106170997822337,13.05747246453101,13.008764983012512,12.960047280024217,12.895075952160267,12.797587677880378,12.71631739082969,12.71631739082969,12.651283203369246,12.58623309651763,12.521165513911008,12.488625398475532,12.472353968673936,12.42353322388193,12.390981839716616,12.358425409541198,12.325865253184869,12.277017112355688,12.277017112355688,12.228160890051756,12.228160890051756,12.195584291619102,12.179294654288327,12.16300401733171,12.130419421774056,12.114125793455607,12.032643085914629,11.934830187078557,11.902218574703115,11.836982965296325,11.804359644687404,11.739100381297655,11.64118270796345,11.59221141403001,11.59221141403001,11.559558235892862,11.526902236615289,11.445245159005829,11.39623906372313,11.298202543021189,11.183783208133654,11.151083508526,11.069318679444784,11.003890960456081,10.90572133824578,10.840257115410038,10.758406700670102,10.72566063264479,10.676534062620714,10.643778491464936,10.561875011537044,10.529107826041066,10.496336497853026,10.447173820948711,10.381611050176568,10.283240484160771,10.201242136350483,10.086409659602229,9.987947983097902,9.856619979626732,9.741665652885244,9.675959464546242,9.462325711595172,9.347236792046488,9.314347657695969,9.215660723657473,9.1169465345957,9.051120676610005,8.902970805684367,8.771231272831654,8.705344759906424,8.557056320137601,8.458164542151447,8.27679876650278,8.210825649859204,8.128345755650493,8.078848272599062,7.979838119863651,7.946827729856297,7.913816345156139,7.864294479847882,7.831276505080483,7.732205259416212,7.666145926950505,7.533994926034354,7.467903429697705,7.302633977009067,7.219975084173557,7.054614467932054,7.004994933410676,6.856103794135425,6.78991395939704,6.756816454411616,6.707165786299516,6.674062638331241,6.674062638331241,6.6575103908783335,6.6409559201363315,6.6409559201363315,6.624402224639826,6.624402224639826,6.624402224639826,6.624402224639826,6.607848306739447,6.574738143958488,6.591293501711899,6.558182567925173,6.5416264419158905,6.409154799828534,6.2435173516444475,6.1772466227039295,6.028109529881145,5.961813823032585,5.796038028815892,5.679965580189754,5.630212198677843,5.547282784803422,5.514107811749314,5.447750644452044,5.414570474750773,5.381387816094681,5.364796140984274,5.331609435580017,5.331609435580017,5.348203680854284,5.364796140984274,5.381387816094681,5.414570474750773,5.431160454189454,5.514107811749314,5.547282784803422,5.613627123442249,5.630212198677843,5.630212198677843,5.597041909997011,5.58045589237263,5.514107811749314,5.480929649255099,5.414570474750773,5.381387816094681,5.281828354153114,5.248639187811516,5.165656231689587,5.099262902816422,4.949852192226463,4.883435536064893,4.767193367904293,4.750584247323218,4.684149792364522,4.66754002179126,4.567872856830074,4.551260697644191,4.4515770653785705,4.368498269602158,4.335264231418505,4.218932157137638,4.185691629921543,4.1358266913890205,4.036088774876952,4.0194647009816284,4.036088774876952,4.036088774876952,4.036088774876952,4.0194647009816284,4.0194647009816284,4.002840288148498,4.002840288148498,4.0194647009816284,4.0194647009816284,4.052713846192952,4.052713846192952,4.085959952283313,4.1358266913890205,4.152448019326622,4.169068997204181,4.169068997204181,4.202311903462621,4.202311903462621,4.235552055173805,4.2687901100746215,4.285408932864651,4.302027394453663,4.335264231418505,4.351881266732363\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00228.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.772325515747072,8.788990750908852,8.805655650794506,8.822320885956287,8.822320885956287,8.838985785841942,8.855651691555977,8.855651691555977,8.855651691555977,8.888981826603413,8.888981826603413,8.905647061765194,8.922312967479229,8.938977867364883,8.955643102526665,8.955643102526665,8.9889732375741,8.9889732375741,9.005638808012009,9.022304043173792,9.055634178221226,9.088964983820915,9.105630218982697,9.138961024582386,9.172291159629822,9.188956394791603,9.238952435553074,9.288948476314545,9.32227861136198,9.388939552009106,9.438935592770576,9.505596533417702,9.572256803512573,9.622252844274044,9.688914120197296,9.73890982568264,9.822236001491547,9.888897277414799,9.972223453223705,10.03888439387083,10.088880434632301,10.122210569679737,10.172206610441208,10.205536745488642,10.255532786250116,10.272197686135769,10.322193726897238,10.355523861944675,10.372189097106457,10.422184802591799,10.438850037753584,10.455515943467617,10.472180843353271,10.505510978400707,10.538842119276524,10.572172254323958,10.60550305992365,10.655498430132866,10.688829235732555,10.755490511655807,10.822151452302933,10.855481587350367,10.90547762811184,10.95547266304493,11.022133938968182,11.055464744567871,11.105460785329342,11.13879092037678,11.188786961138248,11.205451861023901,11.238781996071339,11.28877803683281,11.322108171880243,11.372104212641716,11.405435353517532,11.438765153288841,11.472096294164658,11.48876119405031,11.505426429212095,11.53875656425953,11.53875656425953,11.555422469973564,11.588752605021,11.605417504906656,11.605417504906656,11.638748310506344,11.672078780829908,11.688744351267815,11.705409586429596,11.722074486315252,11.755404621362686,11.73873972147703,11.772070862352848,11.788735762238504,11.822065897285938,11.855396702885628,11.855396702885628,11.88872717320919,11.88872717320919,11.905392073094845,11.905392073094845,11.938723213970661,11.955387778580187,12.00538381934166,12.02204905450344,12.05537986010313,12.088710330426693,12.138706371188164,12.172036170959473,12.238697446882725,12.272028252482412,12.322023622691631,12.388684563338758,12.438680604100226,12.488675974309444,12.538672015070915,12.60533295571804,12.63866376131773,12.688659131526945,12.721989937126637,12.73865517228842,12.771984972059727,12.805316112935541,12.821981012821198,12.838646247982979,12.855312153697012,12.88864228874445,12.921972423791887,12.955303564667702,13.005299270153046,13.038629405200483,13.08862544596195,13.121955916285513,13.188616521656513,13.22194766253233,13.271943032741547,13.305273838341236,13.338603638112545,13.371935114264488,13.405264914035797,13.455260954797268,13.488591089844704,13.55525303632021,13.6052480712533,13.655243441462517,13.688573576509953,13.738570287823679,13.755235522985457,13.805230557918547,13.821895793080332,13.855227269232275,13.871892504394053,13.90522263944149,13.888557739555836,13.888557739555836,13.921887874603271,13.90522263944149,13.921887874603271,13.921887874603271,13.95521767437458,13.95521767437458,13.971882909536362,13.988549821078777,14.021879620850086,14.021879620850086,14.038544856011868,14.055209755897522,14.055209755897522,14.071874991059303,14.088540226221085,14.121870025992393,14.121870025992393,14.121870025992393,14.13853693753481,14.171867072582247,14.1885319724679,14.205196872353556,14.25519224256277,14.271857142448424,14.288524053990841,14.305188953876495,14.338519424200058,14.321854189038277,14.35518432408571,14.371849223971367,14.40517969429493,14.438511505722998,14.471840970218182,14.488506205379963,14.521836340427399,14.555166810750963,14.555166810750963,14.571833051741123,14.571833051741123,14.571833051741123,14.571833051741123,14.571833051741123,14.571833051741123,14.571833051741123,14.571833051741123,14.571833051741123,14.53850157558918,14.521836340427399,14.505171440541746,14.488506205379963,14.471840970218182,14.455176405608656,14.438511505722998,14.421844594180584,14.40517969429493,14.388514459133148,14.371849223971367,14.338519424200058,14.321854189038277,14.288524053990841,14.271857142448424,14.221862107515333,14.205196872353556,14.155201837420462,14.121870025992393,14.071874991059303,14.038544856011868,13.988549821078777,13.921887874603271,13.888557739555836,13.838561028242111,13.788565658032894,13.671908676624298,13.57191827148199,13.488591089844704,13.455260954797268,13.438595049083233,13.438595049083233,13.405264914035797,13.371935114264488,13.355268873274326,13.271943032741547,13.155286721885204,13.038629405200483,12.98863336443901,12.921972423791887,12.805316112935541,12.671993896365167,12.538672015070915,12.45534583926201,12.372019663453102,12.272028252482412,12.15537127107382,12.105375230312346,12.05537986010313,11.988719254732134,11.955387778580187,11.905392073094845,11.872061938047409,11.838731802999973,11.805400662124157,11.772070862352848,11.722074486315252,11.688744351267815,11.62208341062069,11.588752605021,11.522091329097748,11.422100253403187,11.372104212641716,11.30544327199459,11.238781996071339,11.188786961138248,11.122126020491123,11.072129979729652,10.95547266304493,10.838816687464714,10.705494470894337,10.60550305992365,10.555507019162178,10.505510978400707,10.455515943467617,10.405519902706146,10.322193726897238,10.222201645374298,10.172206610441208,10.105545334517956,10.022219493985176,9.922227412462234,9.888897277414799,9.838901236653328,9.788905195891857,9.772239960730074,9.722244925796986,9.588922709226608,9.472265727818012,9.338943511247635,9.305613376200197,9.255617335438728,9.238952435553074,9.205621294677258,9.188956394791603,9.155626259744167,9.122295118868351,9.07230008393526,9.022304043173792,8.9889732375741,8.905647061765194,8.838985785841942,8.68899866938591,8.589007593691349,8.505681417882442,8.489016182720661,8.45568537712097,8.43902014195919,8.389024101197721,8.372359201312065,8.322363160550594,8.239036984741688,8.189041949808598,8.155710808932781,8.089049868285656,8.039053827524185,7.8890667110681525,7.8557365760207185,7.8224054351449,7.7890753000974655,7.72241435945034,7.655753083527088,7.639088183641435,7.572426907718181,7.439105026423932,7.405774891376495,7.339113615453244,7.272452674806118,7.155795693397522,7.08913441747427,6.922482401132584,6.789160184562207,6.639173403382302,6.622507832944393,6.58917736262083,6.572512127459048,6.555846892297269,6.522516086697578,6.455855481326581,6.405859440565109,6.322533264756203,6.189211383461952,6.0892196372151375,6.039223931729793,5.905901715159416,5.839241445064545,5.772580169141293,5.6059274822473535,5.522601306438446,5.405944660305977,5.372614189982415,5.3226181492209435,5.305952914059162,5.272622443735599,5.23929163813591,5.189296267926692,5.1726310327649125,5.1059697568416595,5.02264391630888,4.955982640385628,4.822660759091377,4.672673307359219,4.606012701988221,4.456025585532188,4.389364309608936,4.3393682688474655,4.289372563362122,4.222711622714996,4.206046722829342,4.172715917229652,4.106054976582527,4.056059271097183,4.056059271097183,4.006063230335712,3.9893983304500584,3.9727327600121494,3.9727327600121494,3.9727327600121494,3.9727327600121494,3.956067524850369,3.939402289688587,3.906071819365025,3.8394112139940266,3.822745643556118,3.822745643556118,3.822745643556118,3.8060804083943367,3.8060804083943367,3.789415173232555,3.789415173232555,3.789415173232555,3.7727499380707745,3.7394194677472115,3.7060886621475215,3.6894237622618675,3.6894237622618675,3.656092956662178,3.6227628216147423,3.6394280567765236,3.6394280567765236,3.6227628216147423,3.6227628216147423,3.6227628216147423,3.6227628216147423,3.6227628216147423,3.6227628216147423,3.6227628216147423,3.6227628216147423,3.6394280567765236,3.656092956662178,3.672758191823959,3.6894237622618675,3.7060886621475215,3.7060886621475215,3.7060886621475215,3.7394194677472115,3.7727499380707745,3.789415173232555,3.822745643556118,3.8394112139940266,3.8394112139940266,3.8394112139940266,3.8394112139940266,3.789415173232555,3.7394194677472115,3.6894237622618675,3.656092956662178,3.5227714106440544,3.439444899559021,3.38944885879755,3.3394534885883336,3.2894574478268623,3.2394620776176453,3.1394699960947037,3.0728090554475784,3.0394785851240163,2.9728176444768906,2.956153079867363,2.9061570391058917,2.889491803944111,2.8561609983444214,2.83949576318264,2.789499722421169,2.772834822535515,2.756169587373733,2.722839117050171,2.722839117050171,2.6895083114504814,2.6561781764030457,2.6228470355272293,2.6228470355272293,2.556186094880104,2.5228562951087947,2.4895254895091057,2.4395301192998886,2.356203943490982,2.3228728026151657,2.28954266756773,2.2562118619680405,2.239546626806259,2.222881391644478,2.2062158212065697,2.2062158212065697,2.2062158212065697,2.2062158212065697,2.2062158212065697,2.2062158212065697,2.2062158212065697,2.222881391644478,2.2562118619680405,2.2728774324059486,2.28954266756773,2.3062079027295113,2.389534078538418,2.4895254895091057,2.5395215302705765,2.5895175710320473,2.6228470355272293,2.739504352211952,2.83949576318264,2.9061570391058917,3.00614845007658,3.0728090554475784,3.306122682988644,3.3727839589118958,3.439444899559021,3.489440605044365,3.6394280567765236,3.672758191823959,3.7227542325854306,3.7394194677472115,3.789415173232555,3.8394112139940266,3.8560757786035538,3.956067524850369,4.02272880077362,4.206046722829342,4.372698739171028,4.422694779932499,4.639343172311783,4.706004112958908,4.789330288767814,4.805995523929596,4.905986934900284,4.939317405223846,5.0059786811470985,5.02264391630888,5.089304521679878,5.1059697568416595,5.23929163813591,5.28928767889738,5.38927908986807,5.4392751306295395,5.539266541600227,5.589262582361697,5.789245404303075,5.889236815273762,6.155880577862264,6.339198499917984,6.389194540679455,6.655838303267956,6.739164479076862,7.055804282426834,7.37244375050068,7.455769926309586,7.539096772670747,7.605758048593999,7.655753083527088,7.839071340858936,7.872401475906372,8.022388592362404,8.089049868285656,8.272367790341377,8.30569826066494,8.489016182720661,8.539011552929878,8.7223294749856,8.805655650794506,8.822320885956287,8.855651691555977,8.872316926717758,8.905647061765194,8.922312967479229,8.955643102526665,8.97230800241232,8.97230800241232,8.97230800241232,8.9889732375741,9.005638808012009\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 8.426911,\\n \\\u0022PositionLongitude\\\u0022: 7.602061,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.16,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Roguwa\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 6205,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Nassarawa\\\u0022,\\n \\\u0022TractorID\\\u0022: 500032,\\n \\\u0022TractorModelID\\\u0022: 5,\\n \\\u0022TractorName\\\u0022: \\\u0022TRAXI/TRCIH0003-672\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:10:12\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022license_plate_number\\\u0022: \\\u0022YAB672YR\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022593aa855ecdebb2558589e6f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:24.157Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-02-16T18:47:02.167Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500034\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225ab2ae84ddf9f631257eae43\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 593,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022TRAXI\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-03-08 15:13:49\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002211.180987136993807,11.183553300467008,11.18509292186268,11.184066398871481,11.182526772022074,11.179447493787775,11.17636818284666,11.1727753928078,11.168155978956994,11.161483947250916,11.154297954223564,11.147112112434924,11.138899410383425,11.127606319890415,11.11579990254365,11.101425812756215,11.087051015351573,11.07318913399299,11.060353229665571,11.048544096069717,11.03570711301508,11.02235618723707,11.00900465545443,10.995652518364663,10.984354235852372,10.974596250274091,10.966892193870766,10.959701757607776,10.953538152314463,10.949429120545032,10.945833876714026,10.944806515100312,10.945320031763957,10.948915611004711,10.954051983005595,10.962783347530843,10.973055520888458,10.98743556869216,11.004382982208503,11.02235618723707,11.040841973584598,11.060353229665571,11.079350234024677,11.097832097458582,11.11579990254365,11.131712859213359,11.14813876612271,11.160970479967583,11.171235706003845,11.176881293968759,11.176881293968759,11.174315071439667,11.1727753928078\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00227.859328053891658,7.870837412774563,7.884439565241336,7.897518351674081,7.91059747338295,7.925769053399564,7.937278412282468,7.947741709649563,7.958728037774563,7.969714365899563,7.979654297232628,7.988548167049886,7.997964732348918,8.00738163292408,8.014706075191496,8.020983785390856,8.024646006524563,8.027261830866337,8.02935428917408,8.02935428917408,8.028307892382143,8.025692403316498,8.021507151424883,8.016275502741337,8.008428029716015,8.000057525932789,7.990640625357629,7.978607900440693,7.966575510799885,7.955065816640854,7.940417602658271,7.925769053399564,7.911643870174886,7.896995320916176,7.884439565241336,7.871360443532467,7.859851084649562,7.848864756524564,7.838924825191498,7.830554321408272,7.823753245174885,7.817998565733433,7.815382741391659,7.816428802907467,7.820614390075208,7.827415131032468,7.835785970091819,7.847818359732628,7.863513305783271,7.883393168449402,7.898041717708112,7.905889190733432,7.907981649041175\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022PositionLatitude\\\u0022: 11.034167,\\n \\\u0022PositionLongitude\\\u0022: 7.915306,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: null,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Maigana\\\u0022,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Kaduna\\\u0022,\\n \\\u0022TractorID\\\u0022: 500034,\\n \\\u0022TractorModelID\\\u0022: 5,\\n \\\u0022TractorName\\\u0022: \\\u0022TRAXI/TRCIH0001-681\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:10:18\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022license_plate_number\\\u0022: \\\u0022YAB681YR\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022593aa855ecdebb2558589e6f\\\u0022\\n },\\n \\\u0022TotalDistanceCovered\\\u0022: 3323,\\n \\\u0022Heading\\\u0022: null,\\n \\\u0022FuelRawValue\\\u0022: null,\\n \\\u0022IgnitionStatus\\\u0022: null,\\n \\\u0022AssetState\\\u0022: null,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-05-05T21:43:10.622Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-03-21T19:12:04.923Z\\\u0022\\n },\\n \\\u0022OperatorID\\\u0022: 0\\n },\\n \\\u0022500042\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225a87252ac27e511b8242c4ec\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 1900,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022traxi\\\u0022,\\n \\\u0022Heading\\\u0022: null,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-03-27 20:50:53\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002213.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.70507745560498,13.657103907909853,13.545128807666972,13.449107222483601,13.3690603593313,13.337035140108767,13.337035140108767,13.337035140108767,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.321020448932176,13.337035140108767,13.337035140108767,13.3690603593313,13.3690603593313,13.3690603593313,13.3690603593313,13.3690603593313,13.385072842159227,13.40108262945514,13.40108262945514,13.433100310005647,13.417092003242736,13.417092003242736,13.449107222483601,13.433100310005647,13.433100310005647,13.433100310005647,13.433100310005647,13.433100310005647,13.433100310005647,13.433100310005647,13.433100310005647,13.449107222483601,13.433100310005647,13.433100310005647,13.417092003242736,13.385072842159227,13.385072842159227,13.3690603593313,13.3690603593313,13.337035140108767,13.321020448932176,13.305004045256396,13.272969694135906,13.25695109658746,13.25695109658746,13.25695109658746,13.240931117501427,13.22490943161187,13.176840346198116,13.160814782285332,13.128761490714291,13.112733112487165,13.112733112487165,13.096703036593276,13.096703036593276,13.080672896974267,13.064641715215155,13.048609492503267,13.032575903386288,13.032575903386288,13.032575903386288,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.016540622327698,13.000505283801154,13.000505283801154,13.000505283801154,13.000505283801154,13.000505283801154,13.000505283801154,13.000505283801154,13.000505283801154,13.032575903386288,13.016540622327698,13.032575903386288,13.048609492503267,13.080672896974267,13.080672896974267,13.080672896974267,13.112733112487165,13.096703036593276,13.096703036593276,13.112733112487165,13.112733112487165,13.128761490714291,13.128761490714291,13.144788496707593,13.144788496707593,13.160814782285332,13.176840346198116,13.176840346198116,13.192864534342176,13.192864534342176,13.192864534342176,13.192864534342176,13.208887672002968,13.208887672002968,13.208887672002968,13.208887672002968,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.22490943161187,13.208887672002968,13.208887672002968,13.192864534342176,13.192864534342176,13.176840346198116,13.176840346198116,13.192864534342176,13.192864534342176,13.192864534342176,13.192864534342176,13.208887672002968,13.208887672002968,13.22490943161187,13.22490943161187,13.22490943161187,13.240931117501427,13.240931117501427,13.240931117501427,13.240931117501427,13.25695109658746,13.25695109658746,13.288987561625746,13.288987561625746,13.305004045256396,13.353048443947001,13.3690603593313,13.40108262945514,13.433100310005647,13.481118816363729,13.513125797218297,13.561128209891907,13.60912124988738,13.641110988861195,13.657103907909853,13.673096719668045,13.70507745560498,13.737054490308346,13.769026185938788,13.800994487118277,13.832957756332206,13.848937908027127,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.86491663551751,13.848937908027127,13.816976507107645,13.800994487118277,13.769026185938788,13.753041209607522,13.72106570337001,13.70507745560498,13.689087468250348,13.673096719668045,13.657103907909853,13.641110988861195,13.60912124988738,13.59312508399014,13.57712686045157,13.545128807666972,13.497122843247443,13.417092003242736,13.337035140108767,13.272969694135906,13.25695109658746,13.208887672002968,13.176840346198116,13.128761490714291,13.128761490714291,13.096703036593276,13.048609492503267,12.98446858237193,12.936351945765335,12.888226025703545,12.87218243071942,12.824045163587233,12.807996488245887,12.759846623823202,12.679576280784026,12.599279646938768,12.535024741089444,12.502891601170996,12.43861268617154,12.406467585057884,12.35824167801964,12.326086020295238,12.293927073888883,12.245680789485304,12.213511698317072,12.181338369443083,12.116981659242505,12.068702869614317,12.020415380438845,11.97211922445181,11.907712018270958,11.843288884671184,11.730511888140677,11.682164420838038,11.66604683137837,11.649928634097666,11.601567123851337,11.553198217217654,11.537072186984831,11.488692156193165,11.456433420014617,11.424171659890856,11.375771317450031,11.343500726234579,11.295086689925318,11.262806013965498,11.246664481440146,11.21437903354264,11.21437903354264,11.19823413399049,11.16594360760288,11.14979666765998,11.14979666765998,11.13364915975552,11.13364915975552,11.13364915975552,11.117499769239979,11.117499769239979,11.117499769239979,11.101350471197513,11.101350471197513,11.085199950942844,11.085199950942844,11.085199950942844,11.085199950942844,11.085199950942844,11.085199950942844,11.069048538694158,11.069048538694158,11.069048538694158,11.069048538694158,11.0528959066288,11.0528959066288,11.0528959066288,11.0528959066288,11.0528959066288,11.036742714077189,11.036742714077189,11.036742714077189,11.020588633235484,11.004433994450215,10.988278469881918,10.939805277107455,10.907485299032558,10.85899957008109,10.84283547038427,10.826670826516892,10.810505310445864,10.778172325375378,10.745834878324127,10.713494626062491,10.713494626062491,10.69732238043699,10.66497695081507,10.648802780973213,10.648802780973213,10.632627423065241,10.616451537356483,10.58409785815011,10.519378619068892,10.503197096765021,10.470830192709755,10.438461228033438,10.389900147632037,10.341331519654675,10.325140745381667,10.276562106514199,10.19558167766703,10.065970229585977,10.017352808376584,9.96872776886577,9.920095144839586,9.87145629136067,9.822809260687867,9.790374481910247,9.709272207062853,9.660602459128816,9.628151276805623,9.579469486203584,9.547010527218223,9.482084001800516,9.384671524808887,9.335954505437503,9.287231336950112,9.222256135896146,9.124770592912592,9.07601830773855,8.99474857399264,8.897201942402226,8.864681158113102,8.750833155988055,8.685762339833023,8.63695032148965,8.539310351543513,8.474201811012263,8.441644064448923,8.39280080666036,8.311384063238364,8.246237294890689,8.115914285187838,7.985547661695903,7.904046678039652,7.740997906248155,7.626826146132573,7.561572094988164,7.447352317377839,7.349425557839017,7.3167790467305815,7.235151177369058,7.186167889668669,7.153509539601199,7.104516139743774,6.990181620217794,6.941170951011977,6.908495332100155,6.875817455168816,6.843137330692251,6.826796595348233,6.7777690492867215,6.745082244966417,6.712393235034695,6.712393235034695,6.663354109017581,6.6470069751977325,6.597962983849126,6.597962983849126,6.581614016827748,6.548914136207565,6.516210447432675,6.499858802135815,6.499858802135815,6.499858802135815,6.499858802135815,6.467153584622622,6.418091626966171,6.418091626966171,6.418091626966171,6.418091626966171,6.401736811178733,6.401736811178733,6.401736811178733,6.352667226941315,6.352667226941315,6.336309990535969,6.303594629855627,6.303594629855627,6.254517056268278,6.270876539009017,6.254517056268278,6.221794889735595,6.2054335417225595,6.172709656285739,6.10725416462351,6.074524246270672,6.009058784088124,5.976322927971886,5.8944732432299975,5.8617305798337185,5.828985995324156,5.681610373745602,5.566958760187228,5.452284113162611,5.386745590471007,5.353974340285903,5.272038385418098,5.222870542935728,5.190090281409545,5.140917366054426,5.042558510182642,4.8949928776037055,4.714591102307565,4.599764916914262,4.452104534878056,4.320826286883533,4.288003062904608,4.22235172708648,4.205938189128325,4.189524639760541,4.173110745956713,4.140281595999411,4.156696174662511,4.123866342512247,4.091033816344511,4.107450749935614,4.091033816344511,4.074617549590066,4.074617549590066,4.074617549590066,4.074617549590066,4.058201282203632,4.0089501486748516,4.025367078734814,4.025367078734814,4.0417843466619585,4.0417843466619585,4.058201282203632,4.058201282203632,4.074617549590066,4.091033816344511,4.107450749935614,4.123866342512247,4.123866342512247,4.140281595999411,4.156696174662511,4.156696174662511,4.189524639760541,4.22235172708648,4.27159125586025,4.288003062904608,4.353647421586928,4.386467459276059,4.517734419510782,4.550548811005275,4.616169754342087,4.681785966633134,4.829398646407871,4.8949928776037055,5.026163966703564,5.0589523057713714,5.108133199468941,5.140917366054426,5.1737001789523145,5.190090281409545,5.206480625787512,5.272038385418098,5.288426580331246,5.32120133336296,5.353974340285903,5.435900650578594,5.468667462353709,5.566958760187228,5.648854077685191,5.79623783247416,5.845358693823153,5.8944732432299975,5.9108436844576335,5.976322927971886,5.992690934734714,6.041792671507335,6.041792671507335,6.074524246270672,6.09088962152684,6.123620207812877,6.1399837493573814,6.172709656285739,6.221794889735595,6.270876539009017,6.287235841737472,6.352667226941315,6.352667226941315,6.3853798056045985,6.401736811178733,6.418091626966171,6.418091626966171,6.450800015014331,6.450800015014331,6.450800015014331,6.467153584622622,6.467153584622622,6.467153584622622,6.467153584622622,6.467153584622622,6.467153584622622,6.467153584622622,6.467153584622622,6.467153584622622,6.4835062920099436,6.499858802135815,6.4835062920099436,6.450800015014331,6.450800015014331,6.450800015014331,6.418091626966171,6.418091626966171,6.418091626966171,6.3853798056045985,6.3853798056045985,6.352667226941315,6.352667226941315,6.319952568807602,6.287235841737472,6.303594629855627,6.303594629855627,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.287235841737472,6.303594629855627,6.336309990535969,6.336309990535969,6.336309990535969,6.352667226941315,6.352667226941315,6.369023610261592,6.369023610261592,6.369023610261592,6.3853798056045985,6.3853798056045985,6.3853798056045985,6.3853798056045985,6.3853798056045985,6.3853798056045985,6.401736811178733,6.450800015014331,6.532561559717868,6.597962983849126,6.597962983849126,6.597962983849126,6.614311411289581,6.663354109017581,6.679700364982684,6.712393235034695,6.810453637506863,6.8921568416590455,7.006516703987839,7.186167889668669,7.284130479557393,7.382069669888884,7.398392319192542,7.545256871069231,7.577886369867276,7.6594491133639675,7.675759993212209,7.675759993212209,7.757305644185009,7.952948147829833,8.067030725456439,8.278812689902427,8.441644064448923,8.474201811012263,8.506756469802419,8.506756469802419,8.63695032148965,8.653221034983746,8.685762339833023,8.71829916448387,8.750833155988055,8.897201942402226,8.880941910789376,8.929721162177485,9.124770592912592,9.173516878121173,9.287231336950112,9.335954505437503,9.368433387499651,9.530780052546335,9.660602459128816,9.693049852080614,9.887669932557184,9.96872776886577,10.082175181449827,10.19558167766703,10.357522448539685,10.632627423065241,10.85899957008109,10.988278469881918,11.036742714077189,11.101350471197513,11.21437903354264,11.278946969743938,11.31122550209925,11.343500726234579,11.39190557117278,11.52094687283393,11.553198217217654,11.633809173497655,11.649928634097666,11.66604683137837,11.762737954324187,11.778850557465578,11.827180067910742,11.843288884671184,11.859396095514159,11.891607335449581,11.988219450677676,12.036512065458592,12.165250405629715,12.197426013594153,12.310006875667435,12.342164834033548,12.422540468477253,12.486823695538119,12.518958507660406,12.551090300196023,12.599279646938768,12.647460590613937,12.856137809062407,12.888226025703545,13.064641715215155,13.096703036593276,13.160814782285332,13.176840346198116,13.192864534342176,13.25695109658746,13.272969694135906,13.385072842159227,13.40108262945514,13.481118816363729,13.497122843247443,13.513125797218297,13.57712686045157,13.57712686045157,13.59312508399014,13.60912124988738,13.60912124988738,13.60912124988738,13.60912124988738,13.60912124988738,13.60912124988738\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002213.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.714639618992807,13.648806139826775,13.418394662439821,13.039859533309937,12.792989015579224,12.611950635910034,12.595492601394653,12.562576867640018,12.5790349021554,12.562576867640018,12.5790349021554,12.513201758265495,12.48028602451086,12.414454892277718,12.348622083663939,12.299248315393923,12.249874547123907,12.233416847884655,12.18404173851013,12.167583703994751,12.151126004755499,12.118210606276989,12.101752907037737,12.085292860865593,12.068835161626337,12.035919763147831,12.003004029393196,11.986545994877815,11.937171220779419,11.904255151748659,11.871339417994022,11.821965649724007,11.789048574864866,11.73967480659485,11.706759743392466,11.657385975122452,11.62446890026331,11.575095131993296,11.509262323379517,11.459888555109499,11.410514786839483,11.361139677464962,11.295308545231821,11.245934776961803,11.163643933832644,11.097812466323376,11.04843735694885,10.999063588678835,10.949690490961075,10.916773080825804,10.86739931255579,10.834483914077282,10.801568180322647,10.752193070948124,10.719277337193489,10.669903904199598,10.636986494064331,10.587613061070442,10.538239292800426,10.472406148910522,10.406575016677381,10.357199907302856,10.30782613903284,10.258452706038952,10.209077596664429,10.176161862909794,10.110330730676651,10.07741466164589,10.011581853032112,9.962207414209843,9.8963762819767,9.86345920711756,9.814085438847544,9.764711670577528,9.731794930994512,9.68242183327675,9.665962792932987,9.616589359939098,9.58367295563221,9.567214921116829,9.534299187362194,9.501382783055305,9.46846704930067,9.452008344233036,9.402634911239147,9.386176876723766,9.369718506932259,9.353260472416878,9.303886033594608,9.287428334355354,9.2709706351161,9.238054230809212,9.205138497054575,9.188680462539196,9.139306023716927,9.106390625238419,9.07347422093153,9.02409978210926,8.991184048354626,8.941809609532356,8.908893875777721,8.859519772231579,8.843061737716198,8.793687298893929,8.744313530623913,8.727855160832405,8.678481727838516,8.662022687494755,8.645565323531628,8.612649254500866,8.579732850193977,8.546817116439342,8.513900712132454,8.480984978377817,8.448068574070929,8.43161053955555,8.398694805800913,8.365778401494024,8.349320366978645,8.332862667739391,8.316404968500139,8.28348822891712,8.267030529677868,8.250572830438614,8.217656090855598,8.201198391616344,8.151823952794075,8.135366253554821,8.102450519800186,8.06953378021717,8.053076080977917,8.036618381738663,8.020160347223282,8.003701642155647,7.987243942916393,7.970786243677138,7.92141180485487,7.8720373660326,7.822663597762585,7.773289494216443,7.723915055394173,7.674541622400284,7.6087091490626335,7.559335045516492,7.526419311761856,7.4770448729395875,7.444129139184952,7.39475503563881,7.345380596816539,7.29600615799427,7.2466327250003815,7.213716320693492,7.197258286178112,7.147883847355843,7.0820527151227,7.065594010055066,7.03267827630043,7.016220577061177,7.016220577061177,6.999761871993542,6.966846138238907,6.966846138238907,6.950388103723526,6.933929398655891,6.9010140001773825,6.884555965662003,6.868097931146622,6.835181526839733,6.818723827600478,6.802265793085098,6.76934938877821,6.736433655023575,6.719975285232066,6.6706015169620505,6.637685112655163,6.588311344385148,6.522479206323624,6.4566470682621,6.407272629439832,6.341440491378308,6.242692619562149,6.19331818073988,6.127486042678356,6.078112609684467,6.028738170862197,5.995821766555308,5.962906032800674,5.94644833356142,5.913531593978404,5.897073894739151,5.864158160984516,5.847699455916881,5.831241756677628,5.798326022922994,5.765409283339976,5.748951584100723,5.716035850346088,5.666661411523819,5.650203712284566,5.6008292734622955,5.5843715742230415,5.534997135400772,5.485622696578503,5.452706962823868,5.37041712552309,5.3539590910077095,5.304584987461567,5.2716682478785515,5.238752514123917,5.172920376062393,5.123545937240123,5.074172504246235,5.008340366184711,4.975423961877822,4.909591823816299,4.827301651239394,4.745011478662491,4.712095744907856,4.679179340600967,4.6462636068463326,4.613347202539444,4.629804901778698,4.596889168024063,4.563973769545555,4.5475150644779205,4.498141296207905,4.465224891901016,4.448767192661762,4.415850453078747,4.399392753839493,4.366477020084858,4.366477020084858,4.3171025812625885,4.267728477716446,4.251270443201065,4.234812743961811,4.234812743961811,4.201897010207176,4.185438305139542,4.185438305139542,4.168980270624161,4.136064872145652,4.136064872145652,4.136064872145652,4.103148132562637,4.070232734084129,4.053774029016495,4.004400260746479,3.9714838564395905,3.938568122684956,3.9221100881695747,3.905651718378067,3.889193683862686,3.889193683862686,3.872735984623432,3.8398192450404167,3.8398192450404167,3.790445812046528,3.7410717085003857,3.7246136739850044,3.7081556394696236,3.7081556394696236,3.7081556394696236,3.675239235162735,3.691697269678116,3.691697269678116,3.691697269678116,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.675239235162735,3.6587815359234814,3.6587815359234814,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6423235014081,3.6258658021688457,3.592949397861958,3.5764913633465767,3.5764913633465767,3.543574959039688,3.543574959039688,3.5271172598004346,3.5106592252850533,3.4942015260457993,3.461284786462784,3.4448270872235303,3.428369052708149,3.411911353468895,3.3954526484012604,3.3954526484012604,3.3954526484012604,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.3789949491620064,3.362536914646625,3.362536914646625,3.3296208456158634,3.3460788801312447,3.3296208456158634,3.313162811100483,3.296704776585102,3.2802464067935944,3.2473310083150864,3.2308726385235786,3.2308726385235786,3.197956569492817,3.181498870253563,3.132124431431294,3.1156663969159126,3.0827503278851514,3.0662926286458974,3.0004604905843735,2.9675444215536118,2.918169982731342,2.8852535784244537,2.8523381799459457,2.835879810154438,2.835879810154438,2.835879810154438,2.835879810154438,2.835879810154438,2.835879810154438,2.819422110915184,2.819422110915184,2.8029637411236767,2.8029637411236767,2.786506041884422,2.7535896375775337,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.7700476720929146,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.786506041884422,2.8029637411236767,2.819422110915184,2.835879810154438,2.8523381799459457,2.8523381799459457,2.8523381799459457,2.8687958791851997,2.9017119482159615,2.918169982731342,2.951086051762104,2.951086051762104,3.0004604905843735,3.0169181898236275,3.0827503278851514,3.1650405004620557,3.197956569492817,3.296704776585102,3.3789949491620064,3.5271172598004346,3.6094070971012115,3.790445812046528,3.872735984623432,3.955025821924209,4.02085829526186,4.152522571384907,4.185438305139542,4.267728477716446,4.3171025812625885,4.415850453078747,4.448767192661762,4.498141296207905,4.662721641361713,4.810843616724015,5.074172504246235,5.189378410577774,5.2552105486392975,5.37041712552309,5.403332859277725,5.436249263584614,5.485622696578503,5.534997135400772,5.6008292734622955,5.6831194460392,5.732493884861468,5.831241756677628,5.897073894739151,5.94644833356142,5.995821766555308,6.012280471622944,6.078112609684467,6.111028343439101,6.19331818073988,6.226234920322895,6.357898525893688,6.407272629439832,6.440189369022846,6.50602150708437,6.654143817722797,6.687059216201305,6.752891689538955,6.785807088017463,6.868097931146622,6.98330383747816,7.114968113601208,7.345380596816539,7.592251449823379,7.641625218093395,7.773289494216443,7.8391216322779655,7.92141180485487,7.937869504094124,8.036618381738663,8.053076080977917,8.135366253554821,8.184740357100964,8.267030529677868,8.299946263432503,8.43161053955555,8.480984978377817,8.579732850193977,8.612649254500866,8.69493942707777,8.744313530623913,8.859519772231579,8.892436176538467,8.941809609532356,8.991184048354626,9.040558151900767,9.05701618641615,9.106390625238419,9.122847989201546,9.188680462539196,9.22159619629383,9.22159619629383,9.22159619629383,9.22159619629383,9.22159619629383,9.22159619629383,9.205138497054575,9.205138497054575,9.205138497054575,9.205138497054575,9.205138497054575,9.238054230809212,9.303886033594608,9.32034507393837,9.353260472416878,9.386176876723766,9.452008344233036,9.46846704930067,9.51784048229456,9.534299187362194,9.534299187362194,9.567214921116829,9.58367295563221,9.616589359939098,9.698879197239876,9.715337231755257,9.78116936981678,9.814085438847544,9.86345920711756,9.8963762819767,9.978666119277477,10.028039887547493,10.110330730676651,10.15970416367054,10.209077596664429,10.241995006799698,10.30782613903284,10.357199907302856,10.373659282922745,10.390116982161997,10.423032715916634,10.439490750432013,10.439490750432013,10.439490750432013,10.439490750432013,10.439490750432013,10.455948449671268,10.50532355904579,10.571155026555061,10.587613061070442,10.653445869684221,10.669903904199598,10.702819302678108,10.702819302678108,10.735735036432743,10.735735036432743,10.785108469426632,10.785108469426632,10.88385734707117,10.966148525476456,11.097812466323376,11.114270165562628,11.147186234593391,11.163643933832644,11.180101968348028,11.196560002863407,11.196560002863407,11.21301770210266,11.21301770210266,11.22947707772255,11.245934776961803,11.278850845992565,11.295308545231821,11.3117665797472,11.394057422876358,11.44343052059412,11.459888555109499,11.558637097477913,11.690301708877088,11.706759743392466,11.75613284111023,11.772590540349482,11.789048574864866,11.789048574864866,11.805508285760881,11.805508285760881,11.805508285760881,11.805508285760881,11.805508285760881,11.805508285760881,11.805508285760881,11.805508285760881,11.821965649724007,11.854881383478643,11.887797452509403,11.937171220779419,11.920713186264038,11.920713186264038,11.986545994877815,12.019462063908577,12.035919763147831,12.035919763147831,12.068835161626337,12.085292860865593,12.134668640792368,12.18404173851013,12.216957472264767,12.233416847884655,12.233416847884655,12.249874547123907,12.28279061615467,12.33216404914856,12.36508011817932,12.36508011817932,12.381539158523083,12.430912926793098,12.463828660547732,12.611950635910034,12.809448055922983,12.891737222671509,12.908194921910761,12.99048576503992,13.122150376439095,13.17152414470911,13.187982179224491,13.204439878463745,13.237355276942253,13.303188756108284,13.303188756108284,13.336103819310665,13.369019888341429,13.369019888341429,13.418394662439821,13.434852696955206,13.451310731470585,13.500684499740599,13.533601574599743,13.533601574599743,13.615891076624393,13.648806139826775,13.714639618992807,13.747555017471313,13.780470751225948,13.862761594355106,13.928593397140503,13.994426205754278,14.043799974024296,14.09317307174206,14.159005880355835,14.175463914871216,14.224837683141232,14.224837683141232,14.224837683141232,14.241295382380484,14.241295382380484,14.241295382380484,14.241295382380484,14.257754758000374,14.257754758000374,14.257754758000374,14.257754758000374,14.257754758000374,14.290670491755009,14.30712852627039,14.30712852627039,14.30712852627039,14.30712852627039,14.30712852627039,14.290670491755009,14.274212792515755,14.241295382380484,14.224837683141232,14.191921949386597,14.175463914871216,14.175463914871216,14.159005880355835,14.09317307174206,14.076715037226679,13.945051096379757,13.945051096379757,13.912135362625122,13.895677328109741,13.895677328109741,13.862761594355106,13.846303559839725,13.79692878574133,13.780470751225948,13.731096982955933,13.731096982955933,13.698181919753551,13.665264174342155,13.648806139826775,13.648806139826775,13.615891076624393,13.615891076624393,13.615891076624393,13.615891076624393,13.615891076624393,13.615891076624393\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 8.43579,\\n \\\u0022PositionLongitude\\\u0022: 7.574201,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: null,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Roguwa\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 151638,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Nassarawa\\\u0022,\\n \\\u0022TractorID\\\u0022: 500042,\\n \\\u0022TractorModelID\\\u0022: 5,\\n \\\u0022TractorName\\\u0022: \\\u0022TRAXI/TRCIH0005-671 UA\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:10:16\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022593aa855ecdebb2558589e6f\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022YAB671YR\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:24.034Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-02-16T18:38:34.031Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: null,\\n \\\u0022IgnitionStatus\\\u0022: null,\\n \\\u0022AssetState\\\u0022: null,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500232\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225af5d2dfa432ce4037101f52\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103,104\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 41,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022oke eri\\\u0022,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-05-05 14:52:08\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-03-25T09:13:08.648Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00220.07147682839380448,0.07147682839380448,0.07147682839380448,0.07147682839380448,0.07147682839380448,0.07147682839380448,0.07147682839380448,0.07101079493774277,0.06961269454150518,0.06914666106683086,0.06868062758760199,0.06681649362550994,0.06495235959268233,0.06308822549110388,0.05889392352138677,0.0551656548382078,0.050971352291220025,0.04724308313055074,0.042116712711230096,0.03745604039669753,0.03186363562610354,0.02627123055194468,0.01834865628112949,0.010426081659486398,0.002969540654281299,-0.00541873275425164,-0.01427337512511469,-0.02266198337594344,-0.031050591141012433,-0.0399052319451088,-0.04922624071808267,-0.05901294648341382,-0.06833361704434508,-0.07718825240604166,-0.08604288592421243,-0.0921013182128107,-0.10002388194899267,-0.1056162787379211,-0.10841247675839023,-0.10934454270816685,-0.11074264157848882,-0.1116747074554689,-0.11214074038288425,-0.11214074038288425,-0.11214074038288425,-0.11214074038288425,-0.11214074038288425,-0.10934454270816685,-0.10515024570987298,-0.10048991505187287,-0.0907032185428464,-0.08604288592421243,-0.08091651938743304,-0.07485808537568657,-0.06879965052697078,-0.062275181370008176,-0.05621674499938424,-0.05015830800020637,-0.04363350148442948,-0.035710928512171156,-0.025458186027160254,-0.0170695779182733,-0.00868096944348261,-0.002156496047464008,0.002969540654281299,0.008095912608384971,0.015552453505743821,0.05563168843670747,0.05656375562262575,0.05702978920999347,0.05702978920999347,0.05702978920999347,0.05702978920999347,0.05702978920999347,0.05702978920999347,0.059359957089569385,0.07334096217044477,0.07520509586945406,0.078467329649966,0.08033146312530597,0.08126352983121493,0.08266162984966625,0.08312766317825133,0.08359369650134041,0.08359369650134041,0.08405972981890804,0.08452576313089061,0.08499179643730086,0.08499179643730086,0.08499179643730086,0.08545782973808788,0.08499179643730086,0.08405972981890804,0.08405972981890804,0.08359369650134041,0.08359369650134041,0.08219559651561063,0.0789333630266665,0.07800129626808755,0.07753526288103116,0.07660319609156266,0.07613716268922688,0.07613716268922688,0.07473906245208062,0.07334096217044477,0.07334096217044477,0.07240889529171718,0.06821459410380586,0.05842788994929843\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00220.0029658526182174683,0.0029658526182174683,0.0029658526182174683,-0.009616725146770477,-0.013811029493808745,-0.020335502922534943,-0.024995841085910797,-0.028724111616611484,-0.03198634833097457,-0.03478255122900009,-0.03664668649435043,-0.03804478794336319,-0.039442889392375946,-0.04130702465772629,-0.043637193739414215,-0.04596736282110214,-0.04922959953546524,-0.05295787006616593,-0.05575407296419144,-0.0571521744132042,-0.05855027586221694,-0.06088044494390487,-0.06181251257658005,-0.06227854639291763,-0.06274458020925522,-0.06274458020925522,-0.0636766478419304,-0.0632106140255928,-0.0636766478419304,-0.0636766478419304,-0.0636766478419304,-0.0632106140255928,-0.06181251257658005,-0.05901630967855454,-0.05528803914785386,-0.05202580243349075,-0.04550132900476456,-0.039442889392375946,-0.031054280698299408,-0.022199638187885284,-0.011480860412120819,-0.0021601840853691097,0.0062280893325805655,0.010888427495956421,0.01927737146615982,0.02719994634389877,0.03232631832361221,0.03885079175233841,0.045375265181064606,0.05096767097711564,0.06261851638555527,0.06634678691625595,0.06960902363061905,0.07287126034498215,0.07520142942667007,0.07706556469202042,0.07846366614103317,0.07892969995737076,0.08219193667173387,0.08545417338609697,0.08825037628412247,0.09011451154947281,0.08964847773313524,0.09011451154947281,0.09011451154947281,0.09011451154947281,0.09011451154947281,0.09011451154947281,0.08964847773313524,0.08964847773313524,0.08918244391679765,0.08918244391679765,0.08918244391679765,0.08918244391679765,0.08918244391679765,0.08778434246778488,0.08452210575342178,0.08312400430440903,0.0807938352227211,0.07986176759004593,0.07939573377370834,0.07753159850835799,0.07054109126329422,0.061686448752880096,0.055628009140491486,0.05516197532415391,0.052831806242465966,0.05236577242612839,0.0518997386097908,0.05143370479345322,0.04910353571176529,0.03139425069093704,0.026733912527561188,0.023471675813198093,0.02114150673151016,0.01927737146615982,0.01321859657764435,0.005762055516242981,-2.960488200187683E-4,-0.004024319350719452,-0.006354488432407379,-0.0077525898814201355,-0.009616725146770477,-0.0217336043715477,-0.025927908718585968,-0.03152031451463699,-0.03664668649435043,-0.043637193739414215,-0.0566861405968666\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: false,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 11.079955,\\n \\\u0022PositionLongitude\\\u0022: 7.699982,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.02,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Tudun Wada\\\u0022,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Kaduna\\\u0022,\\n \\\u0022TractorID\\\u0022: 500232,\\n \\\u0022TractorModelID\\\u0022: 9,\\n \\\u0022TractorName\\\u0022: \\\u0022GL0066\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225af571828026bf1bf79e839f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:08.754Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-05-11T17:29:03.490Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022GL0066\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 162,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500249\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225c4206ebb39e562cf9f10597\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 6335,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-01-18 17:03:38\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 302,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 14:30:49\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-09T11:00:33.905Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00226.786599350539119,6.786599350539119,6.786599350539119,6.786599350539119,6.786599350539119,6.786599350539119,6.786599350539119,6.786599017612217,6.786599017612217,6.786599017612217,6.786599017612217,6.786599017612217,6.786598351758401,6.786598351758401,6.786597685904595,6.786597352977694,6.786596687123864,6.786596021270059,6.786595355416242,6.7865943566355105,6.786593357854779,6.786592692000961,6.786591693220242,6.786591360293328,6.7865896956587655,6.786588363951118,6.7865863663896295,6.786585034681982,6.78658370297431,6.786581705412821,6.786579374924391,6.786576711509022,6.786573382239795,6.786570052970558,6.786566390774367,6.786563061505065,6.786559732235751,6.786556070039484,6.786551076135416,6.786546082231311,6.786540089546321,6.786533431007349,6.786527105395242,6.786520446856091,6.786514121243805,6.786508794412352,6.786503467580824,6.786498473676235,6.786494145625527,6.7864901505017725,6.786486488304984,6.786483159035136,6.786481161473213,6.786479163911278,6.786478498057309,6.7864788309843,6.786480162692253,6.786482826108143,6.786485822451014,6.786489817574794,6.786495477333455,6.786502468799914,6.786508794412352,6.786515120024702,6.786521445636963,6.786526439541324,6.786532099299537,6.786538424911595,6.78654475052355,6.786551409062357,6.786558067601088,6.78656239565121,6.786567056628223,6.7865720505321105,6.786575379801336,6.786578709070535,6.786581039558979,6.786583370047396,6.786586033462727,6.786588363951118,6.786590361512594,6.786591027366413,6.786592359074058,6.786594023708608\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00223.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910846412181854,3.8910843059420586,3.8910843059420586,3.8910836353898044,3.891083300113678,3.891082964837551,3.8910819590091705,3.891080617904663,3.891078941524029,3.891077935695648,3.89107558876276,3.8910742476582527,3.8910719007253647,3.891069553792476,3.8910675421357155,3.8910655304789543,3.8910638540983205,3.891061507165432,3.891059160232544,3.8910564780235295,3.891053460538387,3.8910501077771187,3.8910460844635963,3.8910427317023277,3.8910390436649323,3.8910360261797905,3.8910330086946487,3.8910306617617603,3.891027979552746,3.8910259678959846,3.8910239562392235,3.891022615134716,3.8910216093063354,3.8910212740302086,3.8910216093063354,3.891022615134716,3.8910242915153503,3.8910266384482384,3.891029320657253,3.891032673418522,3.891037702560425,3.8910427317023277,3.8910487666726112,3.891056142747402,3.8910628482699394,3.891068883240223,3.89107558876276,3.8910826295614247,3.8910886645317078,3.891095705330372,3.8911020755767822,3.8911081105470657,3.8911131396889687,3.8911164924502373,3.8911185041069984,3.8911198452115054,3.8911208510398865,3.891121856868267,3.8911225274205203,3.8911225274205203,3.8911215215921406,3.8911205157637596,3.8911188393831253,3.891117498278618,3.8911161571741104,3.891114480793476,3.8911131396889687,3.891112133860588,3.8911107927560806,3.8911091163754463,3.8911067694425583,3.891103751957416,3.891100063920021,3.8910946995019913,3.8910863175988197,3.891078941524029\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022PositionLatitude\\\u0022: 7.457505,\\n \\\u0022PositionLongitude\\\u0022: 3.919238,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.02,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Ojo\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 3294,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Oyo\\\u0022,\\n \\\u0022TractorID\\\u0022: 500249,\\n \\\u0022TractorModelID\\\u0022: 4,\\n \\\u0022TractorName\\\u0022: \\\u0022MF 4610Tractor (500249)\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:30:04\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225c4069eef0705c629a75dc8d\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022MF 4610\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T22:59:27.718Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-01-18T17:03:39.151Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500251\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225c4222207ae97a3da6d4db0b\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 5945,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022108\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-01-18 18:59:43\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 288,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 66,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022101,102,108\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 11:14:19\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-14T10:54:11.919Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00226.7866123346882405,6.7866123346882405,6.7866123346882405,6.78661133590756,6.786609005419282,6.786607340784771,6.786605010296469,6.786603345661971,6.786600349319839,6.786597685904595,6.786594689562425,6.786591360293328,6.786588363951118,6.78658436882814,6.786580373705136,6.786576378582106,6.786571717605183,6.786566390774367,6.786561063943487,6.786556070039484,6.786550077354596,6.78654441759661,6.7865374261307485,6.786531100518679,6.786526439541324,6.78652111271001,6.786514787097738,6.786508461485386,6.786502468799914,6.786498806603201,6.786495477333455,6.786494478552519,6.786494478552519,6.786495810260421,6.786498473676235,6.78650180294597,6.786506463923566,6.786511124901127,6.786518116367368,6.786525107833498,6.786532432226491,6.786538757838535,6.7865454163774315,6.786551409062357,6.786558400528028,6.786564393212788,6.786570385897472,6.786576378582106,6.786581705412821,6.786587698097289,6.786593357854779,6.786599017612217,6.786602679808154,6.7866060090771745,6.786609338346172,6.7866123346882405,6.78661499810342,6.78661632981099,6.786617994445463,6.786618327372352,6.786618660299241,6.786617328591671,6.786615663957198,6.786613000542044,6.7866123346882405\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00223.89106921851635,3.89106921851635,3.89106921851635,3.8910678774118423,3.8910648599267006,3.891062512993813,3.8910601660609245,3.8910581544041634,3.8910558074712753,3.8910527899861336,3.8910501077771187,3.8910477608442307,3.8910454139113426,3.8910430669784546,3.891041055321694,3.8910387083888054,3.891037367284298,3.8910353556275368,3.891034349799156,3.8910340145230293,3.891034349799156,3.8910356909036636,3.891037367284298,3.8910390436649323,3.8910403847694397,3.8910427317023277,3.891047090291977,3.891052454710007,3.891059160232544,3.891065195202828,3.8910719007253647,3.891078270971775,3.891084976494312,3.8910920172929764,3.8910997286438938,3.8911084458231926,3.8911164924502373,3.891123868525028,3.8911302387714386,3.8911359384655952,3.891140967607498,3.891143649816513,3.891146332025528,3.8911470025777817,3.8911470025777817,3.8911470025777817,3.8911466673016544,3.8911456614732747,3.8911439850926395,3.891139961779117,3.891135267913341,3.8911302387714386,3.8911252096295352,3.8911198452115054,3.891114480793476,3.8911081105470657,3.891103751957416,3.8910993933677673,3.891095705330372,3.8910920172929764,3.891087993979454,3.891083300113678,3.8910776004195213,3.891071565449238,3.8910702243447304\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 6.568566,\\n \\\u0022PositionLongitude\\\u0022: 7.007863,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.69,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Umumbo\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 972,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Anambra\\\u0022,\\n \\\u0022TractorID\\\u0022: 500251,\\n \\\u0022TractorModelID\\\u0022: 22,\\n \\\u0022TractorName\\\u0022: \\\u0022DC60 Rice Combine Harvest\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:29:33\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225c4069eef0705c629a75dc8d\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022DC60\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-09-30T10:25:46.673Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-01-18T18:59:44.264Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500325\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225b28e4bc2a0796167b35f6ce\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 353,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 39,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-05-03 10:25:18\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-01T11:20:30.187Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00228.732170076837642,8.730360352341265,8.645288126511145,8.630805737764975,8.624469787239176,8.616323124855512,8.60093428502475,8.597313563644718,8.588260945847692,8.584639771927717,8.577397651978393,8.575587183294534,8.56924997767467,8.567439470180586,8.562912666432503,8.561102128776914,8.55929158250841,8.558386140373482,8.558386140373482,8.554764681848354,8.554764681848354,8.553859560496335,8.552954105446167,8.550238058934205,8.550238058934205,8.547521993064649,8.544805907843479,8.544805907843479,8.540279166673635,8.539373679370149,8.535752040233685,8.535752040233685,8.533035871223666,8.532130698303787,8.528508990466579,8.528508990466579,8.525792769951138,8.524887248298668,8.523076530131819,8.520360271014559,8.518549531410732,8.518549531410732,8.516738451656595,8.515833240144337,8.514022147533291,8.512211377934989,8.51130582413197,8.51040059977148,8.51130582413197,8.51040059977148,8.508589481458587,8.508589481458587,8.509495041685742,8.509495041685742,8.51130582413197,8.51130582413197,8.512211377934989,8.512211377934989,8.51311692959593,8.514022147533291,8.514022147533291,8.514022147533291,8.512211377934989,8.51311692959593,8.51130582413197,8.51040059977148,8.51130582413197,8.506778686168428,8.504062311389,8.498629504067681,8.497723918163858,8.493196619769561,8.491385751772773,8.489574543628715,8.488669267954936,8.4877636585424,8.486858046993763,8.48595276491478,8.485047149095347,8.485047149095347,8.484141531140477,8.48323624265826,8.48233062043394,8.48233062043394,8.48233062043394,8.480519701191406,8.479614072564171,8.477803140520134,8.477803140520134,8.473275275663465,8.471464313764246,8.466936705910465,8.464220049306768,8.458786678599614,8.457880998820752,8.451541844044783,8.450636478879153,8.446108294613662,8.443391491201998,8.437957827016323,8.436146699180814,8.434335562854406,8.434335562854406,8.43071293308289,8.43071293308289,8.429807187421536,8.427996021388594,8.427996021388594,8.427090269362822,8.431618676622076,8.432524086387328,8.437957827016323,8.438863553572494,8.44429720501142,8.445202916695342,8.449730779951278,8.450636478879153,8.452447538719122,8.454258590052255,8.45606996450813,8.456975316913082,8.459692024621258,8.460597700142603,8.461503373534491,8.462408713170827,8.466031045298529,8.468747689120645,8.471464313764246,8.471464313764246,8.47689750549197,8.480519701191406,8.4877636585424,8.494102216362338,8.503156738319529,8.507684250676977,8.522171002045239,8.530319682893834,8.536657536129924,8.543900431285305,8.550238058934205,8.560196690948585,8.570155393955224,8.576492252951484,8.583734721689225,8.586450528966454\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00226.4649538695812225,6.4649538695812225,6.4594607055187225,6.4594607055187225,6.458545066416264,6.457629427313805,6.4567141234874725,6.457629427313805,6.4567141234874725,6.454882845282555,6.4539675414562225,6.454882845282555,6.453051902353764,6.4539675414562225,6.453051902353764,6.4512209594249725,6.450305320322514,6.449389681220055,6.4484743773937225,6.446643099188805,6.4457277953624725,6.443896517157555,6.4429812133312225,6.442065574228764,6.441149935126305,6.438403353095055,6.4356567710638055,6.432910189032555,6.429248303174972,6.426501721143723,6.4200929179787645,6.4182619750499725,6.4109375327825555,6.409106589853763,6.4017824828624725,6.3990359008312225,6.395373679697514,6.391711458563805,6.387133933603764,6.3798098266124725,6.3770632445812225,6.376147605478764,6.3715700805187225,6.3688234984874725,6.366076916456223,6.3624146953225145,6.360583752393722,6.357837170362473,6.356005892157555,6.3541749492287645,6.353259310126305,6.3505127280950555,6.346850842237473,6.3450195640325555,6.3404420390725145,6.3386110961437225,6.3358645141124725,6.332202292978764,6.329455710947514,6.323962546885014,6.3221316039562225,6.317553743720055,6.314807161688805,6.3083986937999725,6.306567415595055,6.301074251532555,6.299243308603764,6.295581087470055,6.293750144541264,6.291003562510014,6.291003562510014,6.288256980478764,6.288256980478764,6.287341341376305,6.287341341376305,6.286426037549972,6.285510398447514,6.286426037549972,6.286426037549972,6.286426037549972,6.285510398447514,6.285510398447514,6.285510398447514,6.285510398447514,6.2845947593450555,6.2845947593450555,6.2845947593450555,6.2845947593450555,6.2845947593450555,6.2845947593450555,6.2845947593450555,6.285510398447514,6.287341341376305,6.291003562510014,6.2919192016124725,6.297412365674973,6.3001589477062225,6.307483054697514,6.312060579657555,6.3541749492287645,6.3633303344249725,6.391711458563805,6.3990359008312225,6.426501721143723,6.434741467237472,6.461291648447514,6.4677004516124725,6.4878418296575555,6.4924196898937225,6.512561067938805,6.516223289072514,6.529956199228764,6.5336184203624725,6.545520052313805,6.5473513305187225,6.556506380438805,6.560168601572513,6.564746126532554,6.5693239867687225,6.5784790366888055,6.5821412578225145,6.594958528876305,6.600451692938805,6.603198274970055,6.6050295531749725,6.6160158812999725,6.623339988291264,6.6297487914562225,6.633410677313804,6.637072898447513,6.641650423407554,6.645312644541263,6.6480592265725145,6.651721447706223,6.653552390635013,6.659045554697514,6.661792136728764,6.6645387187600145,6.667285300791264,6.669116243720055,6.671862825751305,6.674609407782555,6.675525046885014,6.677355989813805,6.677355989813805\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 7.798398,\\n \\\u0022PositionLongitude\\\u0022: 6.74189,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: null,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Lokoja\\\u0022,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Kogi\\\u0022,\\n \\\u0022TractorID\\\u0022: 500325,\\n \\\u0022TractorModelID\\\u0022: 9,\\n \\\u0022TractorName\\\u0022: \\\u002202 KOGI WEST\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:10:11\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022license_plate_number\\\u0022: \\\u0022KG102LKJ\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225afeb568d0f0061782c40b12\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:13.411Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-06-19T11:10:52.510Z\\\u0022\\n },\\n \\\u0022TotalDistanceCovered\\\u0022: 59724,\\n \\\u0022Heading\\\u0022: null,\\n \\\u0022FuelRawValue\\\u0022: null,\\n \\\u0022IgnitionStatus\\\u0022: null,\\n \\\u0022AssetState\\\u0022: null,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500339\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225af574d14c356779d5bb40a1\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103,107\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 619,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 52,\\n \\\u0022Group\\\u0022: \\\u0022sawonjo\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-03 16:43:10\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002238.79894932566223,40.55469249812395,35.86937327950376,30.13384528068626,25.478980839076183,17.8201641281377,10.681495212698072,-2.9432481722329658,-11.981876882967889,-18.746198364908395,-25.567245491064458,-32.909507875101994,-36.93679966016061,-40.76202438133939,-44.253582810499815,-46.10882996422889,-48.1384293251279,-48.951671633440206,-49.296216001688435,-49.41053037288745,-49.06679009059163,-46.83400664517555,-44.504448163320575,-42.33791559645093,-38.18874241559357,-33.35039351137441,-28.38203060874967,-21.872779275822598,-15.052839281125827,-9.22220351605437,-2.5926690431767656,4.5967183771835,10.508997053754618,17.65301328753066,21.94484582756054,26.268477382826756,31.49029361375234,31.78910873523986,35.584437013079594,39.07196017020207,40.55469249812395,42.13556727576628,42.91157808883026,43.039975749630244,43.29597001532017,43.29597001532017,42.005295396074075,41.48153302120895\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002221.865004114806652,-14.637532755732536,-23.412186428904533,-32.362329997122295,-38.504584953188896,-42.365425676107414,-44.47134967893362,-46.22627913951874,-45.87528929114342,-44.822329804301255,-43.59388276934624,-41.31247121840716,-37.802612632513046,-33.5907793790102,-30.431905947625637,-24.64063815772533,-19.726835265755653,-15.514998659491539,-9.723733551800251,-4.107953645288944,1.8588030338287356,10.984442196786402,18.004161715507507,22.04050373286009,29.060223251581192,33.79853121936321,38.18586174398661,41.344725787639625,44.50360424816609,45.03007661551237,45.381071493029594,45.381071493029594,44.85458437353372,43.80163460969925,42.222197726368904,39.940791204571724,36.25542797148228,36.25542797148228,32.21909198909998,28.533741161227226,27.12979417294264,25.72585489600897,24.146415665745735,21.514021642506123,16.073740012943745,7.123598791658878,-6.213872954249381,-9.197251796722412\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 6.567458,\\n \\\u0022PositionLongitude\\\u0022: 3.035225,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 500339,\\n \\\u0022TractorModelID\\\u0022: 9,\\n \\\u0022TractorName\\\u0022: \\\u0022FAD001OG\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022license_plate_number\\\u0022: \\\u0022FAD001OG\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225af571828026bf1bf79e839f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:08.634Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222018-05-11T10:47:45.000Z\\\u0022\\n },\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022Town\\\u0022: \\\u0022Ogun\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Street\\\u0022: \\\u0022Araromi\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:09:32\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 5068,\\n \\\u0022Heading\\\u0022: 111,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022PrevTempFuelData\\\u0022: []\\n },\\n \\\u0022500371\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u0022594a8cffc6cc75e018a68ff8\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102,103,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 282,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022TRAXI\\\u0022,\\n \\\u0022Heading\\\u0022: 292,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022102,103,107\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-17 16:49:22\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-05-09T04:28:17.359Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00229.990129902809482,9.990129902809482,9.991482368696945,9.991482368696945,9.993511056982314,9.997568395579124,9.996892175996377,10.062478911548828,10.060450654988962,10.060450654988962,10.06315499423759,10.067211460636273,10.070591810354589,10.07397212465416,10.078028455044844,10.081408691383052,10.084788892266053,10.087493027437036,10.089521113915788,10.089521113915788,10.08884508650873,10.084788892266053,10.080056601101758,10.072620003185301,10.06315499423759,9.984043736734638,9.984043736734638,9.984043736734638,9.983367489033077,9.983367489033077,9.984043736734638,9.986072471408525,9.986072471408525,9.986072471408525,9.983367489033077,9.9806624841779,9.976604934758441,9.973899873729541,9.96916596288986,9.964431983299999,9.957669036116048,9.951582263818539,9.942113725869078,9.933321266456701,9.925881308534112,9.920470323849328,9.91844118154797,9.917764797988301,9.917764797988301,9.919793944478576,9.922499453582303,9.926557675333186,9.933997617880324,9.94279005910746,9.950229632342495,9.954287509961622,9.95564012462719,9.96172682125041,9.96172682125041,9.962403113866124,9.963079405079684,9.963079405079684,9.965108270306562,9.966460840112031,9.96713712291076,9.96848968429977,9.96848968429977,9.971871063218648,9.974576141092555,9.976604934758441,9.978633715787716,9.98133873749884,9.986072471408525,9.988777431298432\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00227.37471491098404,7.376088201999664,7.378148138523101,7.380208075046539,7.385701239109039,7.391881048679351,7.396000921726227,7.392567694187164,7.396687567234039,7.398747503757476,7.400120794773103,7.402867376804353,7.402867376804353,7.404927313327789,7.40767389535904,7.409047186374664,7.411793768405914,7.415913641452789,7.421406805515289,7.428273260593414,7.439946234226227,7.452992498874664,7.46809870004654,7.481144964694978,7.496937811374664,7.52303034067154,7.52303034067154,7.52440396696329,7.525090612471104,7.525090612471104,7.52646390348673,7.52715054899454,7.52715054899454,7.528523840010167,7.52989713102579,7.530583776533604,7.532643713057042,7.532643713057042,7.532643713057042,7.531957067549229,7.52989713102579,7.529210485517979,7.525090612471104,7.520284093916415,7.516850866377355,7.51067105680704,7.505177892744541,7.498311437666416,7.489384710788727,7.477712072432042,7.466038763523101,7.453679144382477,7.440632879734038,7.426899969577788,7.415913641452789,7.406987249851228,7.402180731296539,7.37746149301529,7.372654974460602,7.368535101413726,7.36098200082779,7.358235418796539,7.352742254734038,7.349309027194978,7.347935736179352,7.346562445163727,7.346562445163727,7.345875799655914,7.346562445163727,7.347935736179352,7.348622381687164,7.349309027194978,7.349995672702788,7.349309027194978\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: false,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 11.167208,\\n \\\u0022PositionLongitude\\\u0022: 7.951952,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Ricifa\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 1928,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Kaduna\\\u0022,\\n \\\u0022TractorID\\\u0022: 500371,\\n \\\u0022TractorModelID\\\u0022: 9,\\n \\\u0022TractorName\\\u0022: \\\u0022TRAXI/TRMH0074-110\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:10:24\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u0022593aa855ecdebb2558589e6f\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022YAB110YR\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-05-08T12:04:46.322Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-06-21T15:13:03.931Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 12400,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022PrevTempFuelData\\\u0022: []\\n },\\n \\\u0022500459\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225ca45ec55d18a8036b7955c3\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-04-03 07:20:38\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 91,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 12,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022103\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-09-07 14:18:45\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00227.126032468334042,7.125980236574781,7.125953954349724,7.125898063030659,7.125741035002532,7.1255430864582125,7.125262964170414,7.1248520956594845,7.124571972949397,7.124258248618381,7.12385103877413,7.123455139967675,7.122678312324535,7.121998628643314,7.12124408875115,7.120698809811194,7.1201608494163615,7.119343095177259,7.118401578116947,7.118035616900647,7.117643372691096,7.117329643620545,7.117102081785108,7.116829273588053,7.116597719186218,7.116246727736527,7.115910374540924,7.115686471634078,7.115510809247366,7.115387712459013,7.115406343326405,7.1154436050589,7.115481199482362,7.115694123592575,7.116037796205842,7.116463643811045,7.116874519836825,7.117326316693937,7.117778113106219,7.11821893023729,7.118738262178109,7.119212680208568,7.11991465830166,7.120777657385611,7.121550495973457,7.122402180554004,7.123444161256407,7.124127835047505,7.124478820466304,7.125024094910902,7.125565709153313,7.1260737214390435,7.126458306658705,7.126794319432467,7.127003578748255,7.1270894116355334,7.1271379837274,7.127063129474088,7.1265700891533665,7.125535767350742,7.124639175800439,7.124008067449728,7.123671719945333\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00223.325838595628739,3.3257178962230682,3.32542821764946,3.3252662792801857,3.3249048516154285,3.3245474472641945,3.3241974189877506,3.323775976896286,3.3234259486198425,3.323162421584129,3.3227822184562683,3.322526402771473,3.322180062532425,3.3219919726252556,3.321894071996212,3.3218186348676677,3.321826346218586,3.321943022310734,3.322071097791195,3.3221461996436124,3.322390951216221,3.322586752474308,3.322816416621208,3.323008194565773,3.3231966197490697,3.323437348008156,3.323844037950039,3.3241149410605426,3.3244649693369865,3.3249356970190997,3.325601890683174,3.326015956699848,3.326430022716522,3.3269530534744263,3.3275478333234787,3.3281349018216133,3.328556343913078,3.3289744332432742,3.329392187297344,3.329685553908348,3.3299303054809575,3.33013717085123,3.330114707350731,3.3300355821847916,3.3298813551664357,3.3296778425574307,3.3292902633547783,3.329060599207878,3.328819535672664,3.3284356445074077,3.328010179102421,3.327671550214291,3.327343985438347,3.3269376307725906,3.32650076597929,3.3260756358504295,3.3256954327225685,3.325326628983021,3.3249125629663467,3.32446463406086,3.324170932173729,3.324061967432499,3.324009329080582\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 7.118708,\\n \\\u0022PositionLongitude\\\u0022: 3.325646,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.72,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Apana\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 2862,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Ogun\\\u0022,\\n \\\u0022TractorID\\\u0022: 500459,\\n \\\u0022TractorModelID\\\u0022: 32,\\n \\\u0022TractorName\\\u0022: \\\u0022Hunters farm\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:34:37\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225ca3b7bebbe8a3456d30b2a9\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022001\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-05-14T07:32:58.861Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-04-03T07:20:37.614Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500505\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225af167e026860c399aaa7a4b\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,103,104,115\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Nigeria\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 337,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 2673871,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022103,102\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-03-22 16:40:25\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00226.868159172855465,6.865886995653977,6.862705396746553,6.857706269011194,6.851797657140675,6.820891263087424,6.794527939480037,6.764072323851795,6.7322509680004226,6.700882051642392,6.66996567196788,6.640411754465232,6.614038647738086,6.58993827861708,6.5672006871319395,6.549464731029113,6.532182825670382,6.516719772626977,6.504894567330872,6.499436737630093,6.499891781115418,6.507168756585501,6.517629161648553,6.5340022121163805,6.561743537108293,6.595394785898691,6.6276799710967165,6.664055097428197,6.698608752243771,6.731341641542712,6.75998110961792,6.785437101309771,6.807255356815636,6.824527217301801,6.8408896680087175,6.853615853000594,6.861796649902491,6.866341365388092,6.864523550975848,6.860887568448733,6.858160646552501\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u00225.511471815407276,5.501858778297902,5.494077019393444,5.484921634197234,5.475766249001026,5.444638542830944,5.425870120525359,5.409390628337859,5.397488661110401,5.388791263103485,5.38467139005661,5.386502332985401,5.392453484237194,5.402066521346569,5.415341444313525,5.429989993572236,5.449673719704151,5.47530859708786,5.504147708415986,5.534817762672901,5.566403456032275,5.595700554549694,5.620419792830944,5.641476809978485,5.661618523299693,5.677640028297901,5.687253065407276,5.691830925643444,5.690915286540985,5.684964470565319,5.677182376384735,5.665280409157276,5.650632195174694,5.6336947157979,5.61263769865036,5.59066504240036,5.567319095134734,5.545804090797901,5.524289421737195,5.508725233376026,5.503690056502818\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 6.64314,\\n \\\u0022PositionLongitude\\\u0022: 5.58151,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Ute\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 2435,\\n \\\u0022TotalHectaresTilled\\\u0022: 0,\\n \\\u0022Town\\\u0022: \\\u0022Ondo\\\u0022,\\n \\\u0022TractorID\\\u0022: 500505,\\n \\\u0022TractorModelID\\\u0022: 9,\\n \\\u0022TractorName\\\u0022: \\\u0022JD5065\u002BPLANTER\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u002259c8d84f8c59558e131dd898\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u00221PY5065EAHP022688\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-09-20T08:38:15.014Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-09-20T08:38:06.661Z\\\u0022\\n }\\n },\\n \\\u0022500511\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u002259d363018f57b7f96ef862a0\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 25207,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,103,104,107,110,109\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Senegal\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 2339,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 99,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022102,107\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 15:58:06\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-30T15:10:34.192Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002216.242390025748108,16.24239066953661,16.242391313325125,16.242391313325125,16.242392279007888,16.242392600902132,16.242392600902132,16.242393244690636,16.242393244690636,16.242392279007888,16.24239195711363,16.24239066953661,16.242389381959594,16.242388094382576,16.24238712869979,16.242385841122758,16.242383587862903,16.242381978391577,16.242379725131673,16.24237811566032,16.242374574823256,16.24237167777472,16.242368780726135,16.242366205571805,16.24236395231172,16.2423588020029,16.242352686010985,16.242347535701867,16.242343672969923,16.24234077592093,16.24233916644925,16.24233820076622,16.24233659129451,16.242335303717148,16.24233401613976,16.242332406668016,16.242329187724497,16.24232661256965,16.242324037414757,16.24232242794295,16.24232017468237,16.242318887104894,16.242317599527404,16.242316955738648,16.242315668161144,16.242315024372388,16.242314380583633,16.24231341490049,16.242313093006118,16.242313093006118,16.242313093006118,16.242313093006118,16.242312449217348,16.242312127322975,16.242312127322975,16.242313093006118,16.24231341490049,16.242314380583633,16.242315668161144,16.242316955738648,16.242318565210507,16.24232017468237,16.24232242794295,16.242324681203478,16.24232661256965,16.24233015340756,16.242334338034112,16.242336913188872,16.242339488343582,16.242343029181267,16.24234624812456,16.242348823279155,16.242351398433712,16.242353329799613,16.24235590495412,16.24235719253137,16.242359123897195,16.24236234284023,16.242364274206018,16.242366849360383,16.24236910262043,16.242370712091873,16.242372643457568,16.242373931034702,16.242375218611823,16.24237650618893,16.242377793766035,16.242378437554592,16.242379725131673,16.242380690814496,16.242381978391577,16.242383265968645,16.24238423165143,16.242384875439974,16.242385841122758,16.242386163017017,16.242387450594048,16.242388094382576,16.24238873817108,16.242389703853863,16.242390025748108,16.24239066953661,16.242390991430884,16.242391313325125,16.242391313325125,16.242391313325125,16.242391313325125,16.242390991430884,16.242390991430884,16.242390991430884,16.24239066953661,16.24239066953661,16.242390025748108,16.242390025748108,16.242390025748108,16.242390025748108,16.242389703853863,16.242389703853863,16.242389703853863,16.24238873817108,16.242389381959594,16.24238873817108,16.24238873817108,16.242388416276835,16.242388094382576,16.242388094382576,16.242387450594048,16.24238712869979\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u0022-16.21344354003668,-16.213443875312805,-16.213444210588932,-16.213444210588932,-16.213445216417313,-16.21344622224569,-16.21344655752182,-16.21344789862633,-16.213448233902454,-16.213449575006962,-16.21345091611147,-16.213452257215977,-16.213453598320484,-16.213455609977245,-16.21345695108175,-16.21345829218626,-16.21346030384302,-16.213461309671402,-16.21346298605204,-16.21346365660429,-16.213465332984924,-16.213466674089428,-16.21346801519394,-16.213469356298447,-16.213469691574574,-16.213471703231335,-16.213473044335842,-16.21347337961197,-16.21347337961197,-16.21347337961197,-16.21347237378359,-16.21347237378359,-16.213471703231335,-16.21347103267908,-16.213470362126827,-16.213469691574574,-16.21346835047007,-16.213466674089428,-16.213464327156544,-16.213462315499786,-16.213459968566895,-16.21345728635788,-16.21345493942499,-16.213452257215977,-16.213450245559216,-16.21344789862633,-16.213444881141186,-16.213438846170902,-16.213433146476746,-16.213429123163223,-16.213425435125828,-16.213422752916813,-16.213418394327164,-16.213414035737514,-16.213409677147865,-16.213404648005962,-16.213401965796947,-16.213398277759552,-16.21339526027441,-16.213392578065395,-16.213390231132507,-16.213388554751873,-16.213385872542858,-16.21338352560997,-16.21338151395321,-16.21337816119194,-16.21337614953518,-16.21337480843067,-16.213374137878418,-16.21337380260229,-16.21337380260229,-16.21337380260229,-16.213374137878418,-16.2133751437068,-16.213375478982925,-16.21337648481131,-16.213377825915813,-16.213378831744194,-16.213380843400955,-16.213382855057716,-16.213384866714478,-16.21338687837124,-16.213388554751873,-16.21338989585638,-16.213391236960888,-16.213392913341522,-16.21339526027441,-16.213396936655048,-16.213398948311806,-16.213400959968567,-16.213403642177582,-16.213405653834343,-16.213407330214977,-16.213409677147865,-16.213411353528496,-16.213412694633007,-16.213414035737514,-16.213415376842022,-16.213416717946526,-16.21341772377491,-16.21341872960329,-16.21342074126005,-16.213422417640686,-16.213425435125828,-16.213428117334843,-16.21343046426773,-16.21343281120062,-16.213434487581253,-16.213435493409634,-16.21343716979027,-16.21343817561865,-16.213438510894775,-16.213439851999283,-16.213440857827663,-16.21344119310379,-16.21344219893217,-16.21344219893217,-16.213442869484425,-16.21344354003668,-16.213443875312805,-16.213444210588932,-16.213445216417313,-16.21344555169344,-16.21344622224569,-16.213446892797947,-16.213448233902454,-16.213448904454708,-16.213448904454708\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 16.273214,\\n \\\u0022PositionLongitude\\\u0022: -16.15888,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 2.33,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Ross-B\u00E9tio\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 13594,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Saint-Louis\\\u0022,\\n \\\u0022TractorID\\\u0022: 500511,\\n \\\u0022TractorModelID\\\u0022: 2,\\n \\\u0022TractorName\\\u0022: \\\u0022TracteurNewHolland2\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:03:28\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u002259d35f4257f0e7db045c2e9f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-08-22T12:04:12.816Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-10-03T10:14:25.732Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u00221333109006\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500512\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u002259d363643297aa7369fc4c9c\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: false,\\n \\\u0022Characteristic\\\u0022: \\\u0022108\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Senegal\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 0,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: null,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022108\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00221970-01-01 00:00:00\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002216.328743949113463,16.328241692734622,16.32623361959142,16.320208632946816,16.31117096604907,16.306652137036192,16.304643520588947,16.30263520533968,16.300626547703015,16.295605135329044,16.28706869650737,16.278531564235426,16.270998870617273,16.264972185737662,16.259949860693663,16.25593197258049,16.250407282515596,16.24387781536713,16.23684596286142,16.230818230726584,16.226297551911994,16.22278118200325,16.22026949675654,16.219265071234528,16.219265071234528,16.219265071234528,16.219767284635818,16.22026949675654,16.22278118200325,16.22931134932403,16.23684596286142,16.24387781536713,16.248398412119606,16.25090973831712,16.253923158651318,16.256936532779388,16.26095440034867,16.26748330009722,16.273509907894574,16.278531564235426,16.282046936854304,16.285562246476946,16.288575134965292,16.292592354873122,16.296107475440184,16.299622211162173,16.30263520533968,16.30614982396067,16.309664701297915,16.31368148880911,16.31769819390293,16.322217089698565,16.32522941440983,16.326735559371013,16.32773975682018,16.328743949113463,16.329245882450717,16.32974781449972,16.330751996482103,16.330751996482103,16.33125392466532,16.330751996482103,16.330751996482103,16.330751996482103,16.330250067010507,16.330250067010507,16.32974781449972,16.32974781449972,16.32974781449972,16.330250067010507,16.331756173307774\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u0022-16.19981825351715,-16.200341284275055,-16.204003505408764,-16.215512864291668,-16.231730841100216,-16.237485520541668,-16.240624375641346,-16.242717169225216,-16.244809627532955,-16.247948817908764,-16.253180466592312,-16.258935146033764,-16.262074001133442,-16.264166794717312,-16.26521285623312,-16.264166794717312,-16.26364342868328,-16.260504573583603,-16.257365718483925,-16.254226528108116,-16.250564642250538,-16.24690242111683,-16.242717169225216,-16.23957831412554,-16.236439123749733,-16.233300268650055,-16.230684444308277,-16.226499192416668,-16.21969811618328,-16.207142360508445,-16.194586604833603,-16.186216101050377,-16.180461421608925,-16.17732223123312,-16.17470640689135,-16.172613948583603,-16.16947509348393,-16.16685926914215,-16.165289841592312,-16.16476647555828,-16.163720078766346,-16.163197048008442,-16.163197048008442,-16.162150651216507,-16.162674017250538,-16.161627620458603,-16.161627620458603,-16.1611045897007,-16.1611045897007,-16.161627620458603,-16.161627620458603,-16.161627620458603,-16.161627620458603,-16.162150651216507,-16.162150651216507,-16.162674017250538,-16.163197048008442,-16.164243444800377,-16.165812872350216,-16.168951727449894,-16.17941502481699,-16.193017177283767,-16.200864650309086,-16.205572932958603,-16.209235154092312,-16.21080458164215,-16.211850643157963,-16.21237400919199,-16.212897039949894,-16.212897039949894,-16.21237400919199\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 16.2423715,\\n \\\u0022PositionLongitude\\\u0022: -16.213420499999998,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: null,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Nditi\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Saint-Louis\\\u0022,\\n \\\u0022TractorID\\\u0022: 500512,\\n \\\u0022TractorModelID\\\u0022: 29,\\n \\\u0022TractorName\\\u0022: \\\u0022MoissoneuseSakpattana\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:03:28\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u002259d35f4257f0e7db045c2e9f\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u00221333119011\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-07-10T18:38:10.871Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-10-03T10:16:04.493Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: null,\\n \\\u0022IgnitionStatus\\\u0022: null,\\n \\\u0022AssetState\\\u0022: null,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500513\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u002259d3615f8c59558e13413540\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022108\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Senegal\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 537,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 28,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022108\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-29 22:05:40\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002216.25648881049271,16.25648881049271,16.256714763923778,16.256714763923778,16.257166991876446,16.257845170919353,16.258975571411177,16.261010404651177,16.2646274762997,16.268244803181588,16.270731415253838,16.27253986987282,16.273670185779075,16.274800495175906,16.275704866742235,16.276608912302684,16.277513275534943,16.27864356279645,16.280225696557892,16.281130043119575,16.28180813939018,16.282260309544682,16.28248623331679,16.282938401908204,16.282938401908204,16.282938401908204,16.28271247865688,16.28248623331679,16.282034385512354,16.281582214837094,16.28090411778556,16.280225696557892,16.27909541841066,16.27773920477357,16.27615672912358,16.274348307829943,16.271861741573918,16.269601082425403,16.267340397245093,16.265531894731375,16.26327116270266,16.261010404651177,16.258523669489197,16.256262856801822,16.25377573967567,16.251741153391862,16.249932507275705,16.248575770354574,16.247445310044053,16.246088877846674,16.244280179730268,16.242471464977765,16.240888705212576,16.239305932710824,16.238175419112434,16.23727119669762,16.236140671406478,16.2350101396193,16.233879601336483,16.232749056558443,16.23161850528558,16.230487947518295,16.23026164203708,16.229809674123732,16.229357383257003,16.228905091350967,16.22867910596659,16.228452798405705,16.228452798405705,16.228452798405705,16.22867910596659,16.22913107647591,16.229357383257003,16.229583367862663,16.230035658210138,16.230713930825946,16.231392201104313,16.23184448729511,16.232522753677195,16.233201017721626,16.2343315599031,16.235462095589195,16.23727119669762,16.239079959270768,16.240888705212576,16.242471464977765,16.24405389011374,16.246088877846674,16.24767159575754,16.24948026267574,16.251288912953118,16.25264530927024,16.254002018101634,16.255358395693886,16.25694103896543,16.258071444659176,16.25942779416003,16.26055818554553,16.261688570426287,16.262593002391707,16.263497108332736,16.264401531970076,16.265531894731375,16.26598410238523,16.26711445603693,16.267792600734072,16.26847074308902,16.26937514381877,16.27005328070755,16.270731415253838,16.271409547457573,16.27208767731865,16.27253986987282,16.272992061385242,16.27344425185591,16.273670185779075,16.274122374687416,16.274348307829943,16.27457456255393,16.274800495175906,16.27525268148002,16.275704866742235,16.27615672912358,16.276608912302684,16.27728702419909,16.2770610944398,16.27728702419909,16.277513275534943,16.27773920477357,16.278191384306044,16.27796513375208,16.27796513375208,16.27796513375208,16.27796513375208,16.27796513375208,16.278191384306044,16.278191384306044,16.278417312763896,16.278417312763896,16.278417312763896,16.27864356279645,16.27864356279645,16.278869490733634,16.27909541841066,16.27909541841066,16.279321667661268,16.279321667661268,16.27954759481761,16.27977384354679,16.279999770182435,16.280225696557892,16.280451944505096,16.280451944505096,16.280677870359842,16.280677870359842,16.280677870359842,16.280677870359842,16.280677870359842,16.280677870359842,16.280451944505096,16.280451944505096,16.280225696557892,16.280225696557892,16.279999770182435,16.27977384354679,16.279999770182435,16.279999770182435\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u0022-16.17950890213251,-16.17950890213251,-16.17950890213251,-16.17950890213251,-16.179744265973568,-16.17997996509075,-16.17997996509075,-16.18021532893181,-16.180921755731106,-16.182099245488644,-16.182806007564068,-16.183512434363365,-16.18421886116266,-16.18492528796196,-16.186102777719498,-16.18751596659422,-16.189399883151054,-16.192461289465427,-16.195758059620857,-16.198584102094173,-16.20093908160925,-16.202587634325027,-16.204235851764675,-16.2056490406394,-16.207768321037292,-16.210123300552365,-16.212949343025684,-16.21530432254076,-16.217188239097595,-16.219307854771614,-16.22072070837021,-16.2221335619688,-16.223546750843525,-16.225195303559303,-16.22707922011614,-16.22872743755579,-16.23037599027157,-16.232024542987347,-16.233202032744884,-16.233908459544182,-16.23461488634348,-16.235321648418903,-16.23555701225996,-16.23555701225996,-16.23555701225996,-16.23555701225996,-16.235321648418903,-16.23508594930172,-16.234850585460663,-16.234379522502422,-16.233673095703125,-16.232730969786644,-16.231553480029106,-16.23037599027157,-16.22919850051403,-16.228256709873676,-16.22707922011614,-16.22543066740036,-16.224017813801765,-16.222369261085987,-16.220249645411965,-16.218601427972317,-16.217188239097595,-16.215068958699703,-16.212713979184628,-16.210358999669552,-16.207768321037292,-16.20612010359764,-16.204235851764675,-16.202822998166084,-16.201174445450306,-16.19881946593523,-16.19599375873804,-16.192932352423668,-16.19081273674965,-16.189164184033867,-16.187986694276333,-16.187044903635982,-16.18633847683668,-16.185160987079147,-16.18421886116266,-16.182806007564068,-16.180921755731106,-16.179273538291454,-16.177860349416733,-16.176682859659195,-16.175505369901657,-16.174563579261303,-16.173386089503765,-16.172443963587284,-16.171266473829743,-16.17056004703045,-16.17008898407221,-16.169618256390095,-16.16938255727291,-16.169147193431858,-16.16891149431467,-16.168676130473614,-16.168676130473614,-16.168676130473614,-16.168676130473614,-16.168676130473614,-16.168676130473614,-16.168676130473614,-16.16891149431467,-16.169147193431858,-16.16938255727291,-16.16985362023115,-16.170324683189392,-16.171266473829743,-16.172208599746227,-16.173150390386585,-16.174092516303066,-16.17479894310236,-16.175505369901657,-16.1759764328599,-16.176682859659195,-16.17691855877638,-16.177860349416733,-16.178567111492157,-16.179273538291454,-16.17997996509075,-16.180451028048992,-16.180921755731106,-16.181392818689346,-16.18162851780653,-16.182099245488644,-16.182334944605824,-16.182570308446884,-16.182806007564068,-16.18327673524618,-16.183747798204422,-16.18445422500372,-16.185160987079147,-16.18586741387844,-16.186809204518795,-16.187986694276333,-16.189399883151054,-16.19104810059071,-16.191990226507187,-16.192932352423668,-16.193874143064022,-16.19458056986332,-16.1955226957798,-16.196229122579098,-16.196935549378395,-16.197641976177692,-16.198348738253113,-16.199055165052414,-16.19976159185171,-16.20046801865101,-16.201174445450306,-16.20188120752573,-16.202822998166084,-16.203765124082565,-16.204471550881863,-16.204942613840103,-16.205413341522217,-16.206355467438698,-16.207061894238,-16.207532957196236,-16.208239383995533,-16.209181509912014,-16.210123300552365,-16.21106542646885,-16.21153648942709,-16.212007217109207\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 16.242279,\\n \\\u0022PositionLongitude\\\u0022: -16.213388,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.02,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Nditi\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 1360,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Saint-Louis\\\u0022,\\n \\\u0022TractorID\\\u0022: 500513,\\n \\\u0022TractorModelID\\\u0022: 29,\\n \\\u0022TractorName\\\u0022: \\\u0022MoissoneuseNewHolland1\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:03:27\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u002259d35f4257f0e7db045c2e9f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-08-01T17:53:32.578Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-10-03T10:07:27.365Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022549806007\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500514\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u002259d362438c59558e13413859\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 14807,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,103,104,110,109\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Senegal\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 2583,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 78,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022102,104,103,101,110,109\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 15:20:27\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-30T14:43:33.872Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002216.309586507788957,16.309586507788957,16.310088490266228,16.31109277314162,16.311595073538022,16.31109277314162,16.31109277314162,16.31109277314162,16.31109277314162,16.31109277314162,16.31109277314162,16.31109277314162,16.310088490266228,16.308080230849537,16.30506764221432,16.30356100872646,16.30054835058587,16.298037659480915,16.296029276519665,16.29301618077186,16.290505714991966,16.285484043350195,16.27845335830575,16.271422743172522,16.262382826936314,16.25334249462245,16.241790657731965,16.23224687627084,16.22471240858893,16.219186841724074,16.21516779906749,16.212656338686113,16.211148996368927,16.211148996368927,16.211148996368927,16.21165155240391,16.212656338686113,16.213660797903568,16.21516779906749,16.216172567418653,16.218182088747227,16.220191267645,16.222200747974153,16.224209885874565,16.226721520860977,16.229233123804864,16.231744694701813,16.235763077087277,16.239279215066915,16.242292813659077,16.246813124963587,16.252840366917123,16.25886742403728,16.261880722334613,16.26439187622371,16.26790718024277,16.27242722413824,16.276946842112082,16.284981676018685,16.291007746356893,16.296029276519665,16.299042004143555,16.30105067802517,16.30255700902425,16.304063328441035,16.305569636274583,16.30657394232435,16.30707593252394,16.308080230849537,16.307578243224185\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u0022-16.158525310456753,-16.15957137197256,-16.15957137197256,-16.160094738006592,-16.160094738006592,-16.161141134798527,-16.16323359310627,-16.166895814239975,-16.173173524439335,-16.181544028222557,-16.18677567690611,-16.192007325589657,-16.198808401823044,-16.20560947805643,-16.211887188255787,-16.217642202973366,-16.224443279206753,-16.230197958648205,-16.234906241297722,-16.239091493189335,-16.242753714323044,-16.245892569422722,-16.249031759798527,-16.251647248864174,-16.25321701169014,-16.252170614898205,-16.250601187348362,-16.24746199697256,-16.24380011111498,-16.239091493189335,-16.234383210539818,-16.230197958648205,-16.22705910354853,-16.223919913172722,-16.22130408883095,-16.21868826448917,-16.21659580618143,-16.212933585047722,-16.207701936364174,-16.202470622956753,-16.195669546723366,-16.188345104455948,-16.182590425014496,-16.178405173122883,-16.174742951989177,-16.171081066131592,-16.167418844997883,-16.163756623864174,-16.161141134798527,-16.159048341214657,-16.156955882906914,-16.154863089323044,-16.152770295739174,-16.152770295739174,-16.15224726498127,-16.151724234223366,-16.151724234223366,-16.15224726498127,-16.152770295739174,-16.15381669253111,-16.15434005856514,-16.15434005856514,-16.15434005856514,-16.15434005856514,-16.15434005856514,-16.15434005856514,-16.154863089323044,-16.154863089323044,-16.154863089323044,-16.155386120080948\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 16.279957,\\n \\\u0022PositionLongitude\\\u0022: -16.136543,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Ross-B\u00E9tio\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 13704,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Saint-Louis\\\u0022,\\n \\\u0022TractorID\\\u0022: 500514,\\n \\\u0022TractorModelID\\\u0022: 2,\\n \\\u0022TractorName\\\u0022: \\\u0022TracteurNewHolland1\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:03:27\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u002259d35f4257f0e7db045c2e9f\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-08-25T11:56:57.187Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-10-03T10:11:15.181Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u00221333118832\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022500540\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225a1bd0dcca023909ce1ed09a\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Currency\\\u0022: null,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022EngineHours\\\u0022: 145,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-08-23 11:10:24\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0037018251725653,-2.0037018251725653,-1.999440720085368,-1.999440720085368,-1.998020349263285,-1.9951799390077138,-1.9937595645033754,-1.9909188118182826,-1.9909188118182826,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.9894984336392585,-1.988078054237082,-1.9866576736126185,-1.9866576736126185,-1.9852372917667582,-1.9852372917667582,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.983816908700341,-1.9852372917667582,-1.9866576736126185,-1.9866576736126185,-1.988078054237082,-1.9894984336392585,-1.9909188118182826,-1.9909188118182826,-1.9937595645033754,-1.9937595645033754,-1.9951799390077138,-1.9951799390077138,-1.996599977212821,-1.996599977212821,-1.996599977212821,-1.996599977212821,-1.998020349263285,-1.998020349263285,-1.998020349263285,-2.0037018251725653,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0051221910723838,-2.0079629191729085,-2.0093832813718846,-2.0093832813718846,-2.0065425557394576,-2.0065425557394576,-2.0037018251725653,-2.002281458040867,-1.999440720085368,-1.998020349263285,-1.998020349263285,-1.9951799390077138,-1.9894984336392585,-1.988078054237082,-1.988078054237082,-1.988078054237082,-1.988078054237082,-1.9866576736126185,-1.9866576736126185,-1.9852372917667582,-1.9852372917667582,-1.9852372917667582,-1.9852372917667582,-1.9852372917667582,-1.9852372917667582,-1.9852372917667582,-1.983816908700341,-1.9823965244142703,-1.9795557521866027,-1.9781353642467616,-1.9710334063222652,-1.9681926146636222,-1.9653518181646839,-1.9639314181022858,-1.9639314181022858,-1.9639314181022858,-1.9639314181022858,-1.9681926146636222,-1.9710334063222652,-1.9752945847193901,-1.9795557521866027,-1.9937595645033754,-2.0051221910723838,-2.032108572888395,-2.054833879652065,-2.09744262032972,-2.1102247827828555,-2.1258476925274223,-2.140050200562726,-2.175555223123479,-2.1883370685749526,-2.2096399018823347,-2.2195807846620075,-2.2266816136109746,-2.2394630194179626,-2.265025160883902,-2.2749660024221745,-2.299107425303075,-2.3047877797322864,-2.328928697519323,-2.340289144188594,-2.35164949880162,-2.3644294521594977,-2.3899896751047516,-2.402769273447513,-2.41270913892873,-2.4240688962084604,-2.4311683611453576,-2.4538874693214665,-2.4666664632800748,-2.479445669422328,-2.5007437367901315,-2.5121027435049608,-2.536240304179471,-2.540499492130186,-2.5646365224736276,-2.5731550309035667,-2.5845134001546044,-2.5958716677675824,-2.6015507633206054,-2.6256862984854434,-2.6455625474851585,-2.656919926249664,-2.6824740644542944,-2.723643699776149,-2.7491967679304965,-2.754874818494888,-2.777588088962923,-2.783266338464114,-2.7988810484861757,-2.80881778699245,-2.81449588533993,-2.81875444094934,-2.8286906751910985,-2.8272711705239635,-2.8286906751910985,-2.8329491787630086,-2.834368676474258,-2.8414661388959903,-2.8542414612163203,-2.861338466321959,-2.8712746684282715,-2.8812107841113943,-2.889727385685193,-2.9010824201694043,-2.913857074326045,-2.925212200778158,-2.9294703435751193,-2.932309096444383,-2.932309096444383,-2.932309096444383,-2.932309096444383,-2.932309096444383,-2.932309096444383,-2.932309096444383,-2.930889386072291,-2.922373429928289,-2.919534651898356,-2.9081794681168347,-2.9025018333263324,-2.888307956522072,-2.8826302221366475,-2.878371902752301,-2.8684357623464085,-2.862758263903359,-2.8542414612163203,-2.8528219879601644,-2.8528219879601644,-2.8528219879601644,-2.8528219879601644,-2.858499870461463,-2.865596849216551,-2.8698552162687734,-2.874113567455181,-2.8769524594201776,-2.8826302221366475,-2.8840496583912225,-2.888307956522072,-2.8925662386854434,-2.895405084578591,-2.8925662386854434,-2.8925662386854434,-2.8925662386854434,-2.879791344316315,-2.861338466321959,-2.8357881724443703,-2.8003005877237017,-2.760553176870116,-2.716545863754811,-2.693831436960855,-2.6441428259512407,-2.590192546693687,-2.5050033758577834,-2.45104760183876,-2.3985093089306333,-2.3459693330299993,-2.3260885715204833,-2.2849067754429915,-2.208219722470345,-2.171294918905052,-2.1556724723833263,-2.134369213086381,-2.1102247827828555,-2.0875006055891094,-2.0647760998796367,-2.0392102657758064,-2.0306885656250597,-2.0136443605531458,-2.0065425557394576,-1.998020349263285,-1.9752945847193901,-1.9681926146636222,-1.9625110168324091,-1.9554093274825883,-1.9525685092891503,-1.9525685092891503,-1.9525685092891503,-1.9525685092891503,-1.9525685092891503,-1.9525685092891503,-1.9554093274825883,-1.9596702106737953,-1.9639314181022858,-1.9639314181022858,-1.9653518181646839,-1.9681926146636222,-1.9724538003342942,-1.9738741931336283,-1.9752945847193901,-1.9795557521866027,-1.9866576736126185,-1.9894984336392585,-1.9937595645033754,-1.9937595645033754,-1.9937595645033754,-1.9937595645033754\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002236.31938323378563,36.31938323378563,36.31938323378563,36.31938323378563,36.31938323378563,36.31938323378563,36.33785929530859,36.356335021555424,36.376231983304024,36.40039298683405,36.42455365508795,36.45013555884361,36.475717797875404,36.502720937132835,36.526881605386734,36.552463844418526,36.57946698367596,36.60504888743163,36.63205236196518,36.657634265720844,36.68179493397474,36.70595593750477,36.7329590767622,36.758540980517864,36.78128041327,36.80544141680002,36.82533837854862,36.84381444007158,36.866553872823715,36.88218746334314,36.897820718586445,36.91061183810234,36.924823857843876,36.93761497735977,36.947563625872135,36.95609103888273,36.96319688111544,36.97030305862427,36.98025170713663,36.98735788464546,36.994463726878166,37.00299113988876,37.00725484639406,37.01293978840113,37.01720349490642,37.02288843691349,37.02715214341879,37.03283675014973,37.03567922115326,37.04278539866209,37.048470340669155,37.055576518177986,37.06126146018505,37.06552483141422,37.07120977342129,37.078315950930126,37.08968583494425,37.098213247954845,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.096792012453086,37.10389818996191,37.10816156119108,37.106740325689316,37.11384650319815,37.11953144520521,37.12379515171051,37.129480093717575,37.13232256472111,37.138007171452045,37.145113684237,37.15221952646971,37.160746939480305,37.16358941048383,37.172116823494434,37.17922266572714,37.18348637223243,37.1891713142395,37.19485625624657,37.20054119825363,37.20764737576246,37.2133319824934,37.22043816000223,37.226123102009296,37.23322927951813,37.2431779280305,37.250283770263195,37.26449612528086,37.27444477379322,37.28865712881088,37.31423903256655,37.32987228780984,37.342663407325745,37.349769584834576,37.35687542706728,37.35687542706728,37.35971789807081,37.373930253088474,37.37250901758671,37.37250901758671,37.37250901758671,37.37535148859024,37.37819395959377,37.373930253088474,37.37535148859024,37.37535148859024,37.37535148859024,37.37250901758671,37.37250901758671,37.369666546583176,37.369666546583176,37.37250901758671,37.37250901758671,37.37250901758671,37.37250901758671,37.37250901758671,37.373930253088474,37.37535148859024,37.37535148859024,37.37535148859024,37.37535148859024,37.37250901758671,37.369666546583176,37.369666546583176,37.369666546583176,37.369666546583176,37.369666546583176,37.369666546583176,37.36540284007788,37.36540284007788,37.36540284007788,37.362560369074345,37.362560369074345,37.362560369074345,37.35971789807081,37.35971789807081,37.35971789807081,37.35971789807081,37.35971789807081,37.35971789807081,37.35971789807081,37.35687542706728,37.35687542706728,37.35687542706728,37.35261205583811,37.35261205583811,37.35261205583811,37.35261205583811,37.35261205583811,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35687542706728,37.35261205583811,37.35261205583811,37.35261205583811,37.35687542706728,37.35119082033634,37.35261205583811,37.35261205583811,37.35261205583811,37.349769584834576,37.349769584834576,37.349769584834576,37.349769584834576,37.349769584834576,37.349769584834576,37.349769584834576,37.349769584834576,37.32845105230808,37.284393422305584,37.26449612528086,37.210489846765995,37.18206513673067,37.075473479926586,37.03425832092762,36.994463726878166,36.91487554460764,36.875081285834305,36.80117771029472,36.76422592252493,36.73153784126043,36.69884975999594,36.63205236196518,36.565254628658295,36.5041421726346,36.475717797875404,36.42455365508795,36.40323545783758,36.344965137541294,36.325068175792694,36.305171214044094,36.255428306758404,36.21563404798508,36.20426416397095,36.197157986462116,36.197157986462116,36.192894615232944,36.19147337973118,36.18578843772411,36.17583978921175,36.17157608270645,36.174418553709984,36.174418553709984,36.177261024713516,36.184367202222354,36.197157986462116,36.20568539947271,36.21563404798508,36.227003931999214,36.22984640300274,36.23837348073721,36.24690089374781,36.25258583575487,36.255428306758404,36.25684954226017,36.263955719769,36.26964066177606,36.27248279750347,36.27248279750347,36.27248279750347,36.27248279750347,36.27248279750347,36.27390403300524,36.27248279750347,36.26964066177606,36.26964066177606,36.26679819077253,36.26679819077253,36.26679819077253,36.26679819077253,36.26679819077253,36.26679819077253,36.26679819077253,36.27248279750347,36.2795889750123,36.2881163880229,36.289537623524666,36.293801330029964,36.30232874304056,36.31085582077503,36.313698291778564,36.316540762782104,36.32648941129446,36.34354390203953,36.35065007954836,36.363441199064255,36.36201996356249,36.36201996356249,36.36201996356249\\\u0022,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -1.191367,\\n \\\u0022PositionLongitude\\\u0022: 34.621131,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.02,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 500540,\\n \\\u0022TractorModelID\\\u0022: 8,\\n \\\u0022TractorName\\\u0022: \\\u0022Namanga 75HP 456R\\\u0022,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225915628d63067b1a5d1a010f\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 456R\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-01T11:12:35.697Z\\\u0022,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022FixedEngineHours\\\u0022: 883,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-04-13T23:01:02.624Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222017-11-27T08:46:20.242Z\\\u0022\\n },\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022Town\\\u0022: \\\u0022Migori\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022Street\\\u0022: \\\u0022Butende\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 1091,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 73\\n },\\n \\\u0022500917\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225be97fe373796c5283732731\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Bangladesh\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 5,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022The Metal (Pvt.) Limited\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022102,109\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-20 06:21:16\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002224.08857817365685,24.090249965118577,24.091921428699425,24.092757305348098,24.094428736221648,24.094428736221648,24.09359287047701,24.09359287047701,24.091921428699425,24.090249965118577,24.0894140721139,24.086070751657598,24.081891708016066,24.075204893600713,24.068517424357,24.060993834311503,24.052633976540957,24.043437075495955,24.030895063739877,24.018351827741913,24.004971231352307,23.989916167143804,23.97485934229445,23.95980075763826,23.94055646888593,23.918798932537506,23.894526575621658,23.871923983353717,23.850992035891284,23.82921943207166,23.807442866728305,23.789014066972257,23.76974438187857,23.75717579128358,23.74628223561459,23.737063522086743,23.727844463195602,23.72197728241427,23.716110144571402,23.71359548841663,23.71275715660172,23.71359548841663,23.717786452753675,23.72197728241427,23.730358844562037,23.740415884934404,23.752148015188755,23.764717091313,23.778960781216014,23.792364784927788,23.805767712985286,23.818331606101765,23.828381845064452,23.839268827619588,23.851829476853922,23.864388908745376,23.87862135711778,23.892015371467828,23.909592776455472,23.92382025144178,23.938046159271373,23.94892391705043,23.957290822495164,23.964820481339586,23.97485934229445,23.981551379648113,23.988243069322998,23.99409820396572,23.999116591327898,24.00329832922331,24.00831635781307,24.012498102955764,24.01667940588654,24.020860572857732,24.02504191008186,24.02838651446422,24.031731338021267,24.035076074513515,24.037584493190824,24.040928771107215,24.040928771107215,24.04260118360173,24.043437075495955,24.044273268134138,24.04510945532764,24.04594533089578,24.048453537302812,24.0501258518011,24.0509616947132,24.052633976540957,24.05597786252872,24.05765007900766,24.059321967550094,24.060993834311503,24.06266598543139,24.063501746681002,24.06433780862332,24.067681695781353,24.068517424357\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002290.48283115029335,90.48099987208843,90.47550670802593,90.4672669619322,90.45170310884714,90.43247703462838,90.41233532130718,90.39127830415966,90.3720522299409,90.35282615572214,90.3336000815034,90.31437400728464,90.29606357216836,90.27775313705206,90.2603580057621,90.24296287447213,90.22648338228464,90.21183516830206,90.19901756197213,90.18711593002081,90.1779605448246,90.16972079873086,90.16331233084203,90.15690352767704,90.15324130654335,90.15232600271702,90.15232600271702,90.15690352767704,90.1614810526371,90.16880549490453,90.1779605448246,90.18894687294959,90.20084884017707,90.21366611123085,90.22556807845831,90.24113193154335,90.25669578462839,90.27409091591834,90.29331699013711,90.31254306435585,90.33268477767706,90.35282615572214,90.3720522299409,90.39127830415966,90.4086734354496,90.42423728853464,90.43888583779335,90.45353405177593,90.46543601900339,90.47550670802593,90.48283115029335,90.48832431435586,90.49198620021345,90.49290183931589,90.49473278224468,90.49564842134713,90.49564842134713,90.49564842134713,90.49473278224468,90.49473278224468,90.49381747841835,90.49290183931589,90.49107089638711,90.49015525728464,90.48923961818217,90.48740867525339,90.48649303615093,90.4855777323246,90.48466209322214,90.48374645411968,90.4819155111909,90.48099987208843,90.4800845682621,90.47916892915963,90.47825329005718,90.47733798623085,90.47550670802593,90.4745914041996,90.47367576509714,90.47276012599468,90.47184482216835,90.47184482216835,90.47184482216835,90.47184482216835,90.47184482216835,90.47184482216835,90.47184482216835,90.47184482216835,90.47092918306589,90.47092918306589,90.47092918306589,90.47092918306589,90.46909824013709,90.46909824013709,90.46909824013709,90.46909824013709,90.46909824013709,90.46909824013709,90.46909824013709\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 23.920304,\\n \\\u0022PositionLongitude\\\u0022: 90.322497,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Bighatpatti\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 2,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Dhaka\\\u0022,\\n \\\u0022TractorID\\\u0022: 500917,\\n \\\u0022TractorModelID\\\u0022: 12,\\n \\\u0022TractorName\\\u0022: \\\u0022METAL-079-BD\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 01:59:09\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225be97e709eae6852e6f63d5c\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-05-06T05:24:51.311Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-05-04T11:24:20.378Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022METAL-079-BD\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022501374\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225cf90ce6c65f7a6ccc3782b6\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 9326,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Ghana\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-06-06 12:53:57\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 698,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 2,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022102,107\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 14:47:18\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002211.05644377729934,11.05733485140976,11.058671128447118,11.060898133624121,11.063570649118468,11.066688333694122,11.070697018567117,11.075151158186602,11.079159398159854,11.083167912249582,11.086285717125275,11.088512512245828,11.089848646980094,11.09118477560706,11.091630260129875,11.091630260129875,11.091630260129875,11.091630260129875,11.091630260129875,11.091630260129875,11.089848646980094,11.087621862036352,11.084949566108758,11.080495575625752,11.073814956319504,11.064906897725637,11.055998568282112,11.04887151241783,11.044417302519232,11.041744612508245,11.039963025032321,11.038626662795803,11.037290294478764,11.035508350906527,11.03283557982297,11.030162784429455,11.027044711810039,11.023481018716291,11.01991695334843,11.016353173903541,11.012789351304972,11.009225485565988,11.005661576699849,10.999424550170113,10.991850817036296,10.98427688944221,10.977593753959217,10.972247136694449,10.967346095608255,10.962890323746125,10.957098082059181,10.950414332189435,10.943285052170822,10.937492426999427,10.932145085347225,10.929025648465934,10.927243380549395,10.92635191337909,10.925906507988426,10.925015036802735,10.922341594790266,10.917439398896372,10.91030932644587,10.90228754358587,10.894711326436825,10.888917754072075,10.883124069009918,10.875992845169852,10.866633328408179,10.858164533606319,10.850141676623734,10.843009664957272,10.836769221064973,10.830528647060785,10.823842385167412,10.81760121255897,10.811360239369026,10.806010965684008,10.799769751458795,10.792190936315286,10.782828471111499,10.773911676476894,10.766332209872557,10.759644190005087,10.75295635117058,10.74537635775639,10.735120730905345,10.725756493471385,10.715500201084629,10.704797827382608,10.694540825374508,10.68472957007283,10.67313389173865,10.661091643580775,10.65083316617847,10.64369677358495,10.63923652575432,10.637452210648672,10.635667885106185,10.633883878646767,10.62897731282534,10.622286264389889,10.61514920422224,10.610242007958604,10.606673358124214,10.605335062510676,10.605335062510676,10.605335062510676,10.605335062510676,10.605335062510676,10.606227479935454,10.60934993178919,10.615595069404183,10.621394223367776,10.627639114866486,10.63254570219785,10.637006047862723,10.642358640184245,10.65083316617847,10.658415523709794,10.664659656977676,10.670011763355863,10.6753637755401,10.68249942554022,10.690080993534098,10.697216627122184,10.703459962909376,10.708811055929942,10.715500201084629,10.725310789782728,10.735120730905345,10.74537635775639,10.75295635117058,10.759644190005087,10.76766979603561,10.777032732860862,10.787732546122413,10.798877903596196,10.811360239369026,10.8225050490213,10.831865947390165,10.839889623926377,10.847467233343554,10.855936002123094,10.86351320473973,10.871090215055986,10.877775749434981,10.885352397425347,10.894265873631877,10.903179082960696,10.911200512554093,10.918330892826768,10.923232744802757,10.926797647298958,10.930808234870538,10.942393962400965,10.948632192857874,10.954424600219872,10.959325855422772,10.964672706378416,10.971801471172842,10.978930393155752,10.984722207006959,10.988732009627325,10.991405181103417,10.993187391671745,10.994078328356302,10.994523631128178,10.995860193650955,10.996751451380407,10.998978925682572,11.000761090475313,11.004325058620122,11.006106861972835,11.00788898365601,11.009670765451292,11.01145286556973,11.01368022872432,11.016353173903541,11.019471688962248,11.022144581536606,11.024817120734978,11.02838112672065,11.029271956924855,11.03060836171031,11.033726396526065,11.035953920081916,11.038626662795803,11.041744612508245,11.043971746184797,11.04664441591868,11.048426291907363,11.051989682364306,11.053325983758684,11.054216738287481,11.054662279064857,11.054662279064857\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u0022-1.8891136720776558,-1.8909291923046114,-1.8918367847800257,-1.8945598974823954,-1.898190602660179,-1.9036368280649183,-1.914982907474041,-1.9285984709858897,-1.943121291697025,-1.9562828913331034,-1.9667213782668116,-1.9757983088493345,-1.9821521267294882,-1.9889599084854124,-1.9953137263655663,-2.0043906569480896,-2.0139212161302567,-2.024359703063965,-2.0338905975222588,-2.0434211567044254,-2.0543136075139046,-2.065659686923027,-2.0792752504348755,-2.0947059988975525,-2.110590375959873,-2.1264750882983208,-2.1419058367609978,-2.1541595086455345,-2.1623288467526436,-2.1664135158061977,-2.1691366285085674,-2.171405777335167,-2.173674926161766,-2.175036482512951,-2.175944074988365,-2.17730563133955,-2.179575115442276,-2.1836594492197037,-2.188198082149029,-2.1922827512025833,-2.1959134563803673,-2.199544161558151,-2.203174866735935,-2.2077134996652603,-2.2122517973184586,-2.2172440588474274,-2.222236320376396,-2.2267749533057213,-2.2304056584835052,-2.234036363661289,-2.237667068839073,-2.2412981092929845,-2.2444748505949974,-2.247197963297367,-2.249467112123966,-2.249921075999737,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.2503750398755074,-2.249921075999737,-2.2490134835243225,-2.2476519271731377,-2.2458364069461823,-2.2444748505949974,-2.2431132942438126,-2.2417517378926277,-2.2408441454172134,-2.240390181541443,-2.2399365529417996,-2.239028625190258,-2.2385749965906148,-2.2381210327148438,-2.236305847764015,-2.2344903275370602,-2.2313132509589195,-2.2276825457811356,-2.224959433078766,-2.222236320376396,-2.219967171549797,-2.216336466372013,-2.211798168718815,-2.2077134996652603,-2.203174866735935,-2.197728641331196,-2.1913748234510426,-2.1841134130954742,-2.175036482512951,-2.164144366979599,-2.151890359818936,-2.1387287601828575,-2.1264750882983208,-2.115582637488842,-2.1065057069063187,-2.09879033267498,-2.0924365147948265,-2.085175104439259,-2.0770057663321495,-2.0688367635011673,-2.0602134615182877,-2.052498087286949,-2.044329084455967,-2.0366137102246284,-2.0284443721175194,-2.0184598490595813,-2.0066598057746887,-1.992136649787426,-1.9744367524981496,-1.9576444476842882,-1.9435752555727959,-1.931775212287903,-1.9217906892299652,-1.9127137586474416,-1.901821307837963,-1.8922907486557963,-1.8845753744244576,-1.8777675926685333,-1.8727753311395645,-1.8677830696105955,-1.8623368442058563,-1.856890618801117,-1.8518983572721484,-1.8478136882185938,-1.8428214266896248,-1.8364676088094711,-1.830567754805088,-1.8251215294003484,-1.8219444528222082,-1.819675303995609,-1.8178601190447807,-1.8155906349420545,-1.8133214861154558,-1.811506301164627,-1.8101447448134422,-1.8087831884622574,-1.8078752607107165,-1.806514039635658,-1.8051524832844732,-1.8042445555329325,-1.8037909269332884,-1.803336963057518,-1.8024293705821035,-1.8019754067063332,-1.8015214428305628,-1.8006138503551483,-1.800159886479378,-1.7987986654043195,-1.7983447015285492,-1.7974367737770083,-1.7969831451773643,-1.7965291813015938,-1.7956215888261795,-1.7960755527019499,-1.7960755527019499,-1.7960755527019499,-1.7960755527019499,-1.7960755527019499,-1.7965291813015938,-1.7969831451773643,-1.7974367737770083,-1.7992522940039635,-1.7992522940039635,-1.8010678142309187,-1.8028829991817477,-1.8056061118841173,-1.8078752607107165,-1.8101447448134422,-1.8133214861154558,-1.8142294138669968,-1.8155906349420545,-1.8169521912932394,-1.8178601190447807,-1.8192216753959656,-1.821036860346794,-1.8228523805737498,-1.8251215294003484,-1.8269370496273043,-1.830567754805088,-1.8323829397559166,-1.8337444961071014,-1.8369215726852415,-1.8405522778630257,-1.8455445393919945,-1.8505368009209635,-1.854621469974518,-1.8582521751523018,-1.8618832156062128,-1.86869066208601,-1.8714137747883797,-1.8736829236149786,-1.8741368874907494,-1.8741368874907494\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 10.997795,\\n \\\u0022PositionLongitude\\\u0022: -1.957953,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.02,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Katinia\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 5386,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022\\\u0022,\\n \\\u0022TractorID\\\u0022: 501374,\\n \\\u0022TractorModelID\\\u0022: 4,\\n \\\u0022TractorName\\\u0022: \\\u0022VR302-15\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:49:32\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225ceff71f6ce9e42a00f2067a\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-06-13T15:44:56.534Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-06-06T12:53:58.931Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022VR302-15\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022501549\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225cff8f88844195038524cbbf\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-06-11 11:24:57\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: null,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022101\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-08-16 05:22:19\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-1.1542397393347297,-1.1448247339938131,-1.1291328781101782,-1.112918340688632,-1.0967033789100122,-1.0804883292835308,-1.0642731931074392,-1.044919640124602,-1.0266121969017536,-1.0083046488537644,-0.9920891431485529,-0.9779657121287471,-0.9622733510556535,-0.9486730899161756,-0.9376882503369406,-0.92513415366644,-0.9131029769553286,-0.9026413283474939,-0.8911330443252886,-0.8806713329175798,-0.869686286438772,-0.8592241799719362,-0.848762044854524,-0.8383002166755363,-0.8278380253041496,-0.8090061456042553,-0.8011597825194291,-0.794359365523757,-0.787035955955907,-0.7818047975655718,-0.7765736326577838,-0.7718654446061496,-0.7676805704312759,-0.765065315331189,-0.763495692160713,-0.7608804345124419,-0.7598341298609369,-0.7598341298609369,-0.7587878249560307,-0.7587878249560307,-0.7577415197980796,-0.7572185347477356,-0.7556492439713425,-0.7551259234218418,-0.75407995262806,-0.7530336463357832,-0.7514643540502296,-0.7504180471307982,-0.7493717399611081,-0.7483254325415026,-0.7472794601199385,-0.7457098305252509,-0.7457098305252509,-0.7446638574815321,-0.7441405356187167,-0.7446638574815321,-0.7430945622027713,-0.7420482532911422,-0.7420482532911422,-0.7420482532911422,-0.7425712401539316,-0.7425712401539316,-0.7425712401539316,-0.7430945622027713,-0.7441405356187167,-0.7446638574815321,-0.7467561385680797,-0.7493717399611081,-0.7519873397923696,-0.7535566318897744,-0.75407995262806,-0.7556492439713425,-0.7572185347477356,-0.7582648400320438,-0.7593108098168009,-0.7608804345124419,-0.7619264036637089,-0.763495692160713,-0.7640190116967108,-0.765065315331189,-0.7655882994296566,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7666346026813232,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7661112834643476,-0.7655882994296566,-0.7655882994296566,-0.765065315331189,-0.7645419959226805,-0.7640190116967108,-0.7629727078074321,-0.7629727078074321,-0.7629727078074321,-0.7629727078074321,-0.7629727078074321,-0.7629727078074321,-0.7624497233905783,-0.7624497233905783,-0.7619264036637089,-0.7614034191197983,-0.7614034191197983,-0.7614034191197983,-0.7608804345124419,-0.7608804345124419,-0.7608804345124419,-0.7608804345124419,-0.7608804345124419,-0.7608804345124419,-0.7608804345124419,-0.7608804345124419,-0.7614034191197983,-0.7624497233905783,-0.7661112834643476,-0.7713424612761931,-0.7765736326577838,-0.7812814802203781,-0.7875589373370232,-0.794882345982016,-0.8042983295647109,-0.8137142914238357,-0.8231302313051748,-0.8330691244621881,-0.8445772499114659,-0.8545164238370578,-0.8634089589686601,-0.8743940237664453,-0.8864253281332662,-0.8984565934110067,-0.9094415542430621,-0.9204264816431622,-0.9314113752076438,-0.9423962345328308,-0.9533810592150475,-0.9648888054841939,-0.9758735579717375,-0.9868582745861485,-0.9978429549237762,-1.0083046488537644,-1.0187659739409076,-1.0281813721436837,-1.0370734623184468,-1.045442583861716,-1.0548579027287235,-1.0642731931074392,-1.0731655157734468,-1.0815345398372316,-1.0914726840224196,-1.1003645917233282,-1.1082106072527236,-1.1160566019981737,-1.123379310418749,-1.1291328781101782,-1.135409697736137,-1.1416861685241888,-1.1469167738564707,-1.1526702945954577,-1.1584241389172587,-1.164177636347996,-1.1709773004991362,-1.1777769481558307,-1.184053324990259,-1.189807104878704,-1.1960834544094572,-1.2023601247878748,-1.208113531091344,-1.2154360001035152,-1.2206664666203226,-1.2243278541709846,-1.2269427448474035,-1.22955796816679,-1.2337422531067983,-1.2358345607094268,-1.2389726838241857,-1.2405417439881894,-1.2410649873011257,-1.2421111384190378,-1.242634046224077,-1.2447260116055865,-1.2457721612726058,-1.2457721612726058,-1.2468183105242574,-1.247341217395855,-1.2483873660238252,-1.249433514235537,-1.2499564205870248,-1.2499564205870248,-1.2510025681737706,-1.2520487153434057,-1.2536177677170224,-1.2551868191503528,-1.2562329646481103,-1.2588481589616014,-1.2625091584367822,-1.2651243464460962,-1.2672166290334583,-1.270877616702344,-1.2755850720677633,-1.2797692833900804,-1.2844763872700613,-1.288660584060055,-1.291798978536088,-1.2944141367100306,-1.2970289569966396,-1.3012134682883023,-1.3059205324092378,-1.3106275877146933,-1.314288848073676,-1.3174268754311824,-1.3205652340232816,-1.324749370793664,-1.3268412689373568,-1.3289335004979863,-1.3310253951005768,-1.3336405122469541,-1.335732738037612,-1.3383478501781272,-1.3393936261062191,-1.3404397367723864,-1.3420087343414837,-1.3430548438897625,-1.3435777309040247,-1.3441009529902317,-1.3451467264588386,-1.3451467264588386,-1.3446238397805448,-1.3441009529902317,-1.3441009529902317,-1.3441009529902317,-1.3441009529902317,-1.3441009529902317,-1.3441009529902317,-1.3435777309040247,-1.3435777309040247,-1.3441009529902317,-1.3446238397805448,-1.3446238397805448,-1.3446238397805448,-1.3456699482087464,-1.3467160561882738,-1.3477618285354172,-1.3482850497239063,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.348807935616705,-1.3482850497239063,-1.347238942417957,-1.3456699482087464,-1.3414858469916475,-1.33730173861928,-1.3336405122469541,-1.3299792804280302,-1.3252722616986734,-1.3205652340232816,-1.3163807550215005,-1.313242726348453,-1.306966657191928,-1.3022592598379175,-1.2975521888820338,-1.291798978536088,-1.2834305883951833,-1.2802921836286947,-1.277154110213067,-1.274016032965698,-1.270877616702344,-1.2677395318193025,-1.2651243464460962,-1.2630323973660744,-1.260940111407108,-1.2583249191914214,-1.255709724353762,-1.2525716211736768,-1.247864459360147,-1.240018835769398,-1.2316502790573487,-1.2211893786331596,-1.209159695075999,-1.1955605375635003,-1.1803922186272966,-1.1631314553575256,-1.1463938478363311,-1.1270408253602058,-1.1082106072527236,-1.0935650971576718,-1.0794421183695369,-1.0679347802892034,-1.057473282659017,-1.051196635310309,-1.047535028378916,-1.0433504731705738,-1.0407350814349265,-1.038119687530497,-1.0370734623184468,-1.036027571981872,-1.036027571981872,-1.036027571981872,-1.0355042914627306,-1.0349813460786235,-1.0339351198302467,-1.0339351198302467\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002235.42245019227266,35.42297322303057,35.424542650580406,35.426112078130245,35.42715847492218,35.42925093322992,35.43029733002186,35.4318667575717,35.43239012360573,35.433436185121536,35.43605200946331,35.43814480304718,35.44128365814686,35.44337645173073,35.446515306830406,35.44913113117218,35.451746955513954,35.45436277985573,35.457501634955406,35.46011745929718,35.462733283638954,35.46587213873863,35.4690109938383,35.472150184214115,35.47476600855589,35.47999732196331,35.482613146305084,35.48575233668089,35.48889119178057,35.491507016122334,35.493599474430084,35.49516890197992,35.49673866480589,35.49883112311363,35.49987751990557,35.50040055066348,35.5009239166975,35.501446947455406,35.501446947455406,35.501446947455406,35.501446947455406,35.50196997821331,35.50196997821331,35.50249334424734,35.50249334424734,35.503016375005245,35.503016375005245,35.503016375005245,35.50353940576315,35.50353940576315,35.50406277179719,35.504585802555084,35.505109168589115,35.505109168589115,35.505109168589115,35.50563219934702,35.506678596138954,35.506678596138954,35.50824802368879,35.510340481996536,35.51347967237234,35.51818795502186,35.52551206201315,35.5349289625883,35.54486889392138,35.55585522204638,35.56788794696331,35.57939764112234,35.590907000005245,35.60293972492218,35.614972449839115,35.62648180872202,35.638514533638954,35.65002389252186,35.66362604498863,35.67618180066347,35.689260587096214,35.70338610559702,35.715418830513954,35.72692818939686,35.73896091431379,35.74942387640476,35.75779438018799,35.766688250005245,35.775581784546375,35.78290622681379,35.78918393701314,35.795985013246536,35.801739692687995,35.80749470740557,35.81272602081298,35.8169112727046,35.821619890630245,35.82580514252186,35.82999039441347,35.834175646305084,35.8383608981967,35.842023119330406,35.84568500518799,35.84882419556379,35.85248608142138,35.85667133331299,35.8608565852046,35.865565203130245,35.86975045502186,35.87393570691347,35.878120958805084,35.88178317993879,35.88492203503847,35.88806089013815,35.89119974523783,35.89433893561363,35.896954759955406,35.89852418750525,35.89957058429718,35.90218607336283,35.9048018977046,35.90689469128847,35.908987149596214,35.911079943180084,35.91421879827976,35.91735765337944,35.920496843755245,35.92311266809702,35.9262515231967,35.92886734753847,35.930959805846214,35.93357563018799,35.93566842377186,35.93671482056379,35.93828424811363,35.93985367566347,35.94194613397122,35.944038927555084,35.94560835510493,35.94717778265476,35.9482241794467,35.94927057623863,35.949793606996536,35.95031663775445,35.95084000378847,35.951363034546375,35.951363034546375,35.9518864005804,35.95240943133831,35.95240943133831,35.95240943133831,35.95240943133831,35.95240943133831,35.95240943133831,35.953455828130245,35.95450188964605,35.95554828643799,35.95607165247202,35.95711771398783,35.95711771398783,35.95764108002186,35.95764108002186,35.95764108002186,35.95711771398783,35.95607165247202,35.95450188964605,35.95397885888815,35.95293246209621,35.95293246209621,35.95293246209621,35.95293246209621,35.95240943133831,35.9518864005804,35.9518864005804,35.9518864005804,35.9518864005804,35.95240943133831,35.95293246209621,35.95293246209621,35.953455828130245,35.95397885888815,35.955025255680084,35.95554828643799,35.95554828643799,35.95554828643799,35.95554828643799,35.95554828643799,35.95554828643799,35.95607165247202,35.956594683229916,35.956594683229916,35.956594683229916,35.956594683229916,35.956594683229916,35.956594683229916,35.956594683229916,35.956594683229916,35.956594683229916,35.95607165247202,35.95554828643799,35.955025255680084,35.955025255680084,35.955025255680084,35.95450188964605,35.95450188964605,35.95450188964605,35.95397885888815,35.953455828130245,35.95240943133831,35.9518864005804,35.951363034546375,35.951363034546375,35.95031663775445,35.949793606996536,35.94927057623863,35.9487472102046,35.9482241794467,35.94717778265476,35.94613138586283,35.94560835510493,35.94456195831299,35.942469500005245,35.93985367566347,35.9372378513217,35.93305259943008,35.92729791998863,35.92101987451315,35.914741829037666,35.90637132525444,35.89852418750525,35.89172311127186,35.88492203503847,35.87916735559702,35.872889310121536,35.867134630680084,35.85562527179718,35.85039362311363,35.84411557763815,35.83783786743879,35.8315598219633,35.825281776487834,35.819527097046375,35.81324938684702,35.8059249445796,35.79860083758831,35.79284615814686,35.786568112671375,35.78133646398783,35.77505875378847,35.76878070831299,35.76250299811363,35.757271349430084,35.75256306678057,35.74837781488895,35.744192227721214,35.7394839450717,35.733729265630245,35.72797458618879,35.722742937505245,35.7175112888217,35.71227964013815,35.70600192993879,35.699200853705406,35.69239977747202,35.68559870123863,35.67827459424734,35.660487189888954,35.642176419496536,35.63171345740556,35.622296556830406,35.61183325946331,35.60189332813025,35.59143003076315,35.58044370263815,35.568934343755245,35.557424984872334,35.54748471826315,35.53649839013815,35.51714155822992,35.50772465765476,35.499354153871536,35.49098365008831,35.482613146305084,35.47267321497202,35.46377934515476,35.45488581061363,35.44756170362234,35.44180702418089,35.43762143701315,35.43448258191348,35.43134372681379,35.42925093322992,35.426112078130245,35.42297322303057,35.42140379548073,35.42035739868879,35.41983436793089,35.418787971138954,35.418264605104916,35.41774157434702,35.416695177555084,35.416695177555084,35.41721854358911,35.41774157434702,35.41774157434702,35.418264605104916,35.41931100189686,35.42035739868879,35.42035739868879,35.42035739868879,35.42035739868879,35.42035739868879,35.4208804294467,35.4208804294467,35.4208804294467,35.42140379548073,35.421926826238625,35.421926826238625\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -1.077506,\\n \\\u0022PositionLongitude\\\u0022: 35.789817,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Ewaso Ng\u2019iro\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: null,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Narok\\\u0022,\\n \\\u0022TractorID\\\u0022: 501549,\\n \\\u0022TractorModelID\\\u0022: 8,\\n \\\u0022TractorName\\\u0022: \\\u0022John Deere 5503 KTCB 771M\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:40:15\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225cff8e7bb119264a16015316\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 771M\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-08-02T17:20:38.632Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-06-11T11:24:56.382Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022501554\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d0756130e4a813cd1214db5\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 15884,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101,102,107\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-06-17 08:57:54\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 169,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 121,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022101,107,102\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 12:59:48\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00220.4279303997976261,0.4274727606353288,0.42609950771806937,0.42518389388154504,0.4238106405567293,0.4228953617162234,0.4224373869884612,0.4215221079861032,0.42014885401385377,0.4192332394758263,0.41831762483074136,0.41740234534603315,0.4169443702964879,0.41602909065206495,0.4151134756341554,0.41419786051021884,0.41328258054791855,0.4123669652127041,0.4114513497721752,0.4105360694941094,0.40962045384370205,0.40870483808867986,0.407331581894355,0.40595832546604305,0.4041274282882353,0.40275417131700264,0.40138091411440374,0.3995500159083736,0.39817675816899883,0.3963455239820724,0.3940569835815822,0.39176810728409883,0.38993720695680406,0.3871906880855986,0.38444416832467754,0.3821552894259457,0.37986640991732346,0.3771198878145981,0.3743733648453116,0.3716268410157486,0.36842267389215705,0.36476052771962536,0.36155635813915704,0.35835218742792524,0.35560565870600763,0.35240115065155897,0.3491969767646832,0.3469080888791287,0.3441615567940163,0.3414150239180653,0.3382108463284259,0.33500633241063743,0.33134450846559654,0.32768234789647493,0.32402052125941255,0.32127364750596143,0.3189850883868001,0.316238548555523,0.31349200799756555,0.3107454667192379,0.30799892472685025,0.3047944013273957,0.30113256666324945,0.29838602222133853,0.29563947709377636,0.292892931286835,0.29014638480687555,0.28831512993485553,0.28602656383877856,0.28328001570382383,0.28007548520934056,0.2773289356719139,0.27458238549720587,0.27275146345391066,0.2709205411321006,0.26908928326121195,0.26725836038790646,0.26542743724168394,0.2640541608858993,0.26222290199395076,0.2603919781067862,0.25810307141958627,0.25581449959324387,0.2530679446449304,0.24986340628873932,0.24711685008836864,0.24437029332015445,0.24162373599039427,0.238877178105411,0.23613061967148943,0.23338406069497797,0.23063750118214865,0.22834892469866,0.22606001257732974,0.2237711000952228,0.22194017101638797,0.22010924171091953,0.21873596076579802,0.21782032830795298,0.2164470471538181,0.21507376587534902,0.213700484473309,0.2123272029485123,0.21095392130173496,0.20912299067561116,0.20774970874730386,0.2054607935106203,0.20317187794603425,0.20088329733127222,0.1985943811218987,0.19676344909050408,0.19493218158399775,0.19218561522568606,0.188981399008032,0.18577718219932912,0.18257262953518383,0.17891076189812538,0.1752485582557059,0.1715863538973181,0.1679244841126092,0.163804293054826,0.15831115069694898,0.15373364270996978,0.14915613374173856,0.14549392471525066,0.1413740645788518,0.1363385672188011,0.13176105478814173,0.12809884307151526,0.12397897999375213,0.11985911627498001,0.1166548891559748,0.11299301065251312,0.10887281005301498,0.10566858172481376,0.10292200424419139,0.10017542652707567,0.09788649982813104,0.09605555952173463,0.093766632544237,0.09193569201975633,0.08964676477553739,0.08781582404243778,0.08598488321964651,0.08415360703327923,0.0832383041835166,0.0818650145933294,0.08094937641509137,0.08003373821619246,0.07957608674696785,0.07911843527265436,0.07866044851749746,0.07820279703310795,0.0777451455437568,0.0777451455437568,0.0772871587736004,0.0772871587736004,0.0772871587736004,0.0772871587736004,0.07820279703310795,0.07866044851749746,0.07957608674696785,0.08049172495612088,0.0814070278689221,0.08278031747487213,0.08415360703327923,0.08506924513732128,0.08598488321964651,0.08690018600425865,0.08735817266399891,0.0882734754152534,0.08873146205817489,0.08873146205817489,0.08918911341970592,0.08918911341970592,0.08873146205817489,0.08873146205817489,0.0882734754152534,0.08781582404243778,0.08690018600425865,0.08598488321964651,0.08506924513732128,0.08415360703327923,0.0832383041835166,0.0823226660367279,0.0814070278689221,0.08049172495612088,0.08003373821619246,0.07957608674696785,0.07911843527265436,0.07866044851749746,0.07820279703310795,0.07820279703310795,0.07820279703310795,0.07820279703310795,0.07820279703310795,0.07820279703310795,0.07820279703310795,0.07866044851749746,0.07866044851749746,0.07911843527265436,0.07911843527265436,0.07957608674696785,0.08003373821619246,0.08049172495612088,0.08049172495612088,0.08094937641509137,0.0814070278689221,0.0823226660367279,0.08369595561107594,0.08506924513732128,0.0864425346147133,0.0882734754152534,0.08964676477553739,0.09102005408433457,0.09285132993169287,0.09468227040854157,0.09605555952173463,0.09788649982813104,0.09925978881135392,0.10109106421720034,0.10292200424419139,0.10521093058659584,0.10841515896261987,0.11070408489591595,0.1134506616721218,0.11619723818764939,0.11848616350535546,0.12123240425115021,0.12489461693672634,0.12809884307151526,0.13084541809005754,0.1331343421344985,0.13588091659696533,0.13954312715182426,0.14320533713658784,0.14686721126126537,0.15052942006099246,0.1532759924393054,0.15648021467675713,0.1601424218302927,0.1633466430067241,0.1670088489213064,0.17112870403090222,0.17479090847772216,0.17799512723684294,0.1811993454392649,0.18440389834939427,0.1871504659425627,0.18989703310566927,0.19218561522568606,0.19401688303014672,0.19722109829872325,0.19951001469870105,0.20134094642518227,0.20500314453341117,0.20683407563741965,0.2086650065302139,0.21003828837854932,0.21141157010621453,0.21278485171243341,0.21415813319640453,0.21553141455735178,0.21690469579448637,0.21782032830795298,0.2191936093369521,0.22010924171091953,0.22102453875506303,0.22194017101638797,0.22285580322104814,0.2237711000952228,0.22468673218582827,0.22560236421905655,0.22651766092117592,0.2274332928389628,0.22834892469866,0.22880657296992593,0.22926422122659948,0.22972220474206884,0.2301798529694558,0.2301798529694558,0.23063750118214865,0.23109548465353552,0.23201078100520867,0.23246876443222042,0.23292641257103533,0.2338420440773602,0.23429969217148194,0.23475734025066783,0.23567297163735296,0.23658860296383652,0.23750389895666676,0.23841953016211115,0.23933516130665428,0.24025045711690796,0.24116608813899973,0.24208171909951595,0.24253936692002095,0.24345499778771587,0.24391264556172115,0.24482827633607318,0.24528592406327343,0.2457435717748508,0.24665920242393982,0.24711685008836864,0.24711685008836864,0.24757483301004116,0.24803248064289343,0.2489481111340743,0.2494057587193582,0.24986340628873932,0.2507790366525453,0.25123668417400186,0.2516946669523077,0.2526099619149308,0.2539832395107374,0.25581449959324387,0.2576454241416839,0.2599343309115528,0.2631385314735244,0.2658850842356009,0.26863163638668025,0.27137818792047746,0.2741247388306697,0.27870221052067545,0.2814487597370951,0.28328001570382383,0.28648421004024127,0.2892307574077918,0.29151965813059927,0.2933505772109915,0.2951814959918391,0.29792804123313793,0.30204785780946136,0.30433675588000436,0.30616767282410706,0.31028748625579067,0.31211873744804886,0.3139496530503901,0.316238548555523,0.31852710828502007,0.32035835802796314,0.32264691683997193,0.3263090792459529,0.3281399923146515,0.32997124031882347,0.33180215271542,0.33363306477318566,0.33546431176063607,0.3377532023776891,0.3386684902575732,0.3418730029654787,0.3446195357099964,0.34645044534346703,0.3482813546231454,0.35011259881703827,0.3519435073834836,0.3542323940382143,0.3560633017933511,0.35835218742792524,0.35972545148048474,0.36155635813915704,0.3643028850689848,0.36567614822037864,0.367507053672234,0.3693382940179738,0.3707115563952334,0.37254246081048237,0.3739157226896289,0.37574662643787743,0.37757786507130836,0.37940876805023155,0.3830709081125615,0.3849018099235087,0.3867327113414157,0.3881059709628773,0.38993720695680406,0.3913104660567819,0.3926837249319709,0.3940569835815822,0.3958878830060702,0.39680350020087857,0.39771878202629696,0.39863439901823683,0.3990920398420559,0.4000076566812147,0.400465297428535,0.40138091411440374,0.4022965306977569,0.40275417131700264,0.40275417131700264,0.4032118119105495,0.40366978774618795,0.4041274282882353,0.40458506880449463,0.40458506880449463,0.4050430445627184,0.40595832546604305,0.4064163011465594,0.40687394153343387,0.4077895574969223,0.408247197805835,0.40870483808867986,0.40916281361304374,0.40962045384370205,0.4105360694941094,0.4105360694941094,0.4109937096462462,0.4114513497721752,0.4114513497721752,0.4119093251393306,0.4119093251393306\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.72554389387369,34.724170602858074,34.72233932465315,34.72005072981119,34.71730414777994,34.71501521766186,34.71318427473307,34.71135299652815,34.7086064144969,34.70585983246565,34.7031132504344,34.69990901648998,34.696704782545574,34.69304256141185,34.68892268836498,34.685260467231274,34.68159858137369,34.67839401215315,34.67473212629557,34.67106990516186,34.66832332313061,34.66557674109935,34.66237250715494,34.659167937934406,34.65596370398998,34.65321712195873,34.65047053992748,34.64726630598307,34.64451972395182,34.64177314192057,34.638568572700024,34.63536433875561,34.6317021176219,34.62849788367748,34.62529364973307,34.62254706770182,34.61888484656811,34.61568061262369,34.61156073957682,34.608356170356274,34.60515193641186,34.60148971527815,34.59828548133373,34.595538899302475,34.59233466535807,34.58913009613753,34.58592586219311,34.58317928016186,34.580890350043774,34.578143768012524,34.57585517317057,34.57310859113932,34.57036200910807,34.568073078989975,34.56532649695873,34.563495554029934,34.561664275825024,34.55983333289623,34.55800238996744,34.556629098951824,34.55525580793619,34.55342452973127,34.55159358680248,34.55022029578686,34.54884700477123,34.54747371375561,34.54655807465315,34.54564277082682,34.54472713172436,34.54426947981119,34.54335384070873,34.54335384070873,34.54289618879557,34.54289618879557,34.54289618879557,34.54289618879557,34.54335384070873,34.5438114926219,34.54426947981119,34.545184783637524,34.54610042273998,34.54701606184244,34.547931365668774,34.5493046566844,34.550677947700024,34.55159358680248,34.55296687781811,34.5547978207469,34.556171111762524,34.557544402778156,34.55937568098307,34.56074897199869,34.56257991492748,34.564410857856274,34.56624213606119,34.56853073090315,34.57036200910807,34.57219295203686,34.57356624305248,34.57493953406811,34.57722846418619,34.57951705902815,34.58134833723307,34.583636932075024,34.58684150129557,34.59004573523998,34.59370795637369,34.597369842231274,34.60103206336498,34.6042362973094,34.60698287934065,34.6097294613719,34.61247604340315,34.61568061262369,34.61796920746565,34.62025813758373,34.62300471961499,34.62529364973307,34.62804023176432,34.630328826606274,34.63261775672436,34.63536433875561,34.63811092078685,34.64039985090494,34.64223079383373,34.644061736762524,34.64635066688061,34.64863959699869,34.65047053992748,34.652301482856274,34.6536747738719,34.654590412974365,34.65550605207682,34.65642135590315,34.65687934309244,34.65733699500561,34.657794646918774,34.657794646918774,34.657794646918774,34.657794646918774,34.65733699500561,34.65687934309244,34.65596370398998,34.65550605207682,34.654590412974365,34.654590412974365,34.65413276106119,34.6536747738719,34.6536747738719,34.65321712195873,34.65321712195873,34.65321712195873,34.65321712195873,34.65321712195873,34.6536747738719,34.654590412974365,34.65642135590315,34.65871028602123,34.66237250715494,34.66649238020182,34.67061225324869,34.67473212629557,34.67885199934244,34.68342952430248,34.68709174543619,34.69121161848307,34.69487350434065,34.69807807356119,34.70128230750561,34.70402888953685,34.707233123481274,34.709979705512524,34.71318427473307,34.71638850867748,34.71913509070873,34.72279731184244,34.72554389387369,34.72874812781811,34.731952361762524,34.73469927906991,34.73790351301432,34.74065009504557,34.74385432898998,34.74660091102123,34.74934749305248,34.7511787712574,34.75346736609936,34.756213948130615,34.75850287824869,34.76079147309065,34.763080403208725,34.76536933332682,34.7676582634449,34.769031554460526,34.77086249738932,34.77315142750739,34.77544002234936,34.77727130055427,34.77910224348307,34.78093318641186,34.78230647742748,34.7841377556324,34.78596869856119,34.78688433766365,34.788257628679276,34.78917293250561,34.790546223521225,34.79191951453686,34.79375079274178,34.79603938758373,34.79878596961498,34.80107489973307,34.80382148176432,34.8061104118824,34.80794135481119,34.810230284929276,34.81206122785807,34.81389217078686,34.81526546180248,34.8170967400074,34.818470031023026,34.81984332203865,34.821216613054276,34.82304755598307,34.82442084699869,34.825794138014324,34.82716742902994,34.82854072004557,34.83037166297436,34.83220294117928,34.83403388410807,34.83540717512369,34.836780466139324,34.83815375715494,34.8390693962574,34.840442687273026,34.84135799109936,34.84227363020182,34.84318926930427,34.843646921217434,34.84410457313061,34.8445625603199,34.8445625603199,34.84502021223307,34.84547786414623,34.845935851335526,34.84639350324869,34.84685115516186,34.84730914235115,34.84776679426432,34.848682433366776,34.84914008527994,34.84959773719311,34.85051337629557,34.851429015398026,34.85325995832682,34.854175597429276,34.8555488884449,34.85646419227123,34.85783748328686,34.85875312238932,34.86012641340494,34.8610420525074,34.862415343523026,34.86333064734936,34.864246286451824,34.865161925554276,34.86607722938061,34.86699286848307,34.867908507585526,34.86882381141186,34.86973945051432,34.87019710242748,34.871112741529934,34.87157039344311,34.8720283806324,34.87248603254557,34.87294368445873,34.873401671648026,34.87385932356119,34.873401671648026,34.873401671648026,34.873401671648026,34.873401671648026,34.873401671648026,34.873401671648026,34.87294368445873,34.87294368445873,34.8720283806324,34.87157039344311,34.87065508961677,34.86928179860115,34.867908507585526,34.8665352165699,34.865161925554276,34.86378863453866,34.862415343523026,34.8605840653181,34.85875312238932,34.856922179460526,34.85463324934244,34.85234431922436,34.8500557243824,34.84776679426432,34.845935851335526,34.84410457313061,34.84227363020182,34.840442687273026,34.83861140906811,34.837238118052475,34.83632281422616,34.83540717512369,34.834949523210526,34.83403388410807,34.8335762321949,34.8331182450056,34.832660593092434,34.83220294117928,34.83220294117928,34.832660593092434,34.8331182450056,34.83403388410807,34.834949523210526,34.83586482703686,34.837696105241776,34.83861140906811,34.8390693962574,34.840442687273026,34.84135799109936,34.84227363020182,34.84273128211498,34.843646921217434,34.84410457313061,34.84502021223307,34.84547786414623,34.845935851335526,34.84685115516186,34.84730914235115,34.84730914235115,34.84730914235115,34.84730914235115,34.84730914235115,34.84730914235115,34.84730914235115,34.84685115516186,34.84639350324869,34.84639350324869,34.845935851335526,34.84547786414623,34.84502021223307,34.84410457313061,34.84318926930427,34.84181597828865,34.84090033918619,34.83998470008373,34.8390693962574,34.837696105241776,34.836780466139324,34.83540717512369,34.83403388410807,34.8331182450056,34.83220294117928,34.82991401106119,34.82854072004557,34.82716742902994,34.82533648610116,34.823963195085526,34.822131916880615,34.82030097395182,34.81801204383373,34.815723448991776,34.81343451887369,34.80885699391365,34.80656806379557,34.80382148176432,34.80153255164623,34.79878596961498,34.79603938758373,34.79375079274178,34.791004210710526,34.785511046648026,34.78322211652994,34.78047553449869,34.77818660438061,34.77635566145182,34.774066731333725,34.77223578840494,34.77040484547615,34.76628497242928,34.76399604231119,34.76216509938241,34.75987616926432,34.758045226335526,34.75575629621745,34.75300971418619,34.75072078406811,34.74888984113932,34.74614325910807,34.74385432898998,34.74110774695873,34.73836116492748,34.735614582896225,34.73286800086498,34.7305790707469,34.72783248871565,34.72325496375561,34.72142402082682,34.7195927426219,34.71776179969311,34.71684616059065,34.71593085676432,34.71593085676432\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 1560782750037,\\n \\\u0022PositionLatitude\\\u0022: 1.085103,\\n \\\u0022PositionLongitude\\\u0022: 34.9263,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.05,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Endebess\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 16795,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Trans Nzoia\\\u0022,\\n \\\u0022TractorID\\\u0022: 501554,\\n \\\u0022TractorModelID\\\u0022: 8,\\n \\\u0022TractorName\\\u0022: \\\u0022John Deere 5503E\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:40:23\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d07559021e7a97a0482a71a\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-08-31T10:47:09.169Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-06-17T08:57:55.373Z\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022001\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 100\\n },\\n \\\u0022501555\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225cff90091b377648653a3d3f\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 14877,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022101\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-06-11 11:27:06\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: null,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 139,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022101\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 14:48:58\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.15749945027640494,-0.16273107853000696,-0.1648235282891553,-0.1653468921507499,-0.1653468921507499,-0.1658699207238296,-0.16743934163465304,-0.16900876241984458,-0.17057851835288143,-0.17110154678573686,-0.17162457520434338,-0.17267096727319028,-0.1742403876311061,-0.17580980785827566,-0.17685619969468763,-0.17685619969468763,-0.17685619969468763,-0.17790259147211943,-0.17894898319020205,-0.17947201138964292,-0.18051840301808478,-0.18051840301808478,-0.18051840301808478,-0.18051840301808478,-0.18051840301808478,-0.18051840301808478,-0.18051840301808478,-0.18104143117252716,-0.18104143117252716,-0.18051840301808478,-0.18051840301808478,-0.17999503957413515,-0.17894898319020205,-0.17685619969468763,-0.1763331714211017,-0.17580980785827566,-0.17528677955532684,-0.17476375123778562,-0.17476375123778562,-0.1742403876311061,-0.17319433092334163,-0.17267096727319028,-0.17214793888324692,-0.17162457520434338,-0.17057851835288143,-0.1695321261699035,-0.1695321261699035,-0.17057851835288143,-0.17057851835288143,-0.17214793888324692,-0.17267096727319028,-0.17267096727319028,-0.17371735928446916,-0.17476375123778562,-0.1742403876311061,-0.1742403876311061,-0.17371735928446916,-0.17319433092334163,-0.17267096727319028,-0.17214793888324692,-0.17162457520434338,-0.17110154678573686,-0.1700551546311549,-0.1684857339303753,-0.16743934163465304,-0.1658699207238296,-0.16377747107425775,-0.16168468593147048,-0.15959223584779106,-0.15749945027640494,-0.15645305741173235,-0.15593002859724855,-0.15436060680111136,-0.15174479179242523,-0.14912897646745205,-0.14703652514843246,-0.1444207092679054,-0.14180489308635794,-0.13814268288181802,-0.1365732598419949,-0.133957442790095,-0.13134162545898057,-0.1287258078540967,-0.12558696048468465,-0.12401753665804317,-0.1224481127383514,-0.11983229424349745,-0.11512368621679255,-0.11303123205662163,-0.10989204762129892,-0.10675319813164005,-0.10204492329937286,-0.09942910300090269,-0.09629025247990443,-0.09315106639424278,-0.09053524541337823,-0.08791975951953411,-0.08530393816672278,-0.08268811663610573,-0.08007229493314078,-0.07850286888606503,-0.0758870469186942,-0.07379425512029092,-0.07170179849931213,-0.06856261047557313,-0.06647015362073451,-0.06437736140131485,-0.06071547772624581,-0.05862268527738093,-0.05600686224461334,-0.053391039095106674,-0.05025218527968988,-0.04711333131343846,-0.043451111324087466,-0.03717340268168482,-0.03298815157549738,-0.030372327633803594,-0.028279534324178835,-0.026187076252918003,-0.025663710272463305,-0.025663710272463305,-0.025140679565969302,-0.024094282870636655,-0.024094282870636655,-0.023047886167263568,-0.02252485545071901,-0.021478458735946813,-0.019909031288523733,-0.018862634556500207,-0.017816573094289932,-0.016770176350027633,-0.01572377960018028,-0.01572377960018028,-0.015200748861320952,-0.01415435210373849,-0.012584924596673647,-0.011015497080168916,-0.009445734279283998,-0.008922703528096838,-0.008399672776171789,-0.007876306747423548,-0.00683024524024023,-0.00683024524024023,-0.006306879209659991,-0.005260482423058149,-0.004214420910849554,-0.003691054878068371,-0.003691054878068371,-0.0031680241210926014,-0.002121627330292427,-0.0015985965726678245,-0.0010752305387798085,-5.521997809262059E-4,-2.9169023034436803E-5,-2.9169023034436803E-5,-2.9169023034436803E-5,-5.521997809262059E-4,-0.0010752305387798085,-0.002121627330292427,-0.002121627330292427,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.0031680241210926014,-0.0031680241210926014,-0.0031680241210926014,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.00264499336387511,-0.0031680241210926014,-0.0031680241210926014,-0.0031680241210926014,-0.0031680241210926014,-0.0031680241210926014,-0.0031680241210926014,-0.0047374516671510455,-0.0057838484546561654,-0.006306879209659991,-0.008399672776171789,-0.011015497080168916,-0.01415435210373849,-0.01572377960018028,-0.019909031288523733,-0.023571252157985095,-0.028279534324178835,-0.03508060951396369,-0.040835287690144155,-0.04711333131343846,-0.05182161220683783,-0.05705325852722449,-0.06333130053514052,-0.07013237215169942,-0.07641007721465493,-0.08268811663610573,-0.08844278965798105,-0.09419746178767262,-0.1009985281500824,-0.10832262291711697,-0.11564705118954574,-0.12297114229672877,-0.1302952313945137,-0.13709628910833374,-0.143897344890463,-0.14912897646745205,-0.1522678207096664,-0.15645305741173235,-0.16116165724936135,-0.1648235282891553,-0.1684857339303753,-0.17162457520434338,-0.17476375123778562,-0.17737956322804901,-0.17894898319020205,-0.17999503957413515,-0.18104143117252716,-0.18261085081956355,-0.18313421418779052,-0.18365724226634486,-0.18313421418779052,-0.1841806056039749,-0.1841806056039749\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002236.05306938290596,36.059870459139354,36.06614850461482,36.07138015329838,36.07504203915596,36.079750657081604,36.08341254293919,36.08655173331499,36.090736985206604,36.09492223709822,36.0985841229558,36.10224634408951,36.105908565223224,36.1095704510808,36.11061684787274,36.112709641456604,36.11532546579838,36.117940954864025,36.120033748447895,36.12212620675564,36.12474203109741,36.127357855439186,36.12945064902306,36.1315431073308,36.13520532846451,36.13939058035612,36.143575832247734,36.14671468734741,36.149330511689186,36.15194633603096,36.15508519113064,36.15822438150644,36.161886267364025,36.16502545773983,36.16816431283951,36.171303167939186,36.17391899228096,36.17653481662274,36.178627610206604,36.181243099272244,36.183858923614025,36.18542868643999,36.18699811398983,36.18804417550564,36.189613938331604,36.19065999984741,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.19170639663935,36.192229427397244,36.19275279343128,36.19275279343128,36.19275279343128,36.193275824189186,36.194845251739025,36.194845251739025,36.195368617773056,36.19589164853096,36.19589164853096,36.196414679288864,36.196414679288864,36.196938045322895,36.1974610760808,36.19798444211483,36.198507472872734,36.198507472872734,36.198507472872734,36.198507472872734,36.19903050363064,36.19955386966467,36.19955386966467,36.200600266456604,36.20164632797241,36.20216969400644,36.20321575552225,36.20373912155629,36.20478551834822,36.206354945898056,36.207401007413864,36.207401007413864,36.208447404205806,36.20897077023983,36.209493800997734,36.21001683175564,36.21054019778967,36.21106322854757,36.211586594581604,36.21210962533951,36.21263265609741,36.21315602213144,36.21420208364725,36.214725449681275,36.215248480439186,36.21577184647322,36.216817907989025,36.216817907989025,36.217341274023056,36.218910701572895,36.2194337323308,36.21995709836483,36.220480129122734,36.220480129122734,36.220480129122734,36.220480129122734,36.220480129122734,36.2194337323308,36.21786430478096,36.21420208364725,36.21210962533951,36.21001683175564,36.207401007413864,36.20478551834822,36.20269272476435,36.200076900422566,36.1974610760808,36.194845251739025,36.19170639663935,36.18909057229757,36.1864747479558,36.18333589285612,36.17967367172241,36.17653481662274,36.172872595489025,36.16921070963144,36.16607151925564,36.16293266415596,36.15979380905628,36.15717798471451,36.154562160372734,36.15194633603096,36.14880748093128,36.145145259797566,36.14148337393999,36.13782115280628,36.13415893167258,36.131020076572895,36.127357855439186,36.12474203109741,36.12108014523983,36.11689489334821,36.112709641456604,36.1095704510808,36.105908565223224,36.10224634408951,36.09910748898983,36.096491664648056,36.09439887106418,36.09282944351435,36.09178304672242,36.09021361917257,36.089167557656765,36.088644191622734,36.0875977948308,36.0870747640729,36.08655173331499,36.08602836728096,36.085505336523056,36.085505336523056,36.08393590897322,36.08341254293919,36.08288951218128,36.082366481423385,36.082366481423385,36.08132008463144,36.08079671859741,36.079750657081604,36.07870426028967,36.076088435947895,36.073995642364025,36.072426214814186,36.07033375650644,36.06771793216467,36.0656251385808,36.06300964951515,36.061439886689186,36.05934742838144,36.05673160403967,36.05516217648983,36.054115779697895,36.053592748939984,36.052546352148056,36.05149995535612,36.050976924598224,36.050453558564186,36.050453558564186,36.050453558564186,36.050453558564186,36.050453558564186,36.04993052780628,36.04993052780628,36.04993052780628,36.04993052780628,36.04993052780628,36.050453558564186,36.05202332139015,36.05202332139015,36.052546352148056,36.052546352148056,36.052546352148056,36.05306938290596,36.05306938290596,36.053592748939984,36.0546388104558,36.0546388104558,36.05516217648983,36.05516217648983,36.055685207247734,36.055685207247734,36.055685207247734,36.056208573281765\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.187978,\\n \\\u0022PositionLongitude\\\u0022: 36.16425,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.05,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Bahati Settlement\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: null,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Nakuru\\\u0022,\\n \\\u0022TractorID\\\u0022: 501555,\\n \\\u0022TractorModelID\\\u0022: 19,\\n \\\u0022TractorName\\\u0022: \\\u0022John Deere 5075E\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:55:21\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225cff8e7bb119264a16015316\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 806W\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-06-17T16:00:43.009Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-06-11T11:27:05.488Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 219\\n },\\n \\\u0022501601\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d5546a520b56d2ef3884456\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 54039,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102,103,109\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-08-15 11:48:51\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 100,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 261,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 14:53:23\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.17904923026292965,-0.17848026944496084,-0.17825261805794063,-0.17779765054997312,-0.1759764393081293,-0.17472452411338193,-0.17358660219554536,-0.17199337728578767,-0.16994484927095743,-0.16755467612946362,-0.16527849610556028,-0.16277466425065673,-0.16027116735971159,-0.1576533414366261,-0.1550358504593444,-0.15230436567840114,-0.1498005322645551,-0.14752435030132763,-0.14524816810527083,-0.14297198567997235,-0.14046848649928229,-0.13785065822231918,-0.13557447507682863,-0.13341228529174484,-0.13136375362520528,-0.1294288801079977,-0.12760800004385275,-0.1256731262421509,-0.12373858757248068,-0.12169005513596698,-0.1196411872684877,-0.11759265452344747,-0.11565811527919095,-0.11383723428598057,-0.11213001156736511,-0.11076409921051941,-0.10939852206623699,-0.1081466032645752,-0.1072363301880556,-0.10609806970993114,-0.10518746129726465,-0.10427718813359785,-0.10336657966803238,-0.10245630645193732,-0.10188700849369649,-0.10097673523568172,-0.10029377881874271,-0.09972481609819152,-0.09904185965519742,-0.0987005490662343,-0.0987005490662343,-0.0988142075043988,-0.09904185965519742,-0.09926951180443119,-0.09949716395210013,-0.09983847453284471,-0.10029377881874271,-0.10074908309829232,-0.10143203950568967,-0.10222865432496742,-0.10291161070102994,-0.10359423178687277,-0.10439084655215743,-0.10541511340292482,-0.10655337390622656,-0.1081466032645752,-0.10962617414054962,-0.11099175127438711,-0.11235766362066064,-0.11383723428598057,-0.11531646959993781,-0.11679604011246388,-0.11804795854107204,-0.11918621855246919,-0.12055179522863758,-0.12157606150970403,-0.12294163806550752,-0.12430754982681344,-0.1256731262421509,-0.12715269618877997,-0.12874592437093405,-0.13056680435360588,-0.1326156713610123,-0.13477786121646268,-0.1370540444372433,-0.13933022744172077,-0.14149275196615219,-0.14365494101394521,-0.14558981337816357,-0.14763834380630966,-0.14968687404572162,-0.1515077524007637,-0.15355628227656193,-0.15537716030422313,-0.15742568980704408,-0.15924656749902955,-0.1610677803049938,-0.1630023158208133,-0.16505084456129343,-0.16675806344220073,-0.16846528217505954,-0.1702861588636945,-0.1723346868420756,-0.17426955651923412,-0.17609043265324398,-0.17779765054997312,-0.1795045330143754,-0.18109809255501108,-0.18269131668114372,-0.1843985339591405,-0.18576410649911204,-0.18690202765612174,-0.18792629074414027,-0.1888368957827853,-0.18974750077372202,-0.19077176369408716,-0.19168203330866204,-0.1923649869435317,-0.19304794055107405,-0.19373055885697213,-0.19452717036189565,-0.19521012388226533,-0.19589307737490058,-0.1964620376270869,-0.19691733992455301,-0.1973726422095895,-0.19782760920803213,-0.19805526033962836,-0.19828291146810764,-0.19828291146810764,-0.1983969046682399,-0.19851056259345726,-0.19851056259345726,-0.19828291146810764,-0.19805526033962836,-0.1979416024112813,-0.19760029334743234,-0.19714499106862973,-0.19668968877737206,-0.19634837968786237,-0.19600673531721663,-0.1955517682691319,-0.19498247271187907,-0.19452717036189565,-0.1939582100442408,-0.19338924970745172,-0.19293394731460717,-0.19225132897673813,-0.19156837533732662,-0.19088542167070233,-0.19020246797695423,-0.18951984953047563,-0.1888368957827853,-0.18826793527637092,-0.1876989747513948,-0.18701602093238373,-0.1863330670868087,-0.18553645520402257,-0.18485350130121025,-0.1843985339591405,-0.18394323133102392,-0.1834879286913047,-0.18314661934111673,-0.18269131668114372,-0.18223601400963166,-0.181780711326606,-0.1813254086321049,-0.18087044120061066,-0.18041513848324772,-0.1799598357544984,-0.1795045330143754,-0.17904923026292965,-0.17859426277465615,-0.17813896000062845,-0.17791130860938448\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002236.27358887344599,36.27290591597557,36.27245094627141,36.27188164740801,36.26949179917574,36.26789856702089,36.26664664596319,36.26516707241535,36.263801492750645,36.26243557780981,36.26118365675212,36.26015938818454,36.25924911350012,36.25845216214657,36.25776953995228,36.25708658248186,36.256745271384716,36.25651761889458,36.25651761889458,36.25651761889458,36.25663127750158,36.25708658248186,36.257655546069145,36.258224844932556,36.259135119616985,36.26015938818454,36.26141130924225,36.26289088279009,36.26459810882807,36.26664664596319,36.268922835588455,36.271312683820724,36.27381652593612,36.27632036805153,36.2787102162838,36.281100399792194,36.28337658941746,36.28565277904272,36.287473663687706,36.28997750580311,36.29213970154524,36.2944158911705,36.29657842218876,36.29874061793089,36.30067549645901,36.30329299718142,36.30545552819967,36.307731717824936,36.309893913567066,36.31217010319234,36.314218640327454,36.31626717746257,36.3183157145977,36.32047824561595,36.32241278886796,36.32423400878906,36.325940899550915,36.32730681449175,36.32878638803959,36.330151967704296,36.331631541252136,36.33288346230984,36.334021389484406,36.33493199944496,36.335956268012524,36.33709419518709,36.33823245763779,36.339370384812355,36.34039465337992,36.34141892194748,36.342329531908035,36.34312614798546,36.343809105455875,36.344491727650166,36.34517468512058,36.345857642591,36.346426606178284,36.3471095636487,36.34756486862898,36.34801983833313,36.34847514331341,36.348930448293686,36.34915810078383,36.34927175939083,36.34927175939083,36.34927175939083,36.34927175939083,36.34927175939083,36.34915810078383,36.34915810078383,36.34915810078383,36.34904410690069,36.348930448293686,36.34870279580355,36.34858913719655,36.3483614847064,36.348133832216256,36.347906179726124,36.34756486862898,36.3471095636487,36.34665425866842,36.346198953688145,36.345743648707874,36.34517468512058,36.3446057215333,36.34415041655302,36.3434674590826,36.34267084300518,36.342101879417896,36.34141892194748,36.34073629975319,36.33993934839964,36.33925672620534,36.338460110127926,36.33754950016737,36.33652523159981,36.33550096303225,36.33436303585768,36.33322477340698,36.332086846232414,36.330607272684574,36.329127699136734,36.327648125588894,36.32616855204105,36.32457531988621,36.32286809384823,36.321047209203236,36.319112330675125,36.31706379354,36.31490159779786,36.31273906677961,36.31046287715435,36.30818668752909,36.30613815039396,36.30408961325884,36.30249638110399,36.300561502575874,36.29874061793089,36.297147385776036,36.29578180611133,36.294529885053635,36.2931639701128,36.292026042938225,36.29088778048754,36.289863511919975,36.28872558474541,36.287701316177845,36.286904700100415,36.285994090139866,36.28519747406244,36.28440085798502,36.2836042419076,36.28280729055405,36.28212466835976,36.28144171088934,36.28075875341892,36.28018978983164,36.27973448485136,36.27927951514721,36.27882421016693,36.27848256379366,36.278141252696514,36.27779994159937,36.27734463661909,36.27688933163881,36.276434026658535,36.275979056954384,36.275523751974106,36.27484079450369,36.274271830916405,36.27358887344599,36.273019909858704,36.27245094627141,36.27199564129114,36.271767988801\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 1566321821812,\\n \\\u0022PositionLatitude\\\u0022: -0.15612,\\n \\\u0022PositionLongitude\\\u0022: 36.412721,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 3.33,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Ol Kalou Settlement\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 4546,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Nyandarua\\\u0022,\\n \\\u0022TractorID\\\u0022: 501601,\\n \\\u0022TractorModelID\\\u0022: 57,\\n \\\u0022TractorName\\\u0022: \\\u0022VALTRA\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:54:10\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d55463b61276e3b4be973b1\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KAT 063S\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-08T14:09:22.062Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-08-15T11:48:53.021Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastWorkingHourNotificationTime\\\u0022: \\\u00222019-10-08T23:28:00.534Z\\\u0022,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 20\\n },\\n \\\u0022501630\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d2ee357ecc87c44b9cbcbcd\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 23091,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-07-17 08:59:03\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 648,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 43,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 14:40:54\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-14T12:54:08.117Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00220.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.34499470290222134,0.3448086280232137,0.3446225531405675,0.34443647825427004,0.34425040336435947,0.3440643284708103,0.3440643284708103,0.34387858884371575,0.34369251394291495,0.34369251394291495,0.34369251394291495,0.3433203641304613,0.3433203641304613,0.343134289218783,0.3429482143034916,0.3427624746547311,0.34239032480609544,0.34220424987635156,0.34183210000606273,0.34164602506549224,0.34127421044375783,0.3409020605374396,0.3405299106167453,0.340158095951908,0.33959987102243944,0.33922772105154325,0.3384837563371101,0.33792586658141477,0.3371815664968791,0.3368094164332761,0.3362515265815789,0.33587937648246824,0.33569330142760134,0.33532148657765576,0.3351354115121785,0.33494933644317726,0.3343914464853895,0.3338332212254613,0.3334610710345725,0.33290318099230914,0.3325310307662943,0.3319731406714628,0.3314149152746435,0.33085668984634947,0.33048487481391636,0.3297405741661808,0.3295548342661183,0.3288105335488686,0.3284383831694365,0.32788049284493076,0.3275083424308943,0.32713652727369436,0.3267643768320506,0.326392226376616,0.326020075907416,0.32546218544853817,0.32509003494498817,0.32471821969847825,0.32453214443471257,0.32415999389692707,0.3236017680646008,0.32322995276343625,0.3228578021778661,0.32248565157865766,0.3222999115447829,0.3219277609251808,0.3217416856102972,0.32136953497033954,0.3209977195877019,0.32081164425587233,0.32043949358206086,0.319323376750506,0.3191373013882957,0.3187651506537866,0.3182072597977719,0.31764903364060926,0.31764903364060926,0.31746329351916747,0.317277218123396,0.31709114272429134,0.3167189919160315,0.31634684109441324,0.31616110094962613,0.315975025530484,0.3156028746822,0.314858908216757,0.3146728327743459,0.3146728327743459,0.3144867573286016,0.31430068187953675,0.31392853097147105,0.31374279078358114,0.3135567153212597,0.3131845643867445,0.3129984889145253,0.312812413439011,0.31262667323132526,0.3122545222638086,0.3120684467751141,0.3118823712831245,0.31169629578783986,0.3113244800585981,0.3111384045534665,0.3109523290450525,0.3107662535333562,0.31039410250014204,0.31002228672506216,0.30983621119700505,0.30983621119700505,0.30965013566567834,0.3094640601310821,0.30927798459324163,0.30890616877898996,0.3087200932313661,0.3085340176804854,0.3085340176804854,0.30779005071572074,0.30779005071572074,0.3074178995782226,0.30723182400459453,0.30723182400459453,0.307045748427735,0.307045748427735,0.307045748427735,0.30685967284764404,0.30685967284764404,0.30685967284764404,0.30667359726432164,0.3064878569490823,0.3059296301700194,0.3055574789678287,0.3055574789678287,0.3053717386332643,0.3053717386332643,0.3053717386332643,0.3053717386332643,0.30518566302412853,0.30518566302412853,0.30518566302412853,0.304999587411774,0.304999587411774,0.3048135117961881,0.3048135117961881,0.3048135117961881,0.3046274361774089,0.30444136055541093,0.30425528493019427,0.30406954457316243,0.30388346894153373,0.30388346894153373,0.3036973933067118,0.3035113176686712,0.3035113176686712,0.3033252420274372,0.3033252420274372,0.3031391663829973,0.3031391663829973,0.30295342600680575,0.302767350355992,0.3023951990447592,0.3023951990447592,0.30220912338437833,0.30220912338437833,0.30202304772079147,0.30202304772079147,0.30202304772079147,0.30202304772079147,0.30183697205402404,0.30183697205402404,0.30183697205402404,0.30183697205402404,0.30183697205402404,0.30183697205402404,0.30183697205402404,0.30183697205402404,0.3016512316555559,0.3016512316555559,0.30146515598242735,0.30146515598242735,0.30146515598242735,0.30146515598242735,0.30146515598242735,0.30146515598242735,0.30127908030610556,0.30109300462662864,0.30109300462662864,0.30090692894395843,0.30072085325813314,0.30034903714847155,0.30034903714847155,0.30016296145314275,0.2999768857546334,0.2999768857546334,0.2997908100529562,0.2997908100529562,0.2997908100529562,0.2996047343481366,0.2996047343481366,0.2996047343481366,0.2996047343481366,0.2996047343481366,0.2994189939116927,0.2994189939116927,0.2994189939116927,0.2994189939116927,0.29923291820055015,0.2990468424862398,0.2990468424862398,0.2986746910481792,0.2986746910481792,0.29848861532444165,0.29848861532444165,0.29830253959753633,0.29830253959753633,0.29830253959753633,0.29830253959753633,0.29830253959753633,0.29830253959753633,0.2981167991390702,0.2981167991390702,0.29793072340588006,0.29793072340588006,0.29774464766956027,0.2975585719300854,0.2975585719300854,0.2973724961874808,0.2971864204417338,0.2970003446928445,0.296814604212458,0.296628528457322,0.2964424526990564,0.2964424526990564,0.2964424526990564,0.2964424526990564,0.2962563769376611,0.2962563769376611,0.2962563769376611,0.2962563769376611,0.2962563769376611,0.29607030117314886,0.29607030117314886,0.29588422540550696,0.29588422540550696,0.29551240913253035,0.29551240913253035,0.29551240913253035,0.29551240913253035,0.29551240913253035,0.29551240913253035,0.2953263333555503,0.2953263333555503,0.2953263333555503,0.29514025757542794,0.29495418179221405,0.29458236548814426,0.29458236548814426,0.294396289695605,0.294396289695605,0.294396289695605,0.2942102138999488,0.29402413810120104,0.2938380622993618,0.2938380622993618,0.29365198649440566,0.29365198649440566,0.29346591068635797,0.29346591068635797,0.2932801701469531,0.2932801701469531,0.29309409433273514,0.29309409433273514,0.292908018515413,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.29272194269499935,0.292908018515413,0.292908018515413,0.292908018515413,0.292908018515413,0.29309409433273514,0.29309409433273514,0.2932801701469531,0.2932801701469531,0.29346591068635797,0.29346591068635797,0.29365198649440566,0.29365198649440566,0.2938380622993618,0.2938380622993618,0.29402413810120104,0.29402413810120104,0.2942102138999488,0.294396289695605,0.29495418179221405,0.29495418179221405,0.29495418179221405,0.2953263333555503,0.2953263333555503,0.29551240913253035,0.2956984849064061,0.29607030117314886,0.29607030117314886,0.2964424526990564,0.2964424526990564,0.296814604212458,0.296814604212458,0.2971864204417338,0.2970003446928445,0.2973724961874808,0.2973724961874808,0.2973724961874808,0.29774464766956027,0.29774464766956027,0.29793072340588006,0.2981167991390702,0.29830253959753633,0.29848861532444165,0.29886076676879975,0.2990468424862398,0.2994189939116927,0.2996047343481366,0.2999768857546334,0.2999768857546334,0.30034903714847155,0.30072085325813314,0.30109300462662864,0.30146515598242735,0.30202304772079147,0.30220912338437833,0.302767350355992,0.30295342600680575,0.30295342600680575,0.3031391663829973,0.3035113176686712,0.3036973933067118,0.30388346894153373,0.30406954457316243,0.30425528493019427,0.30444136055541093,0.3048135117961881,0.3048135117961881,0.3053717386332643,0.30611570576626757,0.30611570576626757,0.30611570576626757,0.30630178135929703,0.30667359726432164,0.307045748427735,0.30723182400459453,0.30723182400459453,0.30834794212634775,0.3085340176804854,0.3087200932313661,0.3094640601310821,0.30965013566567834,0.30983621119700505,0.3102083622498369,0.31039410250014204,0.3105801780183903,0.3107662535333562,0.3109523290450525,0.3111384045534665,0.3111384045534665,0.3111384045534665,0.3115102202892729,0.3118823712831245,0.3120684467751141,0.3122545222638086,0.3124405977492081,0.31262667323132526,0.312812413439011,0.3131845643867445,0.31374279078358114,0.31374279078358114,0.31430068187953675,0.3146728327743459,0.3150449836558731,0.31523072382059586,0.3157889501079959,0.315975025530484,0.31616110094962613,0.316532916506889,0.316905067321828,0.31709114272429134,0.31746329351916747,0.31746329351916747,0.31764903364060926,0.3182072597977719,0.3187651506537866,0.31895122602272685,0.31895122602272685,0.31950945210934484,0.31988160281689565,0.3202534182400917,0.3206255689206459,0.32081164425587233,0.3209977195877019,0.32136953497033954,0.3215556102920168,0.3217416856102972,0.3221138362366803,0.3222999115447829,0.32267172687995394,0.3228578021778661,0.3236017680646008,0.3237878433454524,0.32415999389692707,0.32434606916752456,0.32471821969847825,0.3249039596880797,0.325276110198487,0.32564826069516706,0.3258343359383609,0.326392226376616,0.3265783016060572,0.3267643768320506,0.32713652727369436,0.3275083424308943,0.32769441763964907,0.3284383831694365,0.3288105335488686,0.3289966087333876,0.32936875909203156,0.329926649333334,0.3302987996572081,0.33048487481391636,0.3306709499671514,0.33085668984634947,0.3314149152746435,0.3319731406714628,0.3319731406714628,0.3323449556480199,0.33290318099230914,0.333274995933842,0.33364714613176616,0.33457718629457717,0.3347632613706392,0.3351354115121785,0.33550756163958345,0.33587937648246824,0.3360654515337856,0.33662367666647885,0.336995491466846,0.33755371654627137,0.33792586658141477,0.3384837563371101,0.33885590633660584,0.3390419813309913,0.3394137960387915,0.33959987102243944,0.33997202097899765,0.340158095951908,0.3409020605374396,0.34127421044375783,0.34164602506549224,0.34201817494300735,0.34220424987635156,0.34239032480609544,0.3427624746547311,0.3429482143034916,0.343134289218783,0.3433203641304613,0.3433203641304613,0.34350643903850103,0.34369251394291495,0.34369251394291495,0.34387858884371575,0.34387858884371575,0.34387858884371575,0.3440643284708103,0.3440643284708103,0.3440643284708103,0.3440643284708103,0.3440643284708103,0.34387858884371575\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18603330850601,34.18473109602928,34.18380104005337,34.18342888355256,34.182684905827045,34.18249882757664,34.18212667107582,34.181754514575005,34.181382693350315,34.1810105368495,34.18063838034868,34.180266559124,34.17989440262318,34.17952224612236,34.179150089621544,34.178778268396854,34.17840611189603,34.17784821242094,34.177476055920124,34.17710389941931,34.17654599994421,34.176173843443394,34.17580168694258,34.17524378746747,34.174871630966656,34.17431339621544,34.17356941848993,34.17282544076443,34.172081127762794,34.171709306538105,34.17133715003729,34.17096499353647,34.17096499353647,34.170407094061375,34.17022101581096,34.170407094061375,34.17003493756056,34.169476702809334,34.16929095983505,34.16929095983505,34.16873272508383,34.16854664683342,34.16836056858301,34.16836056858301,34.16817482560873,34.16817482560873,34.167802669107914,34.167802669107914,34.167802669107914,34.167616590857506,34.167616590857506,34.167616590857506,34.1674305126071,34.1674305126071,34.1674305126071,34.1674305126071,34.1674305126071,34.16724443435669,34.16724443435669,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16705835610628,34.16724443435669,34.16724443435669,34.16724443435669,34.16724443435669,34.1674305126071,34.1674305126071,34.1674305126071,34.1674305126071,34.1674305126071,34.167616590857506,34.167616590857506,34.167616590857506,34.167616590857506,34.167616590857506,34.167802669107914,34.167802669107914,34.16798874735832,34.16798874735832,34.16798874735832,34.16798874735832,34.16798874735832,34.16817482560873,34.16817482560873,34.16817482560873,34.16836056858301,34.16836056858301,34.16854664683342,34.16854664683342,34.16873272508383,34.168918803334236,34.168918803334236,34.169104881584644,34.169104881584644,34.16929095983505,34.16929095983505,34.169476702809334,34.16966278105974,34.16966278105974,34.16966278105974,34.16966278105974,34.17003493756056,34.17003493756056,34.17003493756056,34.17022101581096,34.17022101581096,34.17022101581096,34.170407094061375,34.170407094061375,34.170407094061375,34.170407094061375,34.170407094061375,34.17059317231178,34.17059317231178,34.17096499353647,34.17133715003729,34.1715232282877,34.1715232282877,34.1715232282877,34.1715232282877,34.171709306538105,34.171709306538105,34.171709306538105,34.171895049512386,34.172081127762794,34.1722672060132,34.1722672060132,34.1722672060132,34.17245328426361,34.17263936251402,34.17282544076443,34.17282544076443,34.173011519014835,34.17319726198912,34.17319726198912,34.173383340239525,34.173383340239525,34.17356941848993,34.17356941848993,34.17356941848993,34.17375549674034,34.17375549674034,34.17394157499075,34.17412765324116,34.17431339621544,34.17449947446585,34.17449947446585,34.174685552716255,34.174685552716255,34.174685552716255,34.174685552716255,34.174871630966656,34.174871630966656,34.174871630966656,34.174871630966656,34.175057709217064,34.175057709217064,34.175057709217064,34.175057709217064,34.175057709217064,34.175057709217064,34.17524378746747,34.17524378746747,34.17524378746747,34.17524378746747,34.17524378746747,34.17542986571788,34.17542986571788,34.17542986571788,34.17561560869217,34.17561560869217,34.17580168694258,34.175987765192986,34.176173843443394,34.176173843443394,34.1763599216938,34.17654599994421,34.17654599994421,34.17673174291849,34.17673174291849,34.17673174291849,34.1769178211689,34.1769178211689,34.1769178211689,34.1769178211689,34.1769178211689,34.17710389941931,34.17710389941931,34.17710389941931,34.17710389941931,34.177289977669716,34.177476055920124,34.177476055920124,34.178033955395215,34.178033955395215,34.17822003364562,34.17840611189603,34.17840611189603,34.178592190146446,34.178592190146446,34.178592190146446,34.178592190146446,34.178592190146446,34.178778268396854,34.178778268396854,34.17896434664726,34.17933616787195,34.17933616787195,34.17952224612236,34.17970832437277,34.17989440262318,34.18008048087359,34.180452302098274,34.18063838034868,34.18082445859909,34.1810105368495,34.18119661509991,34.18119661509991,34.181382693350315,34.181382693350315,34.181382693350315,34.181568436324596,34.181568436324596,34.181754514575005,34.181568436324596,34.18194059282541,34.18194059282541,34.18212667107582,34.18249882757664,34.182684905827045,34.182684905827045,34.182684905827045,34.18287064880133,34.18287064880133,34.18287064880133,34.18305672705174,34.18342888355256,34.18361496180296,34.18380104005337,34.18454501777887,34.18454501777887,34.18491717427969,34.18491717427969,34.18491717427969,34.18547507375479,34.185661152005196,34.18640512973071,34.18659120798111,34.18677728623152,34.187149442732334,34.187149442732334,34.18752159923315,34.188265576958656,34.18863773345947,34.18900955468416,34.18938171118498,34.1899399459362,34.19068392366171,34.191056080162525,34.19124182313681,34.19161397963762,34.19161397963762,34.19291619211435,34.19310227036476,34.19347442686558,34.194032326340675,34.19459056109189,34.195148460567,34.19570669531822,34.19607851654291,34.19645067304373,34.19645067304373,34.19700890779495,34.19775288552046,34.19831112027168,34.19868294149637,34.19886901974678,34.19961333274842,34.20017123222351,34.200729466974735,34.201101288199425,34.20147344470024,34.20184560120106,34.20203134417534,34.20258957892657,34.20296173542738,34.20351963490248,34.203705713152885,34.2040778696537,34.20426394790411,34.2046357691288,34.20482184737921,34.205007925629616,34.20538008213043,34.20575190335513,34.20612405985594,34.20668229460716,34.20761235058308,34.20798450708389,34.20835632830858,34.209286384284496,34.20984461903572,34.21021677553654,34.21058859676123,34.21096075326204,34.21151898801327,34.21226296573877,34.21282120049,34.21319302171469,34.21319302171469,34.213751256465905,34.21393733471632,34.21393733471632,34.214681312441826,34.214681312441826,34.214867390692234,34.214867390692234,34.21505346894264,34.21579744666815,34.215983524918556,34.21635568141937,34.216541424393654,34.21691358089447,34.21709965914488,34.217471815645695,34.2176578938961,34.21802971512079,34.21802971512079,34.218401871621616,34.21858794987201,34.21877402812242,34.219145849347115,34.21933192759752,34.21951800584793,34.21989016234875,34.21970408409834,34.21970408409834,34.21989016234875,34.21989016234875,34.21989016234875,34.21989016234875,34.21989016234875,34.21989016234875,34.21989016234875,34.21989016234875,34.21989016234875,34.21970408409834,34.21970408409834,34.21970408409834,34.21970408409834,34.21951800584793,34.21951800584793,34.21933192759752,34.219145849347115,34.21877402812242,34.21858794987201,34.218401871621616,34.2182157933712,34.21802971512079,34.21802971512079,34.217843636870384,34.2176578938961,34.2176578938961,34.217471815645695,34.217471815645695,34.217471815645695,34.21728573739529,34.21728573739529,34.21709965914488,34.21691358089447,34.216727502644055,34.216541424393654,34.216541424393654,34.21635568141937,34.21635568141937,34.216169603168964,34.21561136841774,34.21542529016733,34.21542529016733,34.21523954719305,34.21505346894264,34.21505346894264,34.214681312441826,34.214681312441826,34.21449523419142,34.2141230776906,34.213751256465905,34.213565178215504,34.213379099965096,34.21319302171469,34.21300694346428,34.21282120049,34.21244904398918,34.21244904398918,34.21226296573877,34.212076887488365,34.21170473098755,34.21133290976286,34.21058859676123,34.21021677553654,34.21003069728613,34.20965854078531,34.209472462534904,34.209286384284496,34.20891456305981,34.2087284848094,34.20854240655899,34.208170250058174,34.207426272332675,34.20724019408226,34.206868037581444,34.20668229460716,34.206496216356754,34.20612405985594,34.20575190335513,34.20575190335513,34.20556616038084,34.205194003880024,34.205194003880024,34.205007925629616,34.20482184737921,34.20444969087839,34.2040778696537,34.203705713152885,34.20351963490248,34.20314781367779,34.20296173542738,34.20258957892657,34.20240350067616,34.202217422425754,34.20203134417534,34.20165952295065,34.20128736644983,34.200729466974735,34.20035731047392,34.20017123222351,34.199799075722694,34.19961333274842,34.19942725449801,34.198496863245964,34.198125042021275,34.197938963770866,34.19756680727004,34.19700890779495,34.196636751294136,34.19645067304373,34.19607851654291,34.195148460567,34.19477663934231,34.194032326340675,34.19366016983986,34.19310227036476,34.192730113863945,34.192358292639256,34.19198613613844,34.19161397963762,34.19087000191212,34.1904978454113,34.18956778943539,34.18938171118498,34.18900955468416,34.188823476433754,34.188451655209064,34.18807949870825,34.18770734220743,34.18733552098274,34.186963364481926,34.18659120798111,34.18621938675642,34.185847230255604,34.185661152005196,34.18547507375479,34.18528899550438,34.1851032525301,34.18491717427969,34.18491717427969,34.18473109602928,34.18473109602928,34.18473109602928\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 1.149961,\\n \\\u0022PositionLongitude\\\u0022: 34.93084,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0.02,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Kwanza\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 10636,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Trans Nzoia\\\u0022,\\n \\\u0022TractorID\\\u0022: 501630,\\n \\\u0022TractorModelID\\\u0022: 21,\\n \\\u0022TractorName\\\u0022: \\\u0022Massey Ferguson 275\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:40:24\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d2ee28120b56d2ef3a07613\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 661W\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-09-27T09:54:17.345Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-07-17T08:59:03.344Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022501745\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d55473f5e24b02eee4e79f3\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 55174,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102,103,109\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-08-15 11:51:23\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 272,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 342,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022109\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 14:53:46\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u00222019-10-03T03:19:01.881Z\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-1.6089318580438576,-1.6089228091573353,-1.6089191225739232,-1.6089137602707875,-1.6089083979676138,-1.6089047113841761,-1.60889901393705,-1.608893651633838,-1.608888289330626,-1.608884602747163,-1.6088829270274012,-1.608879240443913,-1.608879240443913,-1.6088809161636872,-1.6088829270274012,-1.608884602747163,-1.6088899650503876,-1.6088956624975392,-1.6089010248007385,-1.608906387103925,-1.6089154359905238,-1.6089207982936593,-1.6089318580438576,-1.608939231210618,-1.6089462692334011,-1.6089536424001107,-1.608961015566795,-1.608970064453152,-1.6089754267561476,-1.6089864865060406,-1.6089938596726103,-1.6090029085588147,-1.6090099465813812,-1.609019330611436,-1.609032066080747,-1.6090427906864075,-1.6090555261555533,-1.6090702724881585,-1.6090830079571388,-1.6090974191456262,-1.6091084788948575,-1.6091192035001238,-1.6091339498322583,-1.6091429987178392,-1.6091537233229147,-1.6091647830718534,-1.6091755076768142,-1.6091848917061058,-1.6091939405914704,-1.6092046651962786,-1.609217400664419,-1.609232146995854,-1.6092448824638164,-1.609261304514504,-1.6092740399822885,-1.6092901268888584,-1.6093028623564647,-1.609317608687276,-1.6093320198741097,-1.6093504527873408,-1.6093665396933001,-1.6093866483255805,-1.609410443540179,-1.609435914473814,-1.6094576988246856,-1.6094811588946065,-1.6094995918064892,-1.6095156787112779,-1.60953210075979,-1.6095505336712148,-1.609570307157838,-1.6095904157880956,-1.6096105244181624,-1.6096323087671767,-1.609650406533873,-1.609666828581291,-1.6096812397656566,-1.6096939752308201,-1.6097067106959073,-1.6097194461609055,-1.60973218162584,-1.6097486036725965,-1.6097650257192258,-1.6097868100665862,-1.6098340653423782,-1.6098615471334679,-1.6099178512896628,-1.6099506953800586,-1.609988901770257,-1.6100214107157464,-1.6100542548044758,-1.610088774611453,-1.610126980999056,-1.6101635116672535,-1.6101980314723732,-1.6102325512769202,-1.6102600330626284,-1.610287179704257,-1.6103143263455166,-1.610345494710973,-1.6103726413514567,-1.6104017988537969,-1.61043095635573,-1.6104564272766047,-1.6104855847777488,-1.6105180937153123,-1.6105526135144272,-1.610583781876232,-1.6106129393755444,-1.6106601946321895,-1.6106819789699827,-1.6107419696836238,-1.6107691163188405,-1.6108093335555143,-1.6108220690136297,-1.6108348044716687,-1.6108455290678387,-1.6108582645257379,-1.6108947951808188,-1.6109128929362941,-1.6109547858882005,-1.6109748945047944,-1.6110201388914407,-1.6110784538771776,-1.6111384445791523,-1.611171288649867,-1.6112148573143088,-1.6112296036312785,-1.6112530636808058,-1.6112657991361479,-1.6112748480122634,-1.6112859077496884,-1.6112969674870372,-1.6113040055016905,-1.6113224383970852,-1.6113331629907106,-1.6113586339003005,-1.611367682776009,-1.6113914779674785,-1.611398515981801,-1.6114058891396432,-1.6114149380151355,-1.61143136004833,-1.6114404089237204,-1.6114440955025526,-1.6114424197849027,-1.6114404089237204,-1.611436722344863,-1.61143136004833,-1.611420635455239,-1.6114149380151355,-1.6114095757185518,-1.6114005268430343,-1.611393153685179,-1.6113914779674785,-1.6113894671062325,-1.6113877913885446,-1.6113857805272986,-1.6113804182306386,-1.6113767316516792,-1.6113696936372677,-1.6113660070582956,-1.6113532716035768,-1.611338525287485,-1.6113294764116495,-1.6113167409567144,-1.6112986432048142,-1.611289594328813,-1.611276858873611,-1.6112641234183325,-1.6112366416461608,-1.6112239061906406,-1.6112111707350443,-1.6111840241057307,-1.6111602289118312,-1.6111002382104926,-1.6110804647387162,-1.6110657184206651,-1.6110385717894051,-1.6110184631734346,-1.6109983545572604,-1.6109876299618795,-1.6109802568025358,-1.6109691970634568,-1.6109584724679231,-1.610949423590408,-1.6109346772713902,-1.6109165795161058,-1.6108766974251654,-1.6108582645257379,-1.6108401667697665,-1.6108056469755243,-1.6107728028989066,-1.6107275585067644,-1.6106856655502015,-1.6106437725927738,-1.610625674834894,-1.610583781876232,-1.6105328400373327,-1.6104782116165732,-1.61043095635573,-1.6103763279322352,-1.6103180129263972,-1.6102670710808695,-1.6102198158151153,-1.6101671982484138,-1.6101397164614462,-1.6101105589553528,-1.610061627967178,-1.6100123618340714,-1.6099852151887788,-1.6099269001717578,-1.6098977426626238,-1.6098451250876147,-1.6097904966484335,-1.6097358682077638,-1.6097124081407816,-1.6096886129297072,-1.6096339844863277,-1.6095723180208652,-1.6095176895743686,-1.6094922186417642,-1.6094684234281198,-1.609384972606226,-1.6093611773913221,-1.6092884511694274,-1.6092666668167364,-1.6091956163109649,-1.6091755076768142,-1.6091228900831671,-1.6091101546144413,-1.6090682616246226,-1.609057537019102,-1.6090173197478619,-1.6089938596726103,-1.6089737510364623,-1.6089626912864932,-1.6089429177939922,-1.6089137602707875,-1.608888289330626,-1.608857456086858,-1.6088701915571741\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002237.36930746585131,37.369287349283695,37.36927092075348,37.36925482749939,37.36923638731241,37.36921828240156,37.36919816583395,37.369176372885704,37.36914921551943,37.36911803483964,37.36908350139857,37.36905265599489,37.369025498628616,37.36899431794882,37.36896514892578,37.368932627141476,37.368899770081036,37.36886892467737,37.3688380792737,37.368808910250664,37.3687743768096,37.3687395080924,37.368704974651344,37.36867245286703,37.36864127218723,37.368612103164196,37.36858125776053,37.36854840070009,37.368517555296414,37.36848670989275,37.36845921725035,37.36843038350344,37.36839752644301,37.36836835741997,37.368337512016296,37.36831001937389,37.36828286200762,37.36825369298458,37.36822284758091,37.36818999052047,37.368159145116806,37.368128299713135,37.36810281872749,37.36808069050313,37.36805722117424,37.368035428225994,37.36801162362099,37.36798983067274,37.36796971410513,37.367949932813644,37.36793350428343,37.36791707575321,37.367900647222996,37.36787885427476,37.36785873770714,37.36783526837826,37.36781347543001,37.36779335886241,37.36777525395155,37.36775681376457,37.36774407327175,37.36773133277893,37.36772060394287,37.36770585179328,37.367687746882446,37.36767131835222,37.36765321344137,37.36763309687376,37.36761298030615,37.3675948753953,37.36757844686509,37.36756570637226,37.367551289498806,37.36754022538662,37.3675274848938,37.36751474440097,37.36750200390816,37.36749295145273,37.36748389899731,37.36747484654188,37.36746579408646,37.36745472997427,37.367445677518845,37.36743662506342,37.36741483211517,37.36740577965975,37.36738733947277,37.367378287017345,37.36737124621868,37.367365546524525,37.367360182106495,37.367352806031704,37.367347441613674,37.36734576523304,37.36733838915825,37.36733637750149,37.36733302474022,37.36733101308346,37.36733302474022,37.36733637750149,37.367342077195644,37.367347441613674,37.367354817688465,37.367360182106495,37.367367558181286,37.367378287017345,37.36738935112953,37.36740209162235,37.36741852015257,37.367451041936874,37.36746579408646,37.36749496310949,37.36750569194555,37.36752949655056,37.367538549005985,37.36754760146141,37.3675586655736,37.36756939440966,37.36759856343269,37.36761499196291,37.36765321344137,37.36767333000899,37.36771322786808,37.36776586622,37.36781682819128,37.36784599721432,37.3678969591856,37.36792076379061,37.3679643496871,37.36798245459795,37.36800089478493,37.36802067607641,37.368040792644024,37.368058897554874,37.3680991306901,37.368118911981576,37.368164509534836,37.36818999052047,37.368237264454365,37.36825905740261,37.36828118562698,37.36830096691847,37.368348240852356,37.36837204545736,37.368420995771885,37.36844312399626,37.368464916944504,37.36848670989275,37.36851017922163,37.36856684088707,37.368593998253345,37.36862149089575,37.36864697188139,37.36870128661394,37.36873045563698,37.36878510564566,37.36882533878088,37.368839755654335,37.36887261271477,37.36889239400626,37.36893631517887,37.36895978450775,37.369001694023616,37.369041591882706,37.36906170845032,37.36910529434681,37.36914720386267,37.36916899681091,37.369185425341136,37.369201853871346,37.36923471093178,37.36925281584263,37.36927293241024,37.36930746585131,37.36933831125498,37.36937653273344,37.36938759684563,37.36939664930105,37.369416765868664,37.36943855881691,37.369460351765156,37.36946940422058,37.36947678029537,37.369485832750804,37.36949488520622,37.36950393766164,37.369515001773834,37.36952405422926,37.369538471102715,37.36954417079687,37.36954752355814,37.36955691128969,37.36956227570772,37.36956764012575,37.36957300454378,37.36957870423794,37.36958239227533,37.369589433074,37.36959513276815,37.36960418522358,37.3696095496416,37.369613237679005,37.36961491405964,37.36961491405964,37.36961491405964,37.36961122602224,37.3696095496416,37.369607873260975,37.36960418522358,37.369602173566825,37.369602173566825,37.36960586160422,37.369607873260975,37.36961122602224,37.36961491405964,37.3696169257164,37.3696169257164,37.36961491405964,37.36961491405964,37.3696169257164,37.3696169257164,37.3696169257164,37.3696169257164,37.369620613753796,37.369618602097034,37.369613237679005,37.36961122602224,37.369600497186184,37.36959848552942,37.3695857450366,37.36958239227533,37.36956965178251,37.36956764012575,37.3695495352149,37.369533106684685,37.36951131373644,37.36949857324362,37.36946940422058,37.36941307783127,37.3693510517478,37.369165644049644,37.36906908452511\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: false,\\n \\\u0022OperatorID\\\u0022: 1569395513771,\\n \\\u0022PositionLatitude\\\u0022: -2.154365,\\n \\\u0022PositionLongitude\\\u0022: 38.073964,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 2.63,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Kilawa\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 1659,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Kitui\\\u0022,\\n \\\u0022TractorID\\\u0022: 501745,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022SAME\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:53:19\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: false,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d55463b61276e3b4be973b1\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 273T\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-06T15:12:40.554Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-08-15T11:51:27.187Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 1,\\n \\\u0022AssetState\\\u0022: \\\u0022On\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022LastWorkingHourNotificationTime\\\u0022: \\\u00222019-10-29T03:18:48.526Z\\\u0022\\n },\\n \\\u0022501750\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d4ad92c7e910233edf8a1ec\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 2762,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022109,102,103\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022CreatedAt\\\u0022: \\\u00222019-08-07 13:59:04\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: true,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 51,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Heading\\\u0022: 296,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022109,103,102\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 08:40:09\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u00220.4595352614891534,0.4595352614891534,0.4567887672700075,0.4506091514488676,0.4430562805561132,0.434130150494083,0.42657726297220555,0.416964486331433,0.408038326078331,0.39842552704403633,0.3888127167945079,0.37988652604278716,0.37027369492791673,0.36134748526849814,0.3537945317746649,0.3462415721326541,0.34006187339880467,0.3325089029145756,0.32564256109307516,0.3180895796914776,0.3119098635181762,0.30641677942687773,0.29886378421289456,0.28993751045615185,0.2796379550830506,0.2700250285753685,0.26178537122298784,0.25491898595306217,0.24873923607703846,0.24461940121435757,0.2391262861003741,0.2350064483196997,0.2301999693747193,0.22745340924806837,0.22539348880972976,0.22402020835549505,0.22196028743306329,0.22127364706170777,0.22127364706170777,0.22196028743306329,0.22333356808006505,0.22470684859875054,0.22608012898834365,0.22814004932897564,0.2301999693747193,0.2322598891229157,0.2350064483196997,0.23843964655554295,0.24187284393525726,0.24667931880512015,0.25217243081444973,0.2576655405059055,0.26315864782896764,0.2700250285753685,0.276204767934163,0.28307114122787536,0.2906241471515749,0.2974905117939623,0.3050435079619974,0.313969769315989,0.3222093884223396,0.33319553683571534,0.3421217734198524,0.35173463429468954,0.3620341170948991,0.370960326070702,0.37919989560028367,0.3867528274507476,0.39430575258033057,0.40048541350475103,0.40460518487057107,0.41078483799033016,0.4155912315611697,0.42108424920188975,0.4258906364643154,0.42932376839021175,0.4334435246654957,0.436876653183962,0.4403097801338297,0.4437429055028472,0.44580277996028844,0.4478626538415149,0.4485492783400833,0.44923590277422637,0.44923590277422637,0.44923590277422637\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002235.37591151893139,35.37385158240795,35.36767177283764,35.35668544471264,35.34638576209545,35.3326528519392,35.32097987830639,35.31274013221263,35.3051870316267,35.29900722205639,35.292827412486076,35.29008083045483,35.286647602915764,35.284587666392326,35.283901020884514,35.28252772986889,35.2832143753767,35.2832143753767,35.283901020884514,35.28527431190013,35.286647602915764,35.2887075394392,35.29145412147045,35.295573994517326,35.301753804087646,35.30793361365795,35.314113423228264,35.31891994178295,35.325099751353264,35.32990626990795,35.33745937049389,35.34569911658764,35.353252217173576,35.35943202674389,35.366298481822014,35.374538227915764,35.38277797400951,35.38964442908764,35.397197529673576,35.4040639847517,35.41024379432201,35.415736958384514,35.421916767954826,35.42809657752514,35.43358974158764,35.43908290565014,35.443202778697014,35.44732265174389,35.451442524790764,35.45556239783764,35.459682270884514,35.463115498423576,35.46654872596264,35.469295307993896,35.47204189002514,35.474101826548576,35.476848408579826,35.478908345103264,35.479594990611076,35.481654927134514,35.48302821815014,35.48302821815014,35.48302821815014,35.48302821815014,35.48302821815014,35.482341572642326,35.4809682816267,35.479594990611076,35.476848408579826,35.474101826548576,35.47204189002514,35.46860866248607,35.463115498423576,35.4589956253767,35.45281581580638,35.446636006236076,35.43908290565014,35.43015651404858,35.41985683143139,35.410930439829826,35.402004048228264,35.393764302134514,35.388271138072014,35.38277797400951,35.37865810096264,35.37316493690014\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: 0.293747,\\n \\\u0022PositionLongitude\\\u0022: 35.406023,\\n \\\u0022ServiceProvider\\\u0022: \\\u0022AERIS\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Tarakwa\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 185,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Uasin Gishu\\\u0022,\\n \\\u0022TractorID\\\u0022: 501750,\\n \\\u0022TractorModelID\\\u0022: 8,\\n \\\u0022TractorName\\\u0022: \\\u0022JD 5503\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:39:27\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d4ad8714b96d6774a566d3d\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 283L\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-08-21T06:11:38.784Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-08-07T13:59:08.048Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022502142\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d777486b28df22a2dda2bd0\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022110,112,117\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022India\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 13,\\n \\\u0022FixedEngineHours\\\u0022: 0,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 64,\\n \\\u0022FuelVolume\\\u0022: 100,\\n \\\u0022Group\\\u0022: \\\u0022JOHN DEERE\\\u0022,\\n \\\u0022Heading\\\u0022: 6,\\n \\\u0022ImplementsAttached\\\u0022: \\\u0022\\\u0022,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-24 12:43:17\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u002218.63195698694721,18.631971601350187,18.631958893173753,18.63194999744969,18.631937289271637,18.63193347681804,18.63193347681804,18.631938877793935,18.63194999744969,18.631960799400286,18.631975096098547,18.63198589804754,18.63199320524795,18.632004007195786,18.632014809142955,18.632029423540963,18.632042131712122,18.63205642840354,18.63207453754428,18.63208343326183,18.6320999538789,18.632118063014996,18.632134265924602,18.632157776025995,18.632181286124133,18.632208290962588,18.63223910824356,18.632271514038152,18.6323093207907,18.632350939979148,18.63239255915741,18.632436084546676,18.63247929222134,18.632513604190457,18.63254060897609,18.63256062428503,18.632578733372032,18.632594936237723,18.63260764436659,18.632623847229517,18.63264386252865,18.632676268246055,18.632714074908556,18.632759506433036,18.632790005911176,18.632815422138787,18.632837025929263,18.63285164025656,18.632871337826142,18.632884045934336,18.632898660257602,18.632904061202822,18.632905649716097,18.632905649716097,18.632905649716097,18.632892941609505,18.632891353096127,18.63288754066393,18.632880551204682,18.632873244042433,18.632867843096232,18.632860535933435,18.632849734040015,18.632844333093075,18.632833531198642,18.632828130251156,18.632824317817544,18.6328173283557,18.63281351592185,18.632810021190743,18.63280462024252,18.632790005911176,18.632777297795947,18.632764907382683,18.632748386830258,18.632734090197054,18.632717887344633,18.632701684490677,18.632685163932102,18.63266546634093,18.632647357263167,18.63263115440249,18.63261495154025,18.632596842457115,18.63258413432743,18.63256951997712,18.632553317109018,18.632533619502567,18.63250629701243,18.632488187917694,18.63247389126261,18.63245578216444,18.632443074024206,18.63243036588302,18.63241797544447,18.63239986634033,18.63237985101247,18.632360153385907,18.63234013805335,18.632316627977197,18.632293117897774,18.632269607815108,18.632246097729183,18.632220999120364,18.63219558280385,18.632173978931824,18.632152375057036,18.63213235970002,18.632112344340644,18.632096141428953,18.632081844740867,18.63207104279797,18.63206182937554,18.632052933656862,18.63204562645903,18.632031329766694,18.632018621594735,18.632005913421807,18.631991299021777,18.631982403299407,18.631980497073133,18.631973507576568,18.631969695123786,18.631966200375327,18.631964294148858,18.631960799400286,18.631960799400286,18.63195698694721,18.63195349219848,18.631946184996373,18.63194269024743,18.631938877793935,18.631938877793935,18.631938877793935\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002274.03200205415487,74.03191220015286,74.0318588912487,74.0318189933896,74.03176736086607,74.03171002864838,74.03165470808744,74.03160709887744,74.03155580163002,74.03151389211416,74.03146594762802,74.03142236173153,74.0313821285963,74.03132680803537,74.03127919882536,74.03122957795858,74.03118766844273,74.03114944696428,74.03111156076193,74.03107702732086,74.03105221688747,74.03102573007345,74.03100829571486,74.03098952025177,74.03097610920668,74.03096470981836,74.03095498681068,74.03095129877329,74.03095129877329,74.03096068650486,74.03097778558731,74.03099521994591,74.03102170675993,74.03104450553656,74.03106361627579,74.03107702732086,74.03109043836594,74.03109982609749,74.03110954910517,74.03112094849348,74.03113804757595,74.03116654604673,74.0312010794878,74.03124298900366,74.03127551078796,74.03130769729616,74.03133653104304,74.03136871755123,74.03141062706709,74.03145287185907,74.03149645775558,74.03153467923403,74.03156720101833,74.03160139918327,74.03163593262435,74.03166811913252,74.03169695287943,74.03173316270113,74.03176534920932,74.03180155903101,74.03183206915855,74.03186861425638,74.03189711272717,74.03192561119795,74.03194840997458,74.0319675207138,74.03198461979628,74.03199803084135,74.03200775384903,74.03201714158058,74.03203055262566,74.03204396367073,74.03206106275321,74.03207816183567,74.03209526091814,74.03210867196321,74.03212208300829,74.032137170434,74.03215058147907,74.03216198086739,74.03217170387506,74.03217941522598,74.03218511492014,74.03219249099493,74.03219819068909,74.03220221400261,74.03220221400261,74.03220422565938,74.03220422565938,74.03220422565938,74.03220422565938,74.03220422565938,74.03220422565938,74.03220422565938,74.03220422565938,74.03220422565938,74.03219819068909,74.03219450265169,74.03218880295753,74.03218109160662,74.03217539191247,74.03216768056154,74.03215829282999,74.03214890509844,74.03214119374752,74.03213549405336,74.03212778270245,74.03212007135153,74.03211437165737,74.03210666030645,74.03209928423166,74.03209358453752,74.03208956122398,74.03208788484335,74.03208386152983,74.03207615017891,74.03206877410412,74.03206307440996,74.03205536305904,74.03205167502163,74.03204765170813,74.03204564005136,74.03204195201397,74.03203994035721,74.03203826397657,74.03203826397657,74.03203424066305,74.03203424066305,74.03203055262566,74.0320248529315,74.03201512992382,74.03200943022966,74.03200775384903,74.03200775384903\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 1568115921865,\\n \\\u0022PositionLatitude\\\u0022: 18.632475,\\n \\\u0022PositionLongitude\\\u0022: 74.031782,\\n \\\u0022Speed\\\u0022: 0.05,\\n \\\u0022Status\\\u0022: 1,\\n \\\u0022Street\\\u0022: \\\u0022Loni Kand\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 13,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Maharashtra\\\u0022,\\n \\\u0022TractorID\\\u0022: 502142,\\n \\\u0022TractorModelID\\\u0022: 3,\\n \\\u0022TractorName\\\u0022: \\\u0022JD INDIA TEST 3\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 16:01:21\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d77739348201157f63b687a\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022JDR-003-IN\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-09-27T06:21:29.789Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-09-10T10:01:42.407Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022PrevTempFuelData\\\u0022: [\\n {\\n \\\u0022FuelLitres\\\u0022: 64,\\n \\\u0022FuelVolume\\\u0022: 100,\\n \\\u0022FuelRawValue\\\u0022: 1216,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-01 04:59:36\\\u0022\\n }\\n ],\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 12\\n },\\n \\\u0022502143\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d9ea19520835325fa3a6600\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022FixedEngineHours\\\u0022: 775,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022Speed\\\u0022: 0.13,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 502143,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_568X\\\u0022,\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 568X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:40:14\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022Currency\\\u0022: null,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-10T03:12:21.465Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-10T03:12:21.465Z\\\u0022\\n },\\n \\\u0022EngineHours\\\u0022: 40,\\n \\\u0022TotalDistanceCovered\\\u0022: 188,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.821496,\\n \\\u0022PositionLongitude\\\u0022: 34.381559,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 12:21:30\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022Heading\\\u0022: 229,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022PrevTempFuelData\\\u0022: [\\n {\\n \\\u0022FuelLitres\\\u0022: 16,\\n \\\u0022FuelVolume\\\u0022: 25,\\n \\\u0022FuelRawValue\\\u0022: 6444,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:14:03\\\u0022\\n }\\n ],\\n \\\u0022FuelVolume\\\u0022: 24,\\n \\\u0022FuelLitres\\\u0022: 16,\\n \\\u0022LastMaintenanceNotificationEngineHours\\\u0022: 24\\n },\\n \\\u0022502144\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d9e2d5c0a08663e8d100ecc\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 11,\\n \\\u0022FixedEngineHours\\\u0022: 645,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.821522,\\n \\\u0022PositionLongitude\\\u0022: 34.381578,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalDistanceCovered\\\u0022: 73,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 502144,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_479X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:55:58\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 479X\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-09T18:56:50.963Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-09T18:56:28.124Z\\\u0022\\n },\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 08:52:25\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022\\n },\\n \\\u0022502145\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d9ea4abeba6c6630a29dc10\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 96,\\n \\\u0022FixedEngineHours\\\u0022: 768,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Heading\\\u0022: 305,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 12:25:11\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.821506,\\n \\\u0022PositionLongitude\\\u0022: 34.381549,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 527,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022TractorID\\\u0022: 502145,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_472X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:40:20\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 472X\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-16T08:35:00.324Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-10T03:25:31.468Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022502146\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d9eaa5866e707056ab6ea8e\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022FixedEngineHours\\\u0022: 958,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 502146,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_474X\\\u0022,\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB_474X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:40:25\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022Currency\\\u0022: null,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-10T03:49:44.820Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-10T03:49:44.820Z\\\u0022\\n },\\n \\\u0022EngineHours\\\u0022: 172,\\n \\\u0022TotalDistanceCovered\\\u0022: 750,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.82155,\\n \\\u0022PositionLongitude\\\u0022: 34.381647,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 09:50:03\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 30,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022PrevTempFuelData\\\u0022: [\\n {\\n \\\u0022FuelLitres\\\u0022: 21,\\n \\\u0022FuelVolume\\\u0022: 33,\\n \\\u0022FuelRawValue\\\u0022: 6110,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:13:58\\\u0022\\n },\\n {\\n \\\u0022FuelLitres\\\u0022: 21,\\n \\\u0022FuelVolume\\\u0022: 33,\\n \\\u0022FuelRawValue\\\u0022: 6110,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:16:58\\\u0022\\n }\\n ],\\n \\\u0022FuelVolume\\\u0022: 36,\\n \\\u0022FuelLitres\\\u0022: 23\\n },\\n \\\u0022502147\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d9ea90381f5052a1072db99\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 181,\\n \\\u0022FixedEngineHours\\\u0022: 767,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 28,\\n \\\u0022FuelVolume\\\u0022: 43,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.821469,\\n \\\u0022PositionLongitude\\\u0022: 34.381515,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalDistanceCovered\\\u0022: 1055,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 502147,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_471X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:47:05\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB_471X\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-10T19:16:04.224Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-10T03:44:03.451Z\\\u0022\\n },\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-29 15:44:53\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022PrevTempFuelData\\\u0022: [\\n {\\n \\\u0022FuelLitres\\\u0022: 26,\\n \\\u0022FuelVolume\\\u0022: 40,\\n \\\u0022FuelRawValue\\\u0022: 5776,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:08:33\\\u0022\\n },\\n {\\n \\\u0022FuelLitres\\\u0022: 27,\\n \\\u0022FuelVolume\\\u0022: 41,\\n \\\u0022FuelRawValue\\\u0022: 5745,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:09:33\\\u0022\\n }\\n ],\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022LastWorkingHourNotificationTime\\\u0022: \\\u00222019-10-18T23:08:00.747Z\\\u0022\\n },\\n \\\u0022502148\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225da0257984f24176ca44a876\\\u0022,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022Currency\\\u0022: \\\u0022\\\u0022,\\n \\\u0022DailyTractorUpdates\\\u0022: false,\\n \\\u0022Efficiency\\\u0022: 0,\\n \\\u0022EngineHours\\\u0022: 135,\\n \\\u0022FixedEngineHours\\\u0022: 897,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022FuelLitres\\\u0022: 0,\\n \\\u0022FuelVolume\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 12:22:23\\\u0022,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022OperatorID\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.821523,\\n \\\u0022PositionLongitude\\\u0022: 34.381647,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022TotalDistanceCovered\\\u0022: 659,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022TractorID\\\u0022: 502148,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_491X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:45:08\\\u0022,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022WasImmobilized\\\u0022: false,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 491X\\\u0022,\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-16T08:36:26.228Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-11T06:47:21.415Z\\\u0022\\n },\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022FuelLevelVoltage\\\u0022: 0\\n },\\n \\\u0022502149\\\u0022: {\\n \\\u0022_id\\\u0022: \\\u00225d9ea21c0846cb54f8db3c7b\\\u0022,\\n \\\u0022BookingRequests\\\u0022: true,\\n \\\u0022Characteristic\\\u0022: \\\u0022102\\\u0022,\\n \\\u0022FixedEngineHours\\\u0022: 732,\\n \\\u0022FixedOdometerReading\\\u0022: 0,\\n \\\u0022Group\\\u0022: \\\u0022RentCo\\\u0022,\\n \\\u0022Latitude\\\u0022: \\\u0022-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214248572859018,-0.8214272039776164,-0.8214298859109773,-0.8214329030860226,-0.8214352497777118,-0.8214379317110727,-0.8214406136444335,-0.8214432955777945,-0.8214453070278247,-0.8214473184778421,-0.8214500004111903,-0.8214513413778771,-0.8214533528278946,-0.8214556995195711,-0.8214577109695885,-0.8214603929029367,-0.8214627395946259,-0.8214654215279613,-0.8214681034613095,-0.8214707853946577,-0.8214734673279931,-0.8214761492613285,-0.8214795016780074,-0.8214821836113428,-0.8214855360280089,-0.8214885532030034,-0.8214915703779978,-0.8214942523113204,-0.821497269486315,-0.8215009571446273,-0.8215043095612807,-0.8215076619779341,-0.8215110143945747,-0.8215140315695565,-0.8215170487445381,-0.8215204011611661,-0.8215230830944761,-0.8215261002694451,-0.821529117444414,-0.821532134619383,-0.8215351517943393,-0.8215381689692955,-0.8215408509025928,-0.8215442033192081,-0.8215462147691873,-0.8215488967024719,-0.8215512433940975,-0.821553254844064,-0.8215549310523717,-0.8215562720190076,-0.8215576129856562,-0.8215586187106332,-0.8215596244356101,-0.8215606301605998,-0.8215623063688947,-0.8215633120938716,-0.8215643178188613,-0.8215653235438382,-0.8215666645104741,-0.8215669997521331,-0.8215680054771101,-0.821568340718769,-0.8215696816854177,-0.8215703521687356,-0.8215713578937125,-0.8215720283770305,-0.8215726988603484,-0.8215733693436664,-0.8215737045853254,-0.8215737045853254,-0.8215740398269844,-0.8215743750686434,-0.8215750455519614,-0.8215753807936202,-0.8215757160352792,-0.8215763865185972,-0.8215770570019152,-0.8215777274852332,-0.8215783979685511,-0.821579068451869,-0.821579068451869,-0.821579068451869,-0.8215797389351743,-0.8215797389351743,-0.821580074176846,-0.8215797389351743,-0.821580074176846,-0.8215804094184922,-0.821580744660164,-0.8215810799018102,-0.8215814151434692,-0.8215820856267871,-0.8215820856267871,-0.8215824208684461,-0.8215827561101051,-0.8215830913517641,-0.8215830913517641,-0.8215834265934231,-0.8215834265934231,-0.8215840970767411,-0.8215837618350821,-0.8215837618350821,-0.8215837618350821,-0.8215834265934231,-0.8215830913517641,-0.8215827561101051,-0.8215824208684461,-0.8215820856267871,-0.8215814151434692,-0.8215810799018102,-0.8215797389351743,-0.821579068451869,-0.821579068451869,-0.8215780627268922,-0.8215777274852332,-0.8215770570019152,-0.8215767217602562,-0.8215763865185972,-0.8215760512769382,-0.8215757160352792,-0.8215757160352792,-0.8215750455519614,-0.8215747103103024,-0.8215743750686434,-0.8215737045853254,-0.8215733693436664,-0.8215723636186895,-0.8215713578937125,-0.8215700169270767,-0.821568340718769,-0.8215663292688151,-0.8215646530605075,-0.8215623063688947,-0.8215592891939512,-0.8215566072606666,-0.8215529196024051,-0.8215492319441309,-0.8215455442858567,-0.8215411861442518,-0.8215381689692955,-0.8215341460693496,-0.8215304584110626,-0.821526770752763,-0.8215224126111454,-0.8215190601945175,-0.8215150372945461,-0.8215110143945747,-0.8215069914946034,-0.821502968594632,-0.8214996161779786,-0.8214962637613252,-0.8214922408613284,-0.8214885532030034,-0.8214841950613349,-0.8214798369196663,-0.8214751435363261,-0.8214704501529859,-0.8214654215279613,-0.821460057661265,-0.8214546937945687,-0.8214489946861879,-0.8214443013028095,-0.8214392726777595,-0.8214352497777118,-0.8214315621193358,-0.8214285449442905,-0.8214261982525886,-0.8214245220442301,-0.8214235163192277,-0.821423181077556,-0.821423181077556,-0.821423181077556,-0.8214228458358716,-0.8214228458358716,-0.8214225105941999,-0.8214225105941999,-0.8214221753525281,-0.8214218401108565,-0.8214211696275131,-0.8214211696275131,-0.8214211696275131,-0.8214204991441697,-0.8214204991441697,-0.8214198286608263,-0.8214191581774829,-0.8214191581774829,-0.8214191581774829,-0.8214184876941395,-0.8214184876941395,-0.8214184876941395,-0.8214191581774829,-0.8214194934191545,-0.8214198286608263,-0.8214204991441697,-0.8214215048691847,-0.8214221753525281,-0.8214225105941999,-0.8214225105941999,-0.8214228458358716,-0.8214228458358716,-0.8214228458358716,-0.821423181077556,-0.821423181077556,-0.8214235163192277,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994,-0.8214238515608994\\\u0022,\\n \\\u0022Longitude\\\u0022: \\\u002234.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.38148085027933,34.381479509174824,34.38147883862257,34.38147749751806,34.38147682696581,34.381476156413555,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.38147582113743,34.381476156413555,34.381476491689675,34.38147682696581,34.38147749751806,34.38147749751806,34.381478168070316,34.381478168070316,34.38147883862257,34.381479509174824,34.38147984445095,34.381480515003204,34.38148085027933,34.381481520831585,34.38148219138384,34.38148219138384,34.381482526659966,34.38148319721222,34.38148319721222,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148353248835,34.38148319721222,34.38148286193609,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148219138384,34.38148185610771,34.38148185610771,34.381481520831585,34.381481520831585,34.38148118555546,34.38148118555546,34.38148085027933,34.38148085027933,34.38148085027933,34.381480515003204,34.38148017972707,34.38148017972707,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38147984445095,34.38148085027933,34.38148085027933,34.38148185610771,34.38148319721222,34.38148487359285,34.38148822635412,34.38149090856313,34.381494261324406,34.381497614085674,34.38150096684694,34.381504990160465,34.38150901347398,34.38151236623526,34.381516724824905,34.38152108341455,34.381526447832584,34.38153114169836,34.38153650611639,34.38154220581055,34.3815479055047,34.38155360519886,34.381559640169144,34.3815653398633,34.38157103955746,34.381576739251614,34.38158243894577,34.38158880919218,34.38159517943859,34.38160087913275,34.381606578826904,34.381612278521054,34.381617307662964,34.381622672080994,34.38162703067064,34.38163138926029,34.381635412573814,34.38163876533508,34.381642788648605,34.381646141409874,34.38164949417114,34.38165284693241,34.38165552914142,34.381657876074314,34.381659887731075,34.38166122883558,34.38166290521622,34.38166458159685,34.38166558742523,34.38166692852974,34.381667599081986,34.381668604910374,34.38166927546263,34.38166994601488,34.38167028129101,34.38167095184326,34.381671622395515,34.38167229294777,34.38167296350002,34.38167329877616,34.38167363405228,34.3816739693284,34.3816739693284,34.38167430460453,34.38167430460453,34.381674639880664,34.381674975156784,34.381674975156784,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.38167531043291,34.381674975156784,34.381674975156784,34.38167430460453,34.38167430460453,34.3816739693284,34.3816739693284,34.38167363405228,34.38167296350002,34.381672628223896,34.38167195767164,34.381671622395515,34.38167028129101,34.38166927546263,34.38166826963425,34.38166692852974,34.38166625797748,34.381665252149105,34.38166491687298,34.381664246320724,34.381664246320724,34.38166357576847,34.38166357576847,34.381663240492344,34.381663240492344,34.381663240492344,34.38166290521622,34.38166256994008,34.38166189938784,34.38165921717882,34.38165687024593,34.38165418803692,34.38165049999952,34.38164681196213,34.38164245337248,34.38163742423057,34.38163172453642,34.38162501901388,34.38161797821522,34.38161060214043,34.38160389661789,34.38159652054309,34.38159015029669,34.38158344477416,34.38157640397549,34.38156936317682,34.381561651825905,34.38155394047499,34.38154522329569,34.381537176668644,34.3815291300416,34.38152175396681,34.38151504844427,34.38150331377983,34.38149895519018,34.38149560242891,34.38149157911539,34.38148755580187,34.3814842030406,34.38148185610771,34.38147984445095,34.38147883862257,34.38147783279419,34.381478168070316\\\u0022,\\n \\\u0022Speed\\\u0022: 0,\\n \\\u0022Status\\\u0022: 0,\\n \\\u0022TotalHectaresTilled\\\u0022: null,\\n \\\u0022TractorID\\\u0022: 502149,\\n \\\u0022TractorModelID\\\u0022: 46,\\n \\\u0022TractorName\\\u0022: \\\u0022KTCB_473X\\\u0022,\\n \\\u0022license_plate_number\\\u0022: \\\u0022KTCB 473X\\\u0022,\\n \\\u0022UpdatedAt\\\u0022: \\\u00222019-10-30 15:39:21\\\u0022,\\n \\\u0022NeedToSendGeofenceOutNotification\\\u0022: true,\\n \\\u0022LastGeofenceNotificationTime\\\u0022: \\\u0022\\\u0022,\\n \\\u0022WasInArea\\\u0022: true,\\n \\\u0022Currency\\\u0022: null,\\n \\\u0022_acl\\\u0022: {\\n \\\u0022creator\\\u0022: \\\u00225d5ff918ecc87c44b9752888\\\u0022\\n },\\n \\\u0022_kmd\\\u0022: {\\n \\\u0022lmt\\\u0022: \\\u00222019-10-10T03:14:36.488Z\\\u0022,\\n \\\u0022ect\\\u0022: \\\u00222019-10-10T03:14:36.488Z\\\u0022\\n },\\n \\\u0022EngineHours\\\u0022: 113,\\n \\\u0022TotalDistanceCovered\\\u0022: 585,\\n \\\u0022UtcOffset\\\u0022: 0,\\n \\\u0022ActiveTimeToday\\\u0022: 0,\\n \\\u0022PositionLatitude\\\u0022: -0.821565,\\n \\\u0022PositionLongitude\\\u0022: 34.381625,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-30 09:49:33\\\u0022,\\n \\\u0022FuelRawValue\\\u0022: 0,\\n \\\u0022IgnitionStatus\\\u0022: 0,\\n \\\u0022AssetState\\\u0022: \\\u0022Off\\\u0022,\\n \\\u0022Heading\\\u0022: 0,\\n \\\u0022FuelLevelVoltage\\\u0022: 0,\\n \\\u0022Street\\\u0022: \\\u0022Otange\\\u0022,\\n \\\u0022Town\\\u0022: \\\u0022Homa Bay\\\u0022,\\n \\\u0022Country\\\u0022: \\\u0022Kenya\\\u0022,\\n \\\u0022PrevTempFuelData\\\u0022: [\\n {\\n \\\u0022FuelLitres\\\u0022: 35,\\n \\\u0022FuelVolume\\\u0022: 55,\\n \\\u0022FuelRawValue\\\u0022: 5137,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:12:35\\\u0022\\n },\\n {\\n \\\u0022FuelLitres\\\u0022: 35,\\n \\\u0022FuelVolume\\\u0022: 55,\\n \\\u0022FuelRawValue\\\u0022: 5137,\\n \\\u0022LastActiveTime\\\u0022: \\\u00222019-10-14 13:17:35\\\u0022\\n }\\n ],\\n \\\u0022FuelVolume\\\u0022: 54,\\n \\\u0022FuelLitres\\\u0022: 35\\n }\\n};\\n\\nfunction onRequest(request, response, modules) {\\n var tractorDetailCol = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var countTractors = 0;\\n tractorDetailCol.find({Latitude: {$lte: 999999999999}}, function(tractorDetailErr, tractorDetailList){\\n if (tractorDetailList \u0026\u0026 tractorDetailList.length \u003E 0){\\n modules.logger.info(\\\u0022Count tractors found: \\\u0022\u002BtractorDetailList.length);\\n countTractors = tractorDetailList.length;\\n updateGeofenceData(tractorDetailList);\\n } else {\\n modules.logger.info(\\\u0022Tractors not found: \\\u0022\u002BtractorDetailErr);\\n response.complete();\\n }\\n });\\n\\n var updateGeofenceData = function(tractorDetailList){\\n tractorDetailList.forEach(function(tractor){\\n var latitude = tractorDetailDocs[tractor.TractorID]? tractorDetailDocs[tractor.TractorID].Latitude: \\\u0022\\\u0022;\\n var longitude = tractorDetailDocs[tractor.TractorID]? tractorDetailDocs[tractor.TractorID].Longitude: \\\u0022\\\u0022;\\n tractorDetailCol.update({TractorID: tractor.TractorID}, {$set: {Latitude: latitude, Longitude: longitude}}, {upsert: false}, function(tractorDetailUpdateErr, tractorDetailUpdate){\\n countTractors--;\\n finish();\\n })\\n });\\n }\\n\\n\\n var finish = function(){\\n if (countTractors \u003C= 0) response.complete();\\n }\\n}\u0022\r\n },\r\n \u0022__updateTractorActiveTimeToday\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n const Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n const requestBody = request.body;\\n \\n if(requestBody.totalActiveTime \u0026\u0026 requestBody.tractorId ){\\n \\n const TractorId = Number(requestBody.tractorId);\\n \\n Tractor.findOne({TractorID: TractorId}, function(err, tractor){\\n \\n if( tractor.TractorID ){\\n \\n var update = {};\\n \\n update.ActiveTimeToday = requestBody.totalActiveTime \u002B tractor.ActiveTimeToday;\\n \\n Tractor.update({TractorID: TractorId}, { $set: update }, function(err, tractor){\\n if(err){\\n modules.logger.info(\u0027There was an error updating the ActiveTimeToday for the tractor with the ID of \u0027 \u002B requestBody.tractorId )\\n } else {\\n modules.logger.info(\u0027Successfully updated ActiveTimeToday for the tractor with the ID of \u0027 \u002B requestBody.tractorId);\\n }\\n });\\n\\n\\n } else {\\n modules.logger.info(\\\u0022request body not valid \\\u0022 \u002B TractorId);\\n }\\n response.complete();\\n });\\n \\n } else {\\n response.complete();\\n }\\n \\n}\u0022\r\n },\r\n \u0022__updateTractorDetailProps\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n const Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n// const tractorUpdateObj = request.body;\\n// const latitude = tractorUpdateObj.latitude;\\n// const longitude = tractorUpdateObj.longitude;\\n// const tractorId = Number(tractorUpdateObj.tracker_id);\\n \\n var tractorLatLngs = [\\n {\\n \\\u0022tracker_id\\\u0022: 500505,\\n \\\u0022latitude\\\u0022: 6.884975,\\n \\\u0022longitude\\\u0022: 5.597989\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500254,\\n \\\u0022latitude\\\u0022: 7.312169,\\n \\\u0022longitude\\\u0022: 2.622873\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500515,\\n \\\u0022latitude\\\u0022: -25.805806,\\n \\\u0022longitude\\\u0022: 29.462471\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500510,\\n \\\u0022latitude\\\u0022: -3.352464,\\n \\\u0022longitude\\\u0022: 36.600405\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500507,\\n \\\u0022latitude\\\u0022: -3.387299,\\n \\\u0022longitude\\\u0022: 36.826538\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500508,\\n \\\u0022latitude\\\u0022: -3.352404,\\n \\\u0022longitude\\\u0022: 36.600412\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500509,\\n \\\u0022latitude\\\u0022: -13.384611,\\n \\\u0022longitude\\\u0022: 38.444872\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500513,\\n \\\u0022latitude\\\u0022: 16.242103,\\n \\\u0022longitude\\\u0022: -16.213526\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500514,\\n \\\u0022latitude\\\u0022: 16.242301,\\n \\\u0022longitude\\\u0022: -16.213437\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500511,\\n \\\u0022latitude\\\u0022: 16.242283,\\n \\\u0022longitude\\\u0022: -16.2134\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500173,\\n \\\u0022latitude\\\u0022: 11.971961,\\n \\\u0022longitude\\\u0022: 8.552116\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500046,\\n \\\u0022latitude\\\u0022: 10.458646,\\n \\\u0022longitude\\\u0022: 5.396463\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500182,\\n \\\u0022latitude\\\u0022: 6.526587,\\n \\\u0022longitude\\\u0022: 7.008525\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500021,\\n \\\u0022latitude\\\u0022: 8.480871,\\n \\\u0022longitude\\\u0022: 8.27575\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500139,\\n \\\u0022latitude\\\u0022: 8.601165,\\n \\\u0022longitude\\\u0022: 8.855734\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500174,\\n \\\u0022latitude\\\u0022: 11.602879,\\n \\\u0022longitude\\\u0022: 8.430377\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500007,\\n \\\u0022latitude\\\u0022: 8.422942,\\n \\\u0022longitude\\\u0022: 9.907139\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500193,\\n \\\u0022latitude\\\u0022: 8.536153,\\n \\\u0022longitude\\\u0022: 7.711876\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500134,\\n \\\u0022latitude\\\u0022: 11.010661,\\n \\\u0022longitude\\\u0022: 7.986521\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500068,\\n \\\u0022latitude\\\u0022: 8.890303,\\n \\\u0022longitude\\\u0022: 6.624013\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500060,\\n \\\u0022latitude\\\u0022: 11.08011,\\n \\\u0022longitude\\\u0022: 7.702034\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500135,\\n \\\u0022latitude\\\u0022: 8.508601,\\n \\\u0022longitude\\\u0022: 8.528064\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500052,\\n \\\u0022latitude\\\u0022: 11.080558,\\n \\\u0022longitude\\\u0022: 7.702229\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500136,\\n \\\u0022latitude\\\u0022: 8.258436,\\n \\\u0022longitude\\\u0022: 8.019063\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500027,\\n \\\u0022latitude\\\u0022: 11.73358,\\n \\\u0022longitude\\\u0022: 8.45314\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500077,\\n \\\u0022latitude\\\u0022: 8.644695,\\n \\\u0022longitude\\\u0022: 8.978349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500137,\\n \\\u0022latitude\\\u0022: 8.55845,\\n \\\u0022longitude\\\u0022: 8.858083\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500016,\\n \\\u0022latitude\\\u0022: 8.34517,\\n \\\u0022longitude\\\u0022: 7.603384\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500125,\\n \\\u0022latitude\\\u0022: 11.972033,\\n \\\u0022longitude\\\u0022: 8.55223\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500113,\\n \\\u0022latitude\\\u0022: 8.913446,\\n \\\u0022longitude\\\u0022: 7.260764\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500175,\\n \\\u0022latitude\\\u0022: 11.602758,\\n \\\u0022longitude\\\u0022: 8.430458\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500078,\\n \\\u0022latitude\\\u0022: 8.893536,\\n \\\u0022longitude\\\u0022: 6.623393\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500161,\\n \\\u0022latitude\\\u0022: 11.068763,\\n \\\u0022longitude\\\u0022: 7.956371\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500023,\\n \\\u0022latitude\\\u0022: 11.080688,\\n \\\u0022longitude\\\u0022: 7.702147\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500097,\\n \\\u0022latitude\\\u0022: 7.418939,\\n \\\u0022longitude\\\u0022: 3.969904\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500154,\\n \\\u0022latitude\\\u0022: 7.419085,\\n \\\u0022longitude\\\u0022: 3.969702\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500073,\\n \\\u0022latitude\\\u0022: 8.800957,\\n \\\u0022longitude\\\u0022: 6.455364\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500083,\\n \\\u0022latitude\\\u0022: 8.546713,\\n \\\u0022longitude\\\u0022: 10.368346\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500176,\\n \\\u0022latitude\\\u0022: 11.625834,\\n \\\u0022longitude\\\u0022: 7.843014\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500035,\\n \\\u0022latitude\\\u0022: 8.480882,\\n \\\u0022longitude\\\u0022: 8.275669\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500120,\\n \\\u0022latitude\\\u0022: 8.933661,\\n \\\u0022longitude\\\u0022: 11.188147\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500037,\\n \\\u0022latitude\\\u0022: 11.08032,\\n \\\u0022longitude\\\u0022: 7.702257\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500008,\\n \\\u0022latitude\\\u0022: 8.551616,\\n \\\u0022longitude\\\u0022: 7.716387\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500072,\\n \\\u0022latitude\\\u0022: 8.34787,\\n \\\u0022longitude\\\u0022: 7.605445\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500003,\\n \\\u0022latitude\\\u0022: 10.349426,\\n \\\u0022longitude\\\u0022: 5.611341\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500018,\\n \\\u0022latitude\\\u0022: 11.034258,\\n \\\u0022longitude\\\u0022: 7.915281\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500148,\\n \\\u0022latitude\\\u0022: 8.508603,\\n \\\u0022longitude\\\u0022: 8.528061\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500047,\\n \\\u0022latitude\\\u0022: 8.92809,\\n \\\u0022longitude\\\u0022: 6.511429\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500036,\\n \\\u0022latitude\\\u0022: 11.080229,\\n \\\u0022longitude\\\u0022: 7.702016\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500194,\\n \\\u0022latitude\\\u0022: 11.080917,\\n \\\u0022longitude\\\u0022: 7.702177\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500061,\\n \\\u0022latitude\\\u0022: 10.391444,\\n \\\u0022longitude\\\u0022: 5.180652\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500006,\\n \\\u0022latitude\\\u0022: 8.480943,\\n \\\u0022longitude\\\u0022: 8.275697\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500019,\\n \\\u0022latitude\\\u0022: 11.712049,\\n \\\u0022longitude\\\u0022: 8.423292\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500026,\\n \\\u0022latitude\\\u0022: 13.307825,\\n \\\u0022longitude\\\u0022: 5.476278\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500122,\\n \\\u0022latitude\\\u0022: 7.419042,\\n \\\u0022longitude\\\u0022: 3.969748\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500150,\\n \\\u0022latitude\\\u0022: 8.602219,\\n \\\u0022longitude\\\u0022: 8.858131\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500031,\\n \\\u0022latitude\\\u0022: 11.602898,\\n \\\u0022longitude\\\u0022: 8.430468\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500157,\\n \\\u0022latitude\\\u0022: 10.698078,\\n \\\u0022longitude\\\u0022: 7.757339\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500158,\\n \\\u0022latitude\\\u0022: 9.960288,\\n \\\u0022longitude\\\u0022: 7.415821\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500028,\\n \\\u0022latitude\\\u0022: 8.925388,\\n \\\u0022longitude\\\u0022: 7.185961\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500071,\\n \\\u0022latitude\\\u0022: 11.798512,\\n \\\u0022longitude\\\u0022: 8.459341\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500181,\\n \\\u0022latitude\\\u0022: 10.420686,\\n \\\u0022longitude\\\u0022: 7.674611\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500126,\\n \\\u0022latitude\\\u0022: 11.797149,\\n \\\u0022longitude\\\u0022: 8.438593\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500063,\\n \\\u0022latitude\\\u0022: 8.890299,\\n \\\u0022longitude\\\u0022: 6.623912\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500062,\\n \\\u0022latitude\\\u0022: 8.437623,\\n \\\u0022longitude\\\u0022: 7.281523\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500119,\\n \\\u0022latitude\\\u0022: 9.565138,\\n \\\u0022longitude\\\u0022: 4.030496\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500093,\\n \\\u0022latitude\\\u0022: 11.571832,\\n \\\u0022longitude\\\u0022: 8.442599\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500051,\\n \\\u0022latitude\\\u0022: 11.080136,\\n \\\u0022longitude\\\u0022: 7.701998\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500160,\\n \\\u0022latitude\\\u0022: 8.388189,\\n \\\u0022longitude\\\u0022: 10.513968\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500192,\\n \\\u0022latitude\\\u0022: 8.273487,\\n \\\u0022longitude\\\u0022: 7.716336\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500000,\\n \\\u0022latitude\\\u0022: 8.627517,\\n \\\u0022longitude\\\u0022: 8.894382\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500022,\\n \\\u0022latitude\\\u0022: 8.819435,\\n \\\u0022longitude\\\u0022: 6.782732\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500100,\\n \\\u0022latitude\\\u0022: 11.079476,\\n \\\u0022longitude\\\u0022: 7.701245\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500102,\\n \\\u0022latitude\\\u0022: 11.895426,\\n \\\u0022longitude\\\u0022: 8.892688\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500133,\\n \\\u0022latitude\\\u0022: 11.034408,\\n \\\u0022longitude\\\u0022: 7.915312\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500153,\\n \\\u0022latitude\\\u0022: 7.012537,\\n \\\u0022longitude\\\u0022: 2.944562\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500098,\\n \\\u0022latitude\\\u0022: 12.660385,\\n \\\u0022longitude\\\u0022: 5.934873\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500140,\\n \\\u0022latitude\\\u0022: 11.080253,\\n \\\u0022longitude\\\u0022: 7.702235\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500143,\\n \\\u0022latitude\\\u0022: 8.522894,\\n \\\u0022longitude\\\u0022: 7.707738\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500080,\\n \\\u0022latitude\\\u0022: 7.917429,\\n \\\u0022longitude\\\u0022: 8.321569\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500163,\\n \\\u0022latitude\\\u0022: 11.1355,\\n \\\u0022longitude\\\u0022: 7.865355\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500132,\\n \\\u0022latitude\\\u0022: 11.080407,\\n \\\u0022longitude\\\u0022: 7.702009\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500117,\\n \\\u0022latitude\\\u0022: 12.333469,\\n \\\u0022longitude\\\u0022: 9.675397\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500004,\\n \\\u0022latitude\\\u0022: 11.034138,\\n \\\u0022longitude\\\u0022: 7.91556\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500129,\\n \\\u0022latitude\\\u0022: 9.979596,\\n \\\u0022longitude\\\u0022: 5.805815\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500091,\\n \\\u0022latitude\\\u0022: 7.419631,\\n \\\u0022longitude\\\u0022: 3.969553\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500149,\\n \\\u0022latitude\\\u0022: 11.080203,\\n \\\u0022longitude\\\u0022: 7.702206\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500012,\\n \\\u0022latitude\\\u0022: 8.695756,\\n \\\u0022longitude\\\u0022: 8.039841\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500042,\\n \\\u0022latitude\\\u0022: 8.43579,\\n \\\u0022longitude\\\u0022: 7.574201\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500156,\\n \\\u0022latitude\\\u0022: 11.972212,\\n \\\u0022longitude\\\u0022: 8.552381\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500179,\\n \\\u0022latitude\\\u0022: 7.917461,\\n \\\u0022longitude\\\u0022: 8.32151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500070,\\n \\\u0022latitude\\\u0022: 8.8903,\\n \\\u0022longitude\\\u0022: 6.623988\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500015,\\n \\\u0022latitude\\\u0022: 8.561133,\\n \\\u0022longitude\\\u0022: 7.723224\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500183,\\n \\\u0022latitude\\\u0022: 12.682007,\\n \\\u0022longitude\\\u0022: 6.078685\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500118,\\n \\\u0022latitude\\\u0022: 7.91743,\\n \\\u0022longitude\\\u0022: 8.321412\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500064,\\n \\\u0022latitude\\\u0022: 11.080623,\\n \\\u0022longitude\\\u0022: 7.702288\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500177,\\n \\\u0022latitude\\\u0022: 8.860674,\\n \\\u0022longitude\\\u0022: 6.611838\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500101,\\n \\\u0022latitude\\\u0022: 11.024207,\\n \\\u0022longitude\\\u0022: 7.939708\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500108,\\n \\\u0022latitude\\\u0022: 8.220522,\\n \\\u0022longitude\\\u0022: 9.340078\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500107,\\n \\\u0022latitude\\\u0022: 7.890175,\\n \\\u0022longitude\\\u0022: 8.339797\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500050,\\n \\\u0022latitude\\\u0022: 8.580758,\\n \\\u0022longitude\\\u0022: 7.745837\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500124,\\n \\\u0022latitude\\\u0022: 7.419777,\\n \\\u0022longitude\\\u0022: 3.96964\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500043,\\n \\\u0022latitude\\\u0022: 11.798249,\\n \\\u0022longitude\\\u0022: 8.459482\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500014,\\n \\\u0022latitude\\\u0022: 10.204976,\\n \\\u0022longitude\\\u0022: 5.400949\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500030,\\n \\\u0022latitude\\\u0022: 7.879846,\\n \\\u0022longitude\\\u0022: 8.312233\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500142,\\n \\\u0022latitude\\\u0022: 11.041272,\\n \\\u0022longitude\\\u0022: 8.148058\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500141,\\n \\\u0022latitude\\\u0022: 11.602513,\\n \\\u0022longitude\\\u0022: 8.432604\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500144,\\n \\\u0022latitude\\\u0022: 8.173464,\\n \\\u0022longitude\\\u0022: 9.34809\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500001,\\n \\\u0022latitude\\\u0022: 10.341787,\\n \\\u0022longitude\\\u0022: 5.693926\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500116,\\n \\\u0022latitude\\\u0022: 10.20485,\\n \\\u0022longitude\\\u0022: 5.400701\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500127,\\n \\\u0022latitude\\\u0022: 7.917398,\\n \\\u0022longitude\\\u0022: 8.321531\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500145,\\n \\\u0022latitude\\\u0022: 9.580203,\\n \\\u0022longitude\\\u0022: 6.565326\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500002,\\n \\\u0022latitude\\\u0022: 8.553613,\\n \\\u0022longitude\\\u0022: 9.637882\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500164,\\n \\\u0022latitude\\\u0022: 8.685411,\\n \\\u0022longitude\\\u0022: 6.736864\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500044,\\n \\\u0022latitude\\\u0022: 8.536214,\\n \\\u0022longitude\\\u0022: 7.711847\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500045,\\n \\\u0022latitude\\\u0022: 11.0803,\\n \\\u0022longitude\\\u0022: 7.702188\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500106,\\n \\\u0022latitude\\\u0022: 7.418908,\\n \\\u0022longitude\\\u0022: 3.96987\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500165,\\n \\\u0022latitude\\\u0022: 8.963704,\\n \\\u0022longitude\\\u0022: 7.136177\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500081,\\n \\\u0022latitude\\\u0022: 8.868445,\\n \\\u0022longitude\\\u0022: 6.61377\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500104,\\n \\\u0022latitude\\\u0022: 8.422504,\\n \\\u0022longitude\\\u0022: 9.908294\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500039,\\n \\\u0022latitude\\\u0022: 8.745427,\\n \\\u0022longitude\\\u0022: 8.785342\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500011,\\n \\\u0022latitude\\\u0022: 10.387095,\\n \\\u0022longitude\\\u0022: 4.933553\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500029,\\n \\\u0022latitude\\\u0022: 10.204764,\\n \\\u0022longitude\\\u0022: 5.400668\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500054,\\n \\\u0022latitude\\\u0022: 8.893554,\\n \\\u0022longitude\\\u0022: 6.62339\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500112,\\n \\\u0022latitude\\\u0022: 8.496362,\\n \\\u0022longitude\\\u0022: 7.487645\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500010,\\n \\\u0022latitude\\\u0022: 8.78277,\\n \\\u0022longitude\\\u0022: 6.993573\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500086,\\n \\\u0022latitude\\\u0022: 10.391181,\\n \\\u0022longitude\\\u0022: 7.50905\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500065,\\n \\\u0022latitude\\\u0022: 8.239692,\\n \\\u0022longitude\\\u0022: 7.578694\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500169,\\n \\\u0022latitude\\\u0022: 11.602696,\\n \\\u0022longitude\\\u0022: 8.430342\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500089,\\n \\\u0022latitude\\\u0022: 8.536272,\\n \\\u0022longitude\\\u0022: 7.711891\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500048,\\n \\\u0022latitude\\\u0022: 8.255835,\\n \\\u0022longitude\\\u0022: 7.833428\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500025,\\n \\\u0022latitude\\\u0022: 10.36023,\\n \\\u0022longitude\\\u0022: 5.158688\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500049,\\n \\\u0022latitude\\\u0022: 8.563282,\\n \\\u0022longitude\\\u0022: 7.724901\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500170,\\n \\\u0022latitude\\\u0022: 11.972199,\\n \\\u0022longitude\\\u0022: 8.552336\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500090,\\n \\\u0022latitude\\\u0022: 8.508509,\\n \\\u0022longitude\\\u0022: 8.528125\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500094,\\n \\\u0022latitude\\\u0022: 8.829708,\\n \\\u0022longitude\\\u0022: 4.985909\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500171,\\n \\\u0022latitude\\\u0022: 11.972065,\\n \\\u0022longitude\\\u0022: 8.552265\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500099,\\n \\\u0022latitude\\\u0022: 9.894173,\\n \\\u0022longitude\\\u0022: 4.719688\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500041,\\n \\\u0022latitude\\\u0022: 11.080335,\\n \\\u0022longitude\\\u0022: 7.701987\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500172,\\n \\\u0022latitude\\\u0022: 11.038102,\\n \\\u0022longitude\\\u0022: 7.884785\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500159,\\n \\\u0022latitude\\\u0022: 7.980107,\\n \\\u0022longitude\\\u0022: 10.990652\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500128,\\n \\\u0022latitude\\\u0022: 11.972285,\\n \\\u0022longitude\\\u0022: 8.552422\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500033,\\n \\\u0022latitude\\\u0022: 8.662056,\\n \\\u0022longitude\\\u0022: 7.612756\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500184,\\n \\\u0022latitude\\\u0022: 10.832362,\\n \\\u0022longitude\\\u0022: 8.348079\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500115,\\n \\\u0022latitude\\\u0022: 8.524221,\\n \\\u0022longitude\\\u0022: 7.70807\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500058,\\n \\\u0022latitude\\\u0022: 11.080287,\\n \\\u0022longitude\\\u0022: 7.702008\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500069,\\n \\\u0022latitude\\\u0022: 11.080279,\\n \\\u0022longitude\\\u0022: 7.701986\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500114,\\n \\\u0022latitude\\\u0022: 8.699882,\\n \\\u0022longitude\\\u0022: 6.520428\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500095,\\n \\\u0022latitude\\\u0022: 11.602736,\\n \\\u0022longitude\\\u0022: 8.430467\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500178,\\n \\\u0022latitude\\\u0022: 8.357714,\\n \\\u0022longitude\\\u0022: 8.116371\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500024,\\n \\\u0022latitude\\\u0022: 11.0804,\\n \\\u0022longitude\\\u0022: 7.702219\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500013,\\n \\\u0022latitude\\\u0022: 8.50864,\\n \\\u0022longitude\\\u0022: 8.528042\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500009,\\n \\\u0022latitude\\\u0022: 8.495999,\\n \\\u0022longitude\\\u0022: 7.487392\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500085,\\n \\\u0022latitude\\\u0022: 9.110891,\\n \\\u0022longitude\\\u0022: 6.95535\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500066,\\n \\\u0022latitude\\\u0022: 10.307501,\\n \\\u0022longitude\\\u0022: 5.705054\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500034,\\n \\\u0022latitude\\\u0022: 11.034167,\\n \\\u0022longitude\\\u0022: 7.915306\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500151,\\n \\\u0022latitude\\\u0022: 8.892833,\\n \\\u0022longitude\\\u0022: 6.623491\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500109,\\n \\\u0022latitude\\\u0022: 11.602431,\\n \\\u0022longitude\\\u0022: 8.432735\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500079,\\n \\\u0022latitude\\\u0022: 11.080247,\\n \\\u0022longitude\\\u0022: 7.702301\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500084,\\n \\\u0022latitude\\\u0022: 10.40895,\\n \\\u0022longitude\\\u0022: 5.487319\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500075,\\n \\\u0022latitude\\\u0022: 11.080146,\\n \\\u0022longitude\\\u0022: 7.702151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500152,\\n \\\u0022latitude\\\u0022: 7.419003,\\n \\\u0022longitude\\\u0022: 3.969807\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500082,\\n \\\u0022latitude\\\u0022: 9.483487,\\n \\\u0022longitude\\\u0022: 6.445652\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500053,\\n \\\u0022latitude\\\u0022: 11.301605,\\n \\\u0022longitude\\\u0022: 7.892119\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500092,\\n \\\u0022latitude\\\u0022: 7.841815,\\n \\\u0022longitude\\\u0022: 10.969782\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500111,\\n \\\u0022latitude\\\u0022: 8.522769,\\n \\\u0022longitude\\\u0022: 7.707735\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500138,\\n \\\u0022latitude\\\u0022: 11.60287,\\n \\\u0022longitude\\\u0022: 8.430377\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500155,\\n \\\u0022latitude\\\u0022: 10.698229,\\n \\\u0022longitude\\\u0022: 7.757283\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500130,\\n \\\u0022latitude\\\u0022: 11.080216,\\n \\\u0022longitude\\\u0022: 7.702397\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500123,\\n \\\u0022latitude\\\u0022: 8.456565,\\n \\\u0022longitude\\\u0022: 6.370357\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500162,\\n \\\u0022latitude\\\u0022: 11.602726,\\n \\\u0022longitude\\\u0022: 8.430309\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500121,\\n \\\u0022latitude\\\u0022: 8.922995,\\n \\\u0022longitude\\\u0022: 7.2214\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500055,\\n \\\u0022latitude\\\u0022: 11.080324,\\n \\\u0022longitude\\\u0022: 7.701996\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500032,\\n \\\u0022latitude\\\u0022: 7.917607,\\n \\\u0022longitude\\\u0022: 8.321122\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500074,\\n \\\u0022latitude\\\u0022: 12.444311,\\n \\\u0022longitude\\\u0022: 10.02779\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500191,\\n \\\u0022latitude\\\u0022: 8.940539,\\n \\\u0022longitude\\\u0022: 7.101262\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500020,\\n \\\u0022latitude\\\u0022: 8.697809,\\n \\\u0022longitude\\\u0022: 6.507442\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500146,\\n \\\u0022latitude\\\u0022: 8.496071,\\n \\\u0022longitude\\\u0022: 7.508463\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500131,\\n \\\u0022latitude\\\u0022: 11.034194,\\n \\\u0022longitude\\\u0022: 7.91525\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500110,\\n \\\u0022latitude\\\u0022: 8.404822,\\n \\\u0022longitude\\\u0022: 8.369033\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500147,\\n \\\u0022latitude\\\u0022: 8.536062,\\n \\\u0022longitude\\\u0022: 7.711697\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500166,\\n \\\u0022latitude\\\u0022: 10.054241,\\n \\\u0022longitude\\\u0022: 7.384573\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500167,\\n \\\u0022latitude\\\u0022: 8.480397,\\n \\\u0022longitude\\\u0022: 8.276634\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500040,\\n \\\u0022latitude\\\u0022: 11.08061,\\n \\\u0022longitude\\\u0022: 7.702294\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500168,\\n \\\u0022latitude\\\u0022: 8.424789,\\n \\\u0022longitude\\\u0022: 9.906735\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500087,\\n \\\u0022latitude\\\u0022: 11.080266,\\n \\\u0022longitude\\\u0022: 7.701997\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500005,\\n \\\u0022latitude\\\u0022: 9.048041,\\n \\\u0022longitude\\\u0022: 6.589001\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500103,\\n \\\u0022latitude\\\u0022: 8.480931,\\n \\\u0022longitude\\\u0022: 8.275734\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500186,\\n \\\u0022latitude\\\u0022: 9.53503,\\n \\\u0022longitude\\\u0022: 7.473972\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500180,\\n \\\u0022latitude\\\u0022: 7.917482,\\n \\\u0022longitude\\\u0022: 8.321438\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500059,\\n \\\u0022latitude\\\u0022: 9.943256,\\n \\\u0022longitude\\\u0022: 5.298962\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500187,\\n \\\u0022latitude\\\u0022: 9.5466,\\n \\\u0022longitude\\\u0022: 7.484539\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500105,\\n \\\u0022latitude\\\u0022: 8.544959,\\n \\\u0022longitude\\\u0022: 7.87305\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500056,\\n \\\u0022latitude\\\u0022: 11.08014,\\n \\\u0022longitude\\\u0022: 7.701987\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500076,\\n \\\u0022latitude\\\u0022: 8.581881,\\n \\\u0022longitude\\\u0022: 9.55673\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500038,\\n \\\u0022latitude\\\u0022: 11.08023,\\n \\\u0022longitude\\\u0022: 7.702196\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501012,\\n \\\u0022latitude\\\u0022: 8.625798,\\n \\\u0022longitude\\\u0022: 8.94349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501003,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501013,\\n \\\u0022latitude\\\u0022: 11.57101,\\n \\\u0022longitude\\\u0022: 8.458457\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501015,\\n \\\u0022latitude\\\u0022: 10.349586,\\n \\\u0022longitude\\\u0022: 5.611397\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501018,\\n \\\u0022latitude\\\u0022: 9.671874,\\n \\\u0022longitude\\\u0022: 4.873864\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501044,\\n \\\u0022latitude\\\u0022: 11.036381,\\n \\\u0022longitude\\\u0022: 7.916113\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501045,\\n \\\u0022latitude\\\u0022: 11.162462,\\n \\\u0022longitude\\\u0022: 7.637909\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501005,\\n \\\u0022latitude\\\u0022: 8.402005,\\n \\\u0022longitude\\\u0022: 7.630519\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501024,\\n \\\u0022latitude\\\u0022: 10.768596,\\n \\\u0022longitude\\\u0022: 7.348975\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501030,\\n \\\u0022latitude\\\u0022: 8.881606,\\n \\\u0022longitude\\\u0022: 6.366108\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501034,\\n \\\u0022latitude\\\u0022: 11.079999,\\n \\\u0022longitude\\\u0022: 7.700239\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501047,\\n \\\u0022latitude\\\u0022: 11.366435,\\n \\\u0022longitude\\\u0022: 7.992652\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501041,\\n \\\u0022latitude\\\u0022: 11.382221,\\n \\\u0022longitude\\\u0022: 5.809122\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501009,\\n \\\u0022latitude\\\u0022: 10.249837,\\n \\\u0022longitude\\\u0022: 9.016772\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501020,\\n \\\u0022latitude\\\u0022: 8.464931,\\n \\\u0022longitude\\\u0022: 6.316599\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500568: 455R\\\u0022,\\n \\\u0022latitude\\\u0022: 0.087245,\\n \\\u0022longitude\\\u0022: 37.241478\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500543: 457R\\\u0022,\\n \\\u0022latitude\\\u0022: -2.543015,\\n \\\u0022longitude\\\u0022: 36.810093\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500556: 445Q\\\u0022,\\n \\\u0022latitude\\\u0022: -0.152343,\\n \\\u0022longitude\\\u0022: 34.845548\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500552: 452R\\\u0022,\\n \\\u0022latitude\\\u0022: 0.091876,\\n \\\u0022longitude\\\u0022: 37.519509\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500540: 456R\\\u0022,\\n \\\u0022latitude\\\u0022: -0.152405,\\n \\\u0022longitude\\\u0022: 34.845536\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500548: 458R\\\u0022,\\n \\\u0022latitude\\\u0022: -0.152401,\\n \\\u0022longitude\\\u0022: 34.845558\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500570: 454R\\\u0022,\\n \\\u0022latitude\\\u0022: -1.100384,\\n \\\u0022longitude\\\u0022: 35.842038\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022500558: 6130J\\\u0022,\\n \\\u0022latitude\\\u0022: -0.206931,\\n \\\u0022longitude\\\u0022: 35.197133\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500257,\\n \\\u0022latitude\\\u0022: 7.551164,\\n \\\u0022longitude\\\u0022: 3.665435\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500260,\\n \\\u0022latitude\\\u0022: 7.547904,\\n \\\u0022longitude\\\u0022: 3.665581\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500259,\\n \\\u0022latitude\\\u0022: 7.558659,\\n \\\u0022longitude\\\u0022: 3.660043\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500258,\\n \\\u0022latitude\\\u0022: 7.551205,\\n \\\u0022longitude\\\u0022: 3.66547\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500261,\\n \\\u0022latitude\\\u0022: 7.551145,\\n \\\u0022longitude\\\u0022: 3.665454\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500405,\\n \\\u0022latitude\\\u0022: 6.444139,\\n \\\u0022longitude\\\u0022: 6.909345\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500408,\\n \\\u0022latitude\\\u0022: 6.44415,\\n \\\u0022longitude\\\u0022: 6.909286\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500406,\\n \\\u0022latitude\\\u0022: 6.444124,\\n \\\u0022longitude\\\u0022: 6.909324\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500201,\\n \\\u0022latitude\\\u0022: -16.137947,\\n \\\u0022longitude\\\u0022: 39.274165\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500203,\\n \\\u0022latitude\\\u0022: -16.765758,\\n \\\u0022longitude\\\u0022: 37.03766\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500204,\\n \\\u0022latitude\\\u0022: -14.962177,\\n \\\u0022longitude\\\u0022: 40.065409\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500207,\\n \\\u0022latitude\\\u0022: -15.488097,\\n \\\u0022longitude\\\u0022: 36.980116\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500200,\\n \\\u0022latitude\\\u0022: -15.64724,\\n \\\u0022longitude\\\u0022: 37.680136\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500208,\\n \\\u0022latitude\\\u0022: -15.233272,\\n \\\u0022longitude\\\u0022: 37.616696\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500205,\\n \\\u0022latitude\\\u0022: -15.364279,\\n \\\u0022longitude\\\u0022: 36.804014\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500209,\\n \\\u0022latitude\\\u0022: -15.767657,\\n \\\u0022longitude\\\u0022: 39.311604\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500424,\\n \\\u0022latitude\\\u0022: 7.647134,\\n \\\u0022longitude\\\u0022: 4.165459\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500425,\\n \\\u0022latitude\\\u0022: 8.884847,\\n \\\u0022longitude\\\u0022: 9.730654\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500427,\\n \\\u0022latitude\\\u0022: 12.593142,\\n \\\u0022longitude\\\u0022: 8.45681\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500429,\\n \\\u0022latitude\\\u0022: 7.243985,\\n \\\u0022longitude\\\u0022: 5.209165\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500421,\\n \\\u0022latitude\\\u0022: 8.974948,\\n \\\u0022longitude\\\u0022: 9.808495\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500428,\\n \\\u0022latitude\\\u0022: 12.52125,\\n \\\u0022longitude\\\u0022: 10.283644\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500420,\\n \\\u0022latitude\\\u0022: 6.050031,\\n \\\u0022longitude\\\u0022: 7.564737\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500426,\\n \\\u0022latitude\\\u0022: 8.360764,\\n \\\u0022longitude\\\u0022: 11.091897\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500430,\\n \\\u0022latitude\\\u0022: 7.6471,\\n \\\u0022longitude\\\u0022: 4.16552\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500431,\\n \\\u0022latitude\\\u0022: 7.243988,\\n \\\u0022longitude\\\u0022: 5.209167\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500419,\\n \\\u0022latitude\\\u0022: 6.307893,\\n \\\u0022longitude\\\u0022: 8.155067\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500401,\\n \\\u0022latitude\\\u0022: 4.974961,\\n \\\u0022longitude\\\u0022: 7.883093\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500302,\\n \\\u0022latitude\\\u0022: 5.309688,\\n \\\u0022longitude\\\u0022: 7.887455\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500305,\\n \\\u0022latitude\\\u0022: 4.770168,\\n \\\u0022longitude\\\u0022: 7.929334\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500407,\\n \\\u0022latitude\\\u0022: 5.154603,\\n \\\u0022longitude\\\u0022: 8.022382\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500404,\\n \\\u0022latitude\\\u0022: 4.661155,\\n \\\u0022longitude\\\u0022: 7.840238\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500318,\\n \\\u0022latitude\\\u0022: 6.74615,\\n \\\u0022longitude\\\u0022: 4.553455\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500322,\\n \\\u0022latitude\\\u0022: 6.644288,\\n \\\u0022longitude\\\u0022: 3.318092\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500339,\\n \\\u0022latitude\\\u0022: 7.075766,\\n \\\u0022longitude\\\u0022: 2.999329\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500320,\\n \\\u0022latitude\\\u0022: 6.644459,\\n \\\u0022longitude\\\u0022: 3.318066\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500338,\\n \\\u0022latitude\\\u0022: 7.075754,\\n \\\u0022longitude\\\u0022: 2.999157\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500342,\\n \\\u0022latitude\\\u0022: 7.052115,\\n \\\u0022longitude\\\u0022: 3.000852\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022GL0061 - SG\\\u0022,\\n \\\u0022latitude\\\u0022: 6.874967,\\n \\\u0022longitude\\\u0022: 3.94693\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022GL0044 - KN\\\u0022,\\n \\\u0022latitude\\\u0022: 6.874994,\\n \\\u0022longitude\\\u0022: 3.946909\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022GL0036 - TD\\\u0022,\\n \\\u0022latitude\\\u0022: 6.874955,\\n \\\u0022longitude\\\u0022: 3.946937\\n },\\n {\\n \\\u0022tracker_id\\\u0022: \\\u0022GL0066 -TSL\\\u0022,\\n \\\u0022latitude\\\u0022: 6.87501,\\n \\\u0022longitude\\\u0022: 3.946914\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500310,\\n \\\u0022latitude\\\u0022: 7.609203,\\n \\\u0022longitude\\\u0022: 5.23058\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500325,\\n \\\u0022latitude\\\u0022: 7.798398,\\n \\\u0022longitude\\\u0022: 6.74189\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500330,\\n \\\u0022latitude\\\u0022: 7.798534,\\n \\\u0022longitude\\\u0022: 6.741883\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500334,\\n \\\u0022latitude\\\u0022: 8.080569,\\n \\\u0022longitude\\\u0022: 6.804825\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500333,\\n \\\u0022latitude\\\u0022: 7.798453,\\n \\\u0022longitude\\\u0022: 6.74189\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500336,\\n \\\u0022latitude\\\u0022: 11.646988,\\n \\\u0022longitude\\\u0022: 8.42657\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500328,\\n \\\u0022latitude\\\u0022: 11.646839,\\n \\\u0022longitude\\\u0022: 8.426361\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500329,\\n \\\u0022latitude\\\u0022: 11.647327,\\n \\\u0022longitude\\\u0022: 8.491221\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500304,\\n \\\u0022latitude\\\u0022: 13.461527,\\n \\\u0022longitude\\\u0022: 5.72697\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500327,\\n \\\u0022latitude\\\u0022: 13.295147,\\n \\\u0022longitude\\\u0022: 5.457093\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500321,\\n \\\u0022latitude\\\u0022: 11.820683,\\n \\\u0022longitude\\\u0022: 5.347016\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500309,\\n \\\u0022latitude\\\u0022: 9.888095,\\n \\\u0022longitude\\\u0022: 6.703483\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500316,\\n \\\u0022latitude\\\u0022: 10.401951,\\n \\\u0022longitude\\\u0022: 5.451863\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500311,\\n \\\u0022latitude\\\u0022: 9.888057,\\n \\\u0022longitude\\\u0022: 6.70323\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500315,\\n \\\u0022latitude\\\u0022: 10.401932,\\n \\\u0022longitude\\\u0022: 5.451947\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500214,\\n \\\u0022latitude\\\u0022: 6.965836,\\n \\\u0022longitude\\\u0022: 5.777775\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500218,\\n \\\u0022latitude\\\u0022: 7.657896,\\n \\\u0022longitude\\\u0022: 4.199206\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500220,\\n \\\u0022latitude\\\u0022: 8.252919,\\n \\\u0022longitude\\\u0022: 3.313092\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500221,\\n \\\u0022latitude\\\u0022: 8.215542,\\n \\\u0022longitude\\\u0022: 3.458606\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500223,\\n \\\u0022latitude\\\u0022: 6.695267,\\n \\\u0022longitude\\\u0022: 2.880061\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500212,\\n \\\u0022latitude\\\u0022: 8.215367,\\n \\\u0022longitude\\\u0022: 3.458715\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500210,\\n \\\u0022latitude\\\u0022: 7.959529,\\n \\\u0022longitude\\\u0022: 3.61161\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500217,\\n \\\u0022latitude\\\u0022: 7.23463,\\n \\\u0022longitude\\\u0022: 3.03917\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500222,\\n \\\u0022latitude\\\u0022: 8.215512,\\n \\\u0022longitude\\\u0022: 3.458643\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500219,\\n \\\u0022latitude\\\u0022: 7.869828,\\n \\\u0022longitude\\\u0022: 6.511604\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500225,\\n \\\u0022latitude\\\u0022: 8.624767,\\n \\\u0022longitude\\\u0022: 6.585408\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500413,\\n \\\u0022latitude\\\u0022: 8.881926,\\n \\\u0022longitude\\\u0022: 7.787763\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500664,\\n \\\u0022latitude\\\u0022: 10.413199,\\n \\\u0022longitude\\\u0022: 5.497902\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500662,\\n \\\u0022latitude\\\u0022: 9.558066,\\n \\\u0022longitude\\\u0022: 6.593822\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500604,\\n \\\u0022latitude\\\u0022: 8.373895,\\n \\\u0022longitude\\\u0022: 7.509122\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500654,\\n \\\u0022latitude\\\u0022: 9.557966,\\n \\\u0022longitude\\\u0022: 6.593731\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500606,\\n \\\u0022latitude\\\u0022: 9.746635,\\n \\\u0022longitude\\\u0022: 6.047646\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500656,\\n \\\u0022latitude\\\u0022: 9.558084,\\n \\\u0022longitude\\\u0022: 6.593931\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500657,\\n \\\u0022latitude\\\u0022: 9.556725,\\n \\\u0022longitude\\\u0022: 6.593251\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500608,\\n \\\u0022latitude\\\u0022: 9.674729,\\n \\\u0022longitude\\\u0022: 6.446614\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500661,\\n \\\u0022latitude\\\u0022: 8.625638,\\n \\\u0022longitude\\\u0022: 6.585723\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500648,\\n \\\u0022latitude\\\u0022: 10.494815,\\n \\\u0022longitude\\\u0022: 5.15266\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500649,\\n \\\u0022latitude\\\u0022: 9.557773,\\n \\\u0022longitude\\\u0022: 6.593617\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500603,\\n \\\u0022latitude\\\u0022: 10.188827,\\n \\\u0022longitude\\\u0022: 5.895937\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500631,\\n \\\u0022latitude\\\u0022: 9.557781,\\n \\\u0022longitude\\\u0022: 6.593546\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500638,\\n \\\u0022latitude\\\u0022: 10.134329,\\n \\\u0022longitude\\\u0022: 5.879594\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500651,\\n \\\u0022latitude\\\u0022: 10.138193,\\n \\\u0022longitude\\\u0022: 5.891274\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500605,\\n \\\u0022latitude\\\u0022: 9.557779,\\n \\\u0022longitude\\\u0022: 6.593586\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500620,\\n \\\u0022latitude\\\u0022: 9.558092,\\n \\\u0022longitude\\\u0022: 6.593824\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500642,\\n \\\u0022latitude\\\u0022: 10.138128,\\n \\\u0022longitude\\\u0022: 5.891375\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500655,\\n \\\u0022latitude\\\u0022: 9.558034,\\n \\\u0022longitude\\\u0022: 6.593812\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500643,\\n \\\u0022latitude\\\u0022: 9.221462,\\n \\\u0022longitude\\\u0022: 6.391374\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500644,\\n \\\u0022latitude\\\u0022: 9.557721,\\n \\\u0022longitude\\\u0022: 6.593602\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500630,\\n \\\u0022latitude\\\u0022: 9.1161,\\n \\\u0022longitude\\\u0022: 6.666981\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500645,\\n \\\u0022latitude\\\u0022: 10.134485,\\n \\\u0022longitude\\\u0022: 5.87999\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500659,\\n \\\u0022latitude\\\u0022: 9.557879,\\n \\\u0022longitude\\\u0022: 6.593495\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500612,\\n \\\u0022latitude\\\u0022: 9.558301,\\n \\\u0022longitude\\\u0022: 6.593841\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500624,\\n \\\u0022latitude\\\u0022: 9.557898,\\n \\\u0022longitude\\\u0022: 6.593699\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500609,\\n \\\u0022latitude\\\u0022: 10.393151,\\n \\\u0022longitude\\\u0022: 5.456304\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500637,\\n \\\u0022latitude\\\u0022: 9.558159,\\n \\\u0022longitude\\\u0022: 6.593737\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500616,\\n \\\u0022latitude\\\u0022: 9.558186,\\n \\\u0022longitude\\\u0022: 6.593743\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500639,\\n \\\u0022latitude\\\u0022: 8.73978,\\n \\\u0022longitude\\\u0022: 6.544249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500640,\\n \\\u0022latitude\\\u0022: 10.138162,\\n \\\u0022longitude\\\u0022: 5.891685\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500629,\\n \\\u0022latitude\\\u0022: 8.726954,\\n \\\u0022longitude\\\u0022: 6.433001\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500658,\\n \\\u0022latitude\\\u0022: 9.010872,\\n \\\u0022longitude\\\u0022: 6.425835\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500600,\\n \\\u0022latitude\\\u0022: 9.557952,\\n \\\u0022longitude\\\u0022: 6.593484\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500601,\\n \\\u0022latitude\\\u0022: 9.557872,\\n \\\u0022longitude\\\u0022: 6.593704\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500660,\\n \\\u0022latitude\\\u0022: 10.41311,\\n \\\u0022longitude\\\u0022: 5.498037\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500602,\\n \\\u0022latitude\\\u0022: 9.686768,\\n \\\u0022longitude\\\u0022: 6.472901\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500614,\\n \\\u0022latitude\\\u0022: 9.558283,\\n \\\u0022longitude\\\u0022: 6.593747\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500633,\\n \\\u0022latitude\\\u0022: 9.558236,\\n \\\u0022longitude\\\u0022: 6.593731\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500635,\\n \\\u0022latitude\\\u0022: 9.558789,\\n \\\u0022longitude\\\u0022: 6.593693\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500618,\\n \\\u0022latitude\\\u0022: 9.0081,\\n \\\u0022longitude\\\u0022: 6.6295\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500619,\\n \\\u0022latitude\\\u0022: 9.27351,\\n \\\u0022longitude\\\u0022: 7.135207\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500628,\\n \\\u0022latitude\\\u0022: 9.62175,\\n \\\u0022longitude\\\u0022: 6.354889\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500607,\\n \\\u0022latitude\\\u0022: 9.558226,\\n \\\u0022longitude\\\u0022: 6.594044\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500611,\\n \\\u0022latitude\\\u0022: 10.134045,\\n \\\u0022longitude\\\u0022: 5.878808\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500646,\\n \\\u0022latitude\\\u0022: 9.868292,\\n \\\u0022longitude\\\u0022: 4.526746\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500623,\\n \\\u0022latitude\\\u0022: 12.141709,\\n \\\u0022longitude\\\u0022: 9.44189\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500647,\\n \\\u0022latitude\\\u0022: 9.291884,\\n \\\u0022longitude\\\u0022: 7.359137\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500613,\\n \\\u0022latitude\\\u0022: 9.419374,\\n \\\u0022longitude\\\u0022: 6.292479\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500688,\\n \\\u0022latitude\\\u0022: 10.582623,\\n \\\u0022longitude\\\u0022: 7.450353\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500690,\\n \\\u0022latitude\\\u0022: 10.273663,\\n \\\u0022longitude\\\u0022: 11.211156\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500682,\\n \\\u0022latitude\\\u0022: 10.47923,\\n \\\u0022longitude\\\u0022: 7.640671\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500717,\\n \\\u0022latitude\\\u0022: 8.860193,\\n \\\u0022longitude\\\u0022: 7.89628\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500763,\\n \\\u0022latitude\\\u0022: 6.629813,\\n \\\u0022longitude\\\u0022: 9.297036\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500718,\\n \\\u0022latitude\\\u0022: 8.916503,\\n \\\u0022longitude\\\u0022: 5.534072\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500750,\\n \\\u0022latitude\\\u0022: 13.563936,\\n \\\u0022longitude\\\u0022: 5.742755\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500719,\\n \\\u0022latitude\\\u0022: 8.908101,\\n \\\u0022longitude\\\u0022: 5.499106\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500684,\\n \\\u0022latitude\\\u0022: 10.544828,\\n \\\u0022longitude\\\u0022: 7.35425\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500742,\\n \\\u0022latitude\\\u0022: 13.289048,\\n \\\u0022longitude\\\u0022: 5.418484\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500680,\\n \\\u0022latitude\\\u0022: 6.2449,\\n \\\u0022longitude\\\u0022: 8.424954\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500737,\\n \\\u0022latitude\\\u0022: 9.27137,\\n \\\u0022longitude\\\u0022: 12.422658\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500712,\\n \\\u0022latitude\\\u0022: 8.846363,\\n \\\u0022longitude\\\u0022: 7.363518\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500705,\\n \\\u0022latitude\\\u0022: 10.273807,\\n \\\u0022longitude\\\u0022: 11.211107\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500746,\\n \\\u0022latitude\\\u0022: 13.288821,\\n \\\u0022longitude\\\u0022: 5.418562\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500706,\\n \\\u0022latitude\\\u0022: 10.273878,\\n \\\u0022longitude\\\u0022: 11.211213\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500748,\\n \\\u0022latitude\\\u0022: 13.056558,\\n \\\u0022longitude\\\u0022: 5.185185\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500714,\\n \\\u0022latitude\\\u0022: 11.81372,\\n \\\u0022longitude\\\u0022: 8.842862\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500727,\\n \\\u0022latitude\\\u0022: 12.451179,\\n \\\u0022longitude\\\u0022: 10.051308\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500674,\\n \\\u0022latitude\\\u0022: 9.640134,\\n \\\u0022longitude\\\u0022: 6.530086\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500696,\\n \\\u0022latitude\\\u0022: 11.968839,\\n \\\u0022longitude\\\u0022: 8.554249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500703,\\n \\\u0022latitude\\\u0022: 11.602553,\\n \\\u0022longitude\\\u0022: 8.432825\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500666,\\n \\\u0022latitude\\\u0022: 9.640176,\\n \\\u0022longitude\\\u0022: 6.530065\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500749,\\n \\\u0022latitude\\\u0022: 12.846364,\\n \\\u0022longitude\\\u0022: 5.145213\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500667,\\n \\\u0022latitude\\\u0022: 9.640165,\\n \\\u0022longitude\\\u0022: 6.529978\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500764,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500733,\\n \\\u0022latitude\\\u0022: 12.451229,\\n \\\u0022longitude\\\u0022: 10.051437\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500720,\\n \\\u0022latitude\\\u0022: 9.046447,\\n \\\u0022longitude\\\u0022: 6.582691\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500740,\\n \\\u0022latitude\\\u0022: 11.56986,\\n \\\u0022longitude\\\u0022: 7.267694\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500752,\\n \\\u0022latitude\\\u0022: 13.056668,\\n \\\u0022longitude\\\u0022: 5.185184\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500721,\\n \\\u0022latitude\\\u0022: 12.698212,\\n \\\u0022longitude\\\u0022: 11.489571\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500710,\\n \\\u0022latitude\\\u0022: 7.864761,\\n \\\u0022longitude\\\u0022: 6.760677\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500711,\\n \\\u0022latitude\\\u0022: 7.864775,\\n \\\u0022longitude\\\u0022: 6.760673\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500736,\\n \\\u0022latitude\\\u0022: 9.146568,\\n \\\u0022longitude\\\u0022: 9.794721\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500685,\\n \\\u0022latitude\\\u0022: 9.377526,\\n \\\u0022longitude\\\u0022: 8.280366\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500686,\\n \\\u0022latitude\\\u0022: 10.621833,\\n \\\u0022longitude\\\u0022: 7.46505\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500738,\\n \\\u0022latitude\\\u0022: 9.271106,\\n \\\u0022longitude\\\u0022: 12.422693\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500725,\\n \\\u0022latitude\\\u0022: 11.516018,\\n \\\u0022longitude\\\u0022: 7.340286\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500758,\\n \\\u0022latitude\\\u0022: 12.152756,\\n \\\u0022longitude\\\u0022: 6.75327\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500672,\\n \\\u0022latitude\\\u0022: 9.640176,\\n \\\u0022longitude\\\u0022: 6.529964\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500726,\\n \\\u0022latitude\\\u0022: 9.046484,\\n \\\u0022longitude\\\u0022: 6.582667\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500673,\\n \\\u0022latitude\\\u0022: 9.64018,\\n \\\u0022longitude\\\u0022: 6.529961\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500765,\\n \\\u0022latitude\\\u0022: 6.435539,\\n \\\u0022longitude\\\u0022: 2.892512\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500728,\\n \\\u0022latitude\\\u0022: 11.569836,\\n \\\u0022longitude\\\u0022: 7.267691\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500701,\\n \\\u0022latitude\\\u0022: 11.968898,\\n \\\u0022longitude\\\u0022: 8.554252\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500729,\\n \\\u0022latitude\\\u0022: 9.622937,\\n \\\u0022longitude\\\u0022: 6.507742\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500683,\\n \\\u0022latitude\\\u0022: 10.124303,\\n \\\u0022longitude\\\u0022: 8.376303\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500676,\\n \\\u0022latitude\\\u0022: 6.506377,\\n \\\u0022longitude\\\u0022: 6.954368\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500730,\\n \\\u0022latitude\\\u0022: 12.451125,\\n \\\u0022longitude\\\u0022: 10.051388\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500716,\\n \\\u0022latitude\\\u0022: 8.851391,\\n \\\u0022longitude\\\u0022: 7.892288\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500677,\\n \\\u0022latitude\\\u0022: 6.520494,\\n \\\u0022longitude\\\u0022: 6.951325\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500704,\\n \\\u0022latitude\\\u0022: 11.968859,\\n \\\u0022longitude\\\u0022: 8.554201\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500762,\\n \\\u0022latitude\\\u0022: 6.244869,\\n \\\u0022longitude\\\u0022: 8.424977\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500698,\\n \\\u0022latitude\\\u0022: 11.968843,\\n \\\u0022longitude\\\u0022: 8.554223\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500732,\\n \\\u0022latitude\\\u0022: 12.451111,\\n \\\u0022longitude\\\u0022: 10.051471\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500700,\\n \\\u0022latitude\\\u0022: 11.968821,\\n \\\u0022longitude\\\u0022: 8.554155\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500769,\\n \\\u0022latitude\\\u0022: 7.364253,\\n \\\u0022longitude\\\u0022: 7.10637\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500678,\\n \\\u0022latitude\\\u0022: 6.629865,\\n \\\u0022longitude\\\u0022: 9.29699\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500670,\\n \\\u0022latitude\\\u0022: 9.640169,\\n \\\u0022longitude\\\u0022: 6.529955\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500743,\\n \\\u0022latitude\\\u0022: 13.288888,\\n \\\u0022longitude\\\u0022: 5.418526\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500756,\\n \\\u0022latitude\\\u0022: 12.152761,\\n \\\u0022longitude\\\u0022: 6.753319\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500744,\\n \\\u0022latitude\\\u0022: 13.498817,\\n \\\u0022longitude\\\u0022: 5.709788\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500671,\\n \\\u0022latitude\\\u0022: 9.640159,\\n \\\u0022longitude\\\u0022: 6.530054\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500745,\\n \\\u0022latitude\\\u0022: 13.288911,\\n \\\u0022longitude\\\u0022: 5.41855\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500713,\\n \\\u0022latitude\\\u0022: 11.602475,\\n \\\u0022longitude\\\u0022: 8.432792\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500768,\\n \\\u0022latitude\\\u0022: 9.113154,\\n \\\u0022longitude\\\u0022: 12.883545\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500681,\\n \\\u0022latitude\\\u0022: 9.219701,\\n \\\u0022longitude\\\u0022: 8.444618\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500708,\\n \\\u0022latitude\\\u0022: 9.271228,\\n \\\u0022longitude\\\u0022: 12.422718\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500766,\\n \\\u0022latitude\\\u0022: 6.435342,\\n \\\u0022longitude\\\u0022: 2.892583\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500675,\\n \\\u0022latitude\\\u0022: 6.519278,\\n \\\u0022longitude\\\u0022: 6.944047\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500767,\\n \\\u0022latitude\\\u0022: 6.435332,\\n \\\u0022longitude\\\u0022: 2.892212\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500665,\\n \\\u0022latitude\\\u0022: 9.640073,\\n \\\u0022longitude\\\u0022: 6.529984\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500715,\\n \\\u0022latitude\\\u0022: 9.476859,\\n \\\u0022longitude\\\u0022: 6.394968\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500702,\\n \\\u0022latitude\\\u0022: 11.968857,\\n \\\u0022longitude\\\u0022: 8.554203\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500697,\\n \\\u0022latitude\\\u0022: 11.968906,\\n \\\u0022longitude\\\u0022: 8.554276\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500731,\\n \\\u0022latitude\\\u0022: 12.451091,\\n \\\u0022longitude\\\u0022: 10.051398\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500699,\\n \\\u0022latitude\\\u0022: 11.968874,\\n \\\u0022longitude\\\u0022: 8.554286\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500709,\\n \\\u0022latitude\\\u0022: 9.271199,\\n \\\u0022longitude\\\u0022: 12.422689\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500739,\\n \\\u0022latitude\\\u0022: 11.569884,\\n \\\u0022longitude\\\u0022: 7.267702\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500668,\\n \\\u0022latitude\\\u0022: 9.640161,\\n \\\u0022longitude\\\u0022: 6.530033\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500751,\\n \\\u0022latitude\\\u0022: 13.056425,\\n \\\u0022longitude\\\u0022: 5.185298\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500734,\\n \\\u0022latitude\\\u0022: 12.451225,\\n \\\u0022longitude\\\u0022: 10.051372\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500741,\\n \\\u0022latitude\\\u0022: 9.046501,\\n \\\u0022longitude\\\u0022: 6.582633\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500669,\\n \\\u0022latitude\\\u0022: 9.640154,\\n \\\u0022longitude\\\u0022: 6.529952\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500735,\\n \\\u0022latitude\\\u0022: 10.068671,\\n \\\u0022longitude\\\u0022: 8.650641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500722,\\n \\\u0022latitude\\\u0022: 9.046522,\\n \\\u0022longitude\\\u0022: 6.582801\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500724,\\n \\\u0022latitude\\\u0022: 9.046483,\\n \\\u0022longitude\\\u0022: 6.582637\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500687,\\n \\\u0022latitude\\\u0022: 10.425245,\\n \\\u0022longitude\\\u0022: 8.675178\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500747,\\n \\\u0022latitude\\\u0022: 13.056664,\\n \\\u0022longitude\\\u0022: 5.185115\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500707,\\n \\\u0022latitude\\\u0022: 9.27106,\\n \\\u0022longitude\\\u0022: 12.422682\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501127,\\n \\\u0022latitude\\\u0022: 11.717757,\\n \\\u0022longitude\\\u0022: 11.966349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501213,\\n \\\u0022latitude\\\u0022: 10.280604,\\n \\\u0022longitude\\\u0022: 11.189648\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501272,\\n \\\u0022latitude\\\u0022: 11.717932,\\n \\\u0022longitude\\\u0022: 11.966269\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501165,\\n \\\u0022latitude\\\u0022: 11.86179,\\n \\\u0022longitude\\\u0022: 13.209761\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501197,\\n \\\u0022latitude\\\u0022: 9.272136,\\n \\\u0022longitude\\\u0022: 12.415394\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501142,\\n \\\u0022latitude\\\u0022: 10.28079,\\n \\\u0022longitude\\\u0022: 11.189417\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501092,\\n \\\u0022latitude\\\u0022: 10.280958,\\n \\\u0022longitude\\\u0022: 11.189579\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501094,\\n \\\u0022latitude\\\u0022: 9.272465,\\n \\\u0022longitude\\\u0022: 12.415162\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501220,\\n \\\u0022latitude\\\u0022: 9.272678,\\n \\\u0022longitude\\\u0022: 12.415388\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501168,\\n \\\u0022latitude\\\u0022: 6.45039,\\n \\\u0022longitude\\\u0022: 3.264949\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501095,\\n \\\u0022latitude\\\u0022: 6.447035,\\n \\\u0022longitude\\\u0022: 3.287171\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501170,\\n \\\u0022latitude\\\u0022: 10.280566,\\n \\\u0022longitude\\\u0022: 11.189723\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501066,\\n \\\u0022latitude\\\u0022: 10.280766,\\n \\\u0022longitude\\\u0022: 11.189573\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501147,\\n \\\u0022latitude\\\u0022: 10.280607,\\n \\\u0022longitude\\\u0022: 11.189716\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501252,\\n \\\u0022latitude\\\u0022: 9.272059,\\n \\\u0022longitude\\\u0022: 12.415413\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501172,\\n \\\u0022latitude\\\u0022: 9.272646,\\n \\\u0022longitude\\\u0022: 12.415194\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501148,\\n \\\u0022latitude\\\u0022: 11.717688,\\n \\\u0022longitude\\\u0022: 11.966325\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501253,\\n \\\u0022latitude\\\u0022: 10.280991,\\n \\\u0022longitude\\\u0022: 11.189329\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501293,\\n \\\u0022latitude\\\u0022: 11.717709,\\n \\\u0022longitude\\\u0022: 11.966303\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501067,\\n \\\u0022latitude\\\u0022: 11.972252,\\n \\\u0022longitude\\\u0022: 8.551629\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501259,\\n \\\u0022latitude\\\u0022: 9.560951,\\n \\\u0022longitude\\\u0022: 6.486387\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501068,\\n \\\u0022latitude\\\u0022: 11.972429,\\n \\\u0022longitude\\\u0022: 8.551748\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501200,\\n \\\u0022latitude\\\u0022: 11.717608,\\n \\\u0022longitude\\\u0022: 11.966572\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501284,\\n \\\u0022latitude\\\u0022: 10.281033,\\n \\\u0022longitude\\\u0022: 11.189242\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501285,\\n \\\u0022latitude\\\u0022: 11.972293,\\n \\\u0022longitude\\\u0022: 8.551674\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501233,\\n \\\u0022latitude\\\u0022: 10.280987,\\n \\\u0022longitude\\\u0022: 11.189266\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501101,\\n \\\u0022latitude\\\u0022: 9.272264,\\n \\\u0022longitude\\\u0022: 12.415044\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501153,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501234,\\n \\\u0022latitude\\\u0022: 10.281084,\\n \\\u0022longitude\\\u0022: 11.189395\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501131,\\n \\\u0022latitude\\\u0022: 11.861786,\\n \\\u0022longitude\\\u0022: 13.20975\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501154,\\n \\\u0022latitude\\\u0022: 10.288188,\\n \\\u0022longitude\\\u0022: 9.847199\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501071,\\n \\\u0022latitude\\\u0022: 11.972442,\\n \\\u0022longitude\\\u0022: 8.551648\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501155,\\n \\\u0022latitude\\\u0022: 6.450379,\\n \\\u0022longitude\\\u0022: 3.264952\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501264,\\n \\\u0022latitude\\\u0022: 11.861792,\\n \\\u0022longitude\\\u0022: 13.209787\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501236,\\n \\\u0022latitude\\\u0022: 10.280543,\\n \\\u0022longitude\\\u0022: 11.189608\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501113,\\n \\\u0022latitude\\\u0022: 10.2812,\\n \\\u0022longitude\\\u0022: 11.189641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501114,\\n \\\u0022latitude\\\u0022: 9.272516,\\n \\\u0022longitude\\\u0022: 12.415245\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501288,\\n \\\u0022latitude\\\u0022: 10.288172,\\n \\\u0022longitude\\\u0022: 9.847168\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501133,\\n \\\u0022latitude\\\u0022: 4.951723,\\n \\\u0022longitude\\\u0022: 8.001175\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501182,\\n \\\u0022latitude\\\u0022: 9.272419,\\n \\\u0022longitude\\\u0022: 12.415302\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501289,\\n \\\u0022latitude\\\u0022: 11.717622,\\n \\\u0022longitude\\\u0022: 11.966412\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501204,\\n \\\u0022latitude\\\u0022: 10.280956,\\n \\\u0022longitude\\\u0022: 11.189608\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501055,\\n \\\u0022latitude\\\u0022: 10.28097,\\n \\\u0022longitude\\\u0022: 11.189374\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501184,\\n \\\u0022latitude\\\u0022: 11.861766,\\n \\\u0022longitude\\\u0022: 13.209752\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501185,\\n \\\u0022latitude\\\u0022: 6.450445,\\n \\\u0022longitude\\\u0022: 3.265085\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501056,\\n \\\u0022latitude\\\u0022: 11.63796,\\n \\\u0022longitude\\\u0022: 8.406133\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501119,\\n \\\u0022latitude\\\u0022: 9.272408,\\n \\\u0022longitude\\\u0022: 12.415182\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501083,\\n \\\u0022latitude\\\u0022: 11.861883,\\n \\\u0022longitude\\\u0022: 13.209743\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501076,\\n \\\u0022latitude\\\u0022: 10.281216,\\n \\\u0022longitude\\\u0022: 11.189592\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501162,\\n \\\u0022latitude\\\u0022: 9.272419,\\n \\\u0022longitude\\\u0022: 12.415128\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501189,\\n \\\u0022latitude\\\u0022: 10.280613,\\n \\\u0022longitude\\\u0022: 11.189662\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501124,\\n \\\u0022latitude\\\u0022: 11.861814,\\n \\\u0022longitude\\\u0022: 13.209771\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501086,\\n \\\u0022latitude\\\u0022: 10.280657,\\n \\\u0022longitude\\\u0022: 11.189593\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501211,\\n \\\u0022latitude\\\u0022: 6.463589,\\n \\\u0022longitude\\\u0022: 3.31845\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501193,\\n \\\u0022latitude\\\u0022: 10.280615,\\n \\\u0022longitude\\\u0022: 11.189599\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501163,\\n \\\u0022latitude\\\u0022: 10.288159,\\n \\\u0022longitude\\\u0022: 9.847106\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501139,\\n \\\u0022latitude\\\u0022: 9.272484,\\n \\\u0022longitude\\\u0022: 12.415328\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501060,\\n \\\u0022latitude\\\u0022: 11.972118,\\n \\\u0022longitude\\\u0022: 8.551739\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501214,\\n \\\u0022latitude\\\u0022: 9.272507,\\n \\\u0022longitude\\\u0022: 12.415094\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501164,\\n \\\u0022latitude\\\u0022: 10.280695,\\n \\\u0022longitude\\\u0022: 11.189669\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501196,\\n \\\u0022latitude\\\u0022: 10.280589,\\n \\\u0022longitude\\\u0022: 11.189714\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501274,\\n \\\u0022latitude\\\u0022: 11.717742,\\n \\\u0022longitude\\\u0022: 11.966331\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501062,\\n \\\u0022latitude\\\u0022: 11.972239,\\n \\\u0022longitude\\\u0022: 8.551578\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501216,\\n \\\u0022latitude\\\u0022: 6.463818,\\n \\\u0022longitude\\\u0022: 3.318748\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501091,\\n \\\u0022latitude\\\u0022: 6.854642,\\n \\\u0022longitude\\\u0022: 3.78092\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501052,\\n \\\u0022latitude\\\u0022: 11.972229,\\n \\\u0022longitude\\\u0022: 8.551624\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501217,\\n \\\u0022latitude\\\u0022: 10.281071,\\n \\\u0022longitude\\\u0022: 11.189368\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501249,\\n \\\u0022latitude\\\u0022: 6.450566,\\n \\\u0022longitude\\\u0022: 3.265011\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501199,\\n \\\u0022latitude\\\u0022: 6.463979,\\n \\\u0022longitude\\\u0022: 3.318478\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501250,\\n \\\u0022latitude\\\u0022: 11.861803,\\n \\\u0022longitude\\\u0022: 13.209698\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501064,\\n \\\u0022latitude\\\u0022: 11.701151,\\n \\\u0022longitude\\\u0022: 8.543084\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501276,\\n \\\u0022latitude\\\u0022: 10.288278,\\n \\\u0022longitude\\\u0022: 9.847174\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501065,\\n \\\u0022latitude\\\u0022: 12.097068,\\n \\\u0022longitude\\\u0022: 8.88778\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501227,\\n \\\u0022latitude\\\u0022: 6.450541,\\n \\\u0022longitude\\\u0022: 3.265049\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501222,\\n \\\u0022latitude\\\u0022: 9.272179,\\n \\\u0022longitude\\\u0022: 12.415433\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501228,\\n \\\u0022latitude\\\u0022: 10.288175,\\n \\\u0022longitude\\\u0022: 9.847274\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501279,\\n \\\u0022latitude\\\u0022: 11.71789,\\n \\\u0022longitude\\\u0022: 11.966249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501171,\\n \\\u0022latitude\\\u0022: 6.854546,\\n \\\u0022longitude\\\u0022: 3.780898\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501280,\\n \\\u0022latitude\\\u0022: 5.818537,\\n \\\u0022longitude\\\u0022: 7.876841\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501281,\\n \\\u0022latitude\\\u0022: 9.272447,\\n \\\u0022longitude\\\u0022: 12.415243\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501173,\\n \\\u0022latitude\\\u0022: 10.280756,\\n \\\u0022longitude\\\u0022: 11.18971\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501230,\\n \\\u0022latitude\\\u0022: 10.288263,\\n \\\u0022longitude\\\u0022: 9.847112\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501260,\\n \\\u0022latitude\\\u0022: 11.8618,\\n \\\u0022longitude\\\u0022: 13.209797\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501152,\\n \\\u0022latitude\\\u0022: 9.272423,\\n \\\u0022longitude\\\u0022: 12.415309\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501070,\\n \\\u0022latitude\\\u0022: 11.972344,\\n \\\u0022longitude\\\u0022: 8.551728\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501177,\\n \\\u0022latitude\\\u0022: 10.280657,\\n \\\u0022longitude\\\u0022: 11.189633\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501111,\\n \\\u0022latitude\\\u0022: 9.272463,\\n \\\u0022longitude\\\u0022: 12.415227\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501202,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501102,\\n \\\u0022latitude\\\u0022: 10.280593,\\n \\\u0022longitude\\\u0022: 11.189444\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501081,\\n \\\u0022latitude\\\u0022: 11.861744,\\n \\\u0022longitude\\\u0022: 13.209833\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501103,\\n \\\u0022latitude\\\u0022: 9.271889,\\n \\\u0022longitude\\\u0022: 12.414899\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501130,\\n \\\u0022latitude\\\u0022: 9.27268,\\n \\\u0022longitude\\\u0022: 12.41503\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501238,\\n \\\u0022latitude\\\u0022: 6.450477,\\n \\\u0022longitude\\\u0022: 3.264975\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501132,\\n \\\u0022latitude\\\u0022: 6.450436,\\n \\\u0022longitude\\\u0022: 3.264906\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501105,\\n \\\u0022latitude\\\u0022: 10.288224,\\n \\\u0022longitude\\\u0022: 9.847192\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501239,\\n \\\u0022latitude\\\u0022: 6.450405,\\n \\\u0022longitude\\\u0022: 3.264992\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501106,\\n \\\u0022latitude\\\u0022: 11.7178,\\n \\\u0022longitude\\\u0022: 11.966286\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501240,\\n \\\u0022latitude\\\u0022: 6.450463,\\n \\\u0022longitude\\\u0022: 3.26506\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501268,\\n \\\u0022latitude\\\u0022: 9.271913,\\n \\\u0022longitude\\\u0022: 12.415096\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501108,\\n \\\u0022latitude\\\u0022: 6.302215,\\n \\\u0022longitude\\\u0022: 5.480614\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501074,\\n \\\u0022latitude\\\u0022: 10.280647,\\n \\\u0022longitude\\\u0022: 11.189709\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501270,\\n \\\u0022latitude\\\u0022: 11.861622,\\n \\\u0022longitude\\\u0022: 13.209848\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501206,\\n \\\u0022latitude\\\u0022: 6.463884,\\n \\\u0022longitude\\\u0022: 3.318904\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501057,\\n \\\u0022latitude\\\u0022: 10.28059,\\n \\\u0022longitude\\\u0022: 11.189713\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501188,\\n \\\u0022latitude\\\u0022: 10.288177,\\n \\\u0022longitude\\\u0022: 9.847161\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501121,\\n \\\u0022latitude\\\u0022: 9.272538,\\n \\\u0022longitude\\\u0022: 12.415165\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501290,\\n \\\u0022latitude\\\u0022: 11.717713,\\n \\\u0022longitude\\\u0022: 11.966365\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501208,\\n \\\u0022latitude\\\u0022: 10.280772,\\n \\\u0022longitude\\\u0022: 11.189371\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501122,\\n \\\u0022latitude\\\u0022: 9.272419,\\n \\\u0022longitude\\\u0022: 12.415151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501085,\\n \\\u0022latitude\\\u0022: 9.272416,\\n \\\u0022longitude\\\u0022: 12.415105\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501058,\\n \\\u0022latitude\\\u0022: 12.123614,\\n \\\u0022longitude\\\u0022: 9.285573\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501125,\\n \\\u0022latitude\\\u0022: 10.281191,\\n \\\u0022longitude\\\u0022: 11.189628\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501243,\\n \\\u0022latitude\\\u0022: 10.288142,\\n \\\u0022longitude\\\u0022: 9.846409\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501212,\\n \\\u0022latitude\\\u0022: 10.28064,\\n \\\u0022longitude\\\u0022: 11.189557\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501245,\\n \\\u0022latitude\\\u0022: 11.717655,\\n \\\u0022longitude\\\u0022: 11.966458\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501128,\\n \\\u0022latitude\\\u0022: 10.280947,\\n \\\u0022longitude\\\u0022: 11.189646\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501089,\\n \\\u0022latitude\\\u0022: 10.281009,\\n \\\u0022longitude\\\u0022: 11.189319\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501061,\\n \\\u0022latitude\\\u0022: 11.972097,\\n \\\u0022longitude\\\u0022: 8.551757\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501140,\\n \\\u0022latitude\\\u0022: 10.281163,\\n \\\u0022longitude\\\u0022: 11.189755\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501090,\\n \\\u0022latitude\\\u0022: 9.272441,\\n \\\u0022longitude\\\u0022: 12.415101\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501141,\\n \\\u0022latitude\\\u0022: 10.280923,\\n \\\u0022longitude\\\u0022: 11.189448\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501248,\\n \\\u0022latitude\\\u0022: 10.28091,\\n \\\u0022longitude\\\u0022: 11.189341\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501143,\\n \\\u0022latitude\\\u0022: 9.272461,\\n \\\u0022longitude\\\u0022: 12.415125\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501144,\\n \\\u0022latitude\\\u0022: 9.272255,\\n \\\u0022longitude\\\u0022: 12.415372\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501294,\\n \\\u0022latitude\\\u0022: 11.861827,\\n \\\u0022longitude\\\u0022: 13.209779\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501218,\\n \\\u0022latitude\\\u0022: 10.280994,\\n \\\u0022longitude\\\u0022: 11.189356\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501219,\\n \\\u0022latitude\\\u0022: 9.272675,\\n \\\u0022longitude\\\u0022: 12.415364\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501145,\\n \\\u0022latitude\\\u0022: 10.288188,\\n \\\u0022longitude\\\u0022: 9.847099\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501050,\\n \\\u0022latitude\\\u0022: 11.972416,\\n \\\u0022longitude\\\u0022: 8.551766\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501277,\\n \\\u0022latitude\\\u0022: 11.638802,\\n \\\u0022longitude\\\u0022: 8.441979\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501278,\\n \\\u0022latitude\\\u0022: 11.861877,\\n \\\u0022longitude\\\u0022: 13.209761\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501051,\\n \\\u0022latitude\\\u0022: 8.904477,\\n \\\u0022longitude\\\u0022: 11.356663\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501097,\\n \\\u0022latitude\\\u0022: 10.280627,\\n \\\u0022longitude\\\u0022: 11.189605\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501223,\\n \\\u0022latitude\\\u0022: 10.281013,\\n \\\u0022longitude\\\u0022: 11.189425\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501229,\\n \\\u0022latitude\\\u0022: 10.288191,\\n \\\u0022longitude\\\u0022: 9.847299\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501098,\\n \\\u0022latitude\\\u0022: 9.272164,\\n \\\u0022longitude\\\u0022: 12.415375\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501225,\\n \\\u0022latitude\\\u0022: 8.904482,\\n \\\u0022longitude\\\u0022: 11.356625\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501282,\\n \\\u0022latitude\\\u0022: 9.272489,\\n \\\u0022longitude\\\u0022: 12.41522\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501254,\\n \\\u0022latitude\\\u0022: 6.450375,\\n \\\u0022longitude\\\u0022: 3.264897\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501258,\\n \\\u0022latitude\\\u0022: 11.717772,\\n \\\u0022longitude\\\u0022: 11.966289\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501150,\\n \\\u0022latitude\\\u0022: 10.281043,\\n \\\u0022longitude\\\u0022: 11.18945\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501256,\\n \\\u0022latitude\\\u0022: 6.450563,\\n \\\u0022longitude\\\u0022: 3.265053\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501099,\\n \\\u0022latitude\\\u0022: 6.450496,\\n \\\u0022longitude\\\u0022: 3.265053\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501175,\\n \\\u0022latitude\\\u0022: 7.53242,\\n \\\u0022longitude\\\u0022: 5.772549\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501151,\\n \\\u0022latitude\\\u0022: 11.717647,\\n \\\u0022longitude\\\u0022: 11.966281\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501232,\\n \\\u0022latitude\\\u0022: 10.281069,\\n \\\u0022longitude\\\u0022: 11.189343\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501176,\\n \\\u0022latitude\\\u0022: 10.280758,\\n \\\u0022longitude\\\u0022: 11.189587\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501129,\\n \\\u0022latitude\\\u0022: 10.288145,\\n \\\u0022longitude\\\u0022: 9.847154\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501286,\\n \\\u0022latitude\\\u0022: 11.717611,\\n \\\u0022longitude\\\u0022: 11.966358\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501263,\\n \\\u0022latitude\\\u0022: 9.272637,\\n \\\u0022longitude\\\u0022: 12.415046\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501178,\\n \\\u0022latitude\\\u0022: 9.272419,\\n \\\u0022longitude\\\u0022: 12.415337\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501104,\\n \\\u0022latitude\\\u0022: 10.288202,\\n \\\u0022longitude\\\u0022: 9.847112\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501287,\\n \\\u0022latitude\\\u0022: 4.951668,\\n \\\u0022longitude\\\u0022: 8.001185\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501203,\\n \\\u0022latitude\\\u0022: 11.717806,\\n \\\u0022longitude\\\u0022: 11.966233\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501134,\\n \\\u0022latitude\\\u0022: 10.280904,\\n \\\u0022longitude\\\u0022: 11.189183\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501116,\\n \\\u0022latitude\\\u0022: 10.288172,\\n \\\u0022longitude\\\u0022: 9.847212\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501183,\\n \\\u0022latitude\\\u0022: 8.904467,\\n \\\u0022longitude\\\u0022: 11.356697\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501160,\\n \\\u0022latitude\\\u0022: 6.463676,\\n \\\u0022longitude\\\u0022: 3.318944\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501241,\\n \\\u0022latitude\\\u0022: 10.288158,\\n \\\u0022longitude\\\u0022: 9.847203\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501135,\\n \\\u0022latitude\\\u0022: 7.884785,\\n \\\u0022longitude\\\u0022: 5.578443\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501161,\\n \\\u0022latitude\\\u0022: 6.450526,\\n \\\u0022longitude\\\u0022: 3.265156\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501109,\\n \\\u0022latitude\\\u0022: 10.280583,\\n \\\u0022longitude\\\u0022: 11.189435\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501075,\\n \\\u0022latitude\\\u0022: 10.28118,\\n \\\u0022longitude\\\u0022: 11.189336\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501120,\\n \\\u0022latitude\\\u0022: 9.272697,\\n \\\u0022longitude\\\u0022: 12.415168\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501187,\\n \\\u0022latitude\\\u0022: 6.463854,\\n \\\u0022longitude\\\u0022: 3.31885\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501138,\\n \\\u0022latitude\\\u0022: 10.280884,\\n \\\u0022longitude\\\u0022: 11.189249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501271,\\n \\\u0022latitude\\\u0022: 6.464077,\\n \\\u0022longitude\\\u0022: 3.318728\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501077,\\n \\\u0022latitude\\\u0022: 8.904472,\\n \\\u0022longitude\\\u0022: 11.35667\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501190,\\n \\\u0022latitude\\\u0022: 10.28066,\\n \\\u0022longitude\\\u0022: 11.18958\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501191,\\n \\\u0022latitude\\\u0022: 8.904307,\\n \\\u0022longitude\\\u0022: 11.356622\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501210,\\n \\\u0022latitude\\\u0022: 10.288259,\\n \\\u0022longitude\\\u0022: 9.84724\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501078,\\n \\\u0022latitude\\\u0022: 9.272489,\\n \\\u0022longitude\\\u0022: 12.415082\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501192,\\n \\\u0022latitude\\\u0022: 10.280918,\\n \\\u0022longitude\\\u0022: 11.189207\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501088,\\n \\\u0022latitude\\\u0022: 9.272445,\\n \\\u0022longitude\\\u0022: 12.415178\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501244,\\n \\\u0022latitude\\\u0022: 10.281013,\\n \\\u0022longitude\\\u0022: 11.189409\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501194,\\n \\\u0022latitude\\\u0022: 8.904481,\\n \\\u0022longitude\\\u0022: 11.356719\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501246,\\n \\\u0022latitude\\\u0022: 11.717639,\\n \\\u0022longitude\\\u0022: 11.966386\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501080,\\n \\\u0022latitude\\\u0022: 6.450455,\\n \\\u0022longitude\\\u0022: 3.264921\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501195,\\n \\\u0022latitude\\\u0022: 10.280578,\\n \\\u0022longitude\\\u0022: 11.189429\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501247,\\n \\\u0022latitude\\\u0022: 9.272146,\\n \\\u0022longitude\\\u0022: 12.415398\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501166,\\n \\\u0022latitude\\\u0022: 9.272385,\\n \\\u0022longitude\\\u0022: 12.415124\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501063,\\n \\\u0022latitude\\\u0022: 11.892226,\\n \\\u0022longitude\\\u0022: 8.848892\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501275,\\n \\\u0022latitude\\\u0022: 11.717628,\\n \\\u0022longitude\\\u0022: 11.966334\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501221,\\n \\\u0022latitude\\\u0022: 10.288167,\\n \\\u0022longitude\\\u0022: 9.8471\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501169,\\n \\\u0022latitude\\\u0022: 10.281056,\\n \\\u0022longitude\\\u0022: 11.18962\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501096,\\n \\\u0022latitude\\\u0022: 6.450409,\\n \\\u0022longitude\\\u0022: 3.264892\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501146,\\n \\\u0022latitude\\\u0022: 6.854501,\\n \\\u0022longitude\\\u0022: 3.780973\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501251,\\n \\\u0022latitude\\\u0022: 9.272141,\\n \\\u0022longitude\\\u0022: 12.415417\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501149,\\n \\\u0022latitude\\\u0022: 6.450452,\\n \\\u0022longitude\\\u0022: 3.265026\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501231,\\n \\\u0022latitude\\\u0022: 6.4504,\\n \\\u0022longitude\\\u0022: 3.264986\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501174,\\n \\\u0022latitude\\\u0022: 9.272608,\\n \\\u0022longitude\\\u0022: 12.415159\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501226,\\n \\\u0022latitude\\\u0022: 11.717736,\\n \\\u0022longitude\\\u0022: 11.966256\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501283,\\n \\\u0022latitude\\\u0022: 9.272491,\\n \\\u0022longitude\\\u0022: 12.41529\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501257,\\n \\\u0022latitude\\\u0022: 6.450337,\\n \\\u0022longitude\\\u0022: 3.264908\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501069,\\n \\\u0022latitude\\\u0022: 12.095773,\\n \\\u0022longitude\\\u0022: 9.161125\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501100,\\n \\\u0022latitude\\\u0022: 10.288226,\\n \\\u0022longitude\\\u0022: 9.847093\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501261,\\n \\\u0022latitude\\\u0022: 11.861835,\\n \\\u0022longitude\\\u0022: 13.209785\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501201,\\n \\\u0022latitude\\\u0022: 10.281023,\\n \\\u0022longitude\\\u0022: 11.189212\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501262,\\n \\\u0022latitude\\\u0022: 11.71762,\\n \\\u0022longitude\\\u0022: 11.966461\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501073,\\n \\\u0022latitude\\\u0022: 6.450469,\\n \\\u0022longitude\\\u0022: 3.265039\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501292,\\n \\\u0022latitude\\\u0022: 6.854852,\\n \\\u0022longitude\\\u0022: 3.780706\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501235,\\n \\\u0022latitude\\\u0022: 9.272439,\\n \\\u0022longitude\\\u0022: 12.415143\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501179,\\n \\\u0022latitude\\\u0022: 9.272379,\\n \\\u0022longitude\\\u0022: 12.415249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501053,\\n \\\u0022latitude\\\u0022: 11.647137,\\n \\\u0022longitude\\\u0022: 8.426614\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501072,\\n \\\u0022latitude\\\u0022: 11.883936,\\n \\\u0022longitude\\\u0022: 8.80689\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501237,\\n \\\u0022latitude\\\u0022: 9.272221,\\n \\\u0022longitude\\\u0022: 12.415318\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501157,\\n \\\u0022latitude\\\u0022: 9.272093,\\n \\\u0022longitude\\\u0022: 12.415389\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501181,\\n \\\u0022latitude\\\u0022: 10.281081,\\n \\\u0022longitude\\\u0022: 11.189306\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501158,\\n \\\u0022latitude\\\u0022: 10.281087,\\n \\\u0022longitude\\\u0022: 11.189352\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501266,\\n \\\u0022latitude\\\u0022: 8.90447,\\n \\\u0022longitude\\\u0022: 11.356657\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501115,\\n \\\u0022latitude\\\u0022: 10.28127,\\n \\\u0022longitude\\\u0022: 11.189553\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501267,\\n \\\u0022latitude\\\u0022: 9.272682,\\n \\\u0022longitude\\\u0022: 12.415149\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501159,\\n \\\u0022latitude\\\u0022: 10.280955,\\n \\\u0022longitude\\\u0022: 11.189352\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501117,\\n \\\u0022latitude\\\u0022: 9.272485,\\n \\\u0022longitude\\\u0022: 12.41513\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501269,\\n \\\u0022latitude\\\u0022: 5.893655,\\n \\\u0022longitude\\\u0022: 7.919703\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 5012045,\\n \\\u0022latitude\\\u0022: 6.450494,\\n \\\u0022longitude\\\u0022: 3.26484\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501118,\\n \\\u0022latitude\\\u0022: 6.464011,\\n \\\u0022longitude\\\u0022: 3.318701\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501082,\\n \\\u0022latitude\\\u0022: 6.463681,\\n \\\u0022longitude\\\u0022: 3.318692\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501186,\\n \\\u0022latitude\\\u0022: 9.272524,\\n \\\u0022longitude\\\u0022: 12.415209\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501207,\\n \\\u0022latitude\\\u0022: 10.288194,\\n \\\u0022longitude\\\u0022: 9.847159\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501123,\\n \\\u0022latitude\\\u0022: 10.288208,\\n \\\u0022longitude\\\u0022: 9.847114\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501209,\\n \\\u0022latitude\\\u0022: 9.272639,\\n \\\u0022longitude\\\u0022: 12.415255\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501079,\\n \\\u0022latitude\\\u0022: 8.844651,\\n \\\u0022longitude\\\u0022: 3.746579\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501242,\\n \\\u0022latitude\\\u0022: 6.450574,\\n \\\u0022longitude\\\u0022: 3.264929\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501059,\\n \\\u0022latitude\\\u0022: 11.972222,\\n \\\u0022longitude\\\u0022: 8.551624\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501087,\\n \\\u0022latitude\\\u0022: 7.658728,\\n \\\u0022longitude\\\u0022: 4.199806\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500882,\\n \\\u0022latitude\\\u0022: 22.463141,\\n \\\u0022longitude\\\u0022: 90.045838\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500885,\\n \\\u0022latitude\\\u0022: 22.262772,\\n \\\u0022longitude\\\u0022: 90.271538\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500886,\\n \\\u0022latitude\\\u0022: 21.999001,\\n \\\u0022longitude\\\u0022: 90.304382\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500889,\\n \\\u0022latitude\\\u0022: 22.626377,\\n \\\u0022longitude\\\u0022: 90.67973\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500934,\\n \\\u0022latitude\\\u0022: 23.094478,\\n \\\u0022longitude\\\u0022: 90.187167\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500935,\\n \\\u0022latitude\\\u0022: 22.619343,\\n \\\u0022longitude\\\u0022: 90.647863\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500872,\\n \\\u0022latitude\\\u0022: 22.009454,\\n \\\u0022longitude\\\u0022: 90.090818\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500874,\\n \\\u0022latitude\\\u0022: 22.213903,\\n \\\u0022longitude\\\u0022: 90.75858\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500878,\\n \\\u0022latitude\\\u0022: 23.16606,\\n \\\u0022longitude\\\u0022: 89.358639\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500880,\\n \\\u0022latitude\\\u0022: 22.400704,\\n \\\u0022longitude\\\u0022: 90.16151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500917,\\n \\\u0022latitude\\\u0022: 23.920304,\\n \\\u0022longitude\\\u0022: 90.322497\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500891,\\n \\\u0022latitude\\\u0022: 22.212087,\\n \\\u0022longitude\\\u0022: 90.323659\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500870,\\n \\\u0022latitude\\\u0022: 22.098305,\\n \\\u0022longitude\\\u0022: 90.053242\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500871,\\n \\\u0022latitude\\\u0022: 22.149349,\\n \\\u0022longitude\\\u0022: 90.280814\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500876,\\n \\\u0022latitude\\\u0022: 23.379681,\\n \\\u0022longitude\\\u0022: 90.175017\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500881,\\n \\\u0022latitude\\\u0022: 23.041759,\\n \\\u0022longitude\\\u0022: 89.001695\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500864,\\n \\\u0022latitude\\\u0022: 22.177692,\\n \\\u0022longitude\\\u0022: 90.285783\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500938,\\n \\\u0022latitude\\\u0022: 22.003786,\\n \\\u0022longitude\\\u0022: 90.29214\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500877,\\n \\\u0022latitude\\\u0022: 25.241882,\\n \\\u0022longitude\\\u0022: 89.760177\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500911,\\n \\\u0022latitude\\\u0022: 23.139408,\\n \\\u0022longitude\\\u0022: 89.183789\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500888,\\n \\\u0022latitude\\\u0022: 22.107884,\\n \\\u0022longitude\\\u0022: 90.694714\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500910,\\n \\\u0022latitude\\\u0022: 22.424351,\\n \\\u0022longitude\\\u0022: 90.828054\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500879,\\n \\\u0022latitude\\\u0022: 23.205968,\\n \\\u0022longitude\\\u0022: 89.401695\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500822,\\n \\\u0022latitude\\\u0022: 5.563597,\\n \\\u0022longitude\\\u0022: -0.221577\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500823,\\n \\\u0022latitude\\\u0022: 5.563406,\\n \\\u0022longitude\\\u0022: -0.221551\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500818,\\n \\\u0022latitude\\\u0022: 5.563338,\\n \\\u0022longitude\\\u0022: -0.221498\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500797,\\n \\\u0022latitude\\\u0022: 5.563299,\\n \\\u0022longitude\\\u0022: -0.221196\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500820,\\n \\\u0022latitude\\\u0022: 5.56337,\\n \\\u0022longitude\\\u0022: -0.221424\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500819,\\n \\\u0022latitude\\\u0022: 5.483946,\\n \\\u0022longitude\\\u0022: -2.467116\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500815,\\n \\\u0022latitude\\\u0022: 5.563428,\\n \\\u0022longitude\\\u0022: -0.221636\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500816,\\n \\\u0022latitude\\\u0022: 5.563303,\\n \\\u0022longitude\\\u0022: -0.220943\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500804,\\n \\\u0022latitude\\\u0022: -1.334959,\\n \\\u0022longitude\\\u0022: 36.690629\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500226,\\n \\\u0022latitude\\\u0022: 30.386391,\\n \\\u0022longitude\\\u0022: 72.013157\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500239,\\n \\\u0022latitude\\\u0022: 30.398562,\\n \\\u0022longitude\\\u0022: 72.027811\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500236,\\n \\\u0022latitude\\\u0022: 30.214632,\\n \\\u0022longitude\\\u0022: 71.967198\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500245,\\n \\\u0022latitude\\\u0022: 30.327042,\\n \\\u0022longitude\\\u0022: 71.984011\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500240,\\n \\\u0022latitude\\\u0022: 30.360676,\\n \\\u0022longitude\\\u0022: 72.004429\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500246,\\n \\\u0022latitude\\\u0022: 30.359431,\\n \\\u0022longitude\\\u0022: 71.840465\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500237,\\n \\\u0022latitude\\\u0022: 30.398558,\\n \\\u0022longitude\\\u0022: 72.027808\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501671,\\n \\\u0022latitude\\\u0022: -1.068895,\\n \\\u0022longitude\\\u0022: 34.478617\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501703,\\n \\\u0022latitude\\\u0022: -0.282177,\\n \\\u0022longitude\\\u0022: 36.095937\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501579,\\n \\\u0022latitude\\\u0022: 0.296468,\\n \\\u0022longitude\\\u0022: 30.179804\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501704,\\n \\\u0022latitude\\\u0022: 0.452905,\\n \\\u0022longitude\\\u0022: 34.121362\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501606,\\n \\\u0022latitude\\\u0022: -2.002736,\\n \\\u0022longitude\\\u0022: 37.350537\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501734,\\n \\\u0022latitude\\\u0022: -0.286401,\\n \\\u0022longitude\\\u0022: 36.076611\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501720,\\n \\\u0022latitude\\\u0022: -0.325389,\\n \\\u0022longitude\\\u0022: 35.938151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501555,\\n \\\u0022latitude\\\u0022: -1.0775,\\n \\\u0022longitude\\\u0022: 35.789848\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501643,\\n \\\u0022latitude\\\u0022: -1.76466,\\n \\\u0022longitude\\\u0022: 37.615511\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501551,\\n \\\u0022latitude\\\u0022: 0.267132,\\n \\\u0022longitude\\\u0022: 34.110504\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501707,\\n \\\u0022latitude\\\u0022: -0.091496,\\n \\\u0022longitude\\\u0022: 37.787752\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501736,\\n \\\u0022latitude\\\u0022: -3.743879,\\n \\\u0022longitude\\\u0022: 39.041057\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501708,\\n \\\u0022latitude\\\u0022: -3.785085,\\n \\\u0022longitude\\\u0022: 39.701309\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501709,\\n \\\u0022latitude\\\u0022: -2.019446,\\n \\\u0022longitude\\\u0022: 37.384015\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501556,\\n \\\u0022latitude\\\u0022: 0.527209,\\n \\\u0022longitude\\\u0022: 34.147635\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501662,\\n \\\u0022latitude\\\u0022: -0.196259,\\n \\\u0022longitude\\\u0022: 34.894494\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501681,\\n \\\u0022latitude\\\u0022: -0.020703,\\n \\\u0022longitude\\\u0022: 35.746992\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501710,\\n \\\u0022latitude\\\u0022: -0.842934,\\n \\\u0022longitude\\\u0022: 34.156866\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501611,\\n \\\u0022latitude\\\u0022: -0.303857,\\n \\\u0022longitude\\\u0022: 36.141686\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501591,\\n \\\u0022latitude\\\u0022: 2.246948,\\n \\\u0022longitude\\\u0022: 32.885275\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501546,\\n \\\u0022latitude\\\u0022: -1.781519,\\n \\\u0022longitude\\\u0022: 37.620504\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501663,\\n \\\u0022latitude\\\u0022: 0.448989,\\n \\\u0022longitude\\\u0022: 35.408218\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501583,\\n \\\u0022latitude\\\u0022: -0.208281,\\n \\\u0022longitude\\\u0022: 35.948416\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501712,\\n \\\u0022latitude\\\u0022: -0.279003,\\n \\\u0022longitude\\\u0022: 36.065933\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501613,\\n \\\u0022latitude\\\u0022: 0.460575,\\n \\\u0022longitude\\\u0022: 34.235499\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501585,\\n \\\u0022latitude\\\u0022: -3.785097,\\n \\\u0022longitude\\\u0022: 39.701293\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501594,\\n \\\u0022latitude\\\u0022: 2.245591,\\n \\\u0022longitude\\\u0022: 32.327829\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501601,\\n \\\u0022latitude\\\u0022: -0.156274,\\n \\\u0022longitude\\\u0022: 36.309211\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501615,\\n \\\u0022latitude\\\u0022: -0.142991,\\n \\\u0022longitude\\\u0022: 34.931793\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501744,\\n \\\u0022latitude\\\u0022: -0.143288,\\n \\\u0022longitude\\\u0022: 34.931331\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501745,\\n \\\u0022latitude\\\u0022: -0.132283,\\n \\\u0022longitude\\\u0022: 36.380321\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501617,\\n \\\u0022latitude\\\u0022: -1.11566,\\n \\\u0022longitude\\\u0022: 34.623828\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501560,\\n \\\u0022latitude\\\u0022: 0.483846,\\n \\\u0022longitude\\\u0022: 34.217937\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501731,\\n \\\u0022latitude\\\u0022: -3.785103,\\n \\\u0022longitude\\\u0022: 39.701251\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501597,\\n \\\u0022latitude\\\u0022: -0.297423,\\n \\\u0022longitude\\\u0022: 35.659042\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501561,\\n \\\u0022latitude\\\u0022: -1.094279,\\n \\\u0022longitude\\\u0022: 36.088691\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501692,\\n \\\u0022latitude\\\u0022: -0.273838,\\n \\\u0022longitude\\\u0022: 36.064104\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501735,\\n \\\u0022latitude\\\u0022: -1.949524,\\n \\\u0022longitude\\\u0022: 37.267488\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501569,\\n \\\u0022latitude\\\u0022: -1.746856,\\n \\\u0022longitude\\\u0022: 37.634457\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501563,\\n \\\u0022latitude\\\u0022: -1.077454,\\n \\\u0022longitude\\\u0022: 35.789793\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501633,\\n \\\u0022latitude\\\u0022: 0.481183,\\n \\\u0022longitude\\\u0022: 34.210575\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501723,\\n \\\u0022latitude\\\u0022: -0.279183,\\n \\\u0022longitude\\\u0022: 34.28084\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501622,\\n \\\u0022latitude\\\u0022: 0.480907,\\n \\\u0022longitude\\\u0022: 34.210381\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501645,\\n \\\u0022latitude\\\u0022: -1.992996,\\n \\\u0022longitude\\\u0022: 37.346503\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501565,\\n \\\u0022latitude\\\u0022: 2.598734,\\n \\\u0022longitude\\\u0022: 31.951638\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501566,\\n \\\u0022latitude\\\u0022: -1.778391,\\n \\\u0022longitude\\\u0022: 37.63022\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501592,\\n \\\u0022latitude\\\u0022: -0.142944,\\n \\\u0022longitude\\\u0022: 34.931594\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501612,\\n \\\u0022latitude\\\u0022: -0.13014,\\n \\\u0022longitude\\\u0022: 34.938855\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501547,\\n \\\u0022latitude\\\u0022: 0.510431,\\n \\\u0022longitude\\\u0022: 34.16643\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501726,\\n \\\u0022latitude\\\u0022: -0.664038,\\n \\\u0022longitude\\\u0022: 34.415173\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501714,\\n \\\u0022latitude\\\u0022: 0.481,\\n \\\u0022longitude\\\u0022: 34.210348\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501686,\\n \\\u0022latitude\\\u0022: -0.49957,\\n \\\u0022longitude\\\u0022: 35.288542\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501603,\\n \\\u0022latitude\\\u0022: 0.251631,\\n \\\u0022longitude\\\u0022: 34.099079\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501656,\\n \\\u0022latitude\\\u0022: -1.792899,\\n \\\u0022longitude\\\u0022: 37.612145\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501702,\\n \\\u0022latitude\\\u0022: -0.430616,\\n \\\u0022longitude\\\u0022: 34.554486\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501670,\\n \\\u0022latitude\\\u0022: -0.91058,\\n \\\u0022longitude\\\u0022: 34.795781\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501589,\\n \\\u0022latitude\\\u0022: -1.957765,\\n \\\u0022longitude\\\u0022: 35.844714\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501550,\\n \\\u0022latitude\\\u0022: 0.599887,\\n \\\u0022longitude\\\u0022: 34.234148\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501732,\\n \\\u0022latitude\\\u0022: 0.482194,\\n \\\u0022longitude\\\u0022: 34.210376\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501657,\\n \\\u0022latitude\\\u0022: 0.309655,\\n \\\u0022longitude\\\u0022: 34.564424\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501719,\\n \\\u0022latitude\\\u0022: -0.284047,\\n \\\u0022longitude\\\u0022: 36.094417\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501642,\\n \\\u0022latitude\\\u0022: -2.008057,\\n \\\u0022longitude\\\u0022: 37.428482\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501705,\\n \\\u0022latitude\\\u0022: -0.821544,\\n \\\u0022longitude\\\u0022: 34.381615\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501631,\\n \\\u0022latitude\\\u0022: -0.174092,\\n \\\u0022longitude\\\u0022: 34.917521\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501621,\\n \\\u0022latitude\\\u0022: 0.214915,\\n \\\u0022longitude\\\u0022: 30.112867\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501706,\\n \\\u0022latitude\\\u0022: 0.326496,\\n \\\u0022longitude\\\u0022: 34.34822\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501694,\\n \\\u0022latitude\\\u0022: -0.545703,\\n \\\u0022longitude\\\u0022: 34.184981\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501608,\\n \\\u0022latitude\\\u0022: 0.298332,\\n \\\u0022longitude\\\u0022: 34.182844\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501722,\\n \\\u0022latitude\\\u0022: -0.04784,\\n \\\u0022longitude\\\u0022: 34.117533\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501552,\\n \\\u0022latitude\\\u0022: 0.56087,\\n \\\u0022longitude\\\u0022: 34.176393\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501738,\\n \\\u0022latitude\\\u0022: -1.961036,\\n \\\u0022longitude\\\u0022: 37.386681\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501634,\\n \\\u0022latitude\\\u0022: 0.497706,\\n \\\u0022longitude\\\u0022: 34.513644\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501725,\\n \\\u0022latitude\\\u0022: -2.531606,\\n \\\u0022longitude\\\u0022: 37.99894\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501740,\\n \\\u0022latitude\\\u0022: -0.929136,\\n \\\u0022longitude\\\u0022: 34.226816\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501558,\\n \\\u0022latitude\\\u0022: -0.288723,\\n \\\u0022longitude\\\u0022: 35.172109\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501649,\\n \\\u0022latitude\\\u0022: -0.399093,\\n \\\u0022longitude\\\u0022: 35.691247\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501742,\\n \\\u0022latitude\\\u0022: -0.842932,\\n \\\u0022longitude\\\u0022: 34.156817\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501727,\\n \\\u0022latitude\\\u0022: -1.988173,\\n \\\u0022longitude\\\u0022: 37.428325\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501666,\\n \\\u0022latitude\\\u0022: 2.886557,\\n \\\u0022longitude\\\u0022: 31.478354\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501614,\\n \\\u0022latitude\\\u0022: 0.480953,\\n \\\u0022longitude\\\u0022: 34.210513\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501625,\\n \\\u0022latitude\\\u0022: 0.405012,\\n \\\u0022longitude\\\u0022: 34.192225\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501715,\\n \\\u0022latitude\\\u0022: 0.022046,\\n \\\u0022longitude\\\u0022: 35.784481\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501595,\\n \\\u0022latitude\\\u0022: -0.266642,\\n \\\u0022longitude\\\u0022: 35.978305\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501728,\\n \\\u0022latitude\\\u0022: -2.437732,\\n \\\u0022longitude\\\u0022: 38.259095\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501602,\\n \\\u0022latitude\\\u0022: 0.681718,\\n \\\u0022longitude\\\u0022: 35.3669\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501627,\\n \\\u0022latitude\\\u0022: 0.505384,\\n \\\u0022longitude\\\u0022: 34.244903\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501655,\\n \\\u0022latitude\\\u0022: 0.231562,\\n \\\u0022longitude\\\u0022: 37.538749\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501669,\\n \\\u0022latitude\\\u0022: -0.188323,\\n \\\u0022longitude\\\u0022: 34.867765\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501717,\\n \\\u0022latitude\\\u0022: -1.087192,\\n \\\u0022longitude\\\u0022: 35.872226\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501701,\\n \\\u0022latitude\\\u0022: 0.581275,\\n \\\u0022longitude\\\u0022: 34.319157\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501604,\\n \\\u0022latitude\\\u0022: -0.143425,\\n \\\u0022longitude\\\u0022: 34.9316\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501578,\\n \\\u0022latitude\\\u0022: 2.013528,\\n \\\u0022longitude\\\u0022: 32.720097\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501554,\\n \\\u0022latitude\\\u0022: 1.086497,\\n \\\u0022longitude\\\u0022: 34.925454\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501654,\\n \\\u0022latitude\\\u0022: -2.523189,\\n \\\u0022longitude\\\u0022: 38.028038\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501630,\\n \\\u0022latitude\\\u0022: 1.152937,\\n \\\u0022longitude\\\u0022: 34.922366\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501619,\\n \\\u0022latitude\\\u0022: 0.437434,\\n \\\u0022longitude\\\u0022: 34.171457\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501733,\\n \\\u0022latitude\\\u0022: 0.49393,\\n \\\u0022longitude\\\u0022: 34.275748\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501658,\\n \\\u0022latitude\\\u0022: -0.163641,\\n \\\u0022longitude\\\u0022: 34.945422\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501562,\\n \\\u0022latitude\\\u0022: 0.612111,\\n \\\u0022longitude\\\u0022: 34.231596\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501721,\\n \\\u0022latitude\\\u0022: -0.027494,\\n \\\u0022longitude\\\u0022: 35.758115\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501632,\\n \\\u0022latitude\\\u0022: -0.065139,\\n \\\u0022longitude\\\u0022: 35.726192\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501571,\\n \\\u0022latitude\\\u0022: -1.064885,\\n \\\u0022longitude\\\u0022: 34.799395\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501737,\\n \\\u0022latitude\\\u0022: -0.621761,\\n \\\u0022longitude\\\u0022: 34.253321\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501680,\\n \\\u0022latitude\\\u0022: -0.014424,\\n \\\u0022longitude\\\u0022: 37.767433\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501739,\\n \\\u0022latitude\\\u0022: -0.14295,\\n \\\u0022longitude\\\u0022: 34.931722\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501557,\\n \\\u0022latitude\\\u0022: -1.100271,\\n \\\u0022longitude\\\u0022: 35.835266\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501584,\\n \\\u0022latitude\\\u0022: -0.325789,\\n \\\u0022longitude\\\u0022: 35.937615\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501624,\\n \\\u0022latitude\\\u0022: -0.143001,\\n \\\u0022longitude\\\u0022: 34.931942\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501665,\\n \\\u0022latitude\\\u0022: 1.056117,\\n \\\u0022longitude\\\u0022: 34.785375\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501685,\\n \\\u0022latitude\\\u0022: -1.780818,\\n \\\u0022longitude\\\u0022: 37.627784\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501548,\\n \\\u0022latitude\\\u0022: -1.778756,\\n \\\u0022longitude\\\u0022: 37.628641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501559,\\n \\\u0022latitude\\\u0022: -1.778058,\\n \\\u0022longitude\\\u0022: 37.625951\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501545,\\n \\\u0022latitude\\\u0022: 0.355653,\\n \\\u0022longitude\\\u0022: 34.497279\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501587,\\n \\\u0022latitude\\\u0022: -1.88886,\\n \\\u0022longitude\\\u0022: 37.165505\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501729,\\n \\\u0022latitude\\\u0022: -1.782701,\\n \\\u0022longitude\\\u0022: 37.618295\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500795,\\n \\\u0022latitude\\\u0022: -0.303827,\\n \\\u0022longitude\\\u0022: 36.141816\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501549,\\n \\\u0022latitude\\\u0022: -1.077608,\\n \\\u0022longitude\\\u0022: 35.789736\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501596,\\n \\\u0022latitude\\\u0022: -2.524215,\\n \\\u0022longitude\\\u0022: 38.030616\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501652,\\n \\\u0022latitude\\\u0022: -1.961306,\\n \\\u0022longitude\\\u0022: 37.241132\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501679,\\n \\\u0022latitude\\\u0022: 0.075506,\\n \\\u0022longitude\\\u0022: 37.149611\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501640,\\n \\\u0022latitude\\\u0022: 0.058957,\\n \\\u0022longitude\\\u0022: 34.281221\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501653,\\n \\\u0022latitude\\\u0022: 0.454525,\\n \\\u0022longitude\\\u0022: 34.143551\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501618,\\n \\\u0022latitude\\\u0022: 0.706795,\\n \\\u0022longitude\\\u0022: 30.513084\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500444,\\n \\\u0022latitude\\\u0022: -5.30136,\\n \\\u0022longitude\\\u0022: 38.612329\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500449,\\n \\\u0022latitude\\\u0022: -6.819528,\\n \\\u0022longitude\\\u0022: 37.660117\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500440,\\n \\\u0022latitude\\\u0022: -2.713102,\\n \\\u0022longitude\\\u0022: 33.023827\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500443,\\n \\\u0022latitude\\\u0022: -3.844702,\\n \\\u0022longitude\\\u0022: 32.676039\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500447,\\n \\\u0022latitude\\\u0022: -8.698313,\\n \\\u0022longitude\\\u0022: 36.028752\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500455,\\n \\\u0022latitude\\\u0022: -2.826725,\\n \\\u0022longitude\\\u0022: 32.177719\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500452,\\n \\\u0022latitude\\\u0022: 10.288208,\\n \\\u0022longitude\\\u0022: 9.847155\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500438,\\n \\\u0022latitude\\\u0022: -1.289061,\\n \\\u0022longitude\\\u0022: 31.571663\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500437,\\n \\\u0022latitude\\\u0022: -5.047182,\\n \\\u0022longitude\\\u0022: 38.477987\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500441,\\n \\\u0022latitude\\\u0022: -1.288298,\\n \\\u0022longitude\\\u0022: 31.571446\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500442,\\n \\\u0022latitude\\\u0022: -6.900294,\\n \\\u0022longitude\\\u0022: 39.158587\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500450,\\n \\\u0022latitude\\\u0022: -2.713072,\\n \\\u0022longitude\\\u0022: 33.023833\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500456,\\n \\\u0022latitude\\\u0022: -6.818495,\\n \\\u0022longitude\\\u0022: 39.179979\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500451,\\n \\\u0022latitude\\\u0022: 0.480988,\\n \\\u0022longitude\\\u0022: 34.210471\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500439,\\n \\\u0022latitude\\\u0022: -3.300279,\\n \\\u0022longitude\\\u0022: 36.376427\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500448,\\n \\\u0022latitude\\\u0022: -2.839805,\\n \\\u0022longitude\\\u0022: 31.742363\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500454,\\n \\\u0022latitude\\\u0022: -4.319891,\\n \\\u0022longitude\\\u0022: 37.100877\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500458,\\n \\\u0022latitude\\\u0022: 9.087825,\\n \\\u0022longitude\\\u0022: 5.982211\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500457,\\n \\\u0022latitude\\\u0022: -5.085917,\\n \\\u0022longitude\\\u0022: 39.083826\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500459,\\n \\\u0022latitude\\\u0022: 7.118708,\\n \\\u0022longitude\\\u0022: 3.325646\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500482,\\n \\\u0022latitude\\\u0022: -25.815202,\\n \\\u0022longitude\\\u0022: 32.571448\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500463,\\n \\\u0022latitude\\\u0022: -14.420099,\\n \\\u0022longitude\\\u0022: 38.242006\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500464,\\n \\\u0022latitude\\\u0022: -14.860045,\\n \\\u0022longitude\\\u0022: 37.720079\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500468,\\n \\\u0022latitude\\\u0022: -15.024382,\\n \\\u0022longitude\\\u0022: 38.048443\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500475,\\n \\\u0022latitude\\\u0022: -14.899674,\\n \\\u0022longitude\\\u0022: 37.490784\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500462,\\n \\\u0022latitude\\\u0022: -14.974937,\\n \\\u0022longitude\\\u0022: 38.006355\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500467,\\n \\\u0022latitude\\\u0022: -15.46071,\\n \\\u0022longitude\\\u0022: 36.230207\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500470,\\n \\\u0022latitude\\\u0022: -25.815289,\\n \\\u0022longitude\\\u0022: 32.571507\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500476,\\n \\\u0022latitude\\\u0022: -15.0253,\\n \\\u0022longitude\\\u0022: 38.035359\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500479,\\n \\\u0022latitude\\\u0022: -14.893198,\\n \\\u0022longitude\\\u0022: 37.723085\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500481,\\n \\\u0022latitude\\\u0022: -15.019163,\\n \\\u0022longitude\\\u0022: 39.133166\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500483,\\n \\\u0022latitude\\\u0022: -17.315918,\\n \\\u0022longitude\\\u0022: 35.9548\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500484,\\n \\\u0022latitude\\\u0022: -14.387051,\\n \\\u0022longitude\\\u0022: 38.270347\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500469,\\n \\\u0022latitude\\\u0022: -14.664816,\\n \\\u0022longitude\\\u0022: 38.890971\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500471,\\n \\\u0022latitude\\\u0022: -14.943314,\\n \\\u0022longitude\\\u0022: 38.323957\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500472,\\n \\\u0022latitude\\\u0022: -15.958705,\\n \\\u0022longitude\\\u0022: 36.862586\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500477,\\n \\\u0022latitude\\\u0022: -14.944832,\\n \\\u0022longitude\\\u0022: 38.323298\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500480,\\n \\\u0022latitude\\\u0022: -14.552332,\\n \\\u0022longitude\\\u0022: 38.749416\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501746,\\n \\\u0022latitude\\\u0022: 0.951707,\\n \\\u0022longitude\\\u0022: 35.210925\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 623410,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 100033,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500529,\\n \\\u0022latitude\\\u0022: 7.821289,\\n \\\u0022longitude\\\u0022: 3.926464\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500530,\\n \\\u0022latitude\\\u0022: 8.922031,\\n \\\u0022longitude\\\u0022: 3.783355\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500586,\\n \\\u0022latitude\\\u0022: 7.824047,\\n \\\u0022longitude\\\u0022: 3.901093\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500498,\\n \\\u0022latitude\\\u0022: 8.829889,\\n \\\u0022longitude\\\u0022: 3.791329\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500487,\\n \\\u0022latitude\\\u0022: 8.749946,\\n \\\u0022longitude\\\u0022: 6.358805\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500532,\\n \\\u0022latitude\\\u0022: 7.873798,\\n \\\u0022longitude\\\u0022: 3.945091\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500588,\\n \\\u0022latitude\\\u0022: 7.882665,\\n \\\u0022longitude\\\u0022: 3.924846\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500489,\\n \\\u0022latitude\\\u0022: 7.954323,\\n \\\u0022longitude\\\u0022: 3.611863\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500525,\\n \\\u0022latitude\\\u0022: 7.879926,\\n \\\u0022longitude\\\u0022: 3.930393\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500538,\\n \\\u0022latitude\\\u0022: 7.847912,\\n \\\u0022longitude\\\u0022: 3.906527\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500581,\\n \\\u0022latitude\\\u0022: 9.064098,\\n \\\u0022longitude\\\u0022: 3.863493\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500585,\\n \\\u0022latitude\\\u0022: 7.900851,\\n \\\u0022longitude\\\u0022: 3.7502\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500571,\\n \\\u0022latitude\\\u0022: 7.522471,\\n \\\u0022longitude\\\u0022: 3.424985\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500495,\\n \\\u0022latitude\\\u0022: 7.522489,\\n \\\u0022longitude\\\u0022: 3.424937\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500496,\\n \\\u0022latitude\\\u0022: 8.215645,\\n \\\u0022longitude\\\u0022: 3.461345\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500589,\\n \\\u0022latitude\\\u0022: 7.901286,\\n \\\u0022longitude\\\u0022: 3.731872\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500579,\\n \\\u0022latitude\\\u0022: 7.809621,\\n \\\u0022longitude\\\u0022: 3.905936\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500587,\\n \\\u0022latitude\\\u0022: 7.545768,\\n \\\u0022longitude\\\u0022: 3.4455\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500524,\\n \\\u0022latitude\\\u0022: 7.901474,\\n \\\u0022longitude\\\u0022: 3.777809\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500536,\\n \\\u0022latitude\\\u0022: 7.864238,\\n \\\u0022longitude\\\u0022: 3.911704\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500539,\\n \\\u0022latitude\\\u0022: 7.864203,\\n \\\u0022longitude\\\u0022: 3.911806\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500528,\\n \\\u0022latitude\\\u0022: 8.084639,\\n \\\u0022longitude\\\u0022: 4.216105\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500577,\\n \\\u0022latitude\\\u0022: 8.514909,\\n \\\u0022longitude\\\u0022: 3.438753\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500491,\\n \\\u0022latitude\\\u0022: 7.85029,\\n \\\u0022longitude\\\u0022: 3.906625\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500578,\\n \\\u0022latitude\\\u0022: 8.121256,\\n \\\u0022longitude\\\u0022: 4.223481\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500497,\\n \\\u0022latitude\\\u0022: 7.586986,\\n \\\u0022longitude\\\u0022: 3.449859\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500575,\\n \\\u0022latitude\\\u0022: 7.232668,\\n \\\u0022longitude\\\u0022: 3.134902\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500499,\\n \\\u0022latitude\\\u0022: 7.877303,\\n \\\u0022longitude\\\u0022: 3.924864\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500580,\\n \\\u0022latitude\\\u0022: 7.865361,\\n \\\u0022longitude\\\u0022: 3.918412\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500527,\\n \\\u0022latitude\\\u0022: 7.522465,\\n \\\u0022longitude\\\u0022: 3.425071\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500490,\\n \\\u0022latitude\\\u0022: 7.032905,\\n \\\u0022longitude\\\u0022: 3.008261\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500576,\\n \\\u0022latitude\\\u0022: 7.872128,\\n \\\u0022longitude\\\u0022: 3.934881\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500582,\\n \\\u0022latitude\\\u0022: 6.655638,\\n \\\u0022longitude\\\u0022: 2.784749\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500492,\\n \\\u0022latitude\\\u0022: 7.879023,\\n \\\u0022longitude\\\u0022: 3.939284\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500572,\\n \\\u0022latitude\\\u0022: 6.581755,\\n \\\u0022longitude\\\u0022: 2.799413\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500493,\\n \\\u0022latitude\\\u0022: 7.251343,\\n \\\u0022longitude\\\u0022: 3.036674\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500584,\\n \\\u0022latitude\\\u0022: 7.850564,\\n \\\u0022longitude\\\u0022: 3.90673\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500573,\\n \\\u0022latitude\\\u0022: 7.811029,\\n \\\u0022longitude\\\u0022: 3.888401\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500574,\\n \\\u0022latitude\\\u0022: 8.219724,\\n \\\u0022longitude\\\u0022: 3.461372\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500526,\\n \\\u0022latitude\\\u0022: 7.929952,\\n \\\u0022longitude\\\u0022: 3.854023\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500485,\\n \\\u0022latitude\\\u0022: 8.512568,\\n \\\u0022longitude\\\u0022: 3.420568\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500531,\\n \\\u0022latitude\\\u0022: 7.859709,\\n \\\u0022longitude\\\u0022: 3.91553\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500486,\\n \\\u0022latitude\\\u0022: 7.440453,\\n \\\u0022longitude\\\u0022: 4.012542\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500488,\\n \\\u0022latitude\\\u0022: 7.831002,\\n \\\u0022longitude\\\u0022: 3.908134\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500533,\\n \\\u0022latitude\\\u0022: 7.064959,\\n \\\u0022longitude\\\u0022: 2.983352\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500534,\\n \\\u0022latitude\\\u0022: 8.125693,\\n \\\u0022longitude\\\u0022: 4.221096\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500535,\\n \\\u0022latitude\\\u0022: 8.167645,\\n \\\u0022longitude\\\u0022: 4.050464\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500537,\\n \\\u0022latitude\\\u0022: 7.232669,\\n \\\u0022longitude\\\u0022: 3.134881\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500583,\\n \\\u0022latitude\\\u0022: 7.876994,\\n \\\u0022longitude\\\u0022: 3.92632\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501297,\\n \\\u0022latitude\\\u0022: 7.255592,\\n \\\u0022longitude\\\u0022: -1.40301\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501295,\\n \\\u0022latitude\\\u0022: 10.232595,\\n \\\u0022longitude\\\u0022: -1.282656\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501296,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501299,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501301,\\n \\\u0022latitude\\\u0022: 10.442373,\\n \\\u0022longitude\\\u0022: -1.050249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501302,\\n \\\u0022latitude\\\u0022: 10.02983,\\n \\\u0022longitude\\\u0022: -2.495127\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501305,\\n \\\u0022latitude\\\u0022: 10.872542,\\n \\\u0022longitude\\\u0022: -1.986699\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501323,\\n \\\u0022latitude\\\u0022: 10.76819,\\n \\\u0022longitude\\\u0022: -1.129628\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501328,\\n \\\u0022latitude\\\u0022: 10.707407,\\n \\\u0022longitude\\\u0022: -0.836679\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501311,\\n \\\u0022latitude\\\u0022: 10.97425,\\n \\\u0022longitude\\\u0022: -2.208768\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501317,\\n \\\u0022latitude\\\u0022: 10.442207,\\n \\\u0022longitude\\\u0022: -1.049538\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501326,\\n \\\u0022latitude\\\u0022: 10.665371,\\n \\\u0022longitude\\\u0022: -1.950394\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501327,\\n \\\u0022latitude\\\u0022: 10.880501,\\n \\\u0022longitude\\\u0022: -2.062676\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501307,\\n \\\u0022latitude\\\u0022: 10.904254,\\n \\\u0022longitude\\\u0022: -1.090994\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501308,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501309,\\n \\\u0022latitude\\\u0022: 10.237413,\\n \\\u0022longitude\\\u0022: -1.2781\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501310,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501312,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501313,\\n \\\u0022latitude\\\u0022: 10.870138,\\n \\\u0022longitude\\\u0022: -1.968381\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501315,\\n \\\u0022latitude\\\u0022: 11.018007,\\n \\\u0022longitude\\\u0022: -0.267883\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501316,\\n \\\u0022latitude\\\u0022: 10.872026,\\n \\\u0022longitude\\\u0022: -0.570659\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501322,\\n \\\u0022latitude\\\u0022: 10.045589,\\n \\\u0022longitude\\\u0022: -2.499339\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501325,\\n \\\u0022latitude\\\u0022: 10.877326,\\n \\\u0022longitude\\\u0022: -2.150733\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501306,\\n \\\u0022latitude\\\u0022: 10.761779,\\n \\\u0022longitude\\\u0022: -0.868627\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501331,\\n \\\u0022latitude\\\u0022: 10.641319,\\n \\\u0022longitude\\\u0022: -2.011869\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501337,\\n \\\u0022latitude\\\u0022: 10.753754,\\n \\\u0022longitude\\\u0022: -1.893143\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501342,\\n \\\u0022latitude\\\u0022: 9.920221,\\n \\\u0022longitude\\\u0022: -0.344609\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501345,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501333,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501344,\\n \\\u0022latitude\\\u0022: 10.821505,\\n \\\u0022longitude\\\u0022: -0.935354\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501346,\\n \\\u0022latitude\\\u0022: 10.883414,\\n \\\u0022longitude\\\u0022: -1.100868\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501332,\\n \\\u0022latitude\\\u0022: 10.806,\\n \\\u0022longitude\\\u0022: -0.877822\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501334,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501336,\\n \\\u0022latitude\\\u0022: 10.872677,\\n \\\u0022longitude\\\u0022: -1.986579\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501339,\\n \\\u0022latitude\\\u0022: 10.757488,\\n \\\u0022longitude\\\u0022: -1.081871\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501341,\\n \\\u0022latitude\\\u0022: 10.74153,\\n \\\u0022longitude\\\u0022: -2.295115\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 100119,\\n \\\u0022latitude\\\u0022: 6.742379,\\n \\\u0022longitude\\\u0022: 7.012228\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 1,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 6,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 565656,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500776,\\n \\\u0022latitude\\\u0022: 8.855775,\\n \\\u0022longitude\\\u0022: 7.278473\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501291,\\n \\\u0022latitude\\\u0022: 10.288196,\\n \\\u0022longitude\\\u0022: 9.847205\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501354,\\n \\\u0022latitude\\\u0022: 10.330624,\\n \\\u0022longitude\\\u0022: -1.735186\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501359,\\n \\\u0022latitude\\\u0022: 10.113655,\\n \\\u0022longitude\\\u0022: -0.819824\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501361,\\n \\\u0022latitude\\\u0022: 10.23171,\\n \\\u0022longitude\\\u0022: -1.283727\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501348,\\n \\\u0022latitude\\\u0022: 10.735824,\\n \\\u0022longitude\\\u0022: -1.291635\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501352,\\n \\\u0022latitude\\\u0022: 10.734017,\\n \\\u0022longitude\\\u0022: -1.276884\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501363,\\n \\\u0022latitude\\\u0022: 10.5872,\\n \\\u0022longitude\\\u0022: -1.895221\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501367,\\n \\\u0022latitude\\\u0022: 10.870257,\\n \\\u0022longitude\\\u0022: -1.968324\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501369,\\n \\\u0022latitude\\\u0022: 10.733538,\\n \\\u0022longitude\\\u0022: -1.28417\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501374,\\n \\\u0022latitude\\\u0022: 10.876781,\\n \\\u0022longitude\\\u0022: -1.978077\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501377,\\n \\\u0022latitude\\\u0022: 10.117108,\\n \\\u0022longitude\\\u0022: -1.292918\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501381,\\n \\\u0022latitude\\\u0022: 10.815422,\\n \\\u0022longitude\\\u0022: -1.182159\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501383,\\n \\\u0022latitude\\\u0022: 10.775081,\\n \\\u0022longitude\\\u0022: -1.098067\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501376,\\n \\\u0022latitude\\\u0022: 10.657788,\\n \\\u0022longitude\\\u0022: -1.991197\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501379,\\n \\\u0022latitude\\\u0022: 10.888975,\\n \\\u0022longitude\\\u0022: -2.109986\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501387,\\n \\\u0022latitude\\\u0022: 10.861047,\\n \\\u0022longitude\\\u0022: -1.992607\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501391,\\n \\\u0022latitude\\\u0022: 10.669222,\\n \\\u0022longitude\\\u0022: -2.639564\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501393,\\n \\\u0022latitude\\\u0022: 10.870235,\\n \\\u0022longitude\\\u0022: -1.988757\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500940,\\n \\\u0022latitude\\\u0022: 0.317574,\\n \\\u0022longitude\\\u0022: 32.601624\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500939,\\n \\\u0022latitude\\\u0022: 0.317664,\\n \\\u0022longitude\\\u0022: 32.601583\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501411,\\n \\\u0022latitude\\\u0022: 10.915235,\\n \\\u0022longitude\\\u0022: -1.155379\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501402,\\n \\\u0022latitude\\\u0022: 9.823033,\\n \\\u0022longitude\\\u0022: -2.207187\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501406,\\n \\\u0022latitude\\\u0022: 10.237185,\\n \\\u0022longitude\\\u0022: -1.27828\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501396,\\n \\\u0022latitude\\\u0022: 10.020775,\\n \\\u0022longitude\\\u0022: -2.387645\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501410,\\n \\\u0022latitude\\\u0022: 10.904121,\\n \\\u0022longitude\\\u0022: -1.090982\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501412,\\n \\\u0022latitude\\\u0022: 10.918542,\\n \\\u0022longitude\\\u0022: -2.197453\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501413,\\n \\\u0022latitude\\\u0022: 10.16048,\\n \\\u0022longitude\\\u0022: -0.802176\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501395,\\n \\\u0022latitude\\\u0022: 6.564612,\\n \\\u0022longitude\\\u0022: -1.908804\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501427,\\n \\\u0022latitude\\\u0022: 10.767518,\\n \\\u0022longitude\\\u0022: -0.862861\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501430,\\n \\\u0022latitude\\\u0022: 10.33722,\\n \\\u0022longitude\\\u0022: -0.800623\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501439,\\n \\\u0022latitude\\\u0022: 10.045634,\\n \\\u0022longitude\\\u0022: -2.499451\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501421,\\n \\\u0022latitude\\\u0022: 10.911392,\\n \\\u0022longitude\\\u0022: -0.518644\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501422,\\n \\\u0022latitude\\\u0022: 10.877065,\\n \\\u0022longitude\\\u0022: -1.978883\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501435,\\n \\\u0022latitude\\\u0022: 10.33721,\\n \\\u0022longitude\\\u0022: -0.800591\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501449,\\n \\\u0022latitude\\\u0022: 10.733394,\\n \\\u0022longitude\\\u0022: -1.284367\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501450,\\n \\\u0022latitude\\\u0022: 10.138438,\\n \\\u0022longitude\\\u0022: -2.379823\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501436,\\n \\\u0022latitude\\\u0022: 10.905193,\\n \\\u0022longitude\\\u0022: -1.089975\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501440,\\n \\\u0022latitude\\\u0022: 10.883284,\\n \\\u0022longitude\\\u0022: -1.100907\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501414,\\n \\\u0022latitude\\\u0022: 9.873137,\\n \\\u0022longitude\\\u0022: -2.020816\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501415,\\n \\\u0022latitude\\\u0022: 5.621249,\\n \\\u0022longitude\\\u0022: -0.182783\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501442,\\n \\\u0022latitude\\\u0022: 10.459409,\\n \\\u0022longitude\\\u0022: -1.304604\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501416,\\n \\\u0022latitude\\\u0022: 10.045904,\\n \\\u0022longitude\\\u0022: -2.499484\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501419,\\n \\\u0022latitude\\\u0022: 10.877657,\\n \\\u0022longitude\\\u0022: -2.067036\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501423,\\n \\\u0022latitude\\\u0022: 10.237259,\\n \\\u0022longitude\\\u0022: -1.278284\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501425,\\n \\\u0022latitude\\\u0022: 10.237274,\\n \\\u0022longitude\\\u0022: -1.278284\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501460,\\n \\\u0022latitude\\\u0022: 10.707448,\\n \\\u0022longitude\\\u0022: -0.836711\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501466,\\n \\\u0022latitude\\\u0022: 10.427926,\\n \\\u0022longitude\\\u0022: -0.944732\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501469,\\n \\\u0022latitude\\\u0022: 10.230849,\\n \\\u0022longitude\\\u0022: -1.282107\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501464,\\n \\\u0022latitude\\\u0022: 9.445458,\\n \\\u0022longitude\\\u0022: -0.005753\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501476,\\n \\\u0022latitude\\\u0022: 10.870511,\\n \\\u0022longitude\\\u0022: -1.988072\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501480,\\n \\\u0022latitude\\\u0022: 10.757424,\\n \\\u0022longitude\\\u0022: -1.081945\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501482,\\n \\\u0022latitude\\\u0022: 10.904279,\\n \\\u0022longitude\\\u0022: -1.090991\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501459,\\n \\\u0022latitude\\\u0022: 10.883487,\\n \\\u0022longitude\\\u0022: -1.100973\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501471,\\n \\\u0022latitude\\\u0022: 10.73759,\\n \\\u0022longitude\\\u0022: -0.714573\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501463,\\n \\\u0022latitude\\\u0022: 10.815412,\\n \\\u0022longitude\\\u0022: -1.182142\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501468,\\n \\\u0022latitude\\\u0022: 10.904162,\\n \\\u0022longitude\\\u0022: -1.090888\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501481,\\n \\\u0022latitude\\\u0022: 9.565932,\\n \\\u0022longitude\\\u0022: -1.031347\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501490,\\n \\\u0022latitude\\\u0022: 10.796012,\\n \\\u0022longitude\\\u0022: -0.870643\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501488,\\n \\\u0022latitude\\\u0022: 9.890072,\\n \\\u0022longitude\\\u0022: -2.359425\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501495,\\n \\\u0022latitude\\\u0022: 10.113539,\\n \\\u0022longitude\\\u0022: -0.819966\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501508,\\n \\\u0022latitude\\\u0022: 10.617213,\\n \\\u0022longitude\\\u0022: -0.815382\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501494,\\n \\\u0022latitude\\\u0022: 9.398143,\\n \\\u0022longitude\\\u0022: -0.827552\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501500,\\n \\\u0022latitude\\\u0022: 10.735842,\\n \\\u0022longitude\\\u0022: -1.291692\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501505,\\n \\\u0022latitude\\\u0022: 10.878608,\\n \\\u0022longitude\\\u0022: -0.555516\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501498,\\n \\\u0022latitude\\\u0022: 10.883331,\\n \\\u0022longitude\\\u0022: -1.100887\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501499,\\n \\\u0022latitude\\\u0022: 10.849594,\\n \\\u0022longitude\\\u0022: 0.82002\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501516,\\n \\\u0022latitude\\\u0022: 10.237353,\\n \\\u0022longitude\\\u0022: -1.278113\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501504,\\n \\\u0022latitude\\\u0022: 10.882695,\\n \\\u0022longitude\\\u0022: -1.978443\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501519,\\n \\\u0022latitude\\\u0022: 9.937153,\\n \\\u0022longitude\\\u0022: -2.205994\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501507,\\n \\\u0022latitude\\\u0022: 10.598221,\\n \\\u0022longitude\\\u0022: -0.851942\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501512,\\n \\\u0022latitude\\\u0022: 9.565914,\\n \\\u0022longitude\\\u0022: -1.031202\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501514,\\n \\\u0022latitude\\\u0022: 10.2374,\\n \\\u0022longitude\\\u0022: -1.278121\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501517,\\n \\\u0022latitude\\\u0022: 10.028883,\\n \\\u0022longitude\\\u0022: -0.976396\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501521,\\n \\\u0022latitude\\\u0022: 10.821531,\\n \\\u0022longitude\\\u0022: -0.935305\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501524,\\n \\\u0022latitude\\\u0022: 10.733343,\\n \\\u0022longitude\\\u0022: -1.284422\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501529,\\n \\\u0022latitude\\\u0022: 9.937148,\\n \\\u0022longitude\\\u0022: -2.206235\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501538,\\n \\\u0022latitude\\\u0022: 10.231974,\\n \\\u0022longitude\\\u0022: -1.283842\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501537,\\n \\\u0022latitude\\\u0022: 10.866836,\\n \\\u0022longitude\\\u0022: -1.125208\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501531,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501533,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501541,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501530,\\n \\\u0022latitude\\\u0022: 10.933259,\\n \\\u0022longitude\\\u0022: -0.500109\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501478,\\n \\\u0022latitude\\\u0022: 11.068915,\\n \\\u0022longitude\\\u0022: -0.240704\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501542,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 232323,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501776,\\n \\\u0022latitude\\\u0022: 0.997673,\\n \\\u0022longitude\\\u0022: 34.896844\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501768,\\n \\\u0022latitude\\\u0022: 0.214606,\\n \\\u0022longitude\\\u0022: 35.311065\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501772,\\n \\\u0022latitude\\\u0022: 0.683904,\\n \\\u0022longitude\\\u0022: 35.309452\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501781,\\n \\\u0022latitude\\\u0022: 0.653004,\\n \\\u0022longitude\\\u0022: 35.242162\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501748,\\n \\\u0022latitude\\\u0022: 0.814003,\\n \\\u0022longitude\\\u0022: 34.85504\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501750,\\n \\\u0022latitude\\\u0022: 0.293856,\\n \\\u0022longitude\\\u0022: 35.405877\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501753,\\n \\\u0022latitude\\\u0022: 1.012474,\\n \\\u0022longitude\\\u0022: 35.046656\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501785,\\n \\\u0022latitude\\\u0022: 0.223834,\\n \\\u0022longitude\\\u0022: 35.312347\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501756,\\n \\\u0022latitude\\\u0022: 0.666946,\\n \\\u0022longitude\\\u0022: 35.210757\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501760,\\n \\\u0022latitude\\\u0022: 0.498724,\\n \\\u0022longitude\\\u0022: 35.195672\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501788,\\n \\\u0022latitude\\\u0022: 0.684184,\\n \\\u0022longitude\\\u0022: 35.252103\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501765,\\n \\\u0022latitude\\\u0022: -0.05794,\\n \\\u0022longitude\\\u0022: 35.037229\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501767,\\n \\\u0022latitude\\\u0022: -1.992992,\\n \\\u0022longitude\\\u0022: 37.346561\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501777,\\n \\\u0022latitude\\\u0022: 0.658849,\\n \\\u0022longitude\\\u0022: 35.427837\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501793,\\n \\\u0022latitude\\\u0022: -2.00273,\\n \\\u0022longitude\\\u0022: 37.350446\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501779,\\n \\\u0022latitude\\\u0022: 0.205067,\\n \\\u0022longitude\\\u0022: 35.328198\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501782,\\n \\\u0022latitude\\\u0022: 0.244286,\\n \\\u0022longitude\\\u0022: 35.388276\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501752,\\n \\\u0022latitude\\\u0022: 0.158856,\\n \\\u0022longitude\\\u0022: 35.204019\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501755,\\n \\\u0022latitude\\\u0022: 0.265073,\\n \\\u0022longitude\\\u0022: 35.397809\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501758,\\n \\\u0022latitude\\\u0022: 0.690648,\\n \\\u0022longitude\\\u0022: 35.19409\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501759,\\n \\\u0022latitude\\\u0022: 0.25893,\\n \\\u0022longitude\\\u0022: 34.218231\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501763,\\n \\\u0022latitude\\\u0022: -0.057949,\\n \\\u0022longitude\\\u0022: 35.037243\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501775,\\n \\\u0022latitude\\\u0022: 0.059298,\\n \\\u0022longitude\\\u0022: 34.285299\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501791,\\n \\\u0022latitude\\\u0022: 0.183027,\\n \\\u0022longitude\\\u0022: 35.328062\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501792,\\n \\\u0022latitude\\\u0022: 0.265175,\\n \\\u0022longitude\\\u0022: 35.397674\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501770,\\n \\\u0022latitude\\\u0022: 0.293828,\\n \\\u0022longitude\\\u0022: 35.40595\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501780,\\n \\\u0022latitude\\\u0022: 0.644234,\\n \\\u0022longitude\\\u0022: 35.251967\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501757,\\n \\\u0022latitude\\\u0022: 0.437161,\\n \\\u0022longitude\\\u0022: 35.383622\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501761,\\n \\\u0022latitude\\\u0022: 0.185751,\\n \\\u0022longitude\\\u0022: 35.409307\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501762,\\n \\\u0022latitude\\\u0022: 0.676982,\\n \\\u0022longitude\\\u0022: 35.226402\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501764,\\n \\\u0022latitude\\\u0022: -1.989206,\\n \\\u0022longitude\\\u0022: 37.348729\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501789,\\n \\\u0022latitude\\\u0022: 0.207332,\\n \\\u0022longitude\\\u0022: 35.321312\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501766,\\n \\\u0022latitude\\\u0022: -0.399113,\\n \\\u0022longitude\\\u0022: 35.691349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501771,\\n \\\u0022latitude\\\u0022: 0.241255,\\n \\\u0022longitude\\\u0022: 35.389551\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501783,\\n \\\u0022latitude\\\u0022: 1.038303,\\n \\\u0022longitude\\\u0022: 35.195611\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501747,\\n \\\u0022latitude\\\u0022: 0.165755,\\n \\\u0022longitude\\\u0022: 35.33183\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501784,\\n \\\u0022latitude\\\u0022: 0.629412,\\n \\\u0022longitude\\\u0022: 35.243267\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501749,\\n \\\u0022latitude\\\u0022: 0.684152,\\n \\\u0022longitude\\\u0022: 35.25218\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501751,\\n \\\u0022latitude\\\u0022: 0.925515,\\n \\\u0022longitude\\\u0022: 35.297278\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501754,\\n \\\u0022latitude\\\u0022: 0.227057,\\n \\\u0022longitude\\\u0022: 35.318911\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501786,\\n \\\u0022latitude\\\u0022: 0.270537,\\n \\\u0022longitude\\\u0022: 35.394674\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501774,\\n \\\u0022latitude\\\u0022: 0.176643,\\n \\\u0022longitude\\\u0022: 35.288795\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501790,\\n \\\u0022latitude\\\u0022: 0.426839,\\n \\\u0022longitude\\\u0022: 35.11269\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 666666,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 56528,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 569828,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 900111,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 6928355,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500543,\\n \\\u0022latitude\\\u0022: -0.960782,\\n \\\u0022longitude\\\u0022: 37.02339\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500540,\\n \\\u0022latitude\\\u0022: -1.22335,\\n \\\u0022longitude\\\u0022: 34.622195\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500568,\\n \\\u0022latitude\\\u0022: 0.090777,\\n \\\u0022longitude\\\u0022: 37.492359\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500556,\\n \\\u0022latitude\\\u0022: -0.206069,\\n \\\u0022longitude\\\u0022: 34.848498\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500552,\\n \\\u0022latitude\\\u0022: 0.091907,\\n \\\u0022longitude\\\u0022: 37.519545\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500548,\\n \\\u0022latitude\\\u0022: -0.152115,\\n \\\u0022longitude\\\u0022: 34.845539\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500570,\\n \\\u0022latitude\\\u0022: -1.100645,\\n \\\u0022longitude\\\u0022: 35.841838\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500558,\\n \\\u0022latitude\\\u0022: -0.152314,\\n \\\u0022longitude\\\u0022: 34.845554\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500231,\\n \\\u0022latitude\\\u0022: 11.079932,\\n \\\u0022longitude\\\u0022: 7.699882\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500232,\\n \\\u0022latitude\\\u0022: 11.079955,\\n \\\u0022longitude\\\u0022: 7.699982\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500248,\\n \\\u0022latitude\\\u0022: 7.395462,\\n \\\u0022longitude\\\u0022: 3.755107\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 458594,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 562985,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500541,\\n \\\u0022latitude\\\u0022: 6.786481,\\n \\\u0022longitude\\\u0022: 3.890962\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500542,\\n \\\u0022latitude\\\u0022: 11.733509,\\n \\\u0022longitude\\\u0022: 8.454839\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500544,\\n \\\u0022latitude\\\u0022: 11.733544,\\n \\\u0022longitude\\\u0022: 8.454854\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500546,\\n \\\u0022latitude\\\u0022: 11.191174,\\n \\\u0022longitude\\\u0022: 7.992847\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 649679,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 999999,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500262,\\n \\\u0022latitude\\\u0022: 8.388845,\\n \\\u0022longitude\\\u0022: 9.942809\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500263,\\n \\\u0022latitude\\\u0022: 11.640905,\\n \\\u0022longitude\\\u0022: 8.411941\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500264,\\n \\\u0022latitude\\\u0022: 7.841798,\\n \\\u0022longitude\\\u0022: 10.969706\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500353,\\n \\\u0022latitude\\\u0022: 11.602861,\\n \\\u0022longitude\\\u0022: 8.430552\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500376,\\n \\\u0022latitude\\\u0022: 11.530674,\\n \\\u0022longitude\\\u0022: 8.652549\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500278,\\n \\\u0022latitude\\\u0022: 11.08089,\\n \\\u0022longitude\\\u0022: 7.702138\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500354,\\n \\\u0022latitude\\\u0022: 8.205677,\\n \\\u0022longitude\\\u0022: 7.30314\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500386,\\n \\\u0022latitude\\\u0022: 8.447943,\\n \\\u0022longitude\\\u0022: 10.824519\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500283,\\n \\\u0022latitude\\\u0022: 7.917483,\\n \\\u0022longitude\\\u0022: 8.321585\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500284,\\n \\\u0022latitude\\\u0022: 8.537388,\\n \\\u0022longitude\\\u0022: 9.003022\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500272,\\n \\\u0022latitude\\\u0022: 11.079757,\\n \\\u0022longitude\\\u0022: 7.700164\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500379,\\n \\\u0022latitude\\\u0022: 8.480879,\\n \\\u0022longitude\\\u0022: 8.275717\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500380,\\n \\\u0022latitude\\\u0022: 8.870691,\\n \\\u0022longitude\\\u0022: 6.705176\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500381,\\n \\\u0022latitude\\\u0022: 11.034085,\\n \\\u0022longitude\\\u0022: 7.91549\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500266,\\n \\\u0022latitude\\\u0022: 11.080163,\\n \\\u0022longitude\\\u0022: 7.702201\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500383,\\n \\\u0022latitude\\\u0022: 9.31397,\\n \\\u0022longitude\\\u0022: 8.030829\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500267,\\n \\\u0022latitude\\\u0022: 9.150191,\\n \\\u0022longitude\\\u0022: 6.46534\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500385,\\n \\\u0022latitude\\\u0022: 11.067174,\\n \\\u0022longitude\\\u0022: 7.90216\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500355,\\n \\\u0022latitude\\\u0022: 10.204864,\\n \\\u0022longitude\\\u0022: 5.400731\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500356,\\n \\\u0022latitude\\\u0022: 9.29557,\\n \\\u0022longitude\\\u0022: 6.730045\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500281,\\n \\\u0022latitude\\\u0022: 9.111457,\\n \\\u0022longitude\\\u0022: 6.752933\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500347,\\n \\\u0022latitude\\\u0022: 11.034493,\\n \\\u0022longitude\\\u0022: 7.915513\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500346,\\n \\\u0022latitude\\\u0022: 11.03441,\\n \\\u0022longitude\\\u0022: 7.915252\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500358,\\n \\\u0022latitude\\\u0022: 10.064042,\\n \\\u0022longitude\\\u0022: 5.263965\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500359,\\n \\\u0022latitude\\\u0022: 11.080828,\\n \\\u0022longitude\\\u0022: 7.702085\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500345,\\n \\\u0022latitude\\\u0022: 11.972175,\\n \\\u0022longitude\\\u0022: 8.552381\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500269,\\n \\\u0022latitude\\\u0022: 8.561071,\\n \\\u0022longitude\\\u0022: 7.723224\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500270,\\n \\\u0022latitude\\\u0022: 10.060569,\\n \\\u0022longitude\\\u0022: 7.381539\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500363,\\n \\\u0022latitude\\\u0022: 8.508633,\\n \\\u0022longitude\\\u0022: 8.528117\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500364,\\n \\\u0022latitude\\\u0022: 8.868305,\\n \\\u0022longitude\\\u0022: 6.802061\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500271,\\n \\\u0022latitude\\\u0022: 8.522836,\\n \\\u0022longitude\\\u0022: 7.707747\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500369,\\n \\\u0022latitude\\\u0022: 7.917358,\\n \\\u0022longitude\\\u0022: 8.321365\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500265,\\n \\\u0022latitude\\\u0022: 11.714659,\\n \\\u0022longitude\\\u0022: 8.424324\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500274,\\n \\\u0022latitude\\\u0022: 11.039182,\\n \\\u0022longitude\\\u0022: 7.884702\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500276,\\n \\\u0022latitude\\\u0022: 8.55528,\\n \\\u0022longitude\\\u0022: 7.707242\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500378,\\n \\\u0022latitude\\\u0022: 7.995108,\\n \\\u0022longitude\\\u0022: 9.15834\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500352,\\n \\\u0022latitude\\\u0022: 8.805177,\\n \\\u0022longitude\\\u0022: 6.678067\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500351,\\n \\\u0022latitude\\\u0022: 8.52285,\\n \\\u0022longitude\\\u0022: 7.707886\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500350,\\n \\\u0022latitude\\\u0022: 7.71764,\\n \\\u0022longitude\\\u0022: 10.016708\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500279,\\n \\\u0022latitude\\\u0022: 8.508575,\\n \\\u0022longitude\\\u0022: 8.528047\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500382,\\n \\\u0022latitude\\\u0022: 8.422915,\\n \\\u0022longitude\\\u0022: 9.90727\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500357,\\n \\\u0022latitude\\\u0022: 8.467382,\\n \\\u0022longitude\\\u0022: 11.067141\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500361,\\n \\\u0022latitude\\\u0022: 8.345234,\\n \\\u0022longitude\\\u0022: 7.603456\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500362,\\n \\\u0022latitude\\\u0022: 8.404274,\\n \\\u0022longitude\\\u0022: 7.629966\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500365,\\n \\\u0022latitude\\\u0022: 11.470494,\\n \\\u0022longitude\\\u0022: 8.505856\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500368,\\n \\\u0022latitude\\\u0022: 11.972145,\\n \\\u0022longitude\\\u0022: 8.552265\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500288,\\n \\\u0022latitude\\\u0022: 11.080414,\\n \\\u0022longitude\\\u0022: 7.701954\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500370,\\n \\\u0022latitude\\\u0022: 8.522763,\\n \\\u0022longitude\\\u0022: 7.707878\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500289,\\n \\\u0022latitude\\\u0022: 11.034498,\\n \\\u0022longitude\\\u0022: 7.915431\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500374,\\n \\\u0022latitude\\\u0022: 11.080189,\\n \\\u0022longitude\\\u0022: 7.702008\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500375,\\n \\\u0022latitude\\\u0022: 8.129054,\\n \\\u0022longitude\\\u0022: 10.114096\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500277,\\n \\\u0022latitude\\\u0022: 9.926192,\\n \\\u0022longitude\\\u0022: 5.226362\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500349,\\n \\\u0022latitude\\\u0022: 8.536098,\\n \\\u0022longitude\\\u0022: 7.711898\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500384,\\n \\\u0022latitude\\\u0022: 6.794762,\\n \\\u0022longitude\\\u0022: 3.577799\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500280,\\n \\\u0022latitude\\\u0022: 8.492912,\\n \\\u0022longitude\\\u0022: 10.849734\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500348,\\n \\\u0022latitude\\\u0022: 8.522767,\\n \\\u0022longitude\\\u0022: 7.707764\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500268,\\n \\\u0022latitude\\\u0022: 11.034261,\\n \\\u0022longitude\\\u0022: 7.915553\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500282,\\n \\\u0022latitude\\\u0022: 8.232031,\\n \\\u0022longitude\\\u0022: 7.559157\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500360,\\n \\\u0022latitude\\\u0022: 8.2031,\\n \\\u0022longitude\\\u0022: 9.687344\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500285,\\n \\\u0022latitude\\\u0022: 10.204795,\\n \\\u0022longitude\\\u0022: 5.400663\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500366,\\n \\\u0022latitude\\\u0022: 8.256385,\\n \\\u0022longitude\\\u0022: 7.296391\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500367,\\n \\\u0022latitude\\\u0022: 8.536166,\\n \\\u0022longitude\\\u0022: 7.711883\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500287,\\n \\\u0022latitude\\\u0022: 11.080159,\\n \\\u0022longitude\\\u0022: 7.702016\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500273,\\n \\\u0022latitude\\\u0022: 11.625716,\\n \\\u0022longitude\\\u0022: 7.868478\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500371,\\n \\\u0022latitude\\\u0022: 11.043326,\\n \\\u0022longitude\\\u0022: 7.884919\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500372,\\n \\\u0022latitude\\\u0022: 8.527813,\\n \\\u0022longitude\\\u0022: 11.123138\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500373,\\n \\\u0022latitude\\\u0022: 11.034578,\\n \\\u0022longitude\\\u0022: 7.915447\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500554,\\n \\\u0022latitude\\\u0022: 8.47978,\\n \\\u0022longitude\\\u0022: 8.188252\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500559,\\n \\\u0022latitude\\\u0022: 13.295831,\\n \\\u0022longitude\\\u0022: 5.42404\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500555,\\n \\\u0022latitude\\\u0022: 6.700172,\\n \\\u0022longitude\\\u0022: 6.927993\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500781,\\n \\\u0022latitude\\\u0022: 8.561879,\\n \\\u0022longitude\\\u0022: 7.722547\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500784,\\n \\\u0022latitude\\\u0022: 8.563392,\\n \\\u0022longitude\\\u0022: 7.7247\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500786,\\n \\\u0022latitude\\\u0022: 0.105872,\\n \\\u0022longitude\\\u0022: 37.811014\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 465995,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 111111,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 323232,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500389,\\n \\\u0022latitude\\\u0022: 11.034556,\\n \\\u0022longitude\\\u0022: 7.915403\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500387,\\n \\\u0022latitude\\\u0022: 11.602788,\\n \\\u0022longitude\\\u0022: 8.43031\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500388,\\n \\\u0022latitude\\\u0022: 11.072613,\\n \\\u0022longitude\\\u0022: 7.727724\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500390,\\n \\\u0022latitude\\\u0022: 11.034133,\\n \\\u0022longitude\\\u0022: 7.915513\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 666663,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 222222,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500798,\\n \\\u0022latitude\\\u0022: 11.603706,\\n \\\u0022longitude\\\u0022: 8.433707\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500799,\\n \\\u0022latitude\\\u0022: 6.588728,\\n \\\u0022longitude\\\u0022: -8.029437\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500800,\\n \\\u0022latitude\\\u0022: 9.847646,\\n \\\u0022longitude\\\u0022: -5.225833\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500801,\\n \\\u0022latitude\\\u0022: 5.882096,\\n \\\u0022longitude\\\u0022: -5.593648\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500802,\\n \\\u0022latitude\\\u0022: -8.913802,\\n \\\u0022longitude\\\u0022: 33.48492\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500805,\\n \\\u0022latitude\\\u0022: 9.899545,\\n \\\u0022longitude\\\u0022: -5.629255\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500803,\\n \\\u0022latitude\\\u0022: -6.819558,\\n \\\u0022longitude\\\u0022: 37.660076\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500806,\\n \\\u0022latitude\\\u0022: 5.989974,\\n \\\u0022longitude\\\u0022: -5.736678\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500807,\\n \\\u0022latitude\\\u0022: 9.708718,\\n \\\u0022longitude\\\u0022: -5.169088\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500808,\\n \\\u0022latitude\\\u0022: 9.760409,\\n \\\u0022longitude\\\u0022: -5.144983\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500809,\\n \\\u0022latitude\\\u0022: 10.106429,\\n \\\u0022longitude\\\u0022: -5.473666\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500810,\\n \\\u0022latitude\\\u0022: 9.397614,\\n \\\u0022longitude\\\u0022: -4.864812\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500811,\\n \\\u0022latitude\\\u0022: 10.105534,\\n \\\u0022longitude\\\u0022: -5.471988\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500812,\\n \\\u0022latitude\\\u0022: 10.055102,\\n \\\u0022longitude\\\u0022: -5.324063\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500813,\\n \\\u0022latitude\\\u0022: 6.060518,\\n \\\u0022longitude\\\u0022: -5.572566\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500814,\\n \\\u0022latitude\\\u0022: 6.545409,\\n \\\u0022longitude\\\u0022: -7.887179\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500817,\\n \\\u0022latitude\\\u0022: 6.648108,\\n \\\u0022longitude\\\u0022: -7.889623\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 222111,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501032,\\n \\\u0022latitude\\\u0022: 11.640766,\\n \\\u0022longitude\\\u0022: 8.519043\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500712,\\n \\\u0022latitude\\\u0022: 9.398796,\\n \\\u0022longitude\\\u0022: 6.874516\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 129713,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500250,\\n \\\u0022latitude\\\u0022: 6.520846,\\n \\\u0022longitude\\\u0022: 3.890171\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500251,\\n \\\u0022latitude\\\u0022: 11.409131,\\n \\\u0022longitude\\\u0022: 4.228877\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500249,\\n \\\u0022latitude\\\u0022: 6.90299,\\n \\\u0022longitude\\\u0022: 3.209269\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 22247,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 222223,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 722552048,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 625341,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 888888,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500824,\\n \\\u0022latitude\\\u0022: 11.931744,\\n \\\u0022longitude\\\u0022: 8.844944\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500825,\\n \\\u0022latitude\\\u0022: 11.972334,\\n \\\u0022longitude\\\u0022: 8.551617\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500826,\\n \\\u0022latitude\\\u0022: 8.989576,\\n \\\u0022longitude\\\u0022: 7.392363\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500827,\\n \\\u0022latitude\\\u0022: 11.883905,\\n \\\u0022longitude\\\u0022: 8.806801\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500833,\\n \\\u0022latitude\\\u0022: 7.748392,\\n \\\u0022longitude\\\u0022: 8.338045\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500829,\\n \\\u0022latitude\\\u0022: 11.972368,\\n \\\u0022longitude\\\u0022: 8.551702\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500828,\\n \\\u0022latitude\\\u0022: 11.972049,\\n \\\u0022longitude\\\u0022: 8.551625\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500832,\\n \\\u0022latitude\\\u0022: 7.747891,\\n \\\u0022longitude\\\u0022: 8.338054\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500830,\\n \\\u0022latitude\\\u0022: 11.672024,\\n \\\u0022longitude\\\u0022: 9.933335\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500831,\\n \\\u0022latitude\\\u0022: 11.972284,\\n \\\u0022longitude\\\u0022: 8.551634\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500834,\\n \\\u0022latitude\\\u0022: 10.515829,\\n \\\u0022longitude\\\u0022: 7.946774\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 5001544,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500941,\\n \\\u0022latitude\\\u0022: 6.894765,\\n \\\u0022longitude\\\u0022: 3.199506\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500196,\\n \\\u0022latitude\\\u0022: 11.813732,\\n \\\u0022longitude\\\u0022: 8.842861\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500569,\\n \\\u0022latitude\\\u0022: 0.338514,\\n \\\u0022longitude\\\u0022: 34.206471\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 202566,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 320840,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 795632,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501800,\\n \\\u0022latitude\\\u0022: 9.272457,\\n \\\u0022longitude\\\u0022: 12.415182\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501802,\\n \\\u0022latitude\\\u0022: 11.861877,\\n \\\u0022longitude\\\u0022: 13.2097\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501801,\\n \\\u0022latitude\\\u0022: 9.272615,\\n \\\u0022longitude\\\u0022: 12.415293\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501803,\\n \\\u0022latitude\\\u0022: 11.717836,\\n \\\u0022longitude\\\u0022: 11.966264\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501804,\\n \\\u0022latitude\\\u0022: 9.272673,\\n \\\u0022longitude\\\u0022: 12.415211\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501805,\\n \\\u0022latitude\\\u0022: 10.288241,\\n \\\u0022longitude\\\u0022: 9.8472\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501808,\\n \\\u0022latitude\\\u0022: 9.272634,\\n \\\u0022longitude\\\u0022: 12.415146\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501809,\\n \\\u0022latitude\\\u0022: 9.272632,\\n \\\u0022longitude\\\u0022: 12.415264\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501806,\\n \\\u0022latitude\\\u0022: 9.272194,\\n \\\u0022longitude\\\u0022: 12.415392\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501811,\\n \\\u0022latitude\\\u0022: 9.272677,\\n \\\u0022longitude\\\u0022: 12.415317\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501818,\\n \\\u0022latitude\\\u0022: 10.288257,\\n \\\u0022longitude\\\u0022: 9.847132\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501813,\\n \\\u0022latitude\\\u0022: 9.272672,\\n \\\u0022longitude\\\u0022: 12.415052\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501807,\\n \\\u0022latitude\\\u0022: 10.288273,\\n \\\u0022longitude\\\u0022: 9.847274\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501819,\\n \\\u0022latitude\\\u0022: 9.272628,\\n \\\u0022longitude\\\u0022: 12.415076\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501810,\\n \\\u0022latitude\\\u0022: 9.271881,\\n \\\u0022longitude\\\u0022: 12.415178\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501823,\\n \\\u0022latitude\\\u0022: 10.280883,\\n \\\u0022longitude\\\u0022: 11.18943\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501815,\\n \\\u0022latitude\\\u0022: 10.280969,\\n \\\u0022longitude\\\u0022: 11.189613\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501816,\\n \\\u0022latitude\\\u0022: 9.272471,\\n \\\u0022longitude\\\u0022: 12.415187\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501825,\\n \\\u0022latitude\\\u0022: 10.288216,\\n \\\u0022longitude\\\u0022: 9.84708\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501820,\\n \\\u0022latitude\\\u0022: 9.272644,\\n \\\u0022longitude\\\u0022: 12.415003\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501821,\\n \\\u0022latitude\\\u0022: 9.272451,\\n \\\u0022longitude\\\u0022: 12.415085\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501812,\\n \\\u0022latitude\\\u0022: 9.271914,\\n \\\u0022longitude\\\u0022: 12.414898\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501814,\\n \\\u0022latitude\\\u0022: 9.27262,\\n \\\u0022longitude\\\u0022: 12.415266\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501824,\\n \\\u0022latitude\\\u0022: 9.272457,\\n \\\u0022longitude\\\u0022: 12.41521\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501817,\\n \\\u0022latitude\\\u0022: 9.272675,\\n \\\u0022longitude\\\u0022: 12.415185\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501822,\\n \\\u0022latitude\\\u0022: 6.463821,\\n \\\u0022longitude\\\u0022: 3.318551\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501826,\\n \\\u0022latitude\\\u0022: 8.904465,\\n \\\u0022longitude\\\u0022: 11.356676\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501827,\\n \\\u0022latitude\\\u0022: 9.272571,\\n \\\u0022longitude\\\u0022: 12.41512\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501829,\\n \\\u0022latitude\\\u0022: 10.288255,\\n \\\u0022longitude\\\u0022: 9.8472\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501832,\\n \\\u0022latitude\\\u0022: 6.464016,\\n \\\u0022longitude\\\u0022: 3.318591\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501828,\\n \\\u0022latitude\\\u0022: 9.27245,\\n \\\u0022longitude\\\u0022: 12.415118\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501831,\\n \\\u0022latitude\\\u0022: 9.272678,\\n \\\u0022longitude\\\u0022: 12.415266\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501833,\\n \\\u0022latitude\\\u0022: 9.272702,\\n \\\u0022longitude\\\u0022: 12.41535\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501830,\\n \\\u0022latitude\\\u0022: 10.28095,\\n \\\u0022longitude\\\u0022: 11.189206\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501834,\\n \\\u0022latitude\\\u0022: 9.272648,\\n \\\u0022longitude\\\u0022: 12.414513\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501841,\\n \\\u0022latitude\\\u0022: 10.288209,\\n \\\u0022longitude\\\u0022: 9.847249\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501835,\\n \\\u0022latitude\\\u0022: 9.272404,\\n \\\u0022longitude\\\u0022: 12.415293\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501837,\\n \\\u0022latitude\\\u0022: 10.280718,\\n \\\u0022longitude\\\u0022: 11.189676\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501840,\\n \\\u0022latitude\\\u0022: 10.280965,\\n \\\u0022longitude\\\u0022: 11.189433\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501843,\\n \\\u0022latitude\\\u0022: 11.717698,\\n \\\u0022longitude\\\u0022: 11.966493\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501846,\\n \\\u0022latitude\\\u0022: 10.288255,\\n \\\u0022longitude\\\u0022: 9.847189\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501836,\\n \\\u0022latitude\\\u0022: 10.281232,\\n \\\u0022longitude\\\u0022: 11.189522\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501838,\\n \\\u0022latitude\\\u0022: 9.272579,\\n \\\u0022longitude\\\u0022: 12.415102\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501848,\\n \\\u0022latitude\\\u0022: 9.272413,\\n \\\u0022longitude\\\u0022: 12.415214\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501849,\\n \\\u0022latitude\\\u0022: 9.272635,\\n \\\u0022longitude\\\u0022: 12.41521\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501839,\\n \\\u0022latitude\\\u0022: 11.717667,\\n \\\u0022longitude\\\u0022: 11.966428\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501842,\\n \\\u0022latitude\\\u0022: 9.272704,\\n \\\u0022longitude\\\u0022: 12.415227\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501847,\\n \\\u0022latitude\\\u0022: 10.281119,\\n \\\u0022longitude\\\u0022: 11.189294\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501845,\\n \\\u0022latitude\\\u0022: 9.272634,\\n \\\u0022longitude\\\u0022: 12.415298\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501844,\\n \\\u0022latitude\\\u0022: 9.272469,\\n \\\u0022longitude\\\u0022: 12.415173\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501850,\\n \\\u0022latitude\\\u0022: 11.861616,\\n \\\u0022longitude\\\u0022: 13.209832\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501851,\\n \\\u0022latitude\\\u0022: 10.288304,\\n \\\u0022longitude\\\u0022: 9.847214\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501853,\\n \\\u0022latitude\\\u0022: 9.272426,\\n \\\u0022longitude\\\u0022: 12.415199\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501854,\\n \\\u0022latitude\\\u0022: 9.272666,\\n \\\u0022longitude\\\u0022: 12.415353\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501857,\\n \\\u0022latitude\\\u0022: 9.272617,\\n \\\u0022longitude\\\u0022: 12.41526\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501856,\\n \\\u0022latitude\\\u0022: 10.280916,\\n \\\u0022longitude\\\u0022: 11.189621\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501852,\\n \\\u0022latitude\\\u0022: 9.272639,\\n \\\u0022longitude\\\u0022: 12.415204\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501855,\\n \\\u0022latitude\\\u0022: 9.272467,\\n \\\u0022longitude\\\u0022: 12.415293\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501860,\\n \\\u0022latitude\\\u0022: 10.280749,\\n \\\u0022longitude\\\u0022: 11.189573\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501863,\\n \\\u0022latitude\\\u0022: 9.272599,\\n \\\u0022longitude\\\u0022: 12.415384\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501859,\\n \\\u0022latitude\\\u0022: 11.861857,\\n \\\u0022longitude\\\u0022: 13.209778\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501861,\\n \\\u0022latitude\\\u0022: 10.288209,\\n \\\u0022longitude\\\u0022: 9.847179\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501862,\\n \\\u0022latitude\\\u0022: 7.709526,\\n \\\u0022longitude\\\u0022: 8.485162\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501858,\\n \\\u0022latitude\\\u0022: 9.2726,\\n \\\u0022longitude\\\u0022: 12.415393\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501866,\\n \\\u0022latitude\\\u0022: 10.28822,\\n \\\u0022longitude\\\u0022: 9.847251\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501865,\\n \\\u0022latitude\\\u0022: 10.288213,\\n \\\u0022longitude\\\u0022: 9.847207\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501871,\\n \\\u0022latitude\\\u0022: 6.463935,\\n \\\u0022longitude\\\u0022: 3.318764\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501867,\\n \\\u0022latitude\\\u0022: 10.288299,\\n \\\u0022longitude\\\u0022: 9.847205\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501868,\\n \\\u0022latitude\\\u0022: 9.272613,\\n \\\u0022longitude\\\u0022: 12.415162\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501870,\\n \\\u0022latitude\\\u0022: 8.904547,\\n \\\u0022longitude\\\u0022: 11.356681\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501873,\\n \\\u0022latitude\\\u0022: 9.272693,\\n \\\u0022longitude\\\u0022: 12.415027\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501869,\\n \\\u0022latitude\\\u0022: 6.463848,\\n \\\u0022longitude\\\u0022: 3.318148\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501872,\\n \\\u0022latitude\\\u0022: 6.463911,\\n \\\u0022longitude\\\u0022: 3.318692\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501874,\\n \\\u0022latitude\\\u0022: 10.281179,\\n \\\u0022longitude\\\u0022: 11.189725\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501878,\\n \\\u0022latitude\\\u0022: 9.272646,\\n \\\u0022longitude\\\u0022: 12.415116\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501875,\\n \\\u0022latitude\\\u0022: 8.904474,\\n \\\u0022longitude\\\u0022: 11.356649\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501876,\\n \\\u0022latitude\\\u0022: 9.2727,\\n \\\u0022longitude\\\u0022: 12.415152\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501877,\\n \\\u0022latitude\\\u0022: 9.272593,\\n \\\u0022longitude\\\u0022: 12.415104\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501886,\\n \\\u0022latitude\\\u0022: 9.27248,\\n \\\u0022longitude\\\u0022: 12.415308\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501887,\\n \\\u0022latitude\\\u0022: 9.272395,\\n \\\u0022longitude\\\u0022: 12.415316\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501884,\\n \\\u0022latitude\\\u0022: 9.272639,\\n \\\u0022longitude\\\u0022: 12.415349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501890,\\n \\\u0022latitude\\\u0022: 9.272684,\\n \\\u0022longitude\\\u0022: 12.41511\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501880,\\n \\\u0022latitude\\\u0022: 11.717833,\\n \\\u0022longitude\\\u0022: 11.966255\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501892,\\n \\\u0022latitude\\\u0022: 9.27263,\\n \\\u0022longitude\\\u0022: 12.415029\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501881,\\n \\\u0022latitude\\\u0022: 11.717763,\\n \\\u0022longitude\\\u0022: 11.966329\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501883,\\n \\\u0022latitude\\\u0022: 9.272665,\\n \\\u0022longitude\\\u0022: 12.415166\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501885,\\n \\\u0022latitude\\\u0022: 9.272626,\\n \\\u0022longitude\\\u0022: 12.415128\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501895,\\n \\\u0022latitude\\\u0022: 10.28096,\\n \\\u0022longitude\\\u0022: 11.189364\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501896,\\n \\\u0022latitude\\\u0022: 10.280737,\\n \\\u0022longitude\\\u0022: 11.189686\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501882,\\n \\\u0022latitude\\\u0022: 9.272673,\\n \\\u0022longitude\\\u0022: 12.415313\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501888,\\n \\\u0022latitude\\\u0022: 8.904523,\\n \\\u0022longitude\\\u0022: 11.356655\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501889,\\n \\\u0022latitude\\\u0022: 9.272257,\\n \\\u0022longitude\\\u0022: 12.41534\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501899,\\n \\\u0022latitude\\\u0022: 9.272652,\\n \\\u0022longitude\\\u0022: 12.415262\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501891,\\n \\\u0022latitude\\\u0022: 9.272626,\\n \\\u0022longitude\\\u0022: 12.415382\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501900,\\n \\\u0022latitude\\\u0022: 9.272604,\\n \\\u0022longitude\\\u0022: 12.415143\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501893,\\n \\\u0022latitude\\\u0022: 10.288226,\\n \\\u0022longitude\\\u0022: 9.847164\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501897,\\n \\\u0022latitude\\\u0022: 9.27262,\\n \\\u0022longitude\\\u0022: 12.415357\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501901,\\n \\\u0022latitude\\\u0022: 6.46378,\\n \\\u0022longitude\\\u0022: 3.318337\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501898,\\n \\\u0022latitude\\\u0022: 9.272626,\\n \\\u0022longitude\\\u0022: 12.415145\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501902,\\n \\\u0022latitude\\\u0022: 10.288191,\\n \\\u0022longitude\\\u0022: 9.847271\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501903,\\n \\\u0022latitude\\\u0022: 9.272583,\\n \\\u0022longitude\\\u0022: 12.415246\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501907,\\n \\\u0022latitude\\\u0022: 9.272404,\\n \\\u0022longitude\\\u0022: 12.415319\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501909,\\n \\\u0022latitude\\\u0022: 6.463878,\\n \\\u0022longitude\\\u0022: 3.318941\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501904,\\n \\\u0022latitude\\\u0022: 9.272698,\\n \\\u0022longitude\\\u0022: 12.415071\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501910,\\n \\\u0022latitude\\\u0022: 6.463893,\\n \\\u0022longitude\\\u0022: 3.318613\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501911,\\n \\\u0022latitude\\\u0022: 9.272663,\\n \\\u0022longitude\\\u0022: 12.415137\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501905,\\n \\\u0022latitude\\\u0022: 9.272696,\\n \\\u0022longitude\\\u0022: 12.415168\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501906,\\n \\\u0022latitude\\\u0022: 9.27242,\\n \\\u0022longitude\\\u0022: 12.415243\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501908,\\n \\\u0022latitude\\\u0022: 10.288257,\\n \\\u0022longitude\\\u0022: 9.847163\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501915,\\n \\\u0022latitude\\\u0022: 11.717768,\\n \\\u0022longitude\\\u0022: 11.96646\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501912,\\n \\\u0022latitude\\\u0022: 11.861882,\\n \\\u0022longitude\\\u0022: 13.209696\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501918,\\n \\\u0022latitude\\\u0022: 11.7177,\\n \\\u0022longitude\\\u0022: 11.966353\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501920,\\n \\\u0022latitude\\\u0022: 11.717821,\\n \\\u0022longitude\\\u0022: 11.966279\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501917,\\n \\\u0022latitude\\\u0022: 11.861825,\\n \\\u0022longitude\\\u0022: 13.20974\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501914,\\n \\\u0022latitude\\\u0022: 11.71757,\\n \\\u0022longitude\\\u0022: 11.966586\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501919,\\n \\\u0022latitude\\\u0022: 10.280632,\\n \\\u0022longitude\\\u0022: 11.1897\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501916,\\n \\\u0022latitude\\\u0022: 4.810001,\\n \\\u0022longitude\\\u0022: 7.041821\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501922,\\n \\\u0022latitude\\\u0022: 7.243881,\\n \\\u0022longitude\\\u0022: 5.209179\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501923,\\n \\\u0022latitude\\\u0022: 7.243963,\\n \\\u0022longitude\\\u0022: 5.209166\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501925,\\n \\\u0022latitude\\\u0022: 5.590438,\\n \\\u0022longitude\\\u0022: 7.919424\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501928,\\n \\\u0022latitude\\\u0022: 4.809975,\\n \\\u0022longitude\\\u0022: 7.041864\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501926,\\n \\\u0022latitude\\\u0022: 6.473966,\\n \\\u0022longitude\\\u0022: 3.325374\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501927,\\n \\\u0022latitude\\\u0022: 11.717633,\\n \\\u0022longitude\\\u0022: 11.966424\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501937,\\n \\\u0022latitude\\\u0022: 11.717738,\\n \\\u0022longitude\\\u0022: 11.966373\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501924,\\n \\\u0022latitude\\\u0022: 11.717886,\\n \\\u0022longitude\\\u0022: 11.966248\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501932,\\n \\\u0022latitude\\\u0022: 8.904393,\\n \\\u0022longitude\\\u0022: 11.356669\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501930,\\n \\\u0022latitude\\\u0022: 6.463736,\\n \\\u0022longitude\\\u0022: 3.31839\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501933,\\n \\\u0022latitude\\\u0022: 11.717647,\\n \\\u0022longitude\\\u0022: 11.96641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501938,\\n \\\u0022latitude\\\u0022: 11.717728,\\n \\\u0022longitude\\\u0022: 11.966362\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501939,\\n \\\u0022latitude\\\u0022: 11.717741,\\n \\\u0022longitude\\\u0022: 11.96641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501947,\\n \\\u0022latitude\\\u0022: 6.473855,\\n \\\u0022longitude\\\u0022: 3.325382\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501949,\\n \\\u0022latitude\\\u0022: 11.717639,\\n \\\u0022longitude\\\u0022: 11.966384\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501944,\\n \\\u0022latitude\\\u0022: 6.473923,\\n \\\u0022longitude\\\u0022: 3.32522\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501942,\\n \\\u0022latitude\\\u0022: 7.243958,\\n \\\u0022longitude\\\u0022: 5.209149\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501943,\\n \\\u0022latitude\\\u0022: 10.280625,\\n \\\u0022longitude\\\u0022: 11.189695\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501950,\\n \\\u0022latitude\\\u0022: 7.243918,\\n \\\u0022longitude\\\u0022: 5.209192\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501945,\\n \\\u0022latitude\\\u0022: 6.464161,\\n \\\u0022longitude\\\u0022: 3.318797\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501946,\\n \\\u0022latitude\\\u0022: 10.280691,\\n \\\u0022longitude\\\u0022: 11.189673\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501955,\\n \\\u0022latitude\\\u0022: 11.717763,\\n \\\u0022longitude\\\u0022: 11.966414\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501948,\\n \\\u0022latitude\\\u0022: 11.7177,\\n \\\u0022longitude\\\u0022: 11.966282\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501951,\\n \\\u0022latitude\\\u0022: 11.71779,\\n \\\u0022longitude\\\u0022: 11.966256\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501953,\\n \\\u0022latitude\\\u0022: 11.717904,\\n \\\u0022longitude\\\u0022: 11.966296\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501954,\\n \\\u0022latitude\\\u0022: 7.243967,\\n \\\u0022longitude\\\u0022: 5.209271\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500560,\\n \\\u0022latitude\\\u0022: -13.338157,\\n \\\u0022longitude\\\u0022: 33.621896\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500561,\\n \\\u0022latitude\\\u0022: -13.403463,\\n \\\u0022longitude\\\u0022: 33.540711\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500562,\\n \\\u0022latitude\\\u0022: -13.356155,\\n \\\u0022longitude\\\u0022: 33.40369\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501957,\\n \\\u0022latitude\\\u0022: 6.46317,\\n \\\u0022longitude\\\u0022: 3.319567\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501958,\\n \\\u0022latitude\\\u0022: 6.463801,\\n \\\u0022longitude\\\u0022: 3.318431\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501959,\\n \\\u0022latitude\\\u0022: 6.463611,\\n \\\u0022longitude\\\u0022: 3.318263\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501961,\\n \\\u0022latitude\\\u0022: 6.463642,\\n \\\u0022longitude\\\u0022: 3.319005\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501968,\\n \\\u0022latitude\\\u0022: 8.904275,\\n \\\u0022longitude\\\u0022: 11.356721\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501964,\\n \\\u0022latitude\\\u0022: 6.464009,\\n \\\u0022longitude\\\u0022: 3.319164\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501960,\\n \\\u0022latitude\\\u0022: 6.463667,\\n \\\u0022longitude\\\u0022: 3.318377\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501973,\\n \\\u0022latitude\\\u0022: 6.463595,\\n \\\u0022longitude\\\u0022: 3.318525\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501963,\\n \\\u0022latitude\\\u0022: 0,\\n \\\u0022longitude\\\u0022: 0\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501974,\\n \\\u0022latitude\\\u0022: 6.463869,\\n \\\u0022longitude\\\u0022: 3.318586\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501967,\\n \\\u0022latitude\\\u0022: 10.288171,\\n \\\u0022longitude\\\u0022: 9.847074\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501975,\\n \\\u0022latitude\\\u0022: 6.474004,\\n \\\u0022longitude\\\u0022: 3.32536\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501976,\\n \\\u0022latitude\\\u0022: 6.463875,\\n \\\u0022longitude\\\u0022: 3.318862\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501969,\\n \\\u0022latitude\\\u0022: 6.463517,\\n \\\u0022longitude\\\u0022: 3.318467\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501966,\\n \\\u0022latitude\\\u0022: 6.464029,\\n \\\u0022longitude\\\u0022: 3.31906\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501972,\\n \\\u0022latitude\\\u0022: 6.46366,\\n \\\u0022longitude\\\u0022: 3.318347\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501977,\\n \\\u0022latitude\\\u0022: 6.463729,\\n \\\u0022longitude\\\u0022: 3.318551\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501978,\\n \\\u0022latitude\\\u0022: 6.473988,\\n \\\u0022longitude\\\u0022: 3.325454\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501979,\\n \\\u0022latitude\\\u0022: 6.473964,\\n \\\u0022longitude\\\u0022: 3.325423\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501982,\\n \\\u0022latitude\\\u0022: 6.463762,\\n \\\u0022longitude\\\u0022: 3.318549\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501970,\\n \\\u0022latitude\\\u0022: 6.463959,\\n \\\u0022longitude\\\u0022: 3.318751\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501971,\\n \\\u0022latitude\\\u0022: 6.4637,\\n \\\u0022longitude\\\u0022: 3.3184\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501981,\\n \\\u0022latitude\\\u0022: 6.463985,\\n \\\u0022longitude\\\u0022: 3.318868\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501985,\\n \\\u0022latitude\\\u0022: 10.288126,\\n \\\u0022longitude\\\u0022: 9.847102\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501986,\\n \\\u0022latitude\\\u0022: 6.463757,\\n \\\u0022longitude\\\u0022: 3.318712\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501984,\\n \\\u0022latitude\\\u0022: 6.46369,\\n \\\u0022longitude\\\u0022: 3.318358\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501983,\\n \\\u0022latitude\\\u0022: 7.243855,\\n \\\u0022longitude\\\u0022: 5.209158\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501991,\\n \\\u0022latitude\\\u0022: 10.288129,\\n \\\u0022longitude\\\u0022: 9.847113\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501992,\\n \\\u0022latitude\\\u0022: 10.288137,\\n \\\u0022longitude\\\u0022: 9.847154\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501987,\\n \\\u0022latitude\\\u0022: 6.463891,\\n \\\u0022longitude\\\u0022: 3.318575\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501995,\\n \\\u0022latitude\\\u0022: 10.281034,\\n \\\u0022longitude\\\u0022: 11.189184\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501989,\\n \\\u0022latitude\\\u0022: 6.463828,\\n \\\u0022longitude\\\u0022: 3.318432\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501993,\\n \\\u0022latitude\\\u0022: 11.7177,\\n \\\u0022longitude\\\u0022: 11.966464\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501997,\\n \\\u0022latitude\\\u0022: 7.243937,\\n \\\u0022longitude\\\u0022: 5.209253\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501998,\\n \\\u0022latitude\\\u0022: 6.463894,\\n \\\u0022longitude\\\u0022: 3.318187\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501999,\\n \\\u0022latitude\\\u0022: 10.288169,\\n \\\u0022longitude\\\u0022: 9.847162\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501996,\\n \\\u0022latitude\\\u0022: 11.717763,\\n \\\u0022longitude\\\u0022: 11.966385\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501990,\\n \\\u0022latitude\\\u0022: 7.243901,\\n \\\u0022longitude\\\u0022: 5.209148\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 501994,\\n \\\u0022latitude\\\u0022: 10.280886,\\n \\\u0022longitude\\\u0022: 11.189219\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502000,\\n \\\u0022latitude\\\u0022: 10.280751,\\n \\\u0022longitude\\\u0022: 11.189547\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502001,\\n \\\u0022latitude\\\u0022: 6.463727,\\n \\\u0022longitude\\\u0022: 3.318766\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502002,\\n \\\u0022latitude\\\u0022: 6.463836,\\n \\\u0022longitude\\\u0022: 3.318517\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502009,\\n \\\u0022latitude\\\u0022: 6.463601,\\n \\\u0022longitude\\\u0022: 3.318968\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502005,\\n \\\u0022latitude\\\u0022: 6.473888,\\n \\\u0022longitude\\\u0022: 3.325403\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502011,\\n \\\u0022latitude\\\u0022: 6.463868,\\n \\\u0022longitude\\\u0022: 3.318608\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502015,\\n \\\u0022latitude\\\u0022: 6.463778,\\n \\\u0022longitude\\\u0022: 3.319064\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502003,\\n \\\u0022latitude\\\u0022: 6.473889,\\n \\\u0022longitude\\\u0022: 3.325312\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502004,\\n \\\u0022latitude\\\u0022: 10.288113,\\n \\\u0022longitude\\\u0022: 9.847021\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502014,\\n \\\u0022latitude\\\u0022: 7.24397,\\n \\\u0022longitude\\\u0022: 5.209227\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502007,\\n \\\u0022latitude\\\u0022: 10.288144,\\n \\\u0022longitude\\\u0022: 9.847077\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502017,\\n \\\u0022latitude\\\u0022: 6.464087,\\n \\\u0022longitude\\\u0022: 3.318356\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502010,\\n \\\u0022latitude\\\u0022: 10.281158,\\n \\\u0022longitude\\\u0022: 11.189353\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502016,\\n \\\u0022latitude\\\u0022: 10.288152,\\n \\\u0022longitude\\\u0022: 9.847033\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502006,\\n \\\u0022latitude\\\u0022: 6.463637,\\n \\\u0022longitude\\\u0022: 3.318325\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502012,\\n \\\u0022latitude\\\u0022: 6.463792,\\n \\\u0022longitude\\\u0022: 3.318412\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502020,\\n \\\u0022latitude\\\u0022: 6.463653,\\n \\\u0022longitude\\\u0022: 3.318475\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502018,\\n \\\u0022latitude\\\u0022: 6.46367,\\n \\\u0022longitude\\\u0022: 3.318544\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502019,\\n \\\u0022latitude\\\u0022: 6.463912,\\n \\\u0022longitude\\\u0022: 3.31853\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502022,\\n \\\u0022latitude\\\u0022: 10.288101,\\n \\\u0022longitude\\\u0022: 9.847088\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502029,\\n \\\u0022latitude\\\u0022: 6.463665,\\n \\\u0022longitude\\\u0022: 3.318566\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502026,\\n \\\u0022latitude\\\u0022: 6.575351,\\n \\\u0022longitude\\\u0022: 3.325983\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502032,\\n \\\u0022latitude\\\u0022: 6.463768,\\n \\\u0022longitude\\\u0022: 3.31853\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502033,\\n \\\u0022latitude\\\u0022: 6.473687,\\n \\\u0022longitude\\\u0022: 3.325333\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502035,\\n \\\u0022latitude\\\u0022: 6.295377,\\n \\\u0022longitude\\\u0022: 5.588121\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502027,\\n \\\u0022latitude\\\u0022: 6.464053,\\n \\\u0022longitude\\\u0022: 3.318827\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502041,\\n \\\u0022latitude\\\u0022: 10.288137,\\n \\\u0022longitude\\\u0022: 9.847161\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502021,\\n \\\u0022latitude\\\u0022: 6.463617,\\n \\\u0022longitude\\\u0022: 3.318979\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502023,\\n \\\u0022latitude\\\u0022: 6.463889,\\n \\\u0022longitude\\\u0022: 3.318774\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502024,\\n \\\u0022latitude\\\u0022: 6.463644,\\n \\\u0022longitude\\\u0022: 3.318389\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502025,\\n \\\u0022latitude\\\u0022: 6.463833,\\n \\\u0022longitude\\\u0022: 3.318239\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502031,\\n \\\u0022latitude\\\u0022: 9.272172,\\n \\\u0022longitude\\\u0022: 12.415043\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502046,\\n \\\u0022latitude\\\u0022: 6.463923,\\n \\\u0022longitude\\\u0022: 3.318659\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502028,\\n \\\u0022latitude\\\u0022: 8.904362,\\n \\\u0022longitude\\\u0022: 11.356636\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502051,\\n \\\u0022latitude\\\u0022: 8.904297,\\n \\\u0022longitude\\\u0022: 11.356661\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502045,\\n \\\u0022latitude\\\u0022: 6.463851,\\n \\\u0022longitude\\\u0022: 3.318189\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502043,\\n \\\u0022latitude\\\u0022: 6.463882,\\n \\\u0022longitude\\\u0022: 3.31843\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502049,\\n \\\u0022latitude\\\u0022: 11.71768,\\n \\\u0022longitude\\\u0022: 11.966384\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502052,\\n \\\u0022latitude\\\u0022: 6.794711,\\n \\\u0022longitude\\\u0022: 3.918027\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502040,\\n \\\u0022latitude\\\u0022: 7.709481,\\n \\\u0022longitude\\\u0022: 8.485347\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502055,\\n \\\u0022latitude\\\u0022: 9.272148,\\n \\\u0022longitude\\\u0022: 12.415093\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502061,\\n \\\u0022latitude\\\u0022: 11.717748,\\n \\\u0022longitude\\\u0022: 11.966387\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502062,\\n \\\u0022latitude\\\u0022: 6.473909,\\n \\\u0022longitude\\\u0022: 3.325473\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502047,\\n \\\u0022latitude\\\u0022: 6.463442,\\n \\\u0022longitude\\\u0022: 3.319001\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502048,\\n \\\u0022latitude\\\u0022: 6.473933,\\n \\\u0022longitude\\\u0022: 3.325467\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502059,\\n \\\u0022latitude\\\u0022: 11.717734,\\n \\\u0022longitude\\\u0022: 11.96641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502039,\\n \\\u0022latitude\\\u0022: 6.463822,\\n \\\u0022longitude\\\u0022: 3.318947\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502044,\\n \\\u0022latitude\\\u0022: 11.717889,\\n \\\u0022longitude\\\u0022: 11.966349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502050,\\n \\\u0022latitude\\\u0022: 6.29534,\\n \\\u0022longitude\\\u0022: 5.588068\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502063,\\n \\\u0022latitude\\\u0022: 11.717776,\\n \\\u0022longitude\\\u0022: 11.96648\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502057,\\n \\\u0022latitude\\\u0022: 11.717711,\\n \\\u0022longitude\\\u0022: 11.966435\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502065,\\n \\\u0022latitude\\\u0022: 6.464011,\\n \\\u0022longitude\\\u0022: 3.318731\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502066,\\n \\\u0022latitude\\\u0022: 8.904319,\\n \\\u0022longitude\\\u0022: 11.356712\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502064,\\n \\\u0022latitude\\\u0022: 6.463978,\\n \\\u0022longitude\\\u0022: 3.318777\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502067,\\n \\\u0022latitude\\\u0022: 7.709628,\\n \\\u0022longitude\\\u0022: 8.485368\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502069,\\n \\\u0022latitude\\\u0022: 10.288227,\\n \\\u0022longitude\\\u0022: 9.847173\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502071,\\n \\\u0022latitude\\\u0022: 10.280597,\\n \\\u0022longitude\\\u0022: 11.189541\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502070,\\n \\\u0022latitude\\\u0022: 10.280928,\\n \\\u0022longitude\\\u0022: 11.18942\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502073,\\n \\\u0022latitude\\\u0022: 10.280612,\\n \\\u0022longitude\\\u0022: 11.189433\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502072,\\n \\\u0022latitude\\\u0022: 10.281002,\\n \\\u0022longitude\\\u0022: 11.189353\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502074,\\n \\\u0022latitude\\\u0022: 11.717882,\\n \\\u0022longitude\\\u0022: 11.966225\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502075,\\n \\\u0022latitude\\\u0022: 11.717897,\\n \\\u0022longitude\\\u0022: 11.966299\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502076,\\n \\\u0022latitude\\\u0022: -6.802639,\\n \\\u0022longitude\\\u0022: 39.249592\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502082,\\n \\\u0022latitude\\\u0022: -8.673408,\\n \\\u0022longitude\\\u0022: 34.302835\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502083,\\n \\\u0022latitude\\\u0022: -7.378601,\\n \\\u0022longitude\\\u0022: 37.801057\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502079,\\n \\\u0022latitude\\\u0022: -6.787121,\\n \\\u0022longitude\\\u0022: 37.127384\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502085,\\n \\\u0022latitude\\\u0022: -4.885436,\\n \\\u0022longitude\\\u0022: 31.680748\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502077,\\n \\\u0022latitude\\\u0022: -4.607191,\\n \\\u0022longitude\\\u0022: 35.47405\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502080,\\n \\\u0022latitude\\\u0022: -3.026509,\\n \\\u0022longitude\\\u0022: 34.396151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502081,\\n \\\u0022latitude\\\u0022: -7.825048,\\n \\\u0022longitude\\\u0022: 35.736361\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502092,\\n \\\u0022latitude\\\u0022: -4.973259,\\n \\\u0022longitude\\\u0022: 38.309371\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502094,\\n \\\u0022latitude\\\u0022: -8.271249,\\n \\\u0022longitude\\\u0022: 35.722493\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502093,\\n \\\u0022latitude\\\u0022: -4.760746,\\n \\\u0022longitude\\\u0022: 34.726719\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502091,\\n \\\u0022latitude\\\u0022: -5.222772,\\n \\\u0022longitude\\\u0022: 38.887672\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502097,\\n \\\u0022latitude\\\u0022: -8.605686,\\n \\\u0022longitude\\\u0022: 35.393326\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502095,\\n \\\u0022latitude\\\u0022: -8.700539,\\n \\\u0022longitude\\\u0022: 34.377352\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502100,\\n \\\u0022latitude\\\u0022: -8.674976,\\n \\\u0022longitude\\\u0022: 34.310273\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502096,\\n \\\u0022latitude\\\u0022: -3.992274,\\n \\\u0022longitude\\\u0022: 36.626092\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502099,\\n \\\u0022latitude\\\u0022: -6.268842,\\n \\\u0022longitude\\\u0022: 38.78853\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502107,\\n \\\u0022latitude\\\u0022: -6.475884,\\n \\\u0022longitude\\\u0022: 38.805279\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502109,\\n \\\u0022latitude\\\u0022: -3.336173,\\n \\\u0022longitude\\\u0022: 36.629981\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502106,\\n \\\u0022latitude\\\u0022: -6.266272,\\n \\\u0022longitude\\\u0022: 38.784479\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502108,\\n \\\u0022latitude\\\u0022: -6.266624,\\n \\\u0022longitude\\\u0022: 38.784265\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502103,\\n \\\u0022latitude\\\u0022: -8.659007,\\n \\\u0022longitude\\\u0022: 34.117034\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502105,\\n \\\u0022latitude\\\u0022: -7.365739,\\n \\\u0022longitude\\\u0022: 37.897641\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502110,\\n \\\u0022latitude\\\u0022: -3.382649,\\n \\\u0022longitude\\\u0022: 36.698601\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502111,\\n \\\u0022latitude\\\u0022: -6.895221,\\n \\\u0022longitude\\\u0022: 39.135994\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502102,\\n \\\u0022latitude\\\u0022: -8.701506,\\n \\\u0022longitude\\\u0022: 34.059329\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502104,\\n \\\u0022latitude\\\u0022: -6.787176,\\n \\\u0022longitude\\\u0022: 37.12741\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502116,\\n \\\u0022latitude\\\u0022: -3.590451,\\n \\\u0022longitude\\\u0022: 36.811079\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502127,\\n \\\u0022latitude\\\u0022: -8.091919,\\n \\\u0022longitude\\\u0022: 36.679508\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502128,\\n \\\u0022latitude\\\u0022: -6.289411,\\n \\\u0022longitude\\\u0022: 38.774602\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502119,\\n \\\u0022latitude\\\u0022: -6.836137,\\n \\\u0022longitude\\\u0022: 39.213332\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502113,\\n \\\u0022latitude\\\u0022: -8.426101,\\n \\\u0022longitude\\\u0022: 36.477212\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502114,\\n \\\u0022latitude\\\u0022: -6.439467,\\n \\\u0022longitude\\\u0022: 37.603933\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502125,\\n \\\u0022latitude\\\u0022: -4.668126,\\n \\\u0022longitude\\\u0022: 31.642634\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502118,\\n \\\u0022latitude\\\u0022: -5.221869,\\n \\\u0022longitude\\\u0022: 38.88695\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502120,\\n \\\u0022latitude\\\u0022: -6.131955,\\n \\\u0022longitude\\\u0022: 38.371314\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502121,\\n \\\u0022latitude\\\u0022: -2.551385,\\n \\\u0022longitude\\\u0022: 33.019017\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502112,\\n \\\u0022latitude\\\u0022: -4.48893,\\n \\\u0022longitude\\\u0022: 34.42871\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502115,\\n \\\u0022latitude\\\u0022: -8.700573,\\n \\\u0022longitude\\\u0022: 34.377201\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502117,\\n \\\u0022latitude\\\u0022: -2.551367,\\n \\\u0022longitude\\\u0022: 33.019067\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502130,\\n \\\u0022latitude\\\u0022: -4.514729,\\n \\\u0022longitude\\\u0022: 35.382553\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502122,\\n \\\u0022latitude\\\u0022: -6.285684,\\n \\\u0022longitude\\\u0022: 38.775536\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502123,\\n \\\u0022latitude\\\u0022: -7.643334,\\n \\\u0022longitude\\\u0022: 36.990588\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502124,\\n \\\u0022latitude\\\u0022: -6.786345,\\n \\\u0022longitude\\\u0022: 39.166608\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502126,\\n \\\u0022latitude\\\u0022: -6.266857,\\n \\\u0022longitude\\\u0022: 38.784862\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502133,\\n \\\u0022latitude\\\u0022: 10.280698,\\n \\\u0022longitude\\\u0022: 11.18963\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502140,\\n \\\u0022latitude\\\u0022: 18.672851,\\n \\\u0022longitude\\\u0022: 74.116086\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502141,\\n \\\u0022latitude\\\u0022: 18.632658,\\n \\\u0022longitude\\\u0022: 74.031224\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502142,\\n \\\u0022latitude\\\u0022: 18.583299,\\n \\\u0022longitude\\\u0022: 74.024163\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502144,\\n \\\u0022latitude\\\u0022: -0.97125,\\n \\\u0022longitude\\\u0022: 35.494346\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502147,\\n \\\u0022latitude\\\u0022: -0.753498,\\n \\\u0022longitude\\\u0022: 34.291536\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502148,\\n \\\u0022latitude\\\u0022: -0.752178,\\n \\\u0022longitude\\\u0022: 34.289061\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502143,\\n \\\u0022latitude\\\u0022: -0.823328,\\n \\\u0022longitude\\\u0022: 34.370784\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502146,\\n \\\u0022latitude\\\u0022: -0.80693,\\n \\\u0022longitude\\\u0022: 34.441801\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502149,\\n \\\u0022latitude\\\u0022: -0.752176,\\n \\\u0022longitude\\\u0022: 34.289134\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502145,\\n \\\u0022latitude\\\u0022: -0.821526,\\n \\\u0022longitude\\\u0022: 34.381591\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502162,\\n \\\u0022latitude\\\u0022: 8.988427,\\n \\\u0022longitude\\\u0022: 7.405939\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502164,\\n \\\u0022latitude\\\u0022: 9.076479,\\n \\\u0022longitude\\\u0022: 7.499766\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502163,\\n \\\u0022latitude\\\u0022: 8.988461,\\n \\\u0022longitude\\\u0022: 7.405862\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502172,\\n \\\u0022latitude\\\u0022: 11.797916,\\n \\\u0022longitude\\\u0022: 8.462089\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502173,\\n \\\u0022latitude\\\u0022: 12.444629,\\n \\\u0022longitude\\\u0022: 10.027972\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502174,\\n \\\u0022latitude\\\u0022: 12.535822,\\n \\\u0022longitude\\\u0022: 10.197617\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502166,\\n \\\u0022latitude\\\u0022: 12.731355,\\n \\\u0022longitude\\\u0022: 10.357682\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502169,\\n \\\u0022latitude\\\u0022: 12.44448,\\n \\\u0022longitude\\\u0022: 10.028056\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502171,\\n \\\u0022latitude\\\u0022: 12.444442,\\n \\\u0022longitude\\\u0022: 10.028033\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502165,\\n \\\u0022latitude\\\u0022: 11.079392,\\n \\\u0022longitude\\\u0022: 7.701055\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502170,\\n \\\u0022latitude\\\u0022: 12.116486,\\n \\\u0022longitude\\\u0022: 8.295088\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502167,\\n \\\u0022latitude\\\u0022: 12.444498,\\n \\\u0022longitude\\\u0022: 10.027879\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502168,\\n \\\u0022latitude\\\u0022: 12.116491,\\n \\\u0022longitude\\\u0022: 8.295081\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502200,\\n \\\u0022latitude\\\u0022: 14.124052,\\n \\\u0022longitude\\\u0022: 100.603368\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502201,\\n \\\u0022latitude\\\u0022: 14.108312,\\n \\\u0022longitude\\\u0022: 100.598557\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502209,\\n \\\u0022latitude\\\u0022: 16.316841,\\n \\\u0022longitude\\\u0022: 103.008848\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502210,\\n \\\u0022latitude\\\u0022: 16.108329,\\n \\\u0022longitude\\\u0022: 103.045706\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502180,\\n \\\u0022latitude\\\u0022: 0.355181,\\n \\\u0022longitude\\\u0022: 34.842515\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502184,\\n \\\u0022latitude\\\u0022: 0.376968,\\n \\\u0022longitude\\\u0022: 34.833768\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502185,\\n \\\u0022latitude\\\u0022: 0.542064,\\n \\\u0022longitude\\\u0022: 34.807146\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502188,\\n \\\u0022latitude\\\u0022: 0.226481,\\n \\\u0022longitude\\\u0022: 34.6861\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502189,\\n \\\u0022latitude\\\u0022: 0.377271,\\n \\\u0022longitude\\\u0022: 34.847554\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502182,\\n \\\u0022latitude\\\u0022: 0.376159,\\n \\\u0022longitude\\\u0022: 34.853432\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502183,\\n \\\u0022latitude\\\u0022: 0.393064,\\n \\\u0022longitude\\\u0022: 34.77225\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502186,\\n \\\u0022latitude\\\u0022: 0.377482,\\n \\\u0022longitude\\\u0022: 34.833515\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502187,\\n \\\u0022latitude\\\u0022: 0.376806,\\n \\\u0022longitude\\\u0022: 34.834587\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502181,\\n \\\u0022latitude\\\u0022: 0.330199,\\n \\\u0022longitude\\\u0022: 34.61133\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502211,\\n \\\u0022latitude\\\u0022: 6.436089,\\n \\\u0022longitude\\\u0022: 2.893817\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502212,\\n \\\u0022latitude\\\u0022: 6.436042,\\n \\\u0022longitude\\\u0022: 2.893788\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500794,\\n \\\u0022latitude\\\u0022: 9.144136,\\n \\\u0022longitude\\\u0022: -4.942693\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 500793,\\n \\\u0022latitude\\\u0022: 10.018482,\\n \\\u0022longitude\\\u0022: -5.572398\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502213,\\n \\\u0022latitude\\\u0022: 30.626683,\\n \\\u0022longitude\\\u0022: 73.10998\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502214,\\n \\\u0022latitude\\\u0022: 30.479075,\\n \\\u0022longitude\\\u0022: 72.302056\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502215,\\n \\\u0022latitude\\\u0022: 30.395171,\\n \\\u0022longitude\\\u0022: 72.184665\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502175,\\n \\\u0022latitude\\\u0022: 9.272094,\\n \\\u0022longitude\\\u0022: 12.415045\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502216,\\n \\\u0022latitude\\\u0022: 31.420552,\\n \\\u0022longitude\\\u0022: 74.260355\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502221,\\n \\\u0022latitude\\\u0022: 11.985952,\\n \\\u0022longitude\\\u0022: 8.617565\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502220,\\n \\\u0022latitude\\\u0022: 11.986022,\\n \\\u0022longitude\\\u0022: 8.617602\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502223,\\n \\\u0022latitude\\\u0022: 11.985955,\\n \\\u0022longitude\\\u0022: 8.61763\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502228,\\n \\\u0022latitude\\\u0022: 11.985967,\\n \\\u0022longitude\\\u0022: 8.617637\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502224,\\n \\\u0022latitude\\\u0022: 11.986025,\\n \\\u0022longitude\\\u0022: 8.617599\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502226,\\n \\\u0022latitude\\\u0022: 11.985997,\\n \\\u0022longitude\\\u0022: 8.617589\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502222,\\n \\\u0022latitude\\\u0022: 11.985984,\\n \\\u0022longitude\\\u0022: 8.617606\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502225,\\n \\\u0022latitude\\\u0022: 11.985981,\\n \\\u0022longitude\\\u0022: 8.61762\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502227,\\n \\\u0022latitude\\\u0022: 11.986025,\\n \\\u0022longitude\\\u0022: 8.617656\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502229,\\n \\\u0022latitude\\\u0022: 11.986025,\\n \\\u0022longitude\\\u0022: 8.617636\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502231,\\n \\\u0022latitude\\\u0022: 11.985976,\\n \\\u0022longitude\\\u0022: 8.617642\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502230,\\n \\\u0022latitude\\\u0022: 11.985903,\\n \\\u0022longitude\\\u0022: 8.617542\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502232,\\n \\\u0022latitude\\\u0022: 11.985992,\\n \\\u0022longitude\\\u0022: 8.617536\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502234,\\n \\\u0022latitude\\\u0022: 11.986071,\\n \\\u0022longitude\\\u0022: 8.617644\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502235,\\n \\\u0022latitude\\\u0022: 11.986041,\\n \\\u0022longitude\\\u0022: 8.617506\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502249,\\n \\\u0022latitude\\\u0022: 11.985934,\\n \\\u0022longitude\\\u0022: 8.617574\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502246,\\n \\\u0022latitude\\\u0022: 11.985919,\\n \\\u0022longitude\\\u0022: 8.617566\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502238,\\n \\\u0022latitude\\\u0022: 11.98601,\\n \\\u0022longitude\\\u0022: 8.617557\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502239,\\n \\\u0022latitude\\\u0022: 11.985937,\\n \\\u0022longitude\\\u0022: 8.617644\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502240,\\n \\\u0022latitude\\\u0022: 11.986079,\\n \\\u0022longitude\\\u0022: 8.617575\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502241,\\n \\\u0022latitude\\\u0022: 11.98595,\\n \\\u0022longitude\\\u0022: 8.617625\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502243,\\n \\\u0022latitude\\\u0022: 11.986051,\\n \\\u0022longitude\\\u0022: 8.617556\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502233,\\n \\\u0022latitude\\\u0022: 11.985976,\\n \\\u0022longitude\\\u0022: 8.617587\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502236,\\n \\\u0022latitude\\\u0022: 11.985981,\\n \\\u0022longitude\\\u0022: 8.617554\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502247,\\n \\\u0022latitude\\\u0022: 11.986018,\\n \\\u0022longitude\\\u0022: 8.617644\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502237,\\n \\\u0022latitude\\\u0022: 11.986009,\\n \\\u0022longitude\\\u0022: 8.61755\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502244,\\n \\\u0022latitude\\\u0022: 11.985937,\\n \\\u0022longitude\\\u0022: 8.617542\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502262,\\n \\\u0022latitude\\\u0022: 10.466169,\\n \\\u0022longitude\\\u0022: 7.393349\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502273,\\n \\\u0022latitude\\\u0022: 9.07655,\\n \\\u0022longitude\\\u0022: 7.499353\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502274,\\n \\\u0022latitude\\\u0022: 11.58864,\\n \\\u0022longitude\\\u0022: -8.287198\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502264,\\n \\\u0022latitude\\\u0022: 11.639786,\\n \\\u0022longitude\\\u0022: -8.191005\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502278,\\n \\\u0022latitude\\\u0022: 16.458846,\\n \\\u0022longitude\\\u0022: -16.051663\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502279,\\n \\\u0022latitude\\\u0022: 9.076497,\\n \\\u0022longitude\\\u0022: 7.499455\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502266,\\n \\\u0022latitude\\\u0022: 12.579442,\\n \\\u0022longitude\\\u0022: -7.952538\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502284,\\n \\\u0022latitude\\\u0022: 16.527866,\\n \\\u0022longitude\\\u0022: -15.226836\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502287,\\n \\\u0022latitude\\\u0022: 16.458884,\\n \\\u0022longitude\\\u0022: -16.051627\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502288,\\n \\\u0022latitude\\\u0022: 13.375422,\\n \\\u0022longitude\\\u0022: -6.490578\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502272,\\n \\\u0022latitude\\\u0022: 13.447907,\\n \\\u0022longitude\\\u0022: -6.265061\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502263,\\n \\\u0022latitude\\\u0022: 9.076573,\\n \\\u0022longitude\\\u0022: 7.499476\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502277,\\n \\\u0022latitude\\\u0022: 16.401609,\\n \\\u0022longitude\\\u0022: -16.022502\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502265,\\n \\\u0022latitude\\\u0022: 6.166078,\\n \\\u0022longitude\\\u0022: 1.250269\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502280,\\n \\\u0022latitude\\\u0022: 12.63075,\\n \\\u0022longitude\\\u0022: -8.033591\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502281,\\n \\\u0022latitude\\\u0022: 12.630826,\\n \\\u0022longitude\\\u0022: -8.033526\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502267,\\n \\\u0022latitude\\\u0022: 13.408836,\\n \\\u0022longitude\\\u0022: -6.384818\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502269,\\n \\\u0022latitude\\\u0022: 9.076538,\\n \\\u0022longitude\\\u0022: 7.499432\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502276,\\n \\\u0022latitude\\\u0022: 14.26038,\\n \\\u0022longitude\\\u0022: -5.973321\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502282,\\n \\\u0022latitude\\\u0022: 13.448192,\\n \\\u0022longitude\\\u0022: -6.265136\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502285,\\n \\\u0022latitude\\\u0022: 16.540471,\\n \\\u0022longitude\\\u0022: -15.228354\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502286,\\n \\\u0022latitude\\\u0022: 16.503905,\\n \\\u0022longitude\\\u0022: -15.518096\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502289,\\n \\\u0022latitude\\\u0022: 14.687299,\\n \\\u0022longitude\\\u0022: -6.023648\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502270,\\n \\\u0022latitude\\\u0022: 16.399462,\\n \\\u0022longitude\\\u0022: -16.001234\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502271,\\n \\\u0022latitude\\\u0022: 16.468904,\\n \\\u0022longitude\\\u0022: -16.116679\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502283,\\n \\\u0022latitude\\\u0022: 11.647845,\\n \\\u0022longitude\\\u0022: -8.20712\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502268,\\n \\\u0022latitude\\\u0022: 16.525393,\\n \\\u0022longitude\\\u0022: -15.211891\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502290,\\n \\\u0022latitude\\\u0022: 8.472426,\\n \\\u0022longitude\\\u0022: 4.536638\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502291,\\n \\\u0022latitude\\\u0022: 9.076617,\\n \\\u0022longitude\\\u0022: 7.499507\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502319,\\n \\\u0022latitude\\\u0022: -8.138707,\\n \\\u0022longitude\\\u0022: 35.410065\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502349,\\n \\\u0022latitude\\\u0022: -2.551617,\\n \\\u0022longitude\\\u0022: 33.019341\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502408,\\n \\\u0022latitude\\\u0022: -2.551355,\\n \\\u0022longitude\\\u0022: 33.019246\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502414,\\n \\\u0022latitude\\\u0022: -3.844727,\\n \\\u0022longitude\\\u0022: 32.676024\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502416,\\n \\\u0022latitude\\\u0022: -2.551584,\\n \\\u0022longitude\\\u0022: 33.019466\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502317,\\n \\\u0022latitude\\\u0022: -5.047166,\\n \\\u0022longitude\\\u0022: 38.477935\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502321,\\n \\\u0022latitude\\\u0022: -8.138762,\\n \\\u0022longitude\\\u0022: 35.41019\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502322,\\n \\\u0022latitude\\\u0022: -2.551314,\\n \\\u0022longitude\\\u0022: 33.019343\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502347,\\n \\\u0022latitude\\\u0022: -2.551396,\\n \\\u0022longitude\\\u0022: 33.019345\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502407,\\n \\\u0022latitude\\\u0022: -8.138654,\\n \\\u0022longitude\\\u0022: 35.410033\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502412,\\n \\\u0022latitude\\\u0022: -8.138646,\\n \\\u0022longitude\\\u0022: 35.410092\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502339,\\n \\\u0022latitude\\\u0022: -2.551394,\\n \\\u0022longitude\\\u0022: 33.019346\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502397,\\n \\\u0022latitude\\\u0022: -8.138691,\\n \\\u0022longitude\\\u0022: 35.410152\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502398,\\n \\\u0022latitude\\\u0022: -2.551359,\\n \\\u0022longitude\\\u0022: 33.019216\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502344,\\n \\\u0022latitude\\\u0022: -2.551426,\\n \\\u0022longitude\\\u0022: 33.019359\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502346,\\n \\\u0022latitude\\\u0022: -8.138789,\\n \\\u0022longitude\\\u0022: 35.410083\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502401,\\n \\\u0022latitude\\\u0022: -2.551415,\\n \\\u0022longitude\\\u0022: 33.019151\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502350,\\n \\\u0022latitude\\\u0022: -8.138786,\\n \\\u0022longitude\\\u0022: 35.410098\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502351,\\n \\\u0022latitude\\\u0022: -8.138606,\\n \\\u0022longitude\\\u0022: 35.410164\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502409,\\n \\\u0022latitude\\\u0022: -2.551287,\\n \\\u0022longitude\\\u0022: 33.019342\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502335,\\n \\\u0022latitude\\\u0022: -2.551623,\\n \\\u0022longitude\\\u0022: 33.019376\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502340,\\n \\\u0022latitude\\\u0022: -8.138672,\\n \\\u0022longitude\\\u0022: 35.410163\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502410,\\n \\\u0022latitude\\\u0022: -2.551378,\\n \\\u0022longitude\\\u0022: 33.019342\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502411,\\n \\\u0022latitude\\\u0022: -8.138879,\\n \\\u0022longitude\\\u0022: 35.410069\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502178,\\n \\\u0022latitude\\\u0022: 9.076617,\\n \\\u0022longitude\\\u0022: 7.499507\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502179,\\n \\\u0022latitude\\\u0022: 8.472426,\\n \\\u0022longitude\\\u0022: 4.536638\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502208,\\n \\\u0022latitude\\\u0022: 8.472426,\\n \\\u0022longitude\\\u0022: 4.536638\\n },\\n {\\n \\\u0022tracker_id\\\u0022: 502218,\\n \\\u0022latitude\\\u0022: 8.465491,\\n \\\u0022longitude\\\u0022: 4.58494\\n }\\n]\\nvar count = 0;\\n for(var i=0; i\u003CtractorLatLngs.length;i\u002B\u002B){\\n var tractorId = Number(tractorLatLngs[i].tracker_id);\\n var latitude = tractorLatLngs[i].latitude;\\n var longitude = tractorLatLngs[i].longitude;\\n if( tractorId \u0026\u0026 latitude \u0026\u0026 longitude ){\\n const tractorUpdate = {};\\n tractorUpdate.PositionLongitude = longitude;\\n tractorUpdate.PositionLatitude = latitude;\\n\\n Tractor.update({TractorID : tractorId, PositionLatitude: null, PositionLongitude: null}, {$set:tractorUpdate}, function(err, updated){\\n if(err){\\n modules.logger.info(\\\u0022There was an error updating the latitude and longitude for tractorId \\\u0022 \u002B tractorLatLngs[i].tracker_id); \\n } else {\\n modules.logger.info(\\\u0022Successfully updated lat and long for tractor with id of \\\u0022 \u002B tractorLatLngs[i].tracker_id);\\n }\\n });\\n \\n }\\n count\u002B\u002B;\\n \\n }\\n if (count === tractorLatLngs.length ){\\n response.complete();\\n }\\n}\\n\\n\u0022\r\n },\r\n \u0022_MigrateTractorOwnerData\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n * Migrate tractor and it\u0027s fuel history from one account to another\\n * Created 27th February 2020\\n * @param request \\n * @param response \\n * @param modules \\n */\\n\\nfunction onRequest(request, response, modules) {\\n var fromUsername = \\\u0022radanny42@gmail.com\\\u0022;\\n var toUsername = \\\u0022aarizwan@engro.com\\\u0022;\\n var tractorIdArr = [502215];\\n var usersCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var fuelHistoryCol = modules.collectionAccess.collection(\\\u0022FuelHistory\\\u0022);\\n var now = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var log = modules.logger;\\n\\n usersCol.findOne({username: fromUsername}, function(userErr, user){\\n usersCol.findOne({username: toUsername}, function(user2Err, user2){\\n if (user \u0026\u0026 user2 \u0026\u0026 !userErr \u0026\u0026 !user2Err){\\n log.info(\\\u0022Users found \\\u0022\u002BJSON.stringify(user)\u002B\\\u0022, \\\u0022\u002BJSON.stringify(user2));\\n tractorDetailCol.update({TractorID: {$in: tractorIdArr}}, {$set: {_acl: user2._acl, UpdatedAt: now}}, {multi: true, upsert: false}, function(tractorDetailErr, tractorDetailList){\\n fuelHistoryCol.update({TractorID: {$in: tractorIdArr}}, {$set: {_acl: user2._acl, UpdatedAt: now}}, {multi: true, upsert: false}, function(fuelHistoryErr, fuelHistoryList){\\n log.info(\\\u0022Migration complete\\\u0022);\\n response.complete();\\n });\\n });\\n } else {\\n log.info(\\\u0022Couldn\u0027t find a user(s): \\\u0022\u002BuserErr\u002B\\\u0022, \\\u0022\u002Buser2Err);\\n response.complete();\\n } \\n });\\n });\\n}\u0022\r\n },\r\n \u0022__handlePushedAlertsMessages\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var TractorOwner = modules.collectionAccess.collection(\u0027TractorOwner\u0027);\\n var Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n var User = modules.collectionAccess.collection(\u0027user\u0027);\\n var UserAccount = modules.collectionAccess.collection(\u0027UserAccounts\u0027);\\n var Notification = modules.collectionAccess.collection(\u0027Notification\u0027);\\n var TractorOperator = modules.collectionAccess.collection(\u0027TractorOperator\u0027);\\n var Logger = modules.logger;\\n var Pusher = modules.push;\\n var Mailer = modules.email;\\n var userAcctCreatorIds = [];\\n var countNotificationsSaved = 0;\\n var alertBody = request.body;\\n var supportEmail = \\\u0022Hello Tractor \u003Csupport@hellotractor.com\u003E\\\u0022;\\n var dummyEmail = \\\u0022abdulmajid@hellotractor.com\\\u0022;\\n var appsEmail = \\\u0022apps2@hellotractor.com\\\u0022;\\n var alertEmail = \\\u0022aerishellotractor@yahoo.com\\\u0022;\\n \\n \\n if ( alertBody.data \u0026\u0026 Number(alertBody.data.assetId) ) {\\n \\n var alert = alertBody.data;\\n var tractorId = Number(alert.assetId); \\n \\n Tractor.findOne({\\\u0022TractorID\\\u0022: tractorId}, function (tractorErr, tractor) {\\n if ( tractorErr || !tractor ) { \\n Logger.error(\u0027There was an error finding tractor with the ID of : \u0027 \u002B tractorId \u002B \\\u0022 error is \\\u0022 \u002B tractorErr);\\n finish();\\n } else {\\n if (tractor.OperatorID){\\n TractorOperator.findOne({\\\u0022OperatorID\\\u0022:tractor.OperatorID}, function(tractorOperatorErr, tractorOperator){\\n findUsersAndPushNotification(alert, tractor, tractorOperator);\\n });\\n } else {\\n findUsersAndPushNotification(alertBody.data, tractor, null);\\n }\\n }\\n });\\n \\n } else {\\n modules.logger.info(JSON.stringify(alertBody));\\n finish();\\n }\\n \\n function findUsersAndPushNotification(alertData, tractor, tractorOperator){ \\n UserAccount.find({\\\u0022_acl.creator\\\u0022: tractor._acl.creator}, function(userActErr, userActs){\\n if (userActs){\\n userActs.forEach(function(userAct){\\n userAcctCreatorIds.push(userAct.accountHolderId);\\n });\\n }\\n \\n userAcctCreatorIds.push(tractor._acl.creator);\\n \\n User.find({\\\u0022_acl.creator\\\u0022: {$in: userAcctCreatorIds}}, function(userErr, users){\\n if (users){ \\n users.forEach(function(user){\\n TractorOwner.findOne({\\\u0022_acl.creator\\\u0022:user._acl.creator}, function(tractorOwnerErr, tractorOwner){\\n \\n if (tractorOwner \u0026\u0026 canReceiveNotification(tractorOwner, alertBody.data)){\\n\\n var entity = buildNotification(alertBody.data, user, tractorOwner, tractor, tractorOperator)\\n \\n Notification.save(entity, function(notificationErr, savedNotification){\\n \\n var title = getMessageTitle(entity.action, tractor);\\n\\n \\tMailer.send(supportEmail, tractorOwner.username, title, JSON.stringify(entity.message), supportEmail, null, null, appsEmail, function(emailErr, emailResult){\\n\\n entity.id = tractor.TractorID \u002B entity.action;\\n \\n Pusher.sendMessage(user, JSON.stringify(savedNotification), function(pushErr, pushResult) {\\n \\n Logger.info(\\\u0022Push notification sent for \\\u0022 \u002B savedNotification.tractorId );\\n Logger.info(\\\u0022Time: \\\u0022 \u002B new Date().toISOString() \u002B \\\u0022\\\\n\\\u0022 \u002B \\\u0022TractorID: \\\u0022 \u002B savedNotification.tractorId \u002B \\\u0022\\\\n\\\u0022 \u002B \\\u0022Alert Type: \\\u0022 \u002B alert.type);\\n \\n countNotificationsSaved\u002B\u002B;\\n canFinish(users);\\n });\\n });\\n });\\n } else {\\n countNotificationsSaved\u002B\u002B;\\n canFinish(users);\\n }\\n });\\n });\\n } else {\\n //No users match the creator id in the creator ids array\\n finish();\\n } \\n });\\n });\\n }\\n \\n function buildNotification(alertData, user, tractorOwner, tractor, tractorOperator){\\n \\n var alertType = alertData.type;\\n var notification = {};\\n var lastActiveTime = dateToHumanReadable(tractor.LastActiveTime);\\n\\n \\n notification._acl = user._acl;\\n notification.userId = user._acl.creator; \\n notification.tractorId = tractor.TractorID;\\n notification.operatorId = tractor.OperatorID;\\n notification.country = tractor.Country;\\n notification.street = tractor.Street;\\n notification.town = tractor.Town;\\n notification.tractorName = tractor.TractorName;\\n notification.type = \\\u0022alert\\\u0022; //TODO: Change to action on production\\n notification.read = false;\\n \\n if (alertType == \\\u0022deviceOffline\\\u0022){\\n notification.action = \\\u0022device_offline\\\u0022;\\n notification.message = \\\u0022Device Offline! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been offline since \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n \\n } else if(alertType == \\\u0022lowBattery\\\u0022){\\n notification.action = \\\u0022low_battery\\\u0022;\\n notification.message = \\\u0022Low Battery! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has low (\\\u0022\u002BactualValue\u002B\\\u0022 \\\u0022\u002Bunit\u002B\\\u0022) battery voltage. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country; \\n \\n } else if (alertType == \\\u0022stopThreshold\\\u0022){\\n notification.action = \\\u0022stop_threshold\\\u0022;\\n notification.message = \\\u0022Stopped! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has stopped. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n \\n } else if (alertType == \\\u0022idleThreshold\\\u0022){\\n notification.action = \\\u0022idle_threshold\\\u0022;\\n notification.message = \\\u0022Idle! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been idle. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n \\n } else if (alertType == \\\u0022unpluggedDevice\\\u0022){\\n notification.action = \\\u0022unplugged_device\\\u0022;\\n if (tractorOperator){\\n notification.message = \\\u0022Tampering alert! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been unplugged. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country\u002B\\\u0022 and operated by \\\u0022\u002BtractorOperator.OperatorName;\\n } else {\\n notification.message = \\\u0022Tampering alert! \\\u0022\u002Btractor.TractorName \u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has been unplugged. It was last active on \\\u0022\u002BlastActiveTime\u002B\\\u0022 at \\\u0022\u002Btractor.Street \u002B\\\u0022, \\\u0022\u002Btractor.Town\u002B\\\u0022, \\\u0022\u002Btractor.Country;\\n }\\n } else {\\n notification.action = \\\u0022\\\u0022;\\n notification.message = \\\u0022\\\u0022;\\n }\\n \\n var notificationToSave = modules.kinvey.entity(notification); \\n notificationToSave.extras = JSON.parse(JSON.stringify(notification));\\n notificationToSave.data = alertData;\\n\\n return notificationToSave;\\n }\\n \\n function getMessageTitle(alertType, tractor){\\n \\n if (alertType == \\\u0022device_offline\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) is offline\\\u0022;\\n } else if (alertType == \\\u0022low_battery\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has low battery\\\u0022; \\n } else if (alertType == \\\u0022stop_threshold\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) has stopped\\\u0022;\\n } else if (alertType == \\\u0022idle_threshold\\\u0022){\\n return tractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) is idle\\\u0022;\\n } else if (alertType == \\\u0022unplugged_device\\\u0022){\\n return \\\u0022Critical! \\\u0022\u002Btractor.TractorName\u002B\\\u0022 (\\\u0022\u002Btractor.TractorID\u002B\\\u0022) \\\u0022\u002B\\\u0022 has been tampered with\\\u0022;\\n } else {\\n return \\\u0022Tractor Alert\\\u0022;\\n }\\n }\\n\\n var dateToHumanReadable = function(date) {\\n return modules.moment(date).format(\\\u0022dddd Do MMMM YYYY LT\\\u0022) \u002B \\\u0022 UTC\\\u0022;\\n } \\n \\n function canFinish(users){\\n if (users.length == countNotificationsSaved){\\n response.complete();\\n }\\n }\\n\\n function finish(){\\n response.complete();\\n }\\n\\n var canReceiveNotification = function (tractorOwner, alertData){\\n var alertType = alertData.type;\\n if (alertType == \\\u0022deviceOffline\\\u0022 \u0026\u0026 tractorOwner.tractorOfflineNotifications){\\n return true;\\n } else if (alertType == \\\u0022lowBattery\\\u0022 \u0026\u0026 tractorOwner.batteryAlertNotifications){\\n return true;\\n } else if (alertType == \\\u0022stopThreshold\\\u0022 \u0026\u0026 tractorOwner.tractorStoppedNotifications){\\n return true;\\n } else if (alertType == \\\u0022idleThreshold\\\u0022 \u0026\u0026 tractorOwner.tractorStoppedNotifications){\\n return true;\\n } else if (alertType == \\\u0022unpluggedDevice\\\u0022 \u0026\u0026 tractorOwner.deviceUnpluggedNotifications){\\n return true;\\n } else {\\n return false;\\n }\\n } \\n}\\n \u0022\r\n },\r\n \u0022__activeTractorsPerMonthFinder\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n const Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n const Activity = modules.collectionAccess.collection(\u0027DailyTractorActivity\u0027);\\n \\n const tractor_ids = \\\u0022500500500503500501500504500513500511500514500062500046500058500069500021500139500007500118500119500093500064500051500114500095500101500108500024500013500009500068500085500050500052500124500034500022500109500079500027500084500075500077500100500082500016500125500053500092500111500102500043500133500113500014500030500078500023500097500073500083500080500130500035500123500120500037500121500055500032500074500116500127500008500096500020500044500045500106500132500018500131500110500104500039500117500011500129500029500047500036500091500054500112500010500086500012500061500006500019500026500122500040500042500031500065500005500103500048500025500049500090500028500070500094500015500099500041500059500071500067500126500105500128500033500017500056500076500115500038500519500515500516500509500510500507500568500552500540500567500548500570500545500543500558500556501026501016501010501018501043501044501040501009501005501024501036501012501033501048501008501019501029501011501038501030501017501046501049501003501023501002501006501031501042501045501013501039501034501015501020501021501047500257500258500259500260500107500098500203500204500200500208500207500209500201500202500205500206500134500135500136500137500138500140500001500002500003500004500057500063500141500088500072500081500087500089500060500142500143500144500145500146500147500148500149500150500405500406500302500303500305500400500402500403500404500000500301500408500312500313500314500317500318500319500342500339500322500320500306500307500308500310500338500155500156500157500158500159500160500161500162500164500165500166500167500168500169500170500171500173500174500175500176500177500178500210500211500212500213500214500151500152500153500154500300500304500327500321500409500328500329500336500340500215500216500217500309500311500315500316500324500326500225500343500180500183500325500334500330500333500407500605500609500633500603500637500624500634500631500616500626500656500604500618500639500617500632500619500663500652500638500653500651500606500629500613500620500658500623500657500641500600500601500602500608500611500614500615500621500622500630500655500642500643500645500647500648500649500660500661500413500414500412500261500179500182500181500679500678500680500681500682500683500684500685500686500687500688500689501037501032500704500703500702500701500700500699500697500696500698500690500705500706500707500708500709500675500676500677500665500666500667500668500669500670500671500672500673500674501022500628500610500650500654500627500635500646500659500664500607500625500640500644500636500612500662500410500172501041500184500769500710500711500712500713500714500715500716500717500718500719500720500721500722500723500724500725500726500727500728500729500730500731500732500733500734500735500736500737500738500768500765500766500767500762500763500739500740500741500742500743500744500745500746500747500748500749500750500751500752500753500754500755500756500757500758500759500760500761500186500187500193500192500191500218500219500220500221500222500223500224500419500420500421500424500425500426500427500428500429500430500431501050501052501053501054501055501056501057501058501059501060501061501062501063501064501065501066501067501068501069501070501071501072501051501073501074501075501076501077501078501079501080501081501082501083501084501085501086501087501088501089501090501091501092501093501094501095501096501097501098501099501100501101501102501103501104501105501106501107501108501109501110501111501112501113501114501115501116501117501118501119501120501121501122501123501124501125501126501127501128501129501131501130501132501133501134501135501138501139501140501141501142501143501144501145501146501147501148501149501150501151501152501153501154501155501156501157501158501159501160501161501162501163501164501165501166501168501169501170501171501172501173501174501175501176501177501178501179501181501182501183501184501185501186501187501188501189501190501191501192501193501194501195501196501197501198501199501200501201501202501203501204501206501208501209501210501211501212501213501214501215501216501217501218501219501220501221501222501223501224501225501226501227501228501229501230501231501232501233501234501235501236501237501238501239501240501241501242501243501244501245501246501247501248501249501250501251501252501253501254501256501257501258501259501260501261501262501263501264501265501266501267501268501269501270501271501272501273501274501275501276501277501278501279501280501281501282501283501284501285501286501287501288501289501290501291501292501293501294500797500820500822500815500823500819500816500818500864500870500871500872500874500876500877500878500879500880500881500882500883500885500886500888500889500891500910500911500917500934500935500937500938500804500194500245500226500227500228500229500230500246500247500233500234500235500236500237500238500239500240500241500242500243500244500795500796500249500250500251500541500066500437500438500439500440500441500442500443500444500447500448500449500450500454500455500457500458500459500462500463500464500467500468500469500470500471500472500475500476500477500479500480500481500482500483500484501545501546501547501548501549501550501551501552501554501555501556501557501558501559501560501561501562501563501565501566501569501571501578501579501583501584501585501587501589501591501592501594501595501596501597501601501602501603501604501606501608501611501612501613501614501615501617501618501619501621501622501624501625501627501630501631501632501633501634501640501642501643501645501649501652501653501654501655501656501657501658501662501663501665501666501669501670501671501679501680501681501685501686501692501694501695501701501702501703501704501705501706501707501708501709501710501712501714501715501717501719501720501721501723501725501726501727501728501729501731501732501733501734501735501736501737501738501739501740501742501744501745500485500486500487500488500489500490500491500492500493500494500495500496500497500498500499500588500587500524500525500526500527500528500529500530500531500532500533500534500535500536500537500538500539500571500572500573500574500575500576500577500578500579500580500581500582500583500584500586500585500589501295501297501301501302501305501306501307501309501311501313501315501316501317501322501323501324501325501326501327501328501331501332501336501337501339501341501342501344501346501348501352501354501359501361501363501367501369501374501376501377501378501379501381501382501383501387501391501393500939500940501395501396501402501406501410501411501412501413501414501415501416501417501419501420501421501422501423501425501427501430501435501436501439501440501442501449501450501459501460501463501464501466501468501469501471501476501480501481501482501488501490501494501495501498501499501500501504501505501507501508501510501512501514501516501517501519501521501524501528501529501530501537501538501478501746501747501748501749501750501751501752501753501754501755501757501758501759501760501761501762501763501764501765501766501767501768501770501771501772501774501775501776501777501779501780501781501782501784501785501786501788501789501790501791501792501793500798500544500542500546500262500263500264500265500266500267500268500269500270500271500272500273500274500276500277500278500279500280500281500282500283500284500285500287500288500289500353500352500351500350500349500348500347500346500345500354500355500356500357500358500359500360500361500362500363500364500365500366500367500368500369500370500371500372500373500374500375500376500378500379500380500381500382500383500385500386500590500591500592500595500694500770500771500554500555500786500387500388500389500781500784500163500799500800500801500793500794500817500805500806500807500808500809500810500811500812500813500814500559500254500941500824500825500826500827500828500829500830500831500832500833500834500821500802500803500195500196500569501800501801501802501803501804501805501806501807501808501809501810501811501812501813501814501815501816501817501818501819501820501821501822501823501824501825501826501827501828501829501830501831501832501833501835501836501837501838501839501840501841501842501843501844501845501846501847501848501849501850501851501852501853501854501855501856501857501858501859501860501861501862501863501865501866501867501868501869501870501871501872501873501874501875501876501877501878501880501881501882501883501884501885501886501887501888501889501890501891501892501893501895501896501897501898501899501900501901501902501903501904501905501906501907501908501909501910501911501912501914501915501916501917501918501919501920501922501923501924501925501926501927501928501930501932501933501936501937501938501939501942501943501944501945501946501947501948501949501950501951501953501954501955500560500561500562501957501958501959501960501961501964501965501966501967501968501969501970501971501972501973501974501975501976501977501978501979501980501981501982501983501984501985501986501987501989501990501991501992501993501994501995501996501997501998501999502000502001502002502003502004502005502006502007502008502009502010502011502012502013502014502015502016502017502018502019502020502021502022502023502024502025502026502027502028502029502031502032502033502035502038502039502040502041502043502044502045502046502047502048502049502050502051502052502055502057502059502061502062502063502064502065502066502067500390502069502070502071502072502073502074502075502076502077502079502080502081502082502083502085502091502092502093502094502095502096502097502099502100502102502103502104502105502106502107502108502109502110502111502112502114502115502116502117502118502119502120502121502122502123502124502125502126502127502128502130502133502140502141502142502143502144502145502146502147502148502149502150502151502152502153502154502155502156502157502158502159502160502161502162502163502164502165502166502167502168502169502170502171502172502173502174502200502201502209502210502180502181502182502184502185502186502187502188502189502211502212502213502214502215502175502216501207502220502221502222502223502224502225502226502227502228502229502230502231502232502233502234502235502236502237502238502239502240502241502243502244502246502247502249502263502264502265502266502267502268502269502270502271502272502273502274502276502277502278502279502280502281502282502283502284502285502286502287502288502289502262502290502394502395502396502397502398502401502407502408502409502410502411502412502414502415502416502317502319502335502339502340502344502346502347502349502350502351502381502382502219502218502208\\\u0022;\\n \\nconst tractor_ids_arr = tractor_ids.match(/.{1,6}/g);\\n \\n for( var i=0; i \u003C tractor_ids_arr.length; i\u002B\u002B){\\n tractor_ids_arr[i] = String(tractor_ids_arr[i]);\\n }\\n \\n Activity.find({TractorID: {$in: tractor_ids_arr } }, function(err, tractors){\\n \\n if( err ) { \\n modules.logger.info(\u0027There was an error \u0027 \u002B err.message);\\n }\\n \\n const activeCountHash = {};\\n \\n// for(var j=0; j\u003Ctractors.length; j\u002B\u002B){\\n// if( tractors[j].LastActiveTime){\\n// var YearMonthStr = tractors[j].LastActiveTime.split(\\\u0022 \\\u0022)[0].split(\\\u0022-\\\u0022);\\n// YearMonthStr = YearMonthStr[0] \u002B \\\u0022-\\\u0022 \u002B YearMonthStr[1];\\n// if(!activeCountHash[YearMonthStr]){\\n// activeCountHash[YearMonthStr] = 0;\\n// }\\n// activeCountHash[YearMonthStr] \u002B=1;\\n// } \\n// }\\n \\n for(var j=0; j\u003Ctractors.length; j\u002B\u002B){\\n if( tractors[j].day){\\n var YearMonthStr = tractors[j].day.split(\\\u0022-\\\u0022);\\n YearMonthStr = YearMonthStr[0] \u002B \\\u0022-\\\u0022 \u002B YearMonthStr[1];\\n if(!activeCountHash[YearMonthStr]){\\n activeCountHash[YearMonthStr] = 0;\\n }\\n activeCountHash[YearMonthStr] \u002B=1;\\n } \\n }\\n \\n modules.logger.info(activeCountHash);\\n \\n });\\n \\n response.complete();\\n}\u0022\r\n },\r\n \u0022__upload_mechanisation_service_as_bookings\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n \\n var existing_msp_bookings = [\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Kisumu\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Jane Kisia Odawo Enterprises\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 100,\\n \\\u0022Phone Number\\\u0022: 721336832,\\n \\\u0022Location\\\u0022: \\\u0022Nyando\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing,Harrowing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 1500,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Tractor With Plough And Rotavator Plough\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Jane Kisia\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 704672306,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022akinyikisia@gmail.com\\\u0022,\\n \\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Location\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022\\\u0022,\\n \\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022Kisumu\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Ahero Cooperative Society\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 150,\\n \\\u0022Phone Number\\\u0022: 720058224,\\n \\\u0022Location\\\u0022: \\\u0022Nyando/muhoroni\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing,harrowing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 1500,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022planter,boom sprayer,rotavator plough\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Mathews Mbeka\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 718327902,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022John Nyamburi\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022erastusadongo@gmail.com\\\u0022,\\n \\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Location\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022\\\u0022,\\n \\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Homabay\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Agrimech\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 500,\\n \\\u0022Phone Number\\\u0022: 711366516,\\n \\\u0022Location\\\u0022: \\\u0022All Homabay\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing,Harrowing,Planting\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 2000,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Nicholas Owiti\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 718344761,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022timskaru@agrimechafrica.co.ke\\\u0022,\\n \\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022Homabay\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Dr Ikawa\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 200,\\n \\\u0022Phone Number\\\u0022: 717226698,\\n \\\u0022Location\\\u0022: \\\u0022Suba Area\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Wycliff Ochieng\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 723022234,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022ikawaj@gmail.com\\\u0022,\\n \\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Siaya\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Julias Okoth\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 35,\\n \\\u0022Phone Number\\\u0022: \\\u0022722 976171\\\u0022,\\n \\\u0022Location\\\u0022: \\\u0022Ugenya/Alego/Ugunja\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 2000,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Tractor,Disc Plough\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Maltilda Juma\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 715824604,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022Patricia Oyugi\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: 727690734,\\n \\\u0022Email\\\u0022: \\\u0022charlesodhiambo36@gmail.com\\\u0022,\\n \\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Migori\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Kephas Nyakibuoga\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 55,\\n \\\u0022Phone Number\\\u0022: 727845849,\\n \\\u0022Location\\\u0022: \\\u0022Nyatike\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 2000,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Philip Oswago\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 700386526,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022knyakibwoga@gmail.com\\\u0022,\\n \\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Location\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022\\\u0022,\\n \\n },\\n {\\n \\\u0022County\\\u0022: \\\u0022Migori\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Robert Kibisu\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 30,\\n \\\u0022Phone Number\\\u0022: 738703677,\\n \\\u0022Location\\\u0022: \\\u0022Nyatike\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and planting\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 1500,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Planter\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Jared Ogalo\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 725164194,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022ckavere@yahoo.com\\\u0022,\\n \\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Migori\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Emmanuel Nyakioga\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 70,\\n \\\u0022Phone Number\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Location\\\u0022: \\\u0022Suna East\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022James Makori\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 708506433,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022e.nyakeriga@gmail.com\\\u0022,\\n \\n },\\n {\\n \\\u0022County\\\u0022: \\\u0022Migori\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Agrimech\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 300,\\n \\\u0022Phone Number\\\u0022: 711366516,\\n \\\u0022Location\\\u0022: \\\u0022Whole Migori\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing/ Harrowing and Planting\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 1500,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Elseba Ayoo\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 724438263,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022timskaru@agrimechafrica.co.ke\\\u0022,\\n },\\n {\\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Peter Wanga\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 79,\\n \\\u0022Phone Number\\\u0022: 722918877,\\n \\\u0022Location\\\u0022: \\\u0022Butula\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing, Harrowing and Ridging\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough, Harrower, Ridger\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Angeline Atsieno\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 703564184,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022Benard Ojiambo\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: 721820324,\\n \\\u0022Email\\\u0022: \\\u0022mr.peterwanga@gmail.com\\\u0022,\\n\\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Lydia Makori\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 78,\\n \\\u0022Phone Number\\\u0022: 702417235,\\n \\\u0022Location\\\u0022: \\\u0022Matayos\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing/ Harrowing and Planting\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow and Planter\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Amos Magero\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 722283988,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022Ruth Wandera\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: 721587706,\\n \\\u0022Email\\\u0022: \\\u0022moonstone254@gmail.com\\\u0022,\\n\\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Trix Makoba\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 48,\\n \\\u0022Phone Number\\\u0022: 712205910,\\n \\\u0022Location\\\u0022: \\\u0022Nambale\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and Harrowing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Phylis Olendo\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 714758625,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022trixnnoli@gmail.com\\\u0022,\\n \\n },\\n {\\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Moses Were Wejulu\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 25,\\n \\\u0022Phone Number\\\u0022: 713057127,\\n \\\u0022Location\\\u0022: \\\u0022Samia\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and Harrowing and ridging\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow and ridger\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Marlone Awillie\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 797178123,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022Cyprian Wanyama\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: 720538794,\\n \\\u0022Email\\\u0022: \\\u0022wemoadams1234@gmail.com\\\u0022,\\n \\n },\\n {\\n \\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Stephen Omadir Elusit\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 83,\\n \\\u0022Phone Number\\\u0022: 717088333,\\n \\\u0022Location\\\u0022: \\\u0022Teso South\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and Harrowing and ridging\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow and ridger\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Everlene Ouma Nakhungu\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 728757423,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022omadirechosit@gmail.com\\\u0022,\\n \\n },\\n {\\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Cyril Etyang\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 87,\\n \\\u0022Phone Number\\\u0022: 704226969,\\n \\\u0022Location\\\u0022: \\\u0022Teso South\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and Harrowing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022John Ouko Oporia\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 714392379,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022cetiang05@gmail.com\\\u0022,\\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Kiptela Stephen\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 49,\\n \\\u0022Phone Number\\\u0022: 725357894,\\n \\\u0022Location\\\u0022: \\\u0022Nambale\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and Harrowing and ridging\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow and ridger\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Morris Olaba\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 711585748,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022kiptelatele@gmail.com\\\u0022,\\n },\\n {\\n \\\u0022County\\\u0022: \\\u0022Busia\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Moffat Okisai\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 75,\\n \\\u0022Phone Number\\\u0022: 721490941,\\n \\\u0022Location\\\u0022: \\\u0022Teso South\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing and Harrowing and ridging\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 2500,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 2000,\\n \\\u0022Planting Cost per Acre\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough and Harrow and ridger\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Josphine Aokolodi\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 718193533,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022okisaimoffats@gmail.com\\\u0022,\\n\\n },\\n {\\n\\n \\\u0022County\\\u0022: \\\u0022Migori\\\u0022,\\n \\\u0022Name of service provider\\\u0022: \\\u0022Moses Rianga\\\u0022,\\n \\\u0022Estimated Acreage(LR 2020)\\\u0022: 40,\\n \\\u0022Phone Number\\\u0022: 725849138,\\n \\\u0022Location\\\u0022: \\\u0022Whole Migori\\\u0022,\\n \\\u0022Services offered.\\\u0022: \\\u0022Ploughing\\\u0022,\\n \\\u0022Ploughing Cost Per Acre\\\u0022: 3000,\\n \\\u0022Harrowing Cost Per Acre\\\u0022: 1800,\\n \\\u0022Planting Cost per Acre\\\u0022: 1500,\\n \\\u0022Machinery in possession\\\u0022: \\\u0022Plough\\\u0022,\\n \\\u0022Name of BA Linked\\\u0022: \\\u0022Philip Oswago\\\u0022,\\n \\\u0022Phone Number__1\\\u0022: 700386526,\\n \\\u0022Name of AA Linked\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Phone Number__2\\\u0022: \\\u0022\\\u0022,\\n \\\u0022Email\\\u0022: \\\u0022knyakibwoga@gmail.com\\\u0022,\\n \\n }\\n]\\n \\n \\n response.complete();\\n}\u0022\r\n },\r\n \u0022getPastMaintenanceForTractor\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n var tractorId = request.body.tractorId;\\n if (!tractorId || tractorId \u003C 100000) return response.error(\\\u0022InvalidTractorID\\\u0022);\\n \\n var maintenanceHistoryCol = modules.collectionAccess.collection(\\\u0022MaintenanceHistory\\\u0022);\\n var log = modules.logger;\\n\\n maintenanceHistoryCol.find({tractorId: tractorId}, function(maintenanceHistoryErr, maintenanceHistoryList){\\n if (maintenanceHistoryList \u0026\u0026 maintenanceHistoryList.length \u003E 0){\\n var maintenanceHoursDoneCounterMap = maintenanceHistoryList.reduce(function(acc, maintenanceHistory, index){\\n if (!acc[maintenanceHistory.maintenanceHours]) acc[maintenanceHistory.maintenanceHours] = {done: 0, undone: 0};\\n if (maintenanceHistory.done){\\n acc[maintenanceHistory.maintenanceHours].done \u002B= 1\\n } else {\\n acc[maintenanceHistory.maintenanceHours].undone \u002B= 1\\n }\\n return acc;\\n }, {});\\n log.info(\\\u0022Maintenance history list generated successfully for \\\u0022\u002BtractorId);\\n response.body = maintenanceHoursDoneCounterMap;\\n response.complete(200);\\n } else {\\n log.info(\\\u0022Couldn\u0027t find maintenance history for this tractor\\\u0022);\\n response.body = {};\\n response.complete(200);\\n }\\n });\\n}\u0022\r\n },\r\n \u0022NearbyTractorTechnician\u0022 : {\r\n \u0022code\u0022 : \u0022//Searches the tractor technician collection for a technician within the same\\n//State as the tractor and returns the closes technician based on the lat/lng of\\n//the tractor and technician\\n//Created on 26th March 2020 by Abdulmajid\\n\\nfunction onRequest(request, response, modules) {\\n var log = modules.logger;\\n var tractorId = request.body.tractorId;\\n if (!tractorId || tractorId.length \u003C 6) return response.error(\\\u0022InvalidTractorID\\\u0022);\\n log.info(\\\u0022Tractor id posted: \\\u0022\u002BtractorId);\\n var tractorDetailCol = modules.collectionAccess.collection(\\\u0022TractorDetail\\\u0022);\\n var tractorTechnicianCol = modules.collectionAccess.collection(\\\u0022TractorTechnician\\\u0022);\\n \\n tractorDetailCol.findOne({TractorID: tractorId}, function(tractorErr, tractorDetail){\\n if (tractorDetail){\\n var country = tractorDetail.Country;\\n var state = tractorDetail.Town;\\n var town = tractorDetail.Street;\\n var posLatitude = tractorDetail.PositionLatitude;\\n var posLongitude = tractorDetail.PositionLongitude;\\n \\n tractorTechnicianCol.find({\\n $and: [\\n {state: state},\\n {country: country}\\n ]\\n }, function(technicianErr, tractorTechnicianList){\\n if (tractorTechnicianList \u0026\u0026 tractorTechnicianList.length \u003E 0){\\n var nearbyTractorTechnician = tractorTechnicianList[0];\\n var distanceToNearbyTractorTechnician = distance(posLatitude, posLongitude, tractorTechnicianList[0].latitude, tractorTechnicianList[0].longitude, \\\u0022K\\\u0022);\\n tractorTechnicianList.forEach(function(tractorTechnician){\\n var latitude = tractorTechnician.latitude;\\n var longitude = tractorTechnician.longitude;\\n var distanceToTractor = distance(posLatitude, posLongitude, latitude, longitude, \\\u0022K\\\u0022);\\n if (distanceToTractor \u003C distanceToNearbyTractorTechnician){\\n nearbyTractorTechnician = tractorTechnician;\\n distanceToNearbyTractorTechnician = distanceToTractor;\\n }\\n });\\n \\n log.info(\\\u0022Found a nearby tractor technician: \\\u0022\u002BnearbyTractorTechnician);\\n response.body = nearbyTractorTechnician;\\n response.complete();\\n } else {\\n log.info(\\\u0022Couldn\u0027t find a nearby tractor technician\\\u0022);\\n response.error(404);\\n }\\n });\\n } else {\\n log.info(\\\u0022Could not find tractor\\\u0022);\\n response.error(403);\\n }\\n });\\n }\\n \\n \\n \\n function distance(lat1, lon1, lat2, lon2, unit) {\\n var radlat1 = (Math.PI * lat1) / 180;\\n var radlat2 = (Math.PI * lat2) / 180;\\n var theta = lon1 - lon2;\\n var radtheta = (Math.PI * theta) / 180;\\n var dist =\\n Math.sin(radlat1) * Math.sin(radlat2) \u002B\\n Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\\n if (dist \u003E 1) {\\n dist = 1;\\n }\\n dist = Math.acos(dist);\\n dist = (dist * 180) / Math.PI;\\n dist = dist * 60 * 1.1515;\\n if (unit == \\\u0022K\\\u0022) {\\n dist = dist * 1.609344;\\n }\\n if (unit == \\\u0022N\\\u0022) {\\n dist = dist * 0.8684;\\n }\\n return dist;\\n }\u0022\r\n },\r\n \u0022__pulled_trips_active_time_updater\u0022 : {\r\n \u0022code\u0022 : \u0022function onRequest(request, response, modules) {\\n const Tractor = modules.collectionAccess.collection(\u0027TractorDetail\u0027);\\n const requestBody = request.body;\\n \\n if(requestBody.totalActiveTime \u0026\u0026 requestBody.tractorId ){\\n \\n const TractorId = Number(requestBody.tractorId);\\n \\n const update = {};\\n \\n update.ActiveTimeToday = requestBody.totalActiveTime;\\n \\n Tractor.update({TractorID: TractorId}, { $set: update }, function(err, tractor){\\n if(err){\\n modules.logger.info(\u0027There was an error updating the ActiveTimeToday for the tractor with the ID of \u0027 \u002B requestBody.tractorId )\\n } else {\\n modules.logger.info(\u0027Successfully updated ActiveTimeToday for the tractor with the ID of \u0027 \u002B requestBody.tractorId);\\n }\\n });\\n\\n } else {\\n \\t\\tmodules.logger.info(\\\u0022request body not valid \\\u0022 \u002B TractorId);\\n }\\n \\n response.complete();\\n\\n}\u0022\r\n },\r\n \u0022FetchBookingWeatherData\u0022 : {\r\n \u0022code\u0022 : \u0022/**\\n * Fetch new bookings that were posted 30 minutes ago and update their weather information\\n * Created: 05/06/2020 by Abdulmajid\\n * @param {*} request \\n * @param {*} response \\n * @param {*} modules \\n */\\nfunction onRequest(request, response, modules) {\\n var bookingCol = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var API_KEY = \\\u002236b45f00efffeeb4d17f8509fe86d167\\\u0022;\\n \\n var apiRequest = modules.request;\\n var twoMinutesAgo = modules.moment.utc().subtract(2, \\\u0022minutes\\\u0022).toISOString();\\n var dateOneWeekLater = modules.moment.utc().add(5, \\\u0022days\\\u0022).format(\\\u0022YYYY-MM-DD\\\u0022);\\n var todaysDate = modules.moment.utc().format(\\\u0022YYYY-MM-DD\\\u0022);\\n var countBookings = 0; //Keep track of the number of bookings processed\\n \\n //Builds the request options per booking before making the request\\n var buildRequestOptions = function (booking) {\\n var lat = booking.latitude;\\n var lng = booking.longitude;\\n var weatherURL = \u0027https://api.openweathermap.org/data/2.5/forecast?units=metric\u0026lat=\u0027 \u002B lat \u002B \u0027\u0026lon=\u0027 \u002B lng \u002B \u0027\u0026APPID=\u0027\u002BAPI_KEY;\\n var requestOptions = {\\n uri: weatherURL,\\n method: \\\u0022GET\\\u0022,\\n strictSSL: false,\\n headers: {\\n \u0027Content-Type\u0027: \u0027application/json\u0027,\\n \u0027Accept\u0027: \u0027application/json\u0027\\n },\\n json: true\\n };\\n \\n return requestOptions;\\n }\\n \\n //Ends this script if all bookings have been processed\\n var finish = function(){\\n if (countBookings \u003C= 0){\\n modules.logger.info(\\\u0022Bookings weather info processed successfully\\\u0022);\\n response.complete();\\n }\\n }\\n \\n //Removes weather data of other days leaving that of the booking service date\\n var filterWeatherData = function(weather, serviceDate){\\n var weatherInfoList = weather.list.filter(function(currWeather){\\n return currWeather.dt_txt.split(\\\u0022 \\\u0022)[0] === serviceDate;\\n })\\n \\n return JSON.stringify({\\n cod: weather.cod,\\n message: weather.message,\\n cnt: weather.cnt,\\n list: weatherInfoList\\n });\\n }\\n \\n //Updates the booking with weather data\\n var updateBooking = function(booking, weather){\\n var serviceDate = booking.serviceDate;\\n var cleanedWeatherData = filterWeatherData(weather, serviceDate);\\n var timeNow = modules.moment.utc().format(\\\u0022YYYY-MM-DD HH:mm:ss\\\u0022);\\n var weatherUpdateDoc = {\\n \\\u0022WeatherCondition\\\u0022: cleanedWeatherData,\\n \\\u0022updatedAt\\\u0022: timeNow,\\n \\\u0022_kmd.lmt\\\u0022: new Date().toISOString()\\n }\\n \\n //Updates the booking with weather data and timestamps\\n bookingCol.update({\\\u0022_id\\\u0022: booking._id}, {$set: weatherUpdateDoc}, function(bookingErr, bookingUpdated){\\n modules.logger.info(\\\u0022Weather data for booking \\\u0022\u002Bbooking._id\u002B\\\u0022 updated successfully\\\u0022);\\n countBookings--;\\n finish();\\n });\\n }\\n \\n //Makes the request to open weather map to retrieve weather data for all bookings\\n var fetchWeatherInfo = function (bookings) {\\n modules.logger.info(\\\u0022About to fetch weather data for \\\u0022\u002Bbookings.length\u002B\\\u0022 bookings\\\u0022);\\n bookings.forEach(function(booking){\\n var requestOptions = buildRequestOptions(booking);\\n modules.logger.info(\\\u0022Weather Url: \\\u0022\u002BrequestOptions.uri);\\n apiRequest.get(requestOptions, function (err, resp, body) {\\n modules.logger.info(\\\u0022BODY: \\\u0022\u002Bbody);\\n if (body \u0026\u0026 body.cod == 200) {\\n modules.logger.info(\\\u0022Weather info found for \\\u0022\u002Bbooking._id);\\n updateBooking(booking, body);\\n } else {\\n modules.logger.info(\\\u0022Could not find weather info for \\\u0022\u002Bbooking._id\u002B\\\u0022, \\\u0022\u002Berr);\\n countBookings--;\\n finish();\\n }\\n });\\n });\\n }\\n \\n //Removes bookings without latitude and longitude or those whose latitude and longitude are zero or undefined\\n var filterInvalidBookings = function (bookingList) {\\n return bookingList.filter(function (booking) {\\n return booking.latitude \u0026\u0026 booking.longitude;\\n });\\n }\\n \\n //Builds the booking query\\n var bookingQuery = {\\n $and: [\\n { \\\u0022serviceDate\\\u0022: {$gte: todaysDate }},\\n { \\\u0022serviceDate\\\u0022: {$lte: dateOneWeekLater }},\\n { \\\u0022_kmd.lmt\\\u0022: {$gte: twoMinutesAgo }}\\n ]\\n };\\n \\n //Entry point, finds all bookings that satisfy query criteria\\n modules.logger.info(\\\u0022time thirty minutes ago: \\\u0022\u002BtwoMinutesAgo);\\n bookingCol.find(bookingQuery, function(bookingErr, bookingList) {\\n if (bookingList \u0026\u0026 bookingList.length \u003E 0){\\n modules.logger.info(\\\u0022Booking(s) found: \\\u0022 \u002B bookingList.length);\\n var cleanBookings = filterInvalidBookings(bookingList);\\n countBookings = cleanBookings.length;\\n fetchWeatherInfo(cleanBookings);\\n // response.complete(); //TODO: Remove\\n } else {\\n modules.logger.info(\\\u0022Nothing to process: \\\u0022 \u002B bookingErr);\\n response.complete();\\n }\\n });\\n }\u0022\r\n }\r\n },\r\n \u0022NotificationGeoFenceMaintenance\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n\\tvar logger = modules.logger;\\n\\t\\n\\tvar token = \\\u0022\\\u0022;\\n\\n collectionAccess.collection(\u0027TwoTrackApiToken\u0027).findOneAsync({id: 9228383772})\\n .then(function(accessToken) {\\n token = accessToken;\\n },\\n function(err) {\\n \\n return response.error(err);\\n });\\n\\t\\n\\tmodules.collectionAccess.collection(\u0027TractorDetail\u0027).find({}, function (err, docs) {\\n if (err) {\\n logger.error(\u0027Query failed: \u0027\u002B err);\\n } else {\\n docs.forEach(function(doc, a) {\\n if(doc.Latitude === 0 || doc.Latitude === \u0027undefined\u0027){\\n response.continue();\\n } else {\\n var tractorId = doc.TractorID;\\n var latitudeList = doc.Latitude;\\n var longitudeList = doc.Longitude;\\n var requestData={\\n \\\u0022token\\\u0022: \\\u0022\\\u0022\u002Btoken.token\u002B\\\u0022\\\u0022,\\n \\\u0022trackers\\\u0022: [{\\\u0022trackerId\\\u0022: tractorId}]\\n };\\n var requestOptions = {\\n \u0027url\u0027: \u0027https://hellotractor.2-track.com:8080/api/status\u0027,\\n headers: {\\n \\\u0022Version\\\u0022 : \\\u0022v1\\\u0022,\\n \\\u0022Content-Type\\\u0022 : \\\u0022application/json\\\u0022\\n },\\n json:requestData,\\n };\\n modules.request.post(requestOptions, function(error, resp, body){\\n if (error){\\n logger.info(\\\u0022error=\\\u0022\u002Berror);\\n response.body = {error: error.message};\\n response.complete(400);\\n }else{\\n var respData=resp.body.data;\\n if(respData !==null \u0026\u0026 respData!== \\\u0022\\\u0022){\\n respData.forEach(function(data,a){\\n var latitude = data.lat;\\n var longitude = data.lon;\\n var answer = checkcheck(latitude, longitude, latitudeList, longitudeList);\\n \\n function checkcheck (xLat, yLng, latList, lngList) {\\n var i, j=latList.length-1 ;\\n var oddNodes=false;\\n var polyLat = latList;\\n var polyLng = lngList;\\n for (i=0; i\u003ClatList.length; i\u002B\u002B) {\\n if((polyLng[i]\u003C yLng \u0026\u0026 polyLng[j]\u003E=yLng || polyLng[j]\u003C yLng \u0026\u0026 polyLng[i]\u003E=yLng) \u0026\u0026 (polyLat[i]\u003C=xLat || polyLat[j]\u003C=xLat)) {\\n oddNodes^=(polyLat[i]\u002B(yLng-polyLng[i])/(polyLng[j]-polyLng[i])*(polyLat[j]-polyLat[i])\u003CxLat); \\n }\\n j=i;\\n }\\n logger.info(\\\u0022******\\\u0022 \u002B oddNodes);\\n if(oddNodes === 0){\\n var entity = modules.kinvey.entity();\\n entity.TractorId = tractorId;\\n entity.Message = \\\u0022The tractor is out of geofence area\\\u0022;\\n modules.collectionAccess.collection(\\\u0022NotificationGeoFence\\\u0022).save(entity, function(err) {\\n response.continue();\\n });\\n }\\n return oddNodes;\\n }\\n });\\n }else{\\n response.continue();\\n }\\n response.continue();\\n }\\n });\\n }\\n });\\n }\\n\\t});\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPreSave\u0022 : true\r\n },\r\n \u0022TractorActivityData\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\nvar isSaveDistanceTravelledToDailyTractorActivityDataDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n saveDistanceTravelledToDailyTractorActivityData: async.apply(\\n saveDistanceTravelledToDailyTractorActivityData,\\n modules,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone \u0026\u0026 isSaveDistanceTravelledToDailyTractorActivityDataDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/\\\u0022\u002Bresponse.body.TractorID\u002B\\\u0022/tractor-activity-data\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n TractorID: response.body.TractorID,\\n ActivityID: response.body.ActivityID,\\n EventCode: response.body.EventCode,\\n EventName: response.body.EventName,\\n Speed: response.body.Speed,\\n Odometer: response.body.Odometer,\\n Idle: response.body.Idle,\\n IsGPSValid: response.body.IsGPSValid,\\n Lat: response.body.Lat,\\n Lng: response.body.Lng,\\n DirectionEW: response.body.DirectionEW,\\n DirectionNS: response.body.DirectionNS,\\n Altitude: response.body.Altitude,\\n IgnitionStatus: response.body.IgnitionStatus,\\n BatteryVoltage: response.body.BatteryVoltage,\\n SatelliteNumber: response.body.SatelliteNumber,\\n Street: response.body.Street,\\n Town: response.body.Town,\\n County: response.body.County,\\n Country: response.body.Country,\\n ActivityUTCDate: response.body.ActivityUTCDate,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n\\n\\nfunction saveDistanceTravelledToDailyTractorActivityData (modules, response){\\n var count = 0; \\n modules.collectionAccess.collection(\u0027TractorDetail\u0027).find({},function(error,tractorDetails){\\n if(!error \u0026\u0026 tractorDetails.length \u003E 0){\\n tractorDetails.forEach(function(tractor){\\n if(tractor.TractorID.toString().length == 6){\\n \\n var today = new Date();\\n \\n var year = today.getUTCFullYear();\\n var month = today.getUTCMonth();\\n var day = today.getUTCDate();\\n \\n var todayStr = year.toString() \u002B \u0027-\u0027 \u002B month.toString() \u002B \u0027-\u0027 \u002B day.toString();\\n var countActivities = 0;\\n\\n modules.collectionAccess.collection(\u0027TractorActivityData\u0027).find({\u0027ActivityUTCDate\u0027:{$gte:todayStr},\u0027EventName\u0027:\u0027Journey Started\u0027}, function(err, tractorActivities){\\n if(!err \u0026\u0026 tractorActivities.length \u003E 0){\\n tractorActivities.forEach(function(a){\\n if(a.EventName === \u0027Journey End\u0027){\\n a.distanceTravelled = activity.odometer - a.odometer;\\n modules.collectionAccess.collection(\u0027DailyTractorActivityData\u0027).save(a,function(e){\\n\\n countActivities\u002B\u002B;\\n if (countActivities == tractorActivities.length){\\n count\u002B\u002B;\\n shouldContinue(tractorDetails);\\n }\\n });\\n } else {\\n\\n countActivities\u002B\u002B;\\n if (countActivities == tractorActivities.length){\\n count\u002B\u002B;\\n shouldContinue(tractorDetails);\\n }\\n }\\n });\\n \\n } else {\\n count\u002B\u002B;\\n shouldContinue(tractorDetails);\\n }\\n });\\n \\n } else {\\n count\u002B\u002B;\\n shouldContinue(tractorDetails);\\n }\\n\\n \\n });\\n } else {\\n count\u002B\u002B;\\n shouldContinue(tractorDetails);\\n }\\n });\\n\\n var shouldContinue = function (tractorDetails){\\n if (count == tractorDetails.length){\\n isSaveDistanceTravelledToDailyTractorActivityDataDone = true;\\n callback(response);\\n }\\n }\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostSave\u0022 : true\r\n },\r\n \u0022UserFeedback\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPostSave(request, response, modules) {\\n// var logger = modules.logger;\\n// logger.info(response.body);\\n \\n var email = modules.email;\\n email.send(\\n response.body.username,\\n \u0027Hello Tractor \u003Csupport@hellotractor.com\u003E\u0027,\\n \u0027User Feedback from \u0027\u002Bresponse.body.username,\\n request.body.feedback, \\n null,\\n null,\\n //\\\u0022obi@hellotractor.com\\\u0022,\\n function(err, result) {\\n response.continue();\\n });\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostSave\u0022 : true\r\n },\r\n \u0022OldDailyTractorActivity\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostFetch 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPostFetch(request, response, modules) {\\n var collectionAccess = modules.collectionAccess,\\n async = modules.async,\\n logger = modules.logger,\\n moment = modules.moment;\\n\\n if(request.entityId) {\\n if(response.body.OperatorID) {\\n collectionAccess.collection(\u0027TractorOperator\u0027).findOneAsync({OperatorID: response.body.OperatorID})\\n .then(function(operator) {\\n logger.info(operator);\\n response.body.operator = operator;\\n return response.complete(200);\\n }, function(err) {\\n return response.error(err);\\n });\\n } else {\\n return response.complete(200);\\n }\\n } else {\\n //if we try to fetch bulk of daily activities we wont return all fields,\\n //because it\u0027s quite a lot of data. We return only fields that we need to\\n //show info correct\\n response.body = response.body.map(function(entity) {\\n return {\\n _id: entity._id,\\n StartActiveData: entity.StartActiveData,\\n LastActiveData: entity.LastActiveData,\\n AverageSpeed: entity.AverageSpeed,\\n HectaresServiced: entity.HectaresServiced ? entity.HectaresServiced : 0,\\n DistanceTravelled: entity.DistanceTravelled ? entity.DistanceTravelled:0,\\n TotalTimeActive: entity.TotalTimeActive ? entity.TotalTimeActive:0,\\n TotalTimeIdle: entity.TotalTimeIdle ? entity.TotalTimeIdle:0,\\n Revenue: entity.Revenue,\\n RevenueCurrency: entity.RevenueCurrency,\\n RevenueType: entity.RevenueType ? entity.RevenueType : 101,\\n Hectares: entity.Hectares,\\n _acl: entity._acl,\\n _kmd: entity._kmd\\n }\\n });\\n return response.complete(200);\\n }\\n}\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostFetch\u0022 : true\r\n },\r\n \u0022BookingAgents\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToAWSDone = false;\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n var lodash = modules.lodash;\\n var moment = modules.moment;\\n\\n async.parallel({\\n sendToAWSBackend: async.apply(\\n sendToAWSBackend,\\n httpRequest,\\n logger,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest,\\n lodash,\\n \\tmoment\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToAWSDone \u0026\u0026 isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n\\n/**\\n * **********************************************************************************\\n * Sends the booking request to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest, lodash, moment) {\\n var msg = buildBlockchainMessage(logger, response, lodash, moment);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl \u002B \\\u0022/api/v1/users/add-booking-agent\\\u0022;\\n httpRequest.post(blockchainRequestOptions(logger, response, lodash, moment, url, getBookingManagerToken(), msg), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n\\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n failedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n }); \\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\n function buildBlockchainMessage(logger,response,lodash, moment){\\n \\n logger.info(response.body);\\n \\n var pick = lodash.pick(response.body,[\u0027_id\u0027,\u0027bookingAgentID\u0027,\u0027createdAt\u0027,\u0027orgID\u0027,\u0027syncStatus\u0027,\u0027updatedAt\u0027, \u0027userId\u0027])\\n pick[\u0027created_at\u0027] = moment(lodash.get(response.body,\u0027_kmd.ect\u0027)).toISOString();\\n pick[\u0027updated_at\u0027] = moment(lodash.get(response.body,\u0027_kmd.lmt\u0027)).toISOString();\\n pick[\u0027organizationIds\u0027] = [pick[\u0027orgID\u0027]];\\n pick[\u0027acl\u0027] = response.body._acl.creator;\\n delete pick[\u0027orgID\u0027];\\n\\n pick[\u0027bookingAgentId\u0027]=pick[\u0027bookingAgentID\u0027];\\n pick[\u0027userProfileId\u0027]=pick[\u0027userId\u0027];\\n delete pick[\u0027userId\u0027];\\n\\n\\n delete pick[\u0027bookingAgentID\u0027];\\n \\n delete pick[\u0027createdAt\u0027];\\n delete pick[\u0027updatedAt\u0027];\\n\\n logger.info(\\\u0022picking items\\\u0022);\\n \\n logger.info(pick);\\n \\n return pick; \\n\\n}\\n\\nfunction blockchainRequestOptions(logger, response, lodash, moment, url, authorization, msg) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n\\n/**\\n * *******************************************************************************************\\n * Makes a copy of the booking agent on the AWS Backend\\n * @param httpRequest An object of the HTTP {@link modules.request} from the modules package\\n * @param logger An object of the {@link modules.logger} library from the modules package\\n * @param response The response to the client request\\n * ********************************************************************************************\\n */\\n\\nfunction sendToAWSBackend(httpRequest, logger, response) {\\n var requestOptions = awsRequestOptions(response);\\n httpRequest.post(requestOptions, function(awsErr, awsResp, awsBody) {\\n logger.info(\\\u0022Results: \\\u0022 \u002B awsErr \u002B \\\u0022, \\\u0022 \u002B JSON.stringify(awsResp) \u002B \\\u0022, \\\u0022 \u002B awsBody);\\n\\n //Done\\n isSendToAWSDone = true;\\n callback(response);\\n });\\n}\\n\\nfunction awsRequestOptions(response) {\\n var url = AWS_BACKEND_HOST\u002B\u0027/kinvey/api/bookingagents\u0027;\\n var msg = {\\n op: \\\u0022create\\\u0022,\\n data: response.body\\n };\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\n Accept: \\\u0022application/json\\\u0022,\\n Version: \\\u0022v1\\\u0022\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n var logger = modules.logger,\\n collectionAccess = modules.collectionAccess;\\n var bookingAgentID = request.body.bookingAgentID;\\n \\n collectionAccess.collection(\u0027BookingAgents\u0027)\\n .findOneAsync({bookingAgentID: bookingAgentID})\\n .then(function(bookingAgent) {\\n if(bookingAgent) {\\n logger.info(\\\u0022Previous: \\\u0022\u002BJSON.stringify(bookingAgent));\\n logger.info(\\\u0022New: \\\u0022\u002BJSON.stringify(request.body));\\n deleteInitBookingAgentAndSaveNew(request, response, modules, bookingAgent);\\n } else {\\n response.continue();\\n }\\n }, function(err) {\\n return response.error(err);\\n });\\n}\\n\\n//Fix for duplicate booking agent created\\nfunction deleteInitBookingAgentAndSaveNew(request, response, modules, initBookingAgent){\\n request.body._id = initBookingAgent._id;\\n request.body._acl = initBookingAgent._acl;\\n modules.collectionAccess.collection(\u0027BookingAgents\u0027).remove({_id:initBookingAgent._id}, function(err, bookingAgent){\\n response.continue();\\n });\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022hasOnPreSave\u0022 : true\r\n },\r\n \u0022ServiceBookings\u0022 : {\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToAWSDone = false;\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n var moment = modules.moment\\n\\n async.parallel({\\n sendToAWSBackend: async.apply(\\n sendToAWSBackend,\\n httpRequest,\\n logger,\\n response\\n ),\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest,\\n \\tmoment,\\n \\tmodules\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToAWSDone \u0026\u0026 isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n/**\\n * *******************************************************************************************\\n * Makes a copy of the booking on the AWS Backend\\n * @param httpRequest An object of the HTTP {@link modules.request} from the modules package\\n * @param logger An object of the {@link modules.logger} library from the modules package\\n * @param response The response to the client request\\n * ********************************************************************************************\\n */\\n\\nfunction sendToAWSBackend(httpRequest, logger, response) {\\n var requestOptions = awsRequestOptions(response);\\n httpRequest.post(requestOptions, function(awsErr, awsResp, awsBody) {\\n logger.info(\\n \\\u0022Results: \\\u0022 \u002B awsErr \u002B \\\u0022, \\\u0022 \u002B JSON.stringify(awsResp) \u002B \\\u0022, \\\u0022 \u002B awsBody\\n );\\n\\n //Done\\n isSendToAWSDone = true;\\n callback(response);\\n });\\n}\\n\\nfunction awsRequestOptions(response){\\n var url = AWS_BACKEND_HOST\u002B\u0027/kinvey/api/bookings\u0027; \\n modules.logger.info( url );\\n //TODO: test with -https://webhook.site/b61cdec4-27e0-47f0-b7c3-c1f7fb5eb29e\\n var msg = {\\n op: \\\u0022create\\\u0022,\\n data: response.body\\n };\\n\\n var requestOptions = {\\n uri: url,\\n headers: {\\n \\\u0022Content-Type\\\u0022: \\\u0022application/json\\\u0022,\\n Accept: \\\u0022application/json\\\u0022,\\n Version: \\\u0022v1\\\u0022\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n/**\\n * **********************************************************************************\\n * Sends the booking request to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest, moment, modules) {\\n var msg = buildBlockchainMessage(response, moment);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl \u002B \\\u0022/api/v1/bookings\\\u0022;\\n httpRequest.post(blockchainRequestOptions(response, msg, url), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var failedPosts = modules.collectionAccess.collection(\\\u0022FailedPosts\\\u0022);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response); \\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response, moment) {\\n var tractorPairedTo;\\n var tractorOperatorId;\\n var hectaresServiced;\\n var jobEndTime;\\n var jobStartTime;\\n if(response.body.OperatorID == 0){\\n response.body.OperatorID = null;\\n }\\n var msg = {\\n _id: response.body._id,\\n archivedBy: response.body.BookingArchived,\\n bookingAgentId: response.body.bookingAgentID,\\n bookingId: response.body.bookingID,\\n bookingStatus: response.body.bookingStatus,\\n clusterId: response.body.clusterID,\\n dateCompleted: moment(response.body.dateCompleted).toISOString(),\\n datePaired: moment(response.body.datePaired).toISOString(),\\n distanceToDestination: response.body.distanceToDestination,\\n hectaresServiced: response.body.hectaresServiced,\\n jobEndTime: response.body.jobEndTime,\\n jobStartTime: response.body.jobStartTime,\\n serviceDate: response.body.serviceDate,\\n serviceType: response.body.serviceType,\\n syncStatus: response.body.syncStatus,\\n toServiceDate: moment(response.body.TOServiceDate).toISOString(),\\n tractorOperatorId: response.body.OperatorID,\\n tractorPairedToId: response.body.tractorPairedTo,\\n latitude: response.body.latitude,\\n longitude: response.body.longitude,\\n farmLocation: response.body.farmLocation,\\n orgCode: response.body.orgID,\\n primaryCrop: response.body.primaryCrop,\\n secondaryCrop: response.body.secondaryCrop,\\n farmLocation: response.body.farmLocation,\\n weatherCondition: response.body.weatherCondition,\\n created_at: moment(response.body._kmd.ect).toISOString(),\\n updated_at: moment(response.body.updatedAt).toISOString()\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(response, msg, url) {\\n //Send to IBM Swagger (REST API)\\n var authorization = getBookingManagerToken();\\n\\n \\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\nfunction onPreSave(request, response, modules) {\\n\\n //Collections\\n var userAccountsCol = modules.collectionAccess.collection(\\\u0022UserAccounts\\\u0022);\\n var usersCol = modules.collectionAccess.collection(\\\u0022user\\\u0022);\\n var notificationsCol = modules.collectionAccess.collection(\\\u0022Notification\\\u0022);\\n var bookingsCol = modules.collectionAccess.collection(\\\u0022ServiceBookings\\\u0022);\\n var tractorOwnersCol = modules.collectionAccess.collection(\\\u0022TractorOwner\\\u0022);\\n\\n //Modules\\n var push = modules.push;\\n var log = modules.logger;\\n\\n //Constants, Keys or identifiers\\n var NEW = 99, PAIRED = 100, COMPLETED = 101, DECLINED = 102, CANCELLED = 103;\\n \\n //Counters\\n var counters;\\n var totalCount;\\n \\n //Variables\\n var body = request.body; \\n var wasTractorNearby = body.wasTractorNearby;\\n var clusterID = body.clusterID;\\n var serviceType = body.serviceType;\\n var hectaresServiced = body.hectaresServiced;\\n var distanceToDestination = body.distanceToDestination;\\n var orgId = body.orgID;\\n var bookingStatus = body.bookingStatus;\\n var earliestBooking;\\n\\n //Find bookings in cluster\\n bookingsCol.find({clusterID: clusterID}, {sort: {serviceDate: 1}}, function(bookingsErr, existingBookings){\\n if (existingBookings \u0026\u0026 existingBookings.length \u003E 0){\\n log.info(\\\u0022Existing bookings found \\\u0022\u002BexistingBookings.length);\\n earliestBooking = existingBookings[0]; //Earliest booking\\n totalCount = existingBookings.length; //Total number of existing bookings found\\n counters = getBookingsCount(existingBookings);\\n whatStatusAndSendNotification(counters, totalCount, existingBookings, hectaresServiced, earliestBooking, body, serviceType, clusterID, orgId);\\n\\n } else if (bookingStatus == 0){\\n //It\u0027s a new booking in this cluster\\n log.info(\\\u0022Completely new booking in a new cluster\\\u0022);\\n existingBookings = [];\\n earliestBooking = request.body;\\n totalCount = 1;\\n counters = getBookingsCount(existingBookings);\\n confirmNewBookingNotificationThreshold(existingBookings, hectaresServiced);\\n\\n } else {\\n //No bookings found in cluster\\n log.info(\\\u0022No existing bookings in cluster found. Possibly an unclustered booking that has been paired, completed, etc. No further action\\\u0022);\\n done();\\n }\\n });\\n\\n var whatStatusAndSendNotification = function (counters, totalCount, existingBookings, hectaresServiced, earliestBooking, body, serviceType, clusterId, orgId){\\n if ((bookingStatus == 1 || bookingStatus == 2) \u0026\u0026 (counters.PAIRED \u002B 1) == totalCount){\\n //TODO: Send notification to booking agent\\n log.info(\\\u0022About to send paired notification to BA\\\u0022);\\n sendNotificationToBookingAgents(earliestBooking, PAIRED, existingBookings, body, serviceType, clusterId, orgId);\\n // (earliestBooking, newStatus, existingBookings, body, serviceType, clusterId, orgId) \\n\\n } else if (isDeletedOrgId(orgId)){\\n //TODO: Cancelled booking\\n log.info(\\\u0022About to send cancelled notification to BA\\\u0022); \\n sendNotificationToBookingAgents(earliestBooking, CANCELLED, existingBookings, body, serviceType, clusterId, orgId);\\n\\n } else if (isArchivedBooking(body)){\\n //TODO: Declined booking\\n log.info(\\\u0022About to send declined notification to BA\\\u0022);\\n sendNotificationToBookingAgents(earliestBooking, DECLINED, existingBookings, body, serviceType, clusterId, orgId);\\n\\n } else if (bookingStatus == 0){\\n //TODO: New booking\\n log.info(\\\u0022About to send new booking notification to TO\\\u0022); \\n confirmNewBookingNotificationThreshold(existingBookings, hectaresServiced, existingBookings, body, serviceType, clusterId, orgId);\\n\\n } else if (bookingStatus == 3){\\n //TODO: Completed booking\\n log.info(\\\u0022About to send completed booking notification to BA\\\u0022); \\n sendNotificationToBookingAgents(earliestBooking, COMPLETED, existingBookings, body, serviceType, clusterId, orgId);\\n\\n } else {\\n //TODO: No status change\\n log.info(\\\u0022No status change found. Just continue\\\u0022);\\n done();\\n }\\n }\\n\\n var confirmNewBookingNotificationThreshold = function (existingBookings, hectaresServiced){\\n if (serviceType == 107){\\n log.info(\\\u0022New trailer service found\\\u0022);\\n var totalDistance = parseFloat(getTotalDistance(existingBookings)) \u002B parseFloat((distanceToDestination/1000.0).toFixed(2));\\n if (totalDistance \u003E= 30 || wasTractorNearby){\\n //Send notification to tractor owners\\n log.info(\\\u0022New trailer service exceeding 30km found\\\u0022);\\n sendNotificationToTractorOwners(existingBookings);\\n } else {\\n log.info(\\\u0022Distance too little\\\u0022);\\n done();\\n }\\n } else {\\n log.info(\\\u0022New hectarage service found\\\u0022);\\n var totalExistingHectares = getTotalHectares(existingBookings);\\n var totalHectares = parseFloat(getTotalHectares(existingBookings)) \u002B parseFloat(hectaresServiced);\\n log.info(\\\u0022New hectarage service found \\\u0022\u002BtotalHectares\u002B\\\u0022, \\\u0022\u002BtotalExistingHectares\u002B\\\u0022, \\\u0022\u002BhectaresServiced);\\n if (totalHectares \u003E= 30 || wasTractorNearby){\\n //Send notification to tractor owners\\n log.info(\\\u0022New hectarage service exceeding 30 Ha found\\\u0022);\\n sendNotificationToTractorOwners(existingBookings);\\n } else {\\n log.info(\\\u0022Hectarage too little\\\u0022);\\n done();\\n }\\n } \\n }\\n\\n var sendNotificationToTractorOwners = function (existingBookings){\\n var tractorOwnerCreatorIdMap = {};\\n usersCol.find({orgIDs: orgId, user_type: {$ne: 2}}, function(userErr, users){\\n if (users \u0026\u0026 users.length \u003E 0){\\n tractorOwnersCol.find({orgID: orgId }, function(tractorOwnersErr, tractorOwners){\\n if (tractorOwners){\\n tractorOwners.forEach(function(tractorOwner){\\n tractorOwnerCreatorIdMap[tractorOwner._acl.creator] = tractorOwner;\\n });\\n } else {\\n log.info(\\\u0022No tractor owner exists with org id of \\\u0022\u002BorgId);\\n }\\n\\n var counter = 0;\\n users.forEach(function(user){\\n log.info(\\\u0022Build new booking notification\\\u0022);\\n var bookingAgent = getBookingAgentFromData(request.body);\\n var notification = buildNewBookingsNotification(user, existingBookings, distanceToDestination, hectaresServiced, serviceType, earliestBooking, orgId, clusterID, bookingAgent); //TODO: create function\\n \\n log.info(\\\u0022New notificaiton built\\\u0022);\\n notificationsCol.save(notification.notificationToSave, function(notificationErr){\\n log.info(\\\u0022New booking notificaiton saved\\\u0022);\\n if (tractorOwnerCreatorIdMap[user._acl.creator]){ //TODO: tractorOwnerCreatorIdMap[user._acl.creator].receiveNewBookingNotification\\n push.sendPayload(user, {}, {}, notification.notificationToSend, function(res) {\\n log.info(\\\u0022Push notification sent\\\u0022);\\n counter\u002B\u002B;\\n if (counter \u003E= users.length){\\n log.info(\\\u0022All notifications sent\\\u0022);\\n done();\\n }\\n });\\n } else {\\n log.info(\\\u0022Tractor owner not found in TractorOwner \\\u0022\u002Buser._acl.creator);\\n counter\u002B\u002B\\n if (counter \u003E= users.length){\\n done();\\n }\\n }\\n });\\n });\\n });\\n } else {\\n log.info(\\\u0022No tractor owner as user exists with org id of \\\u0022\u002BorgId);\\n done();\\n }\\n });\\n }\\n\\n var sendNotificationToBookingAgents = function(earliestBooking, newStatus, existingBookings, body, serviceType, clusterId, orgId){\\n log.info(\\\u0022About to send notification to booking agents\\\u0022);\\n usersCol.findOne({\\\u0022_acl.creator\\\u0022: earliestBooking._acl.creator}, function(err, bookingAgent){\\n log.info(\\\u0022Finished finding booking agent with creator: \\\u0022\u002BearliestBooking._acl.creator);\\n if (bookingAgent){\\n log.info(\\\u0022Booking agent found\\\u0022);\\n var archived = getArchivedBy(body);\\n if (archived){\\n log.info(\\\u0022Booking archived: \\\u0022\u002Barchived.CreatorID);\\n usersCol.findOne({\\\u0022_acl.creator\\\u0022: archived.CreatorID}, function(tractorOwnerErr, tractorOwner){\\n if (tractorOwner){\\n log.info(\\\u0022Tractor owner who archived booking found\\\u0022);\\n saveAndSendNotificationToBookingAgents(newStatus, tractorOwner, existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgent);\\n // (newStatus, bookingAgent, tractorOwner, existingBookings, body, earliestBooking, serviceType, clusterId, orgId)\\n } else {\\n log.info(\\\u0022Tractor owner who archived booking not found\\\u0022);\\n saveAndSendNotificationToBookingAgents(newStatus, null, existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgent);\\n }\\n //Save and send notification to booking agent\\n });\\n } else {\\n //Save and send notification to booking agent\\n log.info(\\\u0022Booking not archived\\\u0022);\\n saveAndSendNotificationToBookingAgents(newStatus, null, existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgent);\\n }\\n } else {\\n log.info(\\\u0022Booking agent not found: Cant send notification\\\u0022);\\n done();\\n }\\n });\\n }\\n\\n var saveAndSendNotificationToBookingAgents = function(newStatus, tractorOwner, existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgentUser){\\n log.info(\\\u0022Building required booking notification\\\u0022);\\n var notifications;\\n if (newStatus == DECLINED){\\n log.info(\\\u0022About to build declined notification\\\u0022); \\n notifications = buildDeclinedBookingsNotification(tractorOwner, existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgentUser);\\n\\n } else if (newStatus == CANCELLED){\\n log.info(\\\u0022About to build cancelled notification\\\u0022);\\n notifications = buildCancelledBookingsNotification(tractorOwner, existingBookings, earliestBooking, body, clusterId, serviceType, orgId, bookingAgentUser);\\n\\n } else if (newStatus == COMPLETED){\\n log.info(\\\u0022About to build completed notification\\\u0022);\\n notifications = buildCompletedBookingsNotification(existingBookings, body, serviceType, earliestBooking, clusterId, orgId, bookingAgentUser);\\n\\n } else if (newStatus == PAIRED){\\n log.info(\\\u0022About to build paired notification\\\u0022);\\n notifications = buildPairedBookingsNotification(existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgentUser);\\n }\\n\\n log.info(\\\u0022Notification built\\\u0022);\\n if (notifications){\\n log.info(\\\u0022About to save built notification\\\u0022);\\n notificationsCol.save(notifications.notificationToSave, function(notificationErr){\\n log.info(\\\u0022Booking agent booking notificaiton saved\\\u0022);\\n push.sendPayload(bookingAgentUser, {}, {}, notifications.notificationToSend, function(res) {\\n log.info(\\\u0022Push notification sent to booking agent\\\u0022);\\n done();\\n });\\n });\\n } else {\\n log.info(\\\u0022Notification could not be built\\\u0022);\\n done();\\n }\\n \\n }\\n\\n //Build declined booking notification\\n var buildDeclinedBookingsNotification = function(tractorOwner, existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgentUser) {\\n var revisedMessage;\\n log.info(\\\u0022Computing total distance for declined notification\\\u0022); \\n var totalDistance = parseFloat((parseFloat(getTotalDistance(existingBookings))/1000.0).toFixed(2));\\n log.info(\\\u0022Computing total hectares for declined notification\\\u0022); \\n var totalHectares = parseFloat(parseFloat(getTotalHectares(existingBookings)).toFixed(2));\\n log.info(\\\u0022Creating booking agent from data for declined notification\\\u0022);\\n var bookingAgent = getBookingAgentFromData(body);\\n\\n log.info(\\\u0022Declined booking notification\\\u0022);\\n\\n if (serviceType == 107){\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalDistance\u002B\\\u0022 km \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been declined\\\u0022;\\n } else {\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalHectares\u002B\\\u0022 Ha \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been declined\\\u0022; \\n }\\n\\n var notification = {\\n _acl: earliestBooking? earliestBooking._acl: \\\u0022\\\u0022, \\n message: revisedMessage,\\n userId: earliestBooking? earliestBooking._acl.creator: \\\u0022\\\u0022,\\n read: false,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022declined_booking_cluster\\\u0022,\\n orgID: orgId,\\n serviceType: serviceType,\\n clusterID: clusterId\\n };\\n\\n var notificationToSave = modules.kinvey.entity(notification);\\n\\n var notificationToSend = JSON.parse(JSON.stringify(notificationToSave));\\n notificationToSend.id = clusterId;\\n notificationToSend.bookingAgentID = body.bookingAgentID;\\n notificationToSend.bookingAgentImageURL = bookingAgent? bookingAgent.profileImageURL:\\\u0022\\\u0022;\\n notificationToSend.serviceDate = earliestBooking.serviceDate;\\n notificationToSend.tractorOwnerName = tractorOwner? tractorOwner.first_name:\\\u0022\\\u0022;\\n\\n if (serviceType == 107){\\n notificationToSend.hectaresDistance = totalDistance;\\n } else {\\n notificationToSend.hectaresDistance = totalHectares; \\n }\\n\\n //Append extras to saved notification\\n var extras = JSON.stringify(notificationToSend);\\n notificationToSave.extras = extras;\\n\\n return {notificationToSave: notificationToSave, notificationToSend: notificationToSend};\\n };\\n\\n //Build deleted booking notification\\n var buildCancelledBookingsNotification = function(tractorOwner, existingBookings, earliestBooking, body, clusterId, serviceType, orgId, bookingAgentUser) {\\n var revisedMessage;\\n var totalDistance = parseFloat(parseFloat(getTotalDistance(existingBookings)/1000.0).toFixed(2));\\n var totalHectares = parseFloat(parseFloat(getTotalHectares(existingBookings)).toFixed(2));\\n var bookingAgent = getBookingAgentFromData(body);\\n\\n if (serviceType == 107){\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalDistance\u002B\\\u0022 km \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been cancelled\\\u0022;\\n } else {\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalHectares\u002B\\\u0022 Ha \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been cancelled\\\u0022; \\n }\\n\\n var notification = {\\n _acl: earliestBooking? earliestBooking._acl: \\\u0022\\\u0022,\\n message: revisedMessage,\\n userId: earliestBooking? earliestBooking._acl.creator:\\\u0022\\\u0022, \\n read: false,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022cancelled_booking_cluster\\\u0022,\\n orgID: orgId,\\n serviceType: serviceType,\\n clusterID: clusterId\\n };\\n\\n var notificationToSave = modules.kinvey.entity(notification);\\n\\n var notificationToSend = JSON.parse(JSON.stringify(notificationToSave));\\n notificationToSend.id = clusterId;\\n notificationToSend.bookingAgentID = body.bookingAgentID;\\n notificationToSend.bookingAgentImageURL = bookingAgent? bookingAgent.profileImageURL:\\\u0022\\\u0022;\\n notificationToSend.serviceDate = earliestBooking.serviceDate;\\n notificationToSend.tractorOwnerName = tractorOwner?tractorOwner.first_name:\\\u0022\\\u0022;\\n\\n if (serviceType == 107){\\n notificationToSend.hectaresDistance = totalDistance;\\n } else {\\n notificationToSend.hectaresDistance = totalHectares; \\n }\\n\\n //Append extras to saved notification\\n var extras = JSON.stringify(notificationToSend);\\n notificationToSave.extras = extras;\\n\\n return {notificationToSave: notificationToSave, notificationToSend: notificationToSend};\\n };\\n\\n //Build paired booking notification\\n var buildPairedBookingsNotification = function(existingBookings, body, earliestBooking, serviceType, clusterId, orgId, bookingAgentUser) {\\n var revisedMessage;\\n var totalDistance = parseFloat((parseFloat(getTotalDistance(existingBookings))/1000.0).toFixed(2));\\n var totalHectares = parseFloat(parseFloat(getTotalHectares(existingBookings)).toFixed(2));\\n var tractorOperator = getTractorOperatorFromData(body);\\n var tractorDetail = getTractorDetailData(body);\\n var bookingAgent = getBookingAgentFromData(body);\\n log.info(\\\u0022Problem service type: \\\u0022\u002BserviceType);\\n\\n log.info(\\\u0022Init variables set for paired booking\\\u0022);\\n\\n if (serviceType == 107){\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalDistance\u002B\\\u0022 km \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been paired to Tractor \\\u0022\u002BtractorDetail.license_plate_number;\\n } else {\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalHectares\u002B\\\u0022 Ha \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been paired to Tractor \\\u0022\u002BtractorDetail.license_plate_number; \\n }\\n\\n log.info(\\\u0022Service type from earliest booking: \\\u0022\u002BserviceType);\\n\\n var notification = {\\n _acl: earliestBooking? earliestBooking._acl: \\\u0022\\\u0022,\\n message: revisedMessage,\\n userId: earliestBooking? earliestBooking._acl.creator: \\\u0022\\\u0022,\\n read: false,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022paired_booking_cluster\\\u0022,\\n orgID: orgId,\\n serviceType: serviceType,\\n tractorId: body.tractorPairedTo? Number(earliestBooking.tractorPairedTo):null,\\n operatorId: body.OperatorID? Number(earliestBooking.OperatorID):null,\\n clusterID: clusterId\\n };\\n\\n var notificationToSave = modules.kinvey.entity(notification);\\n\\n\\n var notificationToSend = JSON.parse(JSON.stringify(notificationToSave));\\n notificationToSend.id = clusterId;\\n notificationToSend.bookingAgentID = body.bookingAgentID;\\n notificationToSend.bookingAgentImageURL = bookingAgent? bookingAgent.profileImageURL? bookingAgent.profileImageURL:\\\u0022\\\u0022:\\\u0022\\\u0022;\\n notificationToSend.serviceDate = earliestBooking.serviceDate;\\n notificationToSend.tractorName = tractorDetail? tractorDetail.TractorName:\\\u0022\\\u0022;\\n notificationToSend.licensePlate = tractorDetail? tractorDetail.license_plate_number:\\\u0022\\\u0022;\\n notificationToSend.operatorName = tractorOperator? tractorOperator.OperatorName:\\\u0022\\\u0022;\\n notificationToSend.operatorImageURL = tractorOperator? tractorOperator.ProfileImageURL:\\\u0022\\\u0022;\\n notificationToSend.operatorPhone = tractorOperator? tractorOperator.MobileNumber:\\\u0022\\\u0022;\\n \\n\\n if (serviceType == 107){\\n notificationToSend.hectaresDistance = totalDistance;\\n } else {\\n notificationToSend.hectaresDistance = totalHectares; \\n }\\n\\n //Append extras to saved notification\\n var extras = JSON.stringify(notificationToSend);\\n notificationToSave.extras = extras;\\n\\n return {notificationToSave: notificationToSave, notificationToSend: notificationToSend};\\n };\\n\\n //Build completed booking notification\\n var buildCompletedBookingsNotification = function(existingBookings, body, serviceType, earliestBooking, clusterId, orgId, bookingAgentUser) {\\n var revisedMessage;\\n var totalDistance = parseFloat((parseFloat(getTotalDistance(existingBookings))/1000.0).toFixed(2));\\n var totalHectares = parseFloat(parseFloat(getTotalHectares(existingBookings)).toFixed(2));\\n\\n var tractorOperator = getTractorOperatorFromData(body);\\n var tractorDetail = getTractorDetailData(body);\\n var bookingAgent = getBookingAgentFromData(body);\\n\\n if (serviceType == 107){\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalDistance\u002B\\\u0022 km \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been marked as complete. Thank you for using Hello Tractor\\\u0022;\\n } else {\\n revisedMessage = \\\u0022Your \\\u0022\u002BtotalHectares\u002B\\\u0022 Ha \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate)\u002B\\\u0022 has been marked as complete. Thank you for using Hello Tractor\\\u0022;\\n }\\n\\n var notification = {\\n _acl: earliestBooking._acl,\\n message: revisedMessage,\\n userId: earliestBooking._acl.creator,\\n read: false,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022completed_booking_cluster\\\u0022,\\n orgID: orgId,\\n serviceType: serviceType,\\n tractorId: body.tractorPairedTo? Number(body.tractorPairedTo): null,\\n operatorId: body.OperatorID? Number(body.OperatorID):null,\\n clusterID: clusterId\\n };\\n\\n var notificationToSave = modules.kinvey.entity(notification);\\n\\n\\n var notificationToSend = JSON.parse(JSON.stringify(notificationToSave));\\n notificationToSend.id = clusterId;\\n notificationToSend.bookingAgentID = body.bookingAgentID;\\n notificationToSend.bookingAgentImageURL = bookingAgent?bookingAgent.profileImageURL:\\\u0022\\\u0022;\\n notificationToSend.serviceDate = earliestBooking.serviceDate;\\n notificationToSend.tractorName = tractorDetail? tractorDetail.TractorName:\\\u0022\\\u0022;\\n notificationToSend.licensePlate = tractorDetail? tractorDetail.license_plate_number:\\\u0022\\\u0022;\\n notificationToSend.operatorName = tractorOperator? tractorOperator.OperatorName:\\\u0022\\\u0022;\\n notificationToSend.operatorImageURL = tractorOperator? tractorOperator.ProfileImageURL:\\\u0022\\\u0022;\\n notificationToSend.operatorPhone = tractorOperator? tractorOperator.MobileNumber:\\\u0022\\\u0022;\\n\\n if (serviceType == 107){\\n notificationToSend.hectaresDistance = totalDistance;\\n } else {\\n notificationToSend.hectaresDistance = totalHectares; \\n }\\n\\n //Append extras to saved notification\\n var extras = JSON.stringify(notificationToSend);\\n notificationToSave.extras = extras;\\n\\n return {notificationToSave: notificationToSave, notificationToSend: notificationToSend};\\n };\\n\\n\\n var done = function (){\\n modules.logger.info(\\\u0022Done\\\u0022);\\n response.continue() \\n };\\n}\\n\\n/**\\n * Building notification objects including new, paired, completed, declined, and cancelled notifications\\n * Notifications are built in pairs - notificationToSend and notificationToSave\\n */\\n\\n // Send general new booking notification\\nvar buildNewBookingsNotification = function(user, existingBookings, distanceToDestination, hectaresServiced, serviceType, earliestBooking, orgId, clusterId, bookingAgent) {\\n \\n //Base notification\\n var revisedMessage;\\n var totalDistance = parseFloat((distanceToDestination/1000.0).toFixed(2));\\n var totalHectares = parseFloat(hectaresServiced.toFixed(2));\\n if (serviceType == 107){\\n revisedMessage = \\\u0022You\u2019ve received a new \\\u0022\u002BtotalDistance\u002B\\\u0022 km \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate);\\n } else {\\n revisedMessage = \\\u0022You\u2019ve received a new \\\u0022\u002BtotalHectares\u002B\\\u0022 Ha \\\u0022\u002BgetServiceName(serviceType)\u002B\\\u0022 service request scheduled for \\\u0022\u002BdateToHumanReadable(earliestBooking.serviceDate);\\n }\\n var notification = {\\n _acl: user._acl,\\n userId: user._acl.creator,\\n message: revisedMessage,\\n read: false,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022new_booking_cluster\\\u0022,\\n orgID: orgId,\\n serviceType: serviceType,\\n clusterID: clusterId\\n };\\n \\n var notificationToSave = modules.kinvey.entity(notification);\\n\\n //Build notification to send\\n var notificationToSend = JSON.parse(JSON.stringify(notificationToSave));\\n\\n notificationToSend.id = clusterId;\\n notificationToSend.bookingAgentID = bookingAgent?bookingAgent.bookingAgentID:\\\u0022\\\u0022;\\n notificationToSend.bookingAgentImageURL = bookingAgent?bookingAgent.profileImageURL:\\\u0022\\\u0022;\\n notificationToSend.serviceDate = earliestBooking.serviceDate;\\n if (serviceType == 107){\\n notificationToSend.hectaresDistance = totalDistance;\\n } else {\\n notificationToSend.hectaresDistance = totalHectares;\\n }\\n\\n //Append extras to saved notification\\n var extras = JSON.stringify(notificationToSend);\\n notificationToSave.extras = extras;\\n return {notificationToSave: notificationToSave, notificationToSend: notificationToSend};\\n};\\n\\n//Helper functions \\n\\nfunction isArchivedBooking (body) {\\n return body.BookingArchived != null;\\n}\\n\\nfunction dateToHumanReadable (date) {\\n return modules.moment(date).format(\\\u0022dddd Do MMMM YYYY\\\u0022);\\n}\\n\\nfunction getTotalHectares (bookings) {\\n if (bookings \u0026\u0026 bookings.length \u003E 0){\\n var totalHectares = 0;\\n bookings.forEach(function(booking){\\n totalHectares \u002B= parseFloat(booking.hectaresServiced);\\n });\\n\\n return parseFloat(totalHectares);\\n\\n } else {\\n modules.logger.info(\\\u0022No existing bookings\\\u0022)\\n return 0;\\n }\\n}\\n\\nfunction getTotalDistance (bookings) {\\n if (bookings \u0026\u0026 bookings.length \u003E 0){\\n var totalDistance = 0;\\n bookings.forEach(function(booking){\\n totalDistance \u002B= parseFloat(booking.distanceToDestination);\\n });\\n\\n return parseFloat(totalDistance);\\n\\n } else {\\n return 0;\\n }\\n}\\n\\nfunction getBookingAgentFromData (body) {\\n var bookingAgent = body.bookingAgentData;\\n if (bookingAgent){\\n return JSON.parse(bookingAgent);\\n } else {\\n return;\\n }\\n}\\n\\nfunction getTractorOperatorFromData (body) {\\n if (body.tractorOperatorData){\\n return JSON.parse(body.tractorOperatorData);\\n }\\n return;\\n}\\n\\nfunction isDeletedOrgId (orgId) {\\n return orgId == \\\u0022100\\\u0022;\\n}\\n\\nfunction getUsernameInUserAccounts(userAccounts) {\\n var userAccountArr = [];\\n userAccounts.forEach(function(userAccount){\\n userAccountArr.push(userAccount.username);\\n });\\n return userAccountArr;\\n}\\n\\nfunction getTractorOwnersAsUsers (users) {\\n return users.filter(function(user) {\\n return user.user_type == null || user.user_type == 1;\\n });\\n}\\n\\nfunction getArchivedBy (body){\\n var bookingArchived = body.BookingArchived;\\n if (bookingArchived){\\n var archived = JSON.parse(bookingArchived);\\n if (archived.length \u003E 0){\\n return archived[archived.length - 1];\\n }\\n }\\n return;\\n}\\n\\nfunction getTractorDetailData (body){\\n var tractorDetailData = body.tractorDetailData;\\n if (tractorDetailData){\\n return JSON.parse(tractorDetailData);\\n }\\n return;\\n}\\n\\nfunction getBookingsCount(bookings){\\n var counters = {};\\n var newCount = 0;\\n var pairedCount = 0;\\n var completedCount = 0;\\n bookings.forEach(function(booking){\\n newCount \u002B= booking.bookingStatus == 0? 1: 0;\\n pairedCount \u002B= booking.bookingStatus == 1 || booking.bookingStatus == 2? 1: 0;\\n completedCount \u002B= booking.bookingStatus == 3? 1: 0;\\n });\\n counters.NEW = newCount;\\n counters.PAIRED = pairedCount;\\n counters.COMPLETED = completedCount;\\n\\n return counters;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022,\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022hasOnPreSave\u0022 : true\r\n },\r\n \u0022TractorTips\u0022 : {},\r\n \u0022TractorAds\u0022 : {},\r\n \u0022FarmMeasure\u0022 : {},\r\n \u0022FarmMeasures\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n// async.parallel({\\n// sendToBlockchain: async.apply(\\n// sendToBlockchain,\\n// logger,\\n// response,\\n// httpRequest\\n// )\\n// });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id:\\tresponse.body._id,\\n bookingAgentId\\t:\\tresponse.body.bookingAgentID,\\n createdAt\\t:\\tresponse.body.dateCreated,\\n farmArea\\t:\\tresponse.body.farmArea,\\n farmMeasureId\\t:\\tresponse.body.farmMeasureID,\\n farmPerimeter\\t:\\tresponse.body.farmPerimeter,\\n locationRoute\\t:\\tresponse.body.locationRoute,\\n measurementMode\\t:\\tresponse.body.measurementMode,\\n totalmeasurementDuration\\t:\\tresponse.body.totalMeasurementDuration,\\n updatedAt\\t:\\tresponse.body._kmd.lmt\\n }\\n return msg;\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/farms\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(response, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n \\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction blockchainRequestOptions(response, msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n modules.logger.info(response);\\n \\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022AppVersionHistory\u0022 : {},\r\n \u0022Logger\u0022 : {},\r\n \u0022FuelHistory\u0022 : {},\r\n \u0022UserAccounts\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n var lodash = modules.lodash;\\n var moment = modules.moment;\\n\\n logger.info(\\\u0022Posting user profiles data to backend\\\u0022); \\n \\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest,\\n lodash\\n )\\n }); \\n\\n}\\n\\nfunction sendToBlockchain(logger,response,httpRequest,lodash){\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl \u002B \\\u0022/api/v1/users/add-profile\\\u0022; \\n var authorization = getBookingManagerToken();\\n var msg = buildBlockchainMessage(logger,response,lodash);\\n \\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(blockErr,blockRes,blockBody){\\n logger.info(\\\u0022here \u003E\u003E\u003E\u003E\u003E\\\u0022);\\n\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n response.continue();\\n });\\n \\n } else {\\n response.continue();\\n }\\n });\\n\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization){\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n \\n \\n}\\n\\nfunction buildBlockchainMessage(logger,response,lodash){\\n var pick = lodash.pick(response.body,[\u0027_id\u0027,\u0027userLevel\u0027,\u0027user_type\u0027,\u0027orgID\u0027]);\\n logger.info(\\\u0022picking items\\\u0022);\\n pick[\u0027userType\u0027]= pick[\u0027user_type\u0027];\\n pick[\u0027orgId\u0027]= pick[\u0027orgID\u0027];\\n\\n delete pick[\u0027user_type\u0027];\\n delete pick[\u0027orgID\u0027];\\n\\n return pick;\\n \\n}\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022OperatorReview\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n var lodash = modules.lodash;\\n var moment = modules.moment;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest,\\n lodash,\\n \\tmoment\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n\\n/**\\n * **********************************************************************************\\n * Sends the booking request to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest, lodash, moment) {\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/feedback/review/\\\u0022\u002Bresponse.body.OperatorID;\\n var authorization = getBookingManagerToken();\\n var msg = buildBlockchainMessage(logger, response, lodash, moment);\\n httpRequest.post(blockchainRequestOptions(logger, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n failedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n }); \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\n function buildBlockchainMessage(logger,response,lodash, moment){\\n// logger.info(response.body);\\n var pick = lodash.pick(response.body,[\u0027_id\u0027,\u0027FarmerFeedback\u0027,\u0027CreatedAt\u0027,\u0027OperatorRating\u0027,\u0027OperatorID\u0027,\u0027UpdatedAt\u0027])\\n \\n// logger.info(\\\u0022picking items\\\u0022);\\n pick[\u0027comment\u0027]= pick[\u0027FarmerFeedback\u0027];\\n pick[\u0027created_at\u0027]= moment(pick[\u0027CreatedAt\u0027]).toISOString();\\n pick[\u0027rating\u0027]= pick[\u0027OperatorRating\u0027];\\n pick[\u0027revieweeId\u0027]= pick[\u0027OperatorID\u0027];\\n pick[\u0027updated_at\u0027]= moment(pick[\u0027UpdatedAt\u0027]).toISOString();\\n delete pick[\u0027FarmerFeedback\u0027];\\n delete pick[\u0027CreatedAt\u0027];\\n delete pick[\u0027OperatorRating\u0027];\\n delete pick[\u0027OperatorID\u0027];\\n delete pick[\u0027UpdatedAt\u0027];\\n// logger.info(pick,response.body);\\n return pick; \\n\\n}\\n\\nfunction blockchainRequestOptions(logger, msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n logger.info(\\\u0022@ blockchainRequestOptions: \\\u0022\u002B JSON.stringify(msg));\\n logger.info(\\\u0022@ blockchainRequestOptions: \\\u0022\u002B authorization);\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022Emails\u0022 : {},\r\n \u0022APIKeys\u0022 : {},\r\n \u0022MaintenanceRepo\u0022 : {},\r\n \u0022TractorActivity\u0022 : {},\r\n \u0022ActivityHectar\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/\\\u0022\u002Bresponse.body.TractorId\u002B\\\u0022/activity-hectare\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err); \\n }\\n\\n isSendToBlockchainDone = true;\\n callback(response); \\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n TractorId: response.body.TractorId,\\n OperatorId: response.body.OperatorId,\\n HectarTilledStartPT: response.body.HectarTilledStartPT,\\n HectarTilledStopPT: response.body.HectarTilledStopPT,\\n ActivityId: response.body.ActivityId,\\n JourneyStartTime: response.body.JourneyStartTime,\\n JourneyEndTime: response.body.JourneyEndTime,\\n Latitude:response.body.Latitude,\\n JourneyIdentifier: response.body.JourneyIdentifier,\\n Longitude: response.body.Longitude,\\n IgnitionStatus: response.body.IgnitionStatus,\\n Street: response.body.Street,\\n Town: response.body.Town,\\n County: response.body.County,\\n Country: response.body.Country,\\n OperatorName: response.body.OperatorName,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022DailyTractorActivity\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n/**\\n * **********************************************************************************\\n * Sends the daily tractor activity to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl \u002B \\\u0022/api/v1/tractors/\\\u0022\u002Bmsg[\\\u0022TractorID\\\u0022]\u002B\\\u0022/daily-tractor-activity\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(response, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n failedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n }); \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n TotalTimeActive: response.body.TotalTimeActive,\\n TotalTimeIdle: response.body.TotalTimeIdle,\\n LastJourneyStartTime: response.body.LastJourneyStartTime,\\n TotalSpeed: response.body.TotalSpeed,\\n TotalSpeedCounter: response.body.TotalSpeedCounter,\\n AverageSpeed: response.body.AverageSpeed,\\n StartActiveData: response.body.StartActiveData,\\n LastActiveData: response.body.LastActiveData,\\n Country: response.body.Country,\\n Town: response.body.Town,\\n Street: response.body.Street,\\n IgnitionStatus: response.body.IgnitionStatus,\\n DistanceTravelled: response.body.DistanceTravelled,\\n LastOdometerValue: response.body.LastOdometerValue,\\n StartCountry: response.body.StartCountry,\\n StartTown: response.body.StartTown,\\n StartStreet: response.body.StartStreet,\\n RouteDTO: response.body.Route,\\n OperatorID: response.body.OperatorID,\\n TractorID: response.body.TractorID,\\n day: response.body.day,\\n RevenueType: response.body.RevenueType,\\n RevenueCurrency: response.body.RevenueCurrency,\\n Revenue: response.body.Revenue,\\n HectaresServiced: response.body.HectaresServiced,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(response, msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022Maintenance\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n modules.logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/\\\u0022\u002Bresponse.body.TractorId\u002B\\\u0022/maintenance\\\u0022; \\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(response, msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n }); \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n tractorId: response.body.TractorId,\\n description: response.body.Description,\\n duration: response.body.Duration,\\n date: response.body.Date,\\n repairDate: response.body.RepairDate,\\n status: response.body.Status,\\n maintenanceLog: response.body.MaintenanceLog,\\n timeTaken: response.body.TimeTaken,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(response, msg, url, authorization) {\\n //Send to IBM Swagger (REST API) \\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022MaintenanceActivity\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/\\\u0022\u002Bresponse.body.TractorID\u002B\\\u0022/maintenance-activity\\\u0022;\\n logger.info(url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n \\tfailedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n });\\n \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n counter: response.body.counter,\\n tractorId: response.body.TractorID,\\n description: response.body.Description,\\n duration: response.body.Duration,\\n lastNotificationTime: response.body.LastNotificationTime,\\n predefinedMaintenanceActivityId: response.body.PredefinedMaintenanceActivityId,\\n status: response.body.Status,\\n type: response.body.Type\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API)\\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022PredefinedMaintenanceActivity\u0022 : {\r\n \u0022hasOnPostSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPostSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Flags indicating when each function has been executed regardless of an error\\nvar isSendToBlockchainDone = false;\\n\\nfunction onPostSave(request, response, modules) {\\n var async = modules.async;\\n var httpRequest = modules.request;\\n var logger = modules.logger;\\n\\n async.parallel({\\n sendToBlockchain: async.apply(\\n sendToBlockchain,\\n logger,\\n response,\\n httpRequest\\n )\\n });\\n}\\n\\n//!important - Called when all functions have been executed\\nfunction callback(response) {\\n if (isSendToBlockchainDone) {\\n response.continue();\\n }\\n}\\n\\n/**\\n * **********************************************************************************\\n * Sends the booking request to IBM Swagger REST API\\n * @param logger An object of the {@link modules.logger} class\\n * @param response The response to the client request\\n * @param httpRequest An object of the {@link modules.request} class\\n * **********************************************************************************\\n */\\nfunction sendToBlockchain(logger, response, httpRequest) {\\n var msg = buildBlockchainMessage(response);\\n logger.info(msg);\\n var baseUrl = getBookingManagerBaseUrl();\\n var url = baseUrl\u002B\\\u0022/api/v1/tractors/predefined-maintenance-activity\\\u0022; \\n logger.info(\\\u0022Url: \\\u0022 \u002B url);\\n var authorization = getBookingManagerToken();\\n httpRequest.post(blockchainRequestOptions(msg, url, authorization), function(\\n blockErr,\\n blockRes,\\n blockBody\\n ) {\\n logger.info(\\n \\\u0022Blockchain Response: \\\u0022 \u002B\\n JSON.stringify(blockErr) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockRes) \u002B\\n \\\u0022, \\\u0022 \u002B\\n JSON.stringify(blockBody)\\n );\\n if(blockRes.status != 200){\\n \\n var doc = {\\n \\turl: url, \\n msg: msg, \\n httpStatus: blockRes.status, \\n no_tries: 0\\n };\\n var collectionName = getFailedTransactionsCollection();\\n var failedPosts = modules.collectionAccess.collection(collectionName);\\n \\n failedPosts.save(doc, function(err, docs){\\n if(err){\\n logger.info(err);\\n }\\n\\n //Done\\n isSendToBlockchainDone = true;\\n callback(response);\\n }); \\n } else {\\n isSendToBlockchainDone = true;\\n callback(response);\\n }\\n });\\n}\\n\\nfunction buildBlockchainMessage(response) {\\n var msg = {\\n _id: response.body._id,\\n Description: response.body.Description,\\n Duration: response.body.Duration,\\n Mandatory: response.body.Mandatory,\\n };\\n\\n return msg;\\n}\\n\\nfunction blockchainRequestOptions(msg, url, authorization) {\\n //Send to IBM Swagger (REST API) \\n var requestOptions = {\\n uri: url,\\n headers: {\\n Authorization: authorization\\n },\\n json: msg\\n };\\n\\n return requestOptions;\\n}\\n\\n\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022FailedPosts\u0022 : {},\r\n \u0022Logs\u0022 : {},\r\n \u0022PricePerHectare\u0022 : {\r\n \u0022hasOnPreSave\u0022 : true,\r\n \u0022code\u0022 : \u0022\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 onPreSave 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n//Prevents duplicate entries of prices for the same service\\n//and/or updates the price with the orgID of the tractor owner\\n//Created by Abdulmajid \u0026 Sulaiman on 11/10/2019, Updated 14/05/2020\\n\\nfunction onPreSave(request, response, modules) {\\n var creatorId = modules.requestContext.getAuthenticatedUserId();\\n var serviceType = request.body.serviceType;\\n var log = modules.logger;\\n var pricePerHectareQuery = {\\n $and: [\\n {\\\u0022_acl.creator\\\u0022: creatorId},\\n {\\\u0022serviceType\\\u0022: serviceType}\\n ]\\n };\\n\\n var tractorOwnerCol = modules.collectionAccess.collection(\\\u0022TractorOwner\\\u0022);\\n var pricePerHectareCol = modules.collectionAccess.collection(\\\u0022PricePerHectare\\\u0022);\\n \\n tractorOwnerCol.findOne({\\\u0022_acl.creator\\\u0022: creatorId}, function(tractorOwnerErr, tractorOwnerFound){\\n pricePerHectareCol.findOne(pricePerHectareQuery, function(pricePerHectareErr, pricePerHectareFound){\\n if (pricePerHectareFound){\\n log.info(\\\u0022Price per hectare already exists, just update\\\u0022);\\n \\tresponse.body._id = pricePerHectareFound._id;\\n response.continue();\\n } else {\\n log.info(\\\u0022New price per hectare will be created\\\u0022);\\n request.body.orgID = tractorOwnerFound.orgID;\\n response.continue();\\n }\\n });\\n });\\n}\\n/** 8d6c7d20-1894-11e2-892e-0800200c9a66 end 8d6c7d20-1894-11e2-892e-0800200c9a66 **/\\n\u0022\r\n },\r\n \u0022DailyFuelConsumed\u0022 : {},\r\n \u0022FuelCalibrationResults\u0022 : {},\r\n \u0022MaintenanceHistory\u0022 : {},\r\n \u0022TractorTechnician\u0022 : {}\r\n },\r\n \u0022dataIntegration\u0022 : {\r\n \u0022EventCodeDetails\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Events\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022EventType\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Farmer\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022HectaresTilledCalculator\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022MaintenanceTypes\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022ResponseFromOperator\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Revenue\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022RevenueTypes\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022SmsGatewayInfo\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022StoreCurrentStatus\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TelerivetFarmerInfo\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorDetail\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorInfo\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorOperator\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorOwner\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorToOperator\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022NotificationGeoFenceMaintenance\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorCurrentLocation\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Maintenance\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorActivity\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorActivityData\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022CumulativeTractorActivityData\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022AgroDealersHeatMapData\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TrackerIds\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022ServiceBookingHistory\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Notification\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TestTractorActivities\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022UserFeedback\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022user\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TestDailyTractorActivity\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022OldDailyTractorActivity\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022DailyTractorActivity\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022BookingAgents\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TwoTrackApiToken\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022ServiceBookings\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorTips\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorAds\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022FarmMeasure\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022FarmMeasures\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022AppVersionHistory\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Logger\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022_blob\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022FuelHistory\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022UserAccounts\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022OperatorReview\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Emails\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022APIKeys\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022MaintenanceRepo\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022FailedPosts\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022Logs\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022DailyFuelConsumed\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022FuelCalibrationResults\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022MaintenanceHistory\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n },\r\n \u0022TractorTechnician\u0022 : {\r\n \u0022isVirtualCollection\u0022 : false\r\n }\r\n },\r\n \u0022commonBL\u0022 : {\r\n \u0022modules\u0022 : {\r\n \u0022revenue\u0022 : \u0022//Used to form revenue notification push message and type\\nfunction c_sendRevenueNotification(pushInfo, type, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess;\\n var baseNotification = {\\n userId: pushInfo.creator,\\n read: false,\\n tractorId: pushInfo.TractorID,\\n operatorId: pushInfo.OperatorID\\n };\\n\\n var baseNotifications = {\\n revenue: {\\n message: \u0027Please set some revenue\u0027,\\n type: \u0027action\u0027,\\n action: \u0027revenue\u0027\\n }\\n };\\n\\n var notification = c_mergeObjects([baseNotification, baseNotifications[type]]);\\n c_sendNotification(notification, cb);\\n \\n response.complete(200);\\n}\u0022,\r\n \u0022notification\u0022 : \u0022//send array of notifications\\nvar c_sendNotifications = function(notifications, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess;\\n\\n async.each(notifications, sendNotification, cb);\\n};\\n\\n//base function to send single notification,\\n//check other common js files to see which notification parameter\\n//is expected here\\nfunction c_sendNotification(notification, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess;\\n logger.info(\\\u0022About to send notification\\\u0022);\\n\\n sendNotification(notification, cb);\\n}\\n\\n//function to send all types of notifications: system, sms, emails,\\nfunction sendNotification(notification, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess,\\n emailModule = modules.email, \\n countSystemNotificationsSent = 0, \\n countEmailNotificationsSent = 0,\\n countNotificationsSaved = 0,\\n countUsers = 0,\\n usersIdArr = [];\\n\\n if(!notification.userId) {\\n return cb();\\n } else {\\n \\n var mainUserId = (collectionAccess.objectID(notification.userId)).toString();\\n\\n //Add default user id\\n usersIdArr.push(mainUserId);\\n\\n // var userAccountsQuery = {\\\u0022_acl.creator\\\u0022: JSON.stringify(collectionAccess.objectID(notification.userId))};\\n var userAccountsQuery = {\u0027_acl.creator\u0027: mainUserId};\\n \\n collectionAccess.collection(\u0027UserAccounts\u0027).find(userAccountsQuery, {}, function (userAcctErr, userAccounts){ //Start: find user accounts\\n logger.info(\\\u0022Main user id: \\\u0022\u002BmainUserId);\\n \\n if (!userAcctErr \u0026\u0026 userAccounts){\\n logger.info(\\\u0022User accounts found: \\\u0022\u002BuserAccounts.length \u002B\\\u0022, error: \\\u0022\u002BuserAcctErr);\\n userAccounts.forEach(function(userAccount){\\n if (userAccount.accountHolderId){\\n usersIdArr.push(userAccount.accountHolderId);\\n }\\n });\\n }\\n\\n countUsers = usersIdArr.length; //Users requiring notification\\n logger.info(\\\u0022Users ID Arr: \\\u0022\u002BusersIdArr);\\n\\n usersIdArr.forEach(function(userId){\\n // var userQuery = {_id:userId};\\n var userQuery = {\u0027_acl.creator\u0027: userId};\\n collectionAccess.collection(\u0027user\u0027).findOne(userQuery, {}, function(userErr, user){\\n if (!userErr \u0026\u0026 user){\\n //Find the tractor owner with that user Id\\n logger.info(\\\u0022User found: \\\u0022\u002BJSON.stringify(user) \u002B\\\u0022, error: \\\u0022\u002BuserAcctErr);\\n // var tractorOwnerQuery = {\\\u0022_acl.creator\\\u0022: userId};\\n \\n var tractorOwnerQuery = {\\n $and:[\\n {\u0027_acl.creator\u0027: userId},\\n {\u0027geofenceTractorNotifications\u0027: true}\\n ]\\n };\\n\\n collectionAccess.collection(\\\u0022TractorOwner\\\u0022).findOne(tractorOwnerQuery, {}, function(tractorOwnerErr, tractorOwner){\\n if (!tractorOwnerErr \u0026\u0026 tractorOwner){ //TODO: Add \u0026\u0026 tractorOwner.geofenceTractorNotifications on publishing a new version\\n logger.info(\\\u0022Tractor Owner found: \\\u0022\u002B JSON.stringify(tractorOwner));\\n saveAndSendNotification(user, tractorOwner, notification, cb);\\n } else {\\n incrementCountNotifications();\\n finalCallback({}, cb);\\n }\\n });\\n\\n } else {\\n logger.info(\\\u0022User: \\\u0022\u002BuserId\u002B\\\u0022 not found\\\u0022);\\n incrementCountNotifications();\\n finalCallback({}, cb);\\n }\\n });\\n });\\n\\n }); //End: UserAccounts query\\n\\n var incrementCountNotifications = function (){\\n countEmailNotificationsSent\u002B\u002B;\\n countSystemNotificationsSent\u002B\u002B;\\n countNotificationsSaved\u002B\u002B;\\n }\\n\\n var finalCallback = function (result, cb){\\n //Check to make sure the loop finishes before returning cb()\\n logger.info(\\\u0022Email Not: \\\u0022\u002BcountEmailNotificationsSent\u002B\\\u0022, Sys Not: \\\u0022\u002BcountSystemNotificationsSent\u002B\\\u0022, Notifications Saved: \\\u0022\u002BcountNotificationsSaved);\\n if (countEmailNotificationsSent \u003E= countUsers \u0026\u0026 countSystemNotificationsSent \u003E= countUsers \u0026\u0026 countNotificationsSaved \u003E= countUsers){\\n return cb();\\n }\\n\\n return;\\n }\\n\\n var saveAndSendNotification = function (user, tractorOwner, notification, cb){\\n //Ensures that the user (parent/child) receives the notification\\n notification.userId = tractorOwner._acl.creator;\\n var kEntity = modules.kinvey.entity(); \\n var entity = modules.kinvey.entity(notification);\\n entity._id = kEntity._id;\\n entity._acl = tractorOwner._acl;\\n entity.extras = JSON.parse(JSON.stringify(entity)); \\n \\n collectionAccess.collection(\u0027Notification\u0027).save(entity, function(entityErr, savedEntity){\\n\\n //Validates that the notification was saved\\n countNotificationsSaved\u002B\u002B;\\n finalCallback({}, cb);\\n\\n async.parallel([\\n sendSystemNotification,\\n sendEmailNotification\\n ],finalCallback);\\n\\n function sendSystemNotification() { \\n savedEntity.id = notification.type \u002B notification.action \u002B notification.tractorId;\\n var test = push.sendPayload(user, {}, {}, savedEntity, function(res) {\\n logger.info(\u0027notif results \u0027 \u002B JSON.stringify(res));\\n countSystemNotificationsSent\u002B\u002B;\\n finalCallback(res, cb);\\n });\\n }\\n\\n function sendEmailNotification() {\\n if(tractorOwner \u0026\u0026 tractorOwner.email) {\\n emailModule.send(\\n \u0027Hello Tractor \u003Csupport@hellotractor.com\u003E\u0027,\\n tractorOwner.email,\\n \u0027Hello Tractor [Geofence Notification]\u0027,\\n notification.message,\\n function(err, result) {\\n logger.info(err);\\n logger.info(result);\\n countEmailNotificationsSent\u002B\u002B;\\n finalCallback(result, cb);\\n });\\n } else {\\n countEmailNotificationsSent\u002B\u002B;\\n finalCallback({}, cb);\\n }\\n }\\n });\\n }\\n }\\n}\u0022,\r\n \u0022utils\u0022 : \u0022// Any code here will be available in all of your business logic (collection hooks, \\n// endpoints, and other common scripts)\\n\\nfunction c_mergeObjects(objects) {\\n var result = {};\\n objects.forEach(function(object) {\\n for(var attr in object) {\\n result[attr] = object[attr];\\n }\\n });\\n return result;\\n}\u0022,\r\n \u0022sms\u0022 : \u0022//Used to send sms\\nfunction c_sendSms(message, phone, country, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess,\\n req = modules.request;\\n\\n var apiKey = \u0027583565ed796fc583565ed79778\u0027,\\n senderId = \u0027HelloTracto\u0027,\\n uri = \u0027http://sms.nasaramobile.com/api?api_key=\u0027 \u002B apiKey \u002B \u0027\u0026sender_id=\u0027 \u002B senderId \u002B \u0027\u0026phone=\u0027 \u002B phone \u002B \u0027\u0026message=\u0027 \u002B message;\\n\\n req.get({\\n uri: uri,\\n method: \u0027GET\u0027\\n }, function(error, res, body) {\\n logger.info(error);\\n logger.info(res);\\n logger.info(body);\\n return cb();\\n });\\n}\\n\u0022,\r\n \u0022geofence\u0022 : \u0022//function that checks does tractor leave or return back into geofence area\\n//and send notifications\\nfunction c_sendGeofenceNotificationIfNecessary(lastActivity, tractor, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess,\\n moment = modules.moment;\\n\\n var isAreaExists = tractor \u0026\u0026 tractor.Latitude \u0026\u0026 tractor.Longitude;\\n if(isAreaExists) {\\n var isTractorInArea = c_isPointInArea(lastActivity.lat, lastActivity.lon, tractor);\\n //var isTractorInArea = c_isPointInArea(0, 0, tractor);\\n if(isTractorInArea) {\\n logger.info(\\\u0022Tractor is in area\\\u0022);\\n //tractor returns back in the area\\n if(!tractor.WasInArea) {\\n c_sendGeoFenceNotification(tractor, \u0027geofenceIn\u0027, function(err) {\\n return cb(err, {\\n wasSent: true,\\n WasInArea: true\\n });\\n });\\n } else {\\n return cb(null, {\\n wasSent: false,\\n WasInArea: false\\n });\\n }\\n } else {\\n var needToSend = false;\\n //tractor first time leaves area\\n if(tractor.WasInArea) {\\n needToSend = true;\\n } else {\\n //tractor leaves the area not the first time\\n if(tractor.NeedToSendGeofenceOutNotification) {\\n needToSend = tractor.LastGeofenceNotificationTime ? moment().diff(moment(tractor.LastGeofenceNotificationTime), \u0027hours\u0027) \u003E 1 : true; //Changed to 1 hour from 24 hours due to suggestion from Good Earth\\n }\\n }\\n if(needToSend) {\\n logger.info(\\\u0022Found a need to send notification: \\\u0022\u002Btractor.TractorID);\\n c_sendGeoFenceNotification(tractor, \u0027geofenceOut\u0027, function(err) {\\n return cb(err, {\\n wasSent: true,\\n WasInArea: false\\n });\\n });\\n } else {\\n logger.info(\\\u0022No need to send notification: \\\u0022\u002Btractor.TractorID);\\n return cb(null, {\\n wasSent: false,\\n WasInArea: false\\n });\\n }\\n }\\n } else {\\n return cb(null, {\\n wasSent: false,\\n WasInArea: false\\n });\\n }\\n}\\n\\nfunction c_isPointInArea(lat, long, tractor) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess;\\n\\n var polyLat = tractor.Latitude.split(\u0027,\u0027).map(parseFloat),\\n polyLng = tractor.Longitude.split(\u0027,\u0027).map(parseFloat),\\n vs = [],\\n point = [parseFloat(lat), parseFloat(long)];\\n for(var i = 0; i \u003C polyLat.length; i\u002B\u002B) {\\n vs.push([polyLat[i], polyLng[i]]);\\n }\\n\\n //logger.info(\u0027point \u0027 \u002B JSON.stringify(point));\\n //logger.info(\u0027vs \u0027 \u002B JSON.stringify(vs));\\n\\n return isInside(point, vs);\\n\\n function isInside(point, vs) {\\n var x = point[0], y = point[1];\\n\\n var inside = false;\\n for(var i = 0, j = vs.length - 1; i \u003C vs.length; j = i\u002B\u002B) {\\n var xi = vs[i][0], yi = vs[i][1];\\n var xj = vs[j][0], yj = vs[j][1];\\n\\n var intersect = ((yi \u003E y) != (yj \u003E y)) \u0026\u0026 (x \u003C (xj - xi) * (y - yi) / (yj - yi) \u002B xi);\\n if(intersect) inside = !inside;\\n }\\n\\n return inside;\\n }\\n}\\n\\n//function to form notification message and type based on geofence type\\nfunction c_sendGeoFenceNotification(tractor, type, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess;\\n var baseNotification = {\\n userId: tractor._acl.creator,\\n read: false,\\n tractorId: tractor.TractorID,\\n operatorId: tractor.OperatorID\\n };\\n\\n var baseNotifications = {\\n geofenceCreated: {\\n message: \u0027New Geofence Created: A new geo-fence area has been defined for tractor (\u0027 \u002B tractor.TractorName \u002B \u0027)\u0027,\\n type: \u0027alert\u0027,\\n action: \u0027none\u0027,\\n country: tractor.Country,\\n street: tractor.Street,\\n town: tractor.Town,\\n tractorId:tractor.TractorID,\\n tractorName: tractor.TractorName \\n },\\n geofenceAllCreated: {\\n message: \u0027New Geofence Created: A new geo-fence area has been defined for all your tractors\u0027,\\n type: \u0027alert\u0027,\\n action: \u0027none\u0027\\n }, \\n geofenceIn: {\\n message: \u0027Tractor (\u0027 \u002B tractor.TractorName \u002B \u0027) is back in the geo-fenced area and is currently at \u0027 \u002B tractor.Street \u002B \u0027, \u0027 \u002B tractor.Town \u002B \u0027, \u0027 \u002B tractor.Country,\\n type: \u0027alert\u0027, //left here for backward compatibility\\n action: \u0027geofence_in\u0027,\\n country: tractor.Country,\\n street: tractor.Street,\\n town: tractor.Town,\\n tractorId:tractor.TractorID,\\n tractorName: tractor.TractorName\\n },\\n geofenceOut: {\\n message: \u0027Geo-fence Alert! : Tractor (\u0027 \u002B tractor.TractorName \u002B \u0027 - \u0027 \u002B tractor.TractorID \u002B \u0027) has left the geo-fenced area and is currently at \u0027 \u002B\\n tractor.Street \u002B \u0027, \u0027 \u002B tractor.Town \u002B \u0027, \u0027 \u002B tractor.Country,\\n type: \u0027action\u0027,\\n action: \u0027geofence_out\u0027,\\n country: tractor.Country,\\n street: tractor.Street,\\n town: tractor.Town,\\n tractorId:tractor.TractorID,\\n tractorName: tractor.TractorName\\n }\\n };\\n\\n var notification = c_mergeObjects([baseNotification, baseNotifications[type]]);\\n c_sendNotification(notification, cb);\\n}\u0022,\r\n \u0022maintenance\u0022 : \u0022//function to form notification message and type based on maintenance type\\nfunction c_sendMaintenanceNotification(maintenance, operatorId, type, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess,\\n moment = modules.moment;\\n\\n var baseNotification = {\\n userId: maintenance._acl.creator,\\n read: false,\\n tractorId: maintenance.TractorID,\\n operatorId: operatorId\\n };\\n\\n var baseNotifications = {\\n maintenancePartial: {\\n message: \u0027Maintenance 80% Alert! : \u0027 \u002B maintenance.Description,\\n type: \u0027action\u0027,\\n action: \u0027maintenance_partial\u0027\\n },\\n maintenance: {\\n message: \u0027Maintenance full Alert! : \u0027 \u002B maintenance.Description,\\n type: \u0027action\u0027,\\n action: \u0027maintenance\u0027\\n },\\n maintenance2Track: {\\n message: \u0027Maintenance Alert: Monitoring device battery is low\u0027, //maintenance.Description,\\n type: \u0027alert\u0027,\\n action: \u0027none\u0027\\n }\\n };\\n\\n var notification = c_mergeObjects([baseNotification, baseNotifications[type]]);\\n c_sendNotification(notification, cb);\\n}\\n\\n//function to create MaintenanceActivity entity\\nfunction c_createNewMaintenanceActivity(maintenance, cb) {\\n var logger = modules.logger,\\n async = modules.async,\\n push = modules.push,\\n collectionAccess = modules.collectionAccess,\\n moment = modules.moment,\\n requestContext = modules.requestContext;\\n\\n var currentUserId = maintenance.CurrentUserId ? maintenance.CurrentUserId : requestContext.getAuthenticatedUserId(),\\n maintenanceActivity = {\\n TractorID: maintenance.TractorID,\\n Duration: maintenance.Duration,\\n Description: maintenance.Description,\\n PredefinedMaintenanceActivityId: maintenance.PredefinedMaintenanceActivityId ? maintenance.PredefinedMaintenanceActivityId.toString() : \\\u0022\\\u0022,\\n Counter: maintenance.Counter ? maintenance.Counter : 0,\\n LastNotificationTime: maintenance.LastNotificationTime ? maintenance.LastNotificationTime : moment().subtract({\u0027days\u0027: 1}).toISOString(),\\n Type: maintenance.Type ? maintenance.Type : 1,\\n Status: maintenance.Status ? maintenance.Status : 1\\n };\\n maintenanceActivity = modules.kinvey.entity(maintenanceActivity);\\n maintenanceActivity._acl = {creator: currentUserId};\\n collectionAccess.collection(\u0027MaintenanceActivity\u0027).save(maintenanceActivity, cb);\\n \\n response.complete(200);\\n}\u0022,\r\n \u0022bookingWeatherInfoUtils\u0022 : \u0022 var getBookingServiceDateWeatherInfo = function(weather,bookingServiceDate ){\\n \\t//filter the weather information to get the weather for the booking service date;\\n var weatherInfo = weather.list.filter(function(_weather){\\n return _weather.dt_txt.split(\\\u0022 \\\u0022)[0] === bookingServiceDate;\\n })\\n \\n if( weatherInfo.length \u003E 0 ) {\\n \\n \\treturn JSON.stringify({\\n cod: weather.cod,\\n message: weather.message,\\n cnt: weather.cnt,\\n list: weatherInfo\\n \\n });\\n \\n }\\n else {\\n return null;\\n }\\n\\n }\\n\u0022,\r\n \u0022getServiceType\u0022 : \u0022\\tvar getServiceName = function (bookings) {\\n var service_name;\\n var serviceTypeId = bookings[0].serviceType;\\n switch (serviceTypeId) {\\n case 109:\\n service_name = \u0027Harrowing\u0027\\n break;\\n case 104:\\n service_name = \u0027Planting/Seeding\u0027\\n break;\\n case 105:\\n service_name = \u0027Irrigating\u0027\\n break;\\n case 102:\\n service_name = \u0027Ploughing\u0027\\n break;\\n case 101:\\n service_name = \u0027Tilling\u0027\\n break;\\n case 103:\\n service_name = \u0027Ridging\u0027\\n break;\\n case 107:\\n service_name = \u0027Trailing\u0027\\n break;\\n case 108:\\n service_name = \u0027Harvesting\u0027\\n break;\\n case 106:\\n service_name = \u0027Harvesting\u0027\\n break;\\n case 110:\\n service_name = \u0027Spreading\u0027\\n break;\\n case 115:\\n service_name = \u0027Mower\u0027\\n break;\\n case 114:\\n service_name = \u0027Dozer\u0027\\n break;\\n case 113:\\n service_name = \u0027Bioagtive\u0027\\n break;\\n \\tcase 116:\\n \\tservice_name = \u0027Drilling\u0027\\n \\tbreak;\\n \\tcase 117:\\n \\tservice_name = \u0027Rotavator\u0027\\n \\tbreak;\\n \\tcase 118:\\n \\tservice_name = \u0027Laser Leveler\u0027\\n \\t \\tbreak;\\n \\tcase 119:\\n \\t \\tservice_name = \u0027Threshing\u0027\\n \\tbreak; \\n \\t\\tcase 120:\\n \\t\\t\\tservice_name = \u0027Threshing\u0027\\n \\t\\t\\tbreak;\\n case 121:\\n \\t\\t\\tservice_name = \u0027Blade Leveling\u0027\\n \\t\\t\\tbreak;\\n \\n default:\\n \u0027\u0027;\\n }\\n return service_name;\\n }\u0022,\r\n \u0022maintenanceNotificationUtils\u0022 : \u0022//Extract creators from tractorOwners array\\n//@return Array of creators\\nvar Push = modules.push;\\n\\nvar getCreatorsFrom = function(tractorOwners) {\\n return tractorOwners.map(function(_tractorOwner) {\\n return _tractorOwner._acl.creator;\\n });\\n};\\n\\n //pure function \\n function getSchemaBy(schemaName){\\n return modules.collectionAccess.collection(schemaName);\\n };\\n\\n//Check if engineHours of a tractor is greater than 0 meets a certain engine hour criteria\\nvar getValidEngineHoursTractors = function(tractorDetails) {\\n return tractorDetails.filter(function(_tractorDetail) {\\n return _tractorDetail.EngineHours \u003E 0 \u0026\u0026 _tractorDetail.TractorModelID \u003E 0;\\n });\\n};\\n\\n//Format the checks array to be in the form of tractorModelId to the checks\\nvar getMaintenanceChecksHash = function(checks) {\\n var checksHash = {};\\n checks.map(function(check) {\\n checksHash[check.tractorModelId] = checksHash[check.tractorModelId] || [];\\n checksHash[check.tractorModelId].push(check);\\n });\\n return checksHash;\\n};\\n\\n//Fetch tractor maintenance checks\\n//@return Array of maintenance\\nvar getTractorChecks = function(hours, checksHash, tractorDetail) {\\n var tractorChecks = [];\\n var modellD = tractorDetail.TractorModelID;\\n var tractorEngineHour = tractorDetail.EngineHours;\\n var modelTractorChecks = checksHash[modellD];\\n\\n //set an array of expected engine hours array\\n var hours = [10, 50, 250, 300, 600, 900, 950, 1200];\\n\\n if (modelTractorChecks === undefined) {\\n return tractorChecks;\\n }\\n //transform the ModeltractorChecks to be a hash of engineHour to maintenance value\\n var checksHourHash = {};\\n modelTractorChecks.forEach(function(_check) {\\n checksHourHash[_check.engineHours] =\\n checksHourHash[_check.engineHours] || [];\\n checksHourHash[_check.engineHours].push(_check);\\n });\\n\\n hours.forEach(function(hour) {\\n if (tractorEngineHour % hour === 0) {\\n var hourChecks = checksHourHash[hour];\\n tractorChecks.push(hourChecks);\\n }\\n });\\n\\n return tractorChecks;\\n};\\n\\n//flatten [ [a,b], [c,d] ] =\u003E [a,b,c,d]\\nvar getFlattenedChecksArray = function(maintenanceChecksArr) {\\n return maintenanceChecksArr.reduce(function(i, j) {\\n return i.concat(j);\\n }, []);\\n};\\n\\nvar fetchMaintenanceChecksOnly = function(maintenanceArr) {\\n var flattenedMaintenanceChecks = getFlattenedChecksArray(maintenanceArr);\\n\\n return flattenedMaintenanceChecks.map(function(maintenance) {\\n //modules.logger.info(\\\u0022the maintenance is \\\u0022 \u002B JSON.stringify(maintenance))\\n if (maintenance !== undefined) {\\n return maintenance.maintenaceCheck;\\n }\\n });\\n};\\n\\n// A function that returns formatted message to be sent to the tractor owner via push\\nvar getFormatedChecksMessage = function(checks) {\\n var message = \\\u0022\\\u0022;\\n var checksCount = checks.length;\\n if (checksCount \u003C= 3) {\\n message = \\\u0022You have the following maintenance checks :\\\u0022 \u002B checks.join(\\\u0022,\\\u0022);\\n } else {\\n message = \\\u0022You have \\\u0022 \u002B checksCount \u002B \\\u0022 maintenance checks \\\u0022;\\n }\\n return message;\\n};\\n\\nvar getPushMessage = function(pushObj) {\\n return {\\n message: pushObj.message,\\n type: \\\u0022alert\\\u0022,\\n data: pushObj.tractorChecks,\\n tractorID: pushObj.tractorID,\\n id: pushObj.id,\\n _acl: pushObj._acl,\\n _kmd: pushObj._kmd\\n };\\n};\\n\\nvar sendPushNotification = function(tractorOwner, message) {\\n return Push.send(tractorOwner, message);\\n};\\n\u0022,\r\n \u0022serviceBookingsHooksModule\u0022 : \u0022\\n var getServiceName = function(serviceTypeId) {\\n var service_name;\\n switch (serviceTypeId) {\\n case 109:\\n service_name = \\\u0022Harrowing\\\u0022;\\n break;\\n case 104:\\n service_name = \\\u0022Planting/Seeding\\\u0022;\\n break;\\n case 105:\\n service_name = \\\u0022Irrigating\\\u0022;\\n break;\\n case 102:\\n service_name = \\\u0022Ploughing\\\u0022;\\n break;\\n case 101:\\n service_name = \\\u0022Tilling\\\u0022;\\n break;\\n case 103:\\n service_name = \\\u0022Ridging\\\u0022;\\n break;\\n case 107:\\n service_name = \\\u0022Trailing\\\u0022;\\n break;\\n case 108:\\n service_name = \\\u0022Harvesting\\\u0022;\\n break;\\n case 106:\\n service_name = \\\u0022Harvesting\\\u0022;\\n break;\\n case 110:\\n service_name = \\\u0022Spreading\\\u0022;\\n break;\\n }\\n return service_name;\\n };\\n\\n\\n\\n\\n // /** helpers function starts **/\\n\\n var getPairedBookingsCount = function(bookings) {\\n return bookings.filter(function(booking) {\\n return booking.bookingStatus == 1 || booking.bookingStatus == 2;\\n }).length;\\n };\\n \\n var getCompletedBookingsCount = function(bookings) {\\n return bookings.filter(function(booking) {\\n return booking.bookingStatus == 3;\\n }).length;\\n };\\n\\n var getBookingStatus = function() {\\n return request.body.bookingStatus;\\n };\\n\\n var sendClusterNotification = function(userObj, notificationData) {\\n return Push.send(userObj, notificationData);\\n };\\n\\n var getBookingAgents = function(users) {\\n return users.filter(function(user) {\\n return user.user_type == 2;\\n });\\n };\\n\\n var getTractorOwner = function(users) {\\n return users.filter(function(user) {\\n return user.user_type == null;\\n });\\n };\\n\\n var isArchivedBooking = function() {\\n return request.body.BookingArchived != null;\\n };\\n\\n var getTotalHectares = function(bookings) {\\n return bookings\\n .reduce(function(total, booking) {\\n return total \u002B booking[\\\u0022hectaresServiced\\\u0022];\\n }, 0)\\n .toFixed(2);\\n };\\n\\n var getServiceDate = function(bookings) {\\n var serviceDate = bookings[0].serviceDate;\\n return dateToHumanReadable(serviceDate);\\n };\\n\\n var dateToHumanReadable = function(date) {\\n return modules.moment(date).format(\\\u0022dddd Do MMMM YYYY\\\u0022);\\n };\\n\\n var getTractorName = function() {\\n return JSON.parse(request.body.tractorDetailData)[\\\u0022TractorName\\\u0022]\\n ? JSON.parse(request.body.tractorDetailData)[\\\u0022TractorName\\\u0022]\\n : \\\u0022\\\u0022;\\n };\\n\\n var getOperatorName = function(bookings) {\\n return JSON.parse(request.body.tractorOperatorData)[\\\u0022OperatorName\\\u0022]\\n ? JSON.parse(request.body.tractorOperatorData)[\\\u0022OperatorName\\\u0022]\\n : \\\u0022\\\u0022;\\n };\\n\\n var isDeletedOrgId = function() {\\n // modules.logger.info( request.body.orgID == \\\u0022100\\\u0022);\\n return request.body.orgID == \\\u0022100\\\u0022;\\n };\\n\\n\\n var sendTractorOwnerAppRefreshTrigger = function(\\n tractorOwner,\\n bookingAgents\\n ) {\\n var triggerData = {\\n message: \\\u0022this is a trigger\\\u0022,\\n type: \\\u0022action\\\u0022,\\n action: \\\u0022trigger\\\u0022,\\n kind: 11,\\n trigger: 102,\\n entity: JSON.stringify(request.body)\\n }\\n };\\n \\n\u0022,\r\n \u0022app_configs\u0022 : \u0022var AWS_BACKEND_HOST = \\\u0022https://cloud.hellotractor.com\\\u0022\\n\u0022,\r\n \u0022BlockchainCommons\u0022 : \u0022function getBookingManagerBaseUrl(){\\n return \\\u0022https://ag-wallet-booking-manager-production.mybluemix.net\\\u0022;\\n}\\n\\nfunction getBookingManagerToken(){\\n return \\\u0022Bearer eyJraWQiOiI0MTc5NjU2YS00MmVlLTRlYzMtOTI0MC1hZGQwMWY4ZGM1YjIiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJPUkcxLUFETUlOIiwidWlkIjoiNDE5NmI5ZjItOTk2OS00NjYyLWI0M2MtMDNiZTlkOTcxYjIyIiwiaXNzIjoiSUJNLVNNRSIsIm9pZCI6IjNmYzAzNDJjLTUxNWUtMTFlOS04NjQ3LWQ2NjNiZDg3M2Q5MyIsImV4cCI6MTU1NzkwMTk3NDYzNywicmlkIjpbIkdVRVNUIl0sImlhdCI6MTU1NzgxNTU3NDYzN30.K4xJPySQx7EzduCARWs5ZZMTMG95D9pIGkdn_iiLeo4oYi3jdkm-hGyV2pI6qxTjoCe_6z4fRxM7aYsjLpzKXyrf_q93uCDBYkWyQkZLJUvJOfoAUDfLOCGlWke6iKnEp5gvaChInBZCsIT_X2l2DusFQ8IOFLqmFFSTav0aTW4\\\u0022;\\n}\\n\\nfunction getFailedTransactionsCollection(){\\n return \\\u0022FailedPosts\\\u0022;\\n}\\n\u0022\r\n }\r\n },\r\n \u0022pushService\u0022 : {\r\n \u0022android\u0022 : {\r\n \u0022projectId\u0022 : \u0022760205348680\u0022,\r\n \u0022apiKey\u0022 : \u0022AAAAsP_FD0g:APA91bHO9clmAgTWyjnXC7Va9Ebd7S0RwyIkNm3SOZyd9Xv77Jy8pYDZ5cfskYEjL-fGkvDPuPF5kN1v-T9698HhaFfCkBelBjQc0teFywqEhhYBMLaen9dPGAmkrPEh4w-qI6TiEqsk\u0022\r\n },\r\n \u0022serviceMetadata\u0022 : {}\r\n },\r\n \u0022schedulersecret\u0022 : \u0022bd34e27881fb4802aa851cc22593e80a\u0022,\r\n \u0022emailTemplates\u0022 : {\r\n \u0022en_us\u0022 : {\r\n \u0022passwordReset\u0022 : {\r\n \u0022from\u0022 : \u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\u0022,\r\n \u0022replyTo\u0022 : \u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\u0022,\r\n \u0022subject\u0022 : \u0022Your password reset request for application {{{appname}}}\u0022,\r\n \u0022bodyTemplateText\u0022 : \u0022{{#fname}}Dear {{fname}},{{/fname}}\\n{{^fname}}Dear {{username}},{{/fname}}\\n\\nIt appears that you would like to reset your password. Please click on the link below to setup a new password:\\n\\n{{reseturl}}\\n\\nThis link will expire in less than {{expirationTimeMins}} mins ({{expirationDate}}).\\n\\nIf you did not request a password reset, please ignore this email. Your current password will continue to work.\\n\\nSincerely,\\nYour {{appname}} team.\u0022,\r\n \u0022bodyTemplateHtml\u0022 : \u0022{{#fname}}\u003Cp\u003EDear {{fname}},\u003C/p\u003E{{/fname}}\\n{{^fname}}\u003Cp\u003EDear {{username}},\u003C/p\u003E{{/fname}}\\n\\n\u003Cp\u003EIt appears that you would like to reset your password. Please click on the link below to setup a new password:\u003C/p\u003E\\n\\n\u003Cp\u003E\\n\u003Ca href=\\\u0022{{reseturl}}\\\u0022\u003E{{reseturl}}\u003C/a\u003E\\n\u003C/p\u003E\\n\\n\u003Cp\u003EPlease copy the link to your browser if you are unable to click in email.\u003C/p\u003E\\n\\n\u003Cp\u003EThis link will expire in less than {{expirationTimeMins}} mins ({{expirationDate}}).\u003C/p\u003E\\n\\n\u003Cp\u003EIf you did not request a password reset, please ignore this email. Your current password will continue to work.\u003C/p\u003E\\n\\n\\n\u003Cp\u003E\u003Cimg src=\\\u0022https://www.hellotractor.com/wp-content/uploads/2017/03/symbol_small_blk.png\\\u0022\u003E \u003C/p\u003E\\n\\n\u003Cp\u003ESincerely,\u003C/p\u003E\\n\u003Cp\u003EYour {{appname}} team.\u003C/p\u003E\u0022,\r\n \u0022confirmSubject\u0022 : \u0022Your password was reset for application {{{appname}}}\u0022,\r\n \u0022confirmBodyTemplateText\u0022 : \u0022{{#fname}}\u003Cp\u003EDear {{fname}},\u003C/p\u003E{{/fname}}\\n{{^fname}}\u003Cp\u003EDear {{username}},\u003C/p\u003E{{/fname}}\\n\\nThis is to confirm that your request to reset your password for app {{appname}} was successfully implemented at {{lastChangedAt}}.\\n\\nSincerely,\\nYour {{appname}} team.\\n\u0022,\r\n \u0022confirmBodyTemplateHtml\u0022 : \u0022{{#fname}}\u003Cp\u003EDear {{fname}},\u003C/p\u003E{{/fname}}\\n{{^fname}}\u003Cp\u003EDear {{username}},\u003C/p\u003E{{/fname}}\\n\\n\u003Cp\u003EThis is to confirm that your request to reset your password for app {{appname}} was successfully implemented at {{lastChangedAt}}.\u003C/p\u003E\\n\\n\u003Cp\u003ESincerely,\u003C/p\u003E\\n\u003Cp\u003EYour {{appname}} team.\u003C/p\u003E\\n\u0022\r\n },\r\n \u0022forgotUsername\u0022 : {\r\n \u0022from\u0022 : \u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\u0022,\r\n \u0022replyTo\u0022 : \u0022Hello Tractor Support \u003Csupport@hellotractor.com\u003E\u0022,\r\n \u0022subject\u0022 : \u0022Your username reminder for application {{{appname}}}\u0022,\r\n \u0022bodyTemplateText\u0022 : \u0022{{#fname}}Dear {{fname}},{{/fname}}\\n{{^fname}}Dear {{username}},{{/fname}}\\n\\nIt appears that you forgot your username. Don\u0027t worry, it happens to us, too.\\n\\nYour username is: {{ username }}\\n\\nSincerely,\\nYour {{appname}} team.\u0022,\r\n \u0022bodyTemplateHtml\u0022 : \u0022{{#fname}}\u003Cp\u003EDear {{fname}},\u003C/p\u003E{{/fname}}\\n{{^fname}}\u003Cp\u003EDear {{username}},\u003C/p\u003E{{/fname}}\\n\\n\u003Cp\u003EIt appears that you forgot your username. Don\u0027t worry, it happens to us, too.\u003C/p\u003E\\n\\n\u003Cp\u003EYour username is: {{ username }}\u003C/p\u003E\\n\\n\u003Cp\u003ESincerely,\u003C/p\u003E\\n\u003Cp\u003EYour {{appname}} team.\u003C/p\u003E\u0022\r\n }\r\n }\r\n },\r\n \u0022htmlTemplates\u0022 : {\r\n \u0022en_us\u0022 : {\r\n \u0022passwordReset\u0022 : {\r\n \u0022successPageHtml\u0022 : \u0022\u003Chtml\u003E\\n \u003Chead\u003E\\n \u003Ctitle\u003ESuccess!!!\u003C/title\u003E\\n \u003C/head\u003E\\n\\t\u003Cbody background=\\\u0022https://www.hellotractor.com/wp-content/uploads/2016/07/Home-page2png.jpg\\\u0022\u003E\\n \u003Ccenter\u003E\\n \u003Ch2\u003E \u003Cb\u003E \u003Cfont color=\\\u0022white\\\u0022\u003EPassword Reset Successful! \u003C/font\u003E \u003C/b\u003E \u003C/h2\u003E\\n \u003Cbr\u003E\\n \u003Cp\u003E\u003Cfont color=\\\u0022white\\\u0022\u003E Congratulations! You have \u003Cb\u003Esuccessfully\u003C/b\u003E reset your password for app {{appname}}. \u003C/font\u003E\u003C/p\u003E\\n \u003C/center\u003E\\n \u003C/body\u003E\\n\u003C/html\u003E\u0022\r\n }\r\n }\r\n },\r\n \u0022blFlags\u0022 : {\r\n \u0022blChannel\u0022 : \u0022kbl-flex-router\u0022\r\n },\r\n \u0022_systemData\u0022 : {\r\n \u0022configOverrides\u0022 : {\r\n \u0022bl\u0022 : {\r\n \u0022replicas\u0022 : {\r\n \u0022min\u0022 : 50,\r\n \u0022max\u0022 : 50\r\n },\r\n \u0022resources\u0022 : {\r\n \u0022limits\u0022 : {\r\n \u0022cpu\u0022 : \u0022150m\u0022,\r\n \u0022memory\u0022 : \u0022500Mi\u0022\r\n },\r\n \u0022requests\u0022 : {\r\n \u0022cpu\u0022 : \u0022150m\u0022,\r\n \u0022memory\u0022 : \u0022500Mi\u0022\r\n }\r\n },\r\n \u0022targetUtilization\u0022 : {\r\n \u0022cpu\u0022 : 50,\r\n \u0022memory\u0022 : 60\r\n },\r\n \u0022maxOldSpaceSize\u0022 : 230\r\n },\r\n \u0022modifiedBy\u0022 : \u0022d2c294fe61f74888942d84e22a189af6\u0022,\r\n \u0022modifiedAt\u0022 : \u00222020-03-23T15:41:49.998Z\u0022\r\n }\r\n }\r\n}\r\n\r\nvar myCopy = null;\r\n","TestCases":[{"Name":"Lodash cloneDeep","Code":"myCopy = _.cloneDeep(MyObject);","IsDeferred":false},{"Name":"Json clone","Code":"myCopy = JSON.parse(JSON.stringify(MyObject));","IsDeferred":false}]}