From 11dfe94bbbca6c19e9c959b58d9ba69f3df8dfd7 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Mon, 1 Dec 2025 07:53:52 +0300 Subject: [PATCH] 25-12-1/1 --- .env | 1 + android/app/build.gradle | 6 +- android/app/src/main/AndroidManifest.xml | 2 +- .../app/src/main/res/values-ar/strings.xml | 4 +- android/app/src/main/res/values/strings.xml | 2 +- ios/Runner/Info.plist | 4 +- lib/constant/colors.dart | 2 +- lib/constant/country_polygons.dart | 107 + lib/constant/links.dart | 224 +- lib/controller/auth/login_controller.dart | 84 +- lib/controller/auth/otp_controller.dart | 91 +- lib/controller/auth/register_controller.dart | 52 +- .../auth/token_otp_change_controller.dart | 28 +- lib/controller/firebase/firbase_messge.dart | 858 +- .../firebase/notification_service.dart | 62 +- lib/controller/functions/crud.dart | 49 +- lib/controller/functions/launch.dart | 25 +- .../functions/location_controller.dart | 258 +- .../home/contact_us_controller.dart | 70 +- .../home/map_passenger_controller.dart | 3206 +- .../home/points_for_rider_controller.dart | 2 +- .../home/profile/invit_controller.dart | 4 +- .../local/phone_intel/countries.dart | 2 +- lib/controller/local/translations.dart | 48 +- .../passenger_notification_controller.dart | 1 + .../passenger_wallet_history_controller.dart | 6 +- .../payment/payment_controller.dart | 3 +- lib/controller/rate/rate_conroller.dart | 45 +- lib/env/env.dart | 3 + lib/env/env.g.dart | 26160 ++++++++-------- lib/views/Rate/rating_driver_bottom.dart | 164 + lib/views/auth/otp_page.dart | 70 +- lib/views/home/HomePage/contact_us.dart | 6 +- lib/views/home/map_page_passenger.dart | 53 +- .../map_widget.dart/apply_order_widget.dart | 752 +- .../buttom_sheet_map_show.dart | 2 +- .../car_details_widget_to_go.dart | 53 +- .../cash_confirm_bottom_page.dart | 6 +- .../form_search_places_destenation.dart | 4 +- .../google_map_passenger_widget.dart | 145 +- .../map_widget.dart/left_main_menu_icons.dart | 38 +- .../map_widget.dart/main_bottom_Menu_map.dart | 2 +- .../map_widget.dart/ride_begin_passenger.dart | 742 +- .../map_widget.dart/ride_from_start_app.dart | 419 +- .../searching_captain_window.dart | 547 +- lib/views/home/map_widget.dart/vip_begin.dart | 2 +- .../my_wallet/passenger_wallet_dialoge.dart | 87 +- .../home/my_wallet/payment_screen_sham.dart | 425 +- pubspec.yaml | 2 + 49 files changed, 19013 insertions(+), 15915 deletions(-) create mode 100644 lib/constant/country_polygons.dart create mode 100644 lib/views/Rate/rating_driver_bottom.dart diff --git a/.env b/.env index 80f024b..e24b520 100644 --- a/.env +++ b/.env @@ -5,6 +5,7 @@ accountSIDTwillo=QFx0qy456juj383n9xuy2194q629q1fj0y7XrXlBl serverAPI=QQQQobSrrFi:QVQ87xU7zwCvmZzZdaxuS2f23Y4mz7MzyOzr8od2br6KYyeFaTVLG3K3hx5ZaUyx7eYvAYpAVdKk-286NTRi3zs9iSOnXtXRIxswg3KecBmsl3VxJ9wO-vIpwu4Pv7dkHkXniuxMSDgWXrXlBl # mapAPIKEY=AIzaSyCFsWBqvkXzk1Gb-bCGxwqTwJQKIeHjH64 mapAPIKEY=AIzaSyAPFR_XbRN0XZ5Iz3AYDjNYHGJG2s2QWwM +mapKeyOsm=maldev@route-dollars mapAPIKEYIOS=AIzaSyDdqkLMCrqjVrn7XmadIqynyoBa7P27OeM twilloRecoveryCode=CAU79DHPH1BjE9PUH4ETXTSXZXrXlBl apiKeyHere=g_WNUb5L-tripz7-F8omHpUmgIzH7ETeH9xZ8RwGG9_G8zX9A diff --git a/android/app/build.gradle b/android/app/build.gradle index e7fc4f0..1d656d3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -45,10 +45,10 @@ android { applicationId = "com.Intaleq.intaleq" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 29 + minSdk = 23 targetSdk = 36 - versionCode = 25 - versionName = '1.0.25' + versionCode = 45 + versionName = '1.0.45' multiDexEnabled = true ndk { abiFilters "armeabi-v7a", "arm64-v8a" diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e5eeae8..e7b1cbd 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ تحذير أمني - تم اكتشاف مشكلة أمنية أو تعديل على هذا الجهاز. لا يمكن تشغيل التطبيق على هذا الجهاز. + تم اكتشاف مشكلة أمنية أو تعديل على هذا الجهاز. لا يمكن + تشغيل التطبيق على هذا الجهاز. إغلاق التطبيق الجهاز آمن. الاستمرار بشكل طبيعي. + انطلق \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 9152f91..b099bf5 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -12,5 +12,5 @@ this device. The app cannot run on this device. Exit App Device is secure. Proceeding normally. - + Intaleq \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 300fb74..296bab4 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -33,11 +33,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 12 + 23 CFBundleSignature ???? CFBundleVersion - 1.0.12 + 1.0.23 FirebaseAppDelegateProxyEnabled NO GMSApiKey diff --git a/lib/constant/colors.dart b/lib/constant/colors.dart index 1ddb393..d10133a 100644 --- a/lib/constant/colors.dart +++ b/lib/constant/colors.dart @@ -27,7 +27,7 @@ class AppColor { /// **Grey Color:** A neutral grey for secondary text, borders, dividers, /// and disabled states. - static const Color greyColor = Color(0xFF8E8E93); + static const Color grayColor = Color(0xFF8E8E93); /// **Red Color (Error):** A clear, attention-grabbing red for error messages and alerts. static const Color redColor = Color(0xFFD32F2F); diff --git a/lib/constant/country_polygons.dart b/lib/constant/country_polygons.dart new file mode 100644 index 0000000..be919af --- /dev/null +++ b/lib/constant/country_polygons.dart @@ -0,0 +1,107 @@ +// في ملف: constant/country_polygons.dart + +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +class CountryPolygons { + // ========================================================== + // 1. الأردن: تغطية الممر الحضري الرئيسي (من إربد شمالاً حتى العقبة جنوباً) + // حوالي 12 نقطة + // ========================================================== + static final List jordanBoundary = [ + // شمال إربد (قرب الحدود) + const LatLng(32.65, 35.80), + // شمال شرق المفرق + const LatLng(32.35, 37.00), + // شرق الزرقاء / الأزرق + const LatLng(31.85, 36.80), + // جنوب شرق (نهاية الزحف السكاني) + const LatLng(31.00, 36.50), + // جنوب / معان + const LatLng(30.30, 35.75), + // العقبة + const LatLng(29.50, 35.00), + // البحر الأحمر / الحدود الغربية + const LatLng(29.50, 34.85), + // غرب وادي عربة + const LatLng(30.80, 35.25), + // منطقة البحر الميت / السلط + const LatLng(32.00, 35.50), + // العودة عبر وادي الأردن إلى الشمال + const LatLng(32.45, 35.60), + // العودة لنقطة إربد + const LatLng(32.65, 35.80), + ]; + + // ========================================================== + // 2. سوريا: تغطية الممر الغربي والساحلي (درعا، دمشق، حمص، حماة، حلب، الساحل) + // حوالي 14 نقطة + // ========================================================== + static final List syriaBoundary = [ + // درعا / الجنوب + const LatLng(32.65, 35.95), + // شرق السويداء (حدود المنطقة المأهولة) + const LatLng(32.85, 37.10), + // أطراف دمشق الشرقية + const LatLng(33.50, 36.65), + // تدمر (أقصى امتداد شرقي للمضلع) + const LatLng(34.50, 38.30), + // الرقة (شمال شرق) + const LatLng(35.95, 38.80), + // حلب (الشمال) + const LatLng(36.45, 37.15), + // الحدود الشمالية الغربية (إدلب / تركيا) + const LatLng(36.50, 36.50), + // اللاذقية (الساحل) + const LatLng(35.50, 35.75), + // طرطوس (الساحل) + const LatLng(34.80, 35.85), + // حمص + const LatLng(34.70, 36.70), + // حماة + const LatLng(35.10, 36.70), + // العودة إلى منطقة دمشق + const LatLng(33.40, 36.30), + // العودة إلى درعا + const LatLng(32.65, 35.95), + ]; + + // ========================================================== + // 3. مصر: تغطية القاهرة الكبرى، الدلتا، والإسكندرية والإسماعيلية + // حوالي 10 نقاط + // ========================================================== + static final List egyptBoundary = [ + // جنوب الفيوم (أقصى امتداد جنوبي غربي) + const LatLng(29.20, 30.60), + // جنوب القاهرة (العياط) + const LatLng(29.80, 31.30), + // شرق السويس + const LatLng(29.95, 32.70), + // الإسماعيلية / القناة + const LatLng(30.60, 32.25), + // بورسعيد / أطراف الدلتا الشمالية الشرقية + const LatLng(31.30, 31.80), + // دمياط / ساحل الدلتا + const LatLng(31.50, 31.25), + // الإسكندرية (أقصى الشمال الغربي) + const LatLng(31.20, 29.80), + // غرب الدلتا + const LatLng(30.50, 30.20), + // العودة لنقطة البداية + const LatLng(29.20, 30.60), + ]; + + // دالة تُرجع رابط API بناءً على اسم الدولة + static String getRoutingApiUrl(String countryName) { + switch (countryName) { + case 'Jordan': + return 'https://routec.intaleq.xyz/route-jo'; + case 'Syria': + return 'https://routec.intaleq.xyz/route'; + case 'Egypt': + return 'https://routec.intaleq.xyz/route-eg'; + default: + // الافتراضي في حالة لم يقع الموقع ضمن أي من المضلعات + return 'https://routec.intaleq.xyz/route'; + } + } +} diff --git a/lib/constant/links.dart b/lib/constant/links.dart index b5d2591..b7d9cf9 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -1,33 +1,18 @@ import 'package:Intaleq/constant/box_name.dart'; -import 'package:Intaleq/env/env.dart'; import 'package:Intaleq/main.dart'; class AppLink { - // static final String seferPaymentServer0 = Env.seferPaymentServer; - // static final String seferPaymentServer = '${Env.seferPaymentServer}/ride'; - // static final String seferAlexandriaServer = Env.seferAlexandriaServer; - // static final String seferCairoServer = Env.seferCairoServer; static String serverPHP = box.read('serverPHP'); - // static String seferCairoServer = - // box.read(BoxName.locationName)[0]['server_link']; - // static String seferGizaServer = box.read(BoxName.serverChosen); - // static String seferAlexandriaServer = box.read(BoxName.serverChosen); - // static String seferPaymentServer = box.read('seferPaymentServer'); - static String seferPaymentServer = - // box.read(BoxName.paymentLink); - 'https://walletintaleq.intaleq.xyz/v1/main'; + static String paymentServer = 'https://walletintaleq.intaleq.xyz/v1/main'; + static String location = 'https://api.intaleq.xyz/intaleq/ride/location'; + static String seferPaymentServer0 = box.read('seferPaymentServer'); - // static const String seferGizaServer = 'https://gizasefer.online/sefer'; - // static final String seferGizaServer = Env.seferGizaServer; - // static final String endPoint = box.read(BoxName.serverChosen); - // static final String server = endPoint; - // static final String server = Env.serverPHP; - static final String endPoint = 'https://intaleq.xyz/intaleq'; + static final String endPoint = 'https://api.intaleq.xyz/intaleq'; + static final String ride = 'https://rides.intaleq.xyz/intaleq'; // box.read(BoxName.serverChosen) ?? box.read(BoxName.basicLink); - // 'https://server.sefer.click/sefer.click/sefer'; - static final String server = endPoint; + static final String server = 'https://api.intaleq.xyz/intaleq'; static String IntaleqSyriaServer = endPoint; static String IntaleqGizaServer = box.read('Giza'); static String IntaleqAlexandriaServer = box.read('Alexandria'); @@ -44,30 +29,30 @@ class AppLink { static String getTokens = "$server/ride/firebase/get.php"; static String getTokenParent = "$server/ride/firebase/getTokenParent.php"; static String addTokens = "$server/ride/firebase/add.php"; - static String addFingerPrint = "$seferPaymentServer/ride/firebase/add.php"; + static String addFingerPrint = "$paymentServer/ride/firebase/add.php"; static String addTokensDriver = "$server/ride/firebase/addDriver.php"; static String packageInfo = "$server/auth/packageInfo.php"; //=======================Wallet=================== - static String wallet = '$seferPaymentServer/ride/passengerWallet'; - static String walletDriver = '$seferPaymentServer/ride/driverWallet'; + static String wallet = '$paymentServer/ride/passengerWallet'; + static String walletDriver = '$paymentServer/ride/driverWallet'; static String getAllPassengerTransaction = "$wallet/getAllPassengerTransaction.php"; static String getWalletByPassenger = "$wallet/getWalletByPassenger.php"; static String getPassengersWallet = "$wallet/get.php"; static String payWithPayMobWalletPasenger = - '$seferPaymentServer/ride/payMob/wallet/payWithPayMob.php'; + '$paymentServer/ride/payMob/wallet/payWithPayMob.php'; static String payWithPayMobCardPassenger = - '$seferPaymentServer/ride/payMob/payWithPayMob.php'; - static String payWithEcash = "$seferPaymentServer/ecash/payWithEcash.php"; + '$paymentServer/ride/payMob/payWithPayMob.php'; + static String payWithEcash = "$paymentServer/ecash/payWithEcash.php"; static String paymetVerifyPassenger = - "$seferPaymentServer/ride/payMob/paymet_verfy.php"; + "$paymentServer/ride/payMob/paymet_verfy.php"; static String getPassengerWalletArchive = "$wallet/getPassengerWalletArchive.php"; - static String addDrivePayment = "$seferPaymentServer/ride/payment/add.php"; - static String addSeferWallet = "$seferPaymentServer/ride/seferWallet/add.php"; + static String addDrivePayment = "$paymentServer/ride/payment/add.php"; + static String addSeferWallet = "$paymentServer/ride/seferWallet/add.php"; static String addPassengersWallet = "$wallet/add.php"; static String deletePassengersWallet = "$wallet/delete.php"; static String updatePassengersWallet = "$wallet/update.php"; @@ -92,80 +77,79 @@ class AppLink { static String getPhones = "$server/ride/egyptPhones/get.php"; ////=======================cancelRide=================== - static String ride = '$server/ride'; - static String addCancelRideFromPassenger = "$server/ride/cancelRide/add.php"; - static String cancelRide = "$server/ride/cancelRide/get.php"; + // static String ride = '$server/ride'; + static String addCancelRideFromPassenger = "$ride/cancelRide/add.php"; + static String cancelRide = "$ride/cancelRide/get.php"; //-----------------ridessss------------------ - static String addRides = "$ride/rides/add.php"; - static String getRides = "$endPoint/ride/rides/get.php"; - static String getRideOrderID = "$endPoint/ride/rides/getRideOrderID.php"; - static String getRideStatus = "$endPoint/ride/rides/getRideStatus.php"; - static String getRideStatusBegin = - "$endPoint/ride/rides/getRideStatusBegin.php"; + static String addRides = "$ride/ride/rides/add.php"; + static String getRides = "$ride/ride/rides/get.php"; + static String getRideOrderID = "$ride/ride/rides/getRideOrderID.php"; + static String getRideStatus = "$ride/ride/rides/getRideStatus.php"; + static String getRideStatusBegin = "$ride/ride/rides/getRideStatusBegin.php"; static String getRideStatusFromStartApp = - "$ride/rides/getRideStatusFromStartApp.php"; - static String updateRides = "$server/ride/rides/update.php"; + "$server/ride/rides/getRideStatusFromStartApp.php"; + static String updateRides = "$ride/ride/rides/update.php"; static String updateStausFromSpeed = - "$server/ride/rides/updateStausFromSpeed.php"; - static String deleteRides = "$server/ride/rides/delete.php"; + "$ride/ride/rides/updateStausFromSpeed.php"; + static String deleteRides = "$ride/ride/rides/delete.php"; //-----------------DriverPayment------------------ - static String adddriverScam = "$ride/driver_scam/add.php"; - static String getdriverScam = "$ride/driver_scam/get.php"; + static String adddriverScam = "$server/driver_scam/add.php"; + static String getdriverScam = "$server/ride/driver_scam/get.php"; /////////---getKazanPercent===//////////// - static String getKazanPercent = "$ride/kazan/get.php"; - static String addKazanPercent = "$ride/kazan/add.php"; + static String getKazanPercent = "$server/ride/kazan/get.php"; + static String addKazanPercent = "$server/ride/kazan/add.php"; ////-----------------DriverPayment------------------ - static String addDriverpayment = "$seferPaymentServer/ride/payment/add.php"; + static String addDriverpayment = "$paymentServer/ride/payment/add.php"; static String addDriverPaymentPoints = - "$seferPaymentServer/ride/driverPayment/add.php"; + "$paymentServer/ride/driverPayment/add.php"; static String addPaymentTokenPassenger = - "$seferPaymentServer/ride/passengerWallet/addPaymentTokenPassenger.php"; + "$paymentServer/ride/passengerWallet/addPaymentTokenPassenger.php"; static String addPaymentTokenDriver = - "$seferPaymentServer/ride/driverWallet/addPaymentToken.php"; + "$paymentServer/ride/driverWallet/addPaymentToken.php"; static String getDriverPaymentPoints = - "$seferPaymentServer/ride/driverWallet/get.php"; + "$paymentServer/ride/driverWallet/get.php"; static String payWithEcashPassenger = - "$seferPaymentServer/ride/ecash/passenger/payWithEcash.php"; + "$paymentServer/ride/ecash/passenger/payWithEcash.php"; static String payWithMTNConfirm = - "$seferPaymentServer/ride/mtn/passenger/mtn_confirm.php"; + "$paymentServer/ride/mtn/passenger/mtn_confirm.php"; static String payWithMTNStart = - "$seferPaymentServer/ride/mtn/passenger/mtn_start.php"; + "$paymentServer/ride/mtn/passenger/mtn_start.php"; static String payWithSyriatelConfirm = - "$seferPaymentServer/ride/syriatel/passenger/confirm_payment.php"; + "$paymentServer/ride/syriatel/passenger/confirm_payment.php"; static String payWithSyriatelStart = - "$seferPaymentServer/ride/syriatel/passenger/start_payment.php"; - static String getDriverpaymentToday = - "$seferPaymentServer/ride/payment/get.php"; - static String getCountRide = - "$seferPaymentServer/ride/payment/getCountRide.php"; + "$paymentServer/ride/syriatel/passenger/start_payment.php"; + static String getDriverpaymentToday = "$paymentServer/ride/payment/get.php"; + static String getCountRide = "$paymentServer/ride/payment/getCountRide.php"; static String getAllPaymentFromRide = - "$seferPaymentServer/ride/payment/getAllPayment.php"; + "$paymentServer/ride/payment/getAllPayment.php"; static String getAllPaymentVisa = - "$seferPaymentServer/ride/payment/getAllPaymentVisa.php"; + "$paymentServer/ride/payment/getAllPaymentVisa.php"; //-----------------Passenger NotificationCaptain------------------ static String addNotificationPassenger = - "$ride/notificationPassenger/add.php"; + "$server/ride/notificationPassenger/add.php"; static String getNotificationPassenger = - "$ride/notificationPassenger/get.php"; + "$server/ride/notificationPassenger/get.php"; static String updateNotificationPassenger = - "$ride/notificationPassenger/update.php"; + "$server/ride/notificationPassenger/update.php"; //-----------------Driver NotificationCaptain------------------ - static String addNotificationCaptain = "$ride/notificationCaptain/add.php"; + static String addNotificationCaptain = + "$server/ride/notificationCaptain/add.php"; static String addWaitingRide = "$server/ride/notificationCaptain/addWaitingRide.php"; static String updateWaitingTrip = "$server/ride/notificationCaptain/updateWaitingTrip.php"; static String getRideWaiting = "$endPoint/ride/notificationCaptain/getRideWaiting.php"; - static String getNotificationCaptain = "$ride/notificationCaptain/get.php"; + static String getNotificationCaptain = + "$server/ride/notificationCaptain/get.php"; static String updateNotificationCaptain = - "$ride/notificationCaptain/update.php"; + "$server/ride/notificationCaptain/update.php"; static String deleteNotificationCaptain = - "$ride/notificationCaptain/delete.php"; + "$server/ride/notificationCaptain/delete.php"; //-----------------invitor------------------ static String addInviteDriver = "$server/ride/invitor/add.php"; @@ -178,70 +162,70 @@ class AppLink { static String updatePassengerGift = "$server/ride/invitor/updatePassengerGift.php"; //-----------------Api Key------------------ - static String addApiKey = "$ride/apiKey/add.php"; - static String getApiKey = "$ride/apiKey/get.php"; + static String addApiKey = "$server/ride/apiKey/add.php"; + static String getApiKey = "$server/ride/apiKey/get.php"; static String getCnMap = "$server/auth/cnMap.php"; - static String updateApiKey = "$ride/apiKey/update.php"; - static String deleteApiKey = "$ride/apiKey/delete.php"; - static String getPlacesSyria = "$ride/places_syria/get.php"; + static String updateApiKey = "$server/ride/apiKey/update.php"; + static String deleteApiKey = "$server/ride/apiKey/delete.php"; + static String getPlacesSyria = "$server/ride/places_syria/get.php"; //-----------------Feed Back------------------ - static String addFeedBack = "$ride/feedBack/add.php"; - static String add_solve_all = "$ride/feedBack/add_solve_all.php"; - static String uploadAudio = "$ride/feedBack/upload_audio.php"; - static String getFeedBack = "$ride/feedBack/get.php"; - static String updateFeedBack = "$ride/feedBack/updateFeedBack.php"; + static String addFeedBack = "$server/ride/feedBack/add.php"; + static String add_solve_all = "$server/ride/feedBack/add_solve_all.php"; + static String uploadAudio = "$server/ride/feedBack/upload_audio.php"; + static String getFeedBack = "$server/ride/feedBack/get.php"; + static String updateFeedBack = "$server/ride/feedBack/updateFeedBack.php"; //-----------------Tips------------------ - static String addTips = "$ride/tips/add.php"; - static String getTips = "$ride/tips/get.php"; - static String updateTips = "$ride/tips/update.php"; + static String addTips = "$server/ride/tips/add.php"; + static String getTips = "$server/ride/tips/get.php"; + static String updateTips = "$server/ride/tips/update.php"; //-----------------Help Center------------------ - static String addhelpCenter = "$ride/helpCenter/add.php"; - static String gethelpCenter = "$ride/helpCenter/get.php"; - static String getByIdhelpCenter = "$ride/helpCenter/getById.php"; - static String updatehelpCenter = "$ride/helpCenter/update.php"; - static String deletehelpCenter = "$ride/helpCenter/delete.php"; + static String addhelpCenter = "$server/ride/helpCenter/add.php"; + static String gethelpCenter = "$server/ride/helpCenter/get.php"; + static String getByIdhelpCenter = "$server/ride/helpCenter/getById.php"; + static String updatehelpCenter = "$server/ride/helpCenter/update.php"; + static String deletehelpCenter = "$server/ride/helpCenter/delete.php"; //-----------------license------------------ - static String addLicense = "$ride/license/add.php"; - static String getLicense = "$ride/license/get.php"; - static String updateLicense = "$ride/license/updateFeedBack.php"; + static String addLicense = "$server/ride/license/add.php"; + static String getLicense = "$server/ride/license/get.php"; + static String updateLicense = "$server/ride/license/updateFeedBack.php"; //-----------------RegisrationCar------------------ - static String addRegisrationCar = "$ride/RegisrationCar/add.php"; + static String addRegisrationCar = "$server/ride/RegisrationCar/add.php"; static String getRegisrationCar = - "${box.read(BoxName.serverChosen)}/ride/RegisrationCar/get.php"; + "${box.read(BoxName.serverChosen)}/server/ride/RegisrationCar/get.php"; static String selectDriverAndCarForMishwariTrip = - "$ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php"; - static String updateRegisrationCar = "$ride/RegisrationCar/update.php"; + "$server/ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php"; + static String updateRegisrationCar = "$server/ride/RegisrationCar/update.php"; //-----------------mishwari------------------ - static String addMishwari = "$ride/mishwari/add.php"; - static String cancelMishwari = "$ride/mishwari/cancel.php"; - static String getMishwari = "$ride/mishwari/get.php"; + static String addMishwari = "$server/ride/mishwari/add.php"; + static String cancelMishwari = "$server/ride/mishwari/cancel.php"; + static String getMishwari = "$server/ride/mishwari/get.php"; //-----------------DriverOrder------------------ - static String addDriverOrder = "$ride/driver_order/add.php"; - static String getDriverOrder = "$ride/driver_order/get.php"; + static String addDriverOrder = "$server/ride/driver_order/add.php"; + static String getDriverOrder = "$server/ride/driver_order/get.php"; static String getOrderCancelStatus = - "$ride/driver_order/getOrderCancelStatus.php"; - static String updateDriverOrder = "$ride/driver_order/update.php"; - static String deleteDriverOrder = "$ride/driver_order/delete.php"; + "$server/ride/driver_order/getOrderCancelStatus.php"; + static String updateDriverOrder = "$server/ride/driver_order/update.php"; + static String deleteDriverOrder = "$server/ride/driver_order/delete.php"; // ===================================== - static String addRateToPassenger = "$ride/rate/add.php"; - static String savePlacesServer = "$ride/places/add.php"; - static String getapiKey = "$ride/apiKey/get.php"; - static String addRateToDriver = "$ride/rate/addRateToDriver.php"; - static String getDriverRate = "$ride/rate/getDriverRate.php"; - static String getPassengerRate = "$ride/rate/getPassengerRate.php"; + static String addRateToPassenger = "$server/ride/rate/add.php"; + static String savePlacesServer = "$server/ride/places/add.php"; + static String getapiKey = "$server/ride/apiKey/get.php"; + static String addRateToDriver = "$server/ride/rate/addRateToDriver.php"; + static String getDriverRate = "$server/ride/rate/getDriverRate.php"; + static String getPassengerRate = "$server/ride/rate/getPassengerRate.php"; ////////////////emails ============// static String sendEmailToPassengerForTripDetails = - "$ride/rides/emailToPassengerTripDetail.php"; + "$server/ride/rides/emailToPassengerTripDetail.php"; // =========================================== static String pathImage = "$server/upload/types/"; @@ -255,11 +239,11 @@ class AppLink { static String uploadEgypt = "$server/uploadEgypt.php"; //==================certifcate========== - static String location = '${box.read(BoxName.serverChosen)}/ride/location'; + // static String location = '${box.read(BoxName.serverChosen)}/ride/location'; static String getCarsLocationByPassenger = "$location/get.php"; static String getLocationAreaLinks = - '$ride/location/get_location_area_links.php'; + '$server/ride/location/get_location_area_links.php'; static String addpassengerLocation = "$location/addpassengerLocation.php"; static String getCarsLocationByPassengerSpeed = "$location/getSpeed.php"; static String getCarsLocationByPassengerComfort = "$location/getComfort.php"; @@ -268,6 +252,8 @@ class AppLink { "$location/getElectric.php"; static String getCarsLocationByPassengerPinkBike = "$location/getPinkBike.php"; + static String getCarsLocationByPassengerVan = + "$location/getCarsLocationByPassengerVan.php"; static String getCarsLocationByPassengerDelivery = "$location/getDelivery.php"; static String getLocationParents = "$location/getLocationParents.php"; @@ -275,12 +261,12 @@ class AppLink { "$location/getFemalDriver.php"; static String getDriverCarsLocationToPassengerAfterApplied = "$location/getDriverCarsLocationToPassengerAfterApplied.php"; - static String addCarsLocationByPassenger = "$location/add.php"; - static String deleteCarsLocationByPassenger = "$location/delete.php"; - static String updateCarsLocationByPassenger = "$location/update.php"; - static String getTotalDriverDuration = "$location/getTotalDriverDuration.php"; - static String getTotalDriverDurationToday = - "$location/getTotalDriverDurationToday.php"; +// static String addCarsLocationByPassenger = "$location/add.php"; +// static String deleteCarsLocationByPassenger = "$location/delete.php"; +// static String updateCarsLocationByPassenger = "$location/update.php"; +// static String getTotalDriverDuration = "$location/getTotalDriverDuration.php"; +// static String getTotalDriverDurationToday = + // "$location/getTotalDriverDurationToday.php"; //==================Blog============= static String profile = '$server/ride/profile'; @@ -295,7 +281,7 @@ class AppLink { static String auth = '$server/auth'; static String login = "$auth/login.php"; static String loginJwtRider = "$server/login.php"; - static String loginJwtWalletRider = "$seferPaymentServer/loginWallet.php"; + static String loginJwtWalletRider = "$server/loginWallet.php"; static String loginFirstTime = "$server/loginFirstTime.php"; static String getTesterApp = "$auth/Tester/getTesterApp.php"; static String updateTesterApp = "$auth/Tester/updateTesterApp.php"; diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index c2847e6..68f1585 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -87,34 +87,70 @@ class LoginController extends GetxController { update(); } - getJwtWallet() async { - final random = Random(); + Future getJwtWallet() async { + try { + final random = Random(); - if (random.nextBool()) { - await SecurityHelper.performSecurityChecks(); - } else { - await SecurityChecks.isDeviceRootedFromNative(Get.context!); + // Perform security check randomly + if (random.nextBool()) { + await SecurityHelper.performSecurityChecks(); + } else { + await SecurityChecks.isDeviceRootedFromNative(Get.context!); + } + + String fingerPrint = await DeviceHelper.getDeviceFingerprint(); + final dev = GetPlatform.isAndroid ? 'android' : 'ios'; + + var payload = { + 'id': box.read(BoxName.passengerID), + 'password': AK.passnpassenger, + 'aud': '${AK.allowed}$dev', + 'fingerPrint': fingerPrint, + }; + + var response = await http.post( + Uri.parse(AppLink.loginJwtWalletRider), + body: payload, + ); + + // Handle bad responses + if (response.statusCode != 200) { + _showJwtErrorDialog( + "حدث خطأ أثناء الاتصال بالخادم. يرجى المحاولة مرة أخرى."); + throw Exception("JWT request failed"); + } + + var data = jsonDecode(response.body); + + // Validate JWT response structure + if (!data.containsKey('jwt') || !data.containsKey('hmac')) { + _showJwtErrorDialog("تعذّر التحقق من الأمان. يرجى إعادة المحاولة."); + throw Exception("Invalid JWT response format"); + } + + // Save HMAC locally + await box.write(BoxName.hmac, data['hmac']); + + return data['jwt'].toString(); + } catch (e) { + _showJwtErrorDialog("حدث خلل غير متوقع. يرجى المحاولة مرة أخرى."); + rethrow; } + } - String fingerPrint = await DeviceHelper.getDeviceFingerprint(); - // print('fingerPrint: ${fingerPrint}'); - dev = Platform.isAndroid ? 'android' : 'ios'; - var payload = { - 'id': box.read(BoxName.passengerID), - 'password': AK.passnpassenger, - 'aud': '${AK.allowed}$dev', - 'fingerPrint': fingerPrint - }; - var response1 = await http.post( - Uri.parse(AppLink.loginJwtWalletRider), - body: payload, + void _showJwtErrorDialog(String message) { + if (Get.context == null) return; + + Get.defaultDialog( + title: "خطأ في الاتصال", + middleText: message, + textConfirm: "إعادة المحاولة", + confirmTextColor: Colors.white, + onConfirm: () { + Get.back(); + getJwtWallet(); + }, ); - await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']); - // Log.print('jsonDecoeded[hmac]: ${jsonDecoeded['hmac']}'); - // Log.print('req: ${response1.request}'); - // Log.print('response: ${response1.body}'); - // Log.print('payload: ${payload}'); - return jsonDecode(response1.body)['jwt'].toString(); } getJWT() async { diff --git a/lib/controller/auth/otp_controller.dart b/lib/controller/auth/otp_controller.dart index 185b2a5..6e6b06f 100644 --- a/lib/controller/auth/otp_controller.dart +++ b/lib/controller/auth/otp_controller.dart @@ -19,21 +19,78 @@ class PhoneAuthHelper { static final String _verifyOtpUrl = '${_baseUrl}verifyOtp.php'; static final String _registerUrl = '${_baseUrl}register_passenger.php'; + static String formatSyrianPhone(String phone) { + // Remove spaces, symbols, +, -, () + phone = phone.replaceAll(RegExp(r'[ \-\(\)\+]'), '').trim(); + + // Normalize 00963 → 963 + if (phone.startsWith('00963')) { + phone = phone.replaceFirst('00963', '963'); + } + + // Normalize 0963 → 963 + if (phone.startsWith('0963')) { + phone = phone.replaceFirst('0963', '963'); + } + + // NEW: Fix 96309xxxx → 9639xxxx + if (phone.startsWith('96309')) { + phone = '9639' + phone.substring(5); // remove the "0" after 963 + } + + // If starts with 9630 → correct to 9639 + if (phone.startsWith('9630')) { + phone = '9639' + phone.substring(4); + } + + // If already in correct format: 9639xxxxxxxx + if (phone.startsWith('9639') && phone.length == 12) { + return phone; + } + + // If starts with 963 but missing the 9 + if (phone.startsWith('963') && phone.length > 3) { + // Ensure it begins with 9639 + if (!phone.startsWith('9639')) { + phone = '9639' + phone.substring(3); + } + return phone; + } + + // If starts with 09xxxxxxxx → 9639xxxxxxxx + if (phone.startsWith('09')) { + return '963' + phone.substring(1); + } + + // If 9xxxxxxxx (9 digits) + if (phone.startsWith('9') && phone.length == 9) { + return '963' + phone; + } + + // If starts with incorrect 0xxxxxxx → assume Syrian and fix + if (phone.startsWith('0') && phone.length == 10) { + return '963' + phone.substring(1); + } + + return phone; + } + /// Sends an OTP to the provided phone number. static Future sendOtp(String phoneNumber) async { try { - // Log.print('_sendOtpUrl: ${_sendOtpUrl}'); - // Log.print('phoneNumber: ${phoneNumber}'); + // إصلاح الرقم قبل الإرسال + final fixedPhone = formatSyrianPhone(phoneNumber); final response = await CRUD().post( link: _sendOtpUrl, - payload: {'receiver': phoneNumber}, + payload: {'receiver': fixedPhone}, // ← ← استخدام الرقم المُعدّل ); - // Log.print('response: ${response}'); + if (response != 'failure') { - final data = (response); + final data = response; + if (data['status'] == 'success') { - mySnackbarSuccess('An OTP has been sent to your WhatsApp number.'.tr); + mySnackbarSuccess('An OTP has been sent to your number.'.tr); return true; } else { mySnackeBarError(data['message'] ?? 'Failed to send OTP.'); @@ -44,19 +101,20 @@ class PhoneAuthHelper { return false; } } catch (e) { - // Log.print('e: ${e}'); - // mySnackeBarError('An error occurred: $e'); return false; } } /// Verifies the OTP and logs the user in. - static Future verifyOtp(String phoneNumber, String otp) async { + static Future verifyOtp(String phoneNumber) async { try { + final fixedPhone = formatSyrianPhone(phoneNumber); final response = await CRUD().post( link: _verifyOtpUrl, - payload: {'phone_number': phoneNumber, 'otp': otp}, + payload: { + 'phone_number': fixedPhone, + }, ); if (response != 'failure') { @@ -96,13 +154,12 @@ class PhoneAuthHelper { 'passengerID': box.read(BoxName.passengerID).toString(), "fingerPrint": fingerPrint }); - await CRUD().post( - link: "${AppLink.seferPaymentServer}/ride/firebase/add.php", - payload: { - 'token': (box.read(BoxName.tokenFCM.toString())), - 'passengerID': box.read(BoxName.passengerID).toString(), - "fingerPrint": fingerPrint - }); + await CRUD() + .post(link: "${AppLink.paymentServer}/ride/firebase/add.php", payload: { + 'token': (box.read(BoxName.tokenFCM.toString())), + 'passengerID': box.read(BoxName.passengerID).toString(), + "fingerPrint": fingerPrint + }); } static Future registerUser({ diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart index e39b077..f86eab1 100644 --- a/lib/controller/auth/register_controller.dart +++ b/lib/controller/auth/register_controller.dart @@ -222,19 +222,19 @@ class RegisterController extends GetxController { if (res1 != 'failure') { //Multi-server signup (moved inside the successful registration check) - if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) { - List signUp = [ - CRUD().post( - link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php', - payload: payload, - ), - CRUD().post( - link: '${AppLink.IntaleqGizaServer}/auth/signup.php', - payload: payload, - ) - ]; - await Future.wait(signUp); // Wait for both sign-ups to complete. - } + // if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) { + // List signUp = [ + // CRUD().post( + // link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php', + // payload: payload, + // ), + // CRUD().post( + // link: '${AppLink.IntaleqGizaServer}/auth/signup.php', + // payload: payload, + // ) + // ]; + // await Future.wait(signUp); // Wait for both sign-ups to complete. + // } box.write(BoxName.isVerified, '1'); box.write( @@ -297,19 +297,19 @@ class RegisterController extends GetxController { ); if (res1 != 'failure') { - if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) { - List signUp = [ - CRUD().post( - link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php', - payload: payload, - ), - CRUD().post( - link: '${AppLink.IntaleqGizaServer}/auth/signup.php', - payload: payload, - ) - ]; - await Future.wait(signUp); - } + // if (AppLink.IntaleqAlexandriaServer != AppLink.IntaleqSyriaServer) { + // List signUp = [ + // CRUD().post( + // link: '${AppLink.IntaleqAlexandriaServer}/auth/signup.php', + // payload: payload, + // ), + // CRUD().post( + // link: '${AppLink.IntaleqGizaServer}/auth/signup.php', + // payload: payload, + // ) + // ]; + // await Future.wait(signUp); + // } box.write(BoxName.isVerified, '1'); box.write(BoxName.isFirstTime, '0'); diff --git a/lib/controller/auth/token_otp_change_controller.dart b/lib/controller/auth/token_otp_change_controller.dart index dd2634c..3aa0ec2 100644 --- a/lib/controller/auth/token_otp_change_controller.dart +++ b/lib/controller/auth/token_otp_change_controller.dart @@ -91,18 +91,8 @@ class OtpVerificationController extends GetxController { ); if (response != 'failure' && response['status'] == 'success') { - final fcm = Get.isRegistered() - ? Get.find() - : Get.put(FirebaseMessagesController()); - - // await fcm.sendNotificationToDriverMAP( - // 'token change', - // 'change device'.tr, - // ptoken.toString(), - // [], - // 'cancel', - // ); await NotificationService.sendNotification( + category: 'token change', target: ptoken.toString(), title: 'token change'.tr, body: 'change device'.tr, @@ -110,21 +100,7 @@ class OtpVerificationController extends GetxController { tone: 'cancel', driverList: [], ); - await CRUD().post( - link: "${AppLink.seferPaymentServer}/ride/firebase/add.php", - payload: { - 'token': (box.read(BoxName.tokenFCM.toString())), - 'passengerID': box.read(BoxName.passengerID).toString(), - "fingerPrint": fingerPrint.toString(), - }); - // CRUD().post( - // link: - // '${AppLink.seferPaymentServer}/auth/token/update_passenger_token.php', - // payload: { - // 'token': box.read(BoxName.tokenFCM).toString(), - // 'fingerPrint': fingerPrint.toString(), - // 'passengerID': box.read(BoxName.passengerID).toString(), - // }); + Get.offAll(() => const MapPagePassenger()); } else { Get.snackbar('Verification Failed', 'OTP is incorrect or expired'); diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index 126d940..6f27a5d 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -1,20 +1,15 @@ import 'dart:convert'; import 'dart:io'; -import 'package:Intaleq/controller/functions/encrypt_decrypt.dart'; +import 'package:Intaleq/views/home/HomePage/trip_monitor/trip_link_monitor.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:http/http.dart' as http; import 'package:Intaleq/controller/functions/toast.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; -import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; -import '../../constant/links.dart'; import '../../constant/style.dart'; -import '../../constant/table_names.dart'; -import '../../env/env.dart'; import '../../main.dart'; import '../../print.dart'; import '../../views/Rate/rate_captain.dart'; @@ -23,9 +18,7 @@ import '../../views/home/profile/promos_passenger_page.dart'; import '../auth/google_sign.dart'; import '../functions/audio_record1.dart'; import '../home/map_passenger_controller.dart'; -import 'access_token.dart'; import 'local_notification.dart'; -import 'notification_service.dart'; class FirebaseMessagesController extends GetxController { final fcmToken = FirebaseMessaging.instance; @@ -76,9 +69,13 @@ class FirebaseMessagesController extends GetxController { Future getToken() async { fcmToken.getToken().then((token) { - // Log.print('fcmToken: ${token}'); + Log.print('fcmToken: ${token}'); box.write(BoxName.tokenFCM, (token.toString())); }); + // 🔹 الاشتراك في topic + await fcmToken + .subscribeToTopic("passengers"); // أو "users" حسب نوع المستخدم + print("Subscribed to 'passengers' topic ✅"); FirebaseMessaging.onMessage.listen((RemoteMessage message) { // If the app is in the background or terminated, show a system tray message @@ -104,115 +101,106 @@ class FirebaseMessagesController extends GetxController { } Future fireBaseTitles(RemoteMessage message) async { - if (message.notification!.title! == 'Order'.tr) { + // [!! تعديل !!] + // اقرأ "النوع" من حمولة البيانات، وليس من العنوان + String category = message.data['category'] ?? ''; + + // اقرأ العنوان (للعرض) + String title = message.notification?.title ?? ''; + String body = message.notification?.body ?? ''; + + if (category == 'ORDER') { + // <-- مثال: كان 'Order'.tr Log.print('message: ${message}'); if (Platform.isAndroid) { - notificationController.showNotification( - 'Order'.tr, message.notification!.body!, 'Order'); + notificationController.showNotification(title, body, 'Order'); } - } else if (message.notification!.title! == 'Accepted Ride') { - if (Platform.isAndroid) { - notificationController.showNotification( - 'Accepted Ride'.tr, 'Driver Accepted the Ride for You'.tr, 'ding'); + } + + // ... داخل معالج الإشعارات في تطبيق الراكب ... + else if (category == 'Accepted Ride') { + // <-- كان 'Accepted Ride' + var driverListJson = message.data['driverList']; + if (driverListJson != null) { + var myList = jsonDecode(driverListJson) as List; + final controller = Get.find(); + // controller.currentRideState.value = RideState.driverApplied; + await controller.processRideAcceptance( + driverIdFromFCM: myList[0].toString(), + rideIdFromFCM: myList[3].toString()); + } else { + Log.print('❌ خطأ: RIDE_ACCEPTED وصل بدون driverList'); } - var passengerList = message.data['passengerList']; - - var myList = jsonDecode(passengerList) as List; - Log.print('myList: ${myList}'); - final controller = Get.find(); - controller.driverId = myList[0].toString(); - // assume rideId lives at index 2 in your list: - controller.rideId = myList[3].toString(); - - controller - ..statusRide = 'Apply' - ..isSearchingWindow = false - ..update(); - await controller.rideAppliedFromDriver(true); - - // driverAppliedTripSnakBar(); - } else if (message.notification!.title! == 'Promo'.tr) { + } else if (category == 'Promo') { + // <-- كان 'Promo'.tr if (Platform.isAndroid) { - notificationController.showNotification( - 'Promo', 'Show latest promo'.tr, 'promo'); + notificationController.showNotification(title, body, 'promo'); } Get.to(const PromosPassengerPage()); - } else if (message.notification!.title! == 'Trip Monitoring'.tr) { + } else if (category == 'Trip Monitoring') { + // <-- كان 'Trip Monitoring'.tr if (Platform.isAndroid) { - notificationController.showNotification( - 'Trip Monitoring'.tr, '', 'iphone_ringtone'); + notificationController.showNotification(title, body, 'iphone_ringtone'); } var myListString = message.data['DriverList']; var myList = jsonDecode(myListString) as List; - Get.toNamed('/tripmonitor', arguments: { + Get.to(() => TripMonitor(), arguments: { 'rideId': myList[0].toString(), 'driverId': myList[1].toString(), }); - } else if (message.notification!.title! == 'token change'.tr) { + } else if (category == 'token change') { + // <-- كان 'token change'.tr if (Platform.isAndroid) { - notificationController.showNotification( - 'token change'.tr, 'token change'.tr, 'cancel'); + notificationController.showNotification(title, body, 'cancel'); } GoogleSignInHelper.signOut(); - } else if (message.notification!.title! == - 'Driver Is Going To Passenger'.tr) { + } else if (category == 'Driver Is Going To Passenger') { + // <-- كان 'Driver Is Going To Passenger' Get.find().isDriverInPassengerWay = true; Get.find().update(); if (Platform.isAndroid) { - notificationController.showNotification('Driver is Going To You'.tr, - 'Please stay on the picked point.'.tr, 'tone1'); + notificationController.showNotification(title, body, 'tone1'); } - // Get.snackbar('Driver is Going To Passenger', '', - // backgroundColor: AppColor.greenColor); - } else if (message.notification!.title! == 'message From passenger') { + } else if (category == 'message From passenger') { + // <-- كان 'message From passenger' if (Platform.isAndroid) { - notificationController.showNotification( - 'message From passenger'.tr, ''.tr, 'ding'); + notificationController.showNotification(title, body, 'ding'); } - passengerDialog(message.notification!.body!); - + passengerDialog(body); update(); - } else if (message.notification!.title! == 'message From Driver') { + } else if (category == 'message From Driver') { + // <-- كان 'message From Driver' if (Platform.isAndroid) { - notificationController.showNotification( - 'message From Driver'.tr, ''.tr, 'ding'); + notificationController.showNotification(title, body, 'ding'); } - passengerDialog(message.notification!.body!); - + passengerDialog(body); update(); - } else if (message.notification!.title! == 'Trip is Begin') { + } else if (category == 'Trip is Begin') { + // <-- كان 'Trip is Begin' + Log.print('[FCM] استقبل إشعار "TRIP_BEGUN".'); + final controller = Get.find(); + controller.processRideBegin(); + } else if (category == 'Hi ,I will go now') { + // <-- كان 'Hi ,I will go now'.tr if (Platform.isAndroid) { - notificationController.showNotification( - 'Trip is Begin'.tr, ''.tr, 'start'); - } - Get.find().getBeginRideFromDriver(); - // Get.snackbar('RideIsBegin', '', backgroundColor: AppColor.greenColor); - box.write(BoxName.passengerWalletTotal, '0'); - update(); - } else if (message.notification!.title! == 'Hi ,I will go now'.tr) { - // Get.snackbar('Hi ,I will go now', '', - // backgroundColor: AppColor.greenColor); - if (Platform.isAndroid) { - notificationController.showNotification( - 'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'ding'); + notificationController.showNotification(title, body, 'ding'); } update(); - } else if (message.notification!.title! == 'Hi ,I Arrive your site'.tr) { - if (Platform.isAndroid) { - notificationController.showNotification( - 'Hi ,I Arrive your site'.tr, ''.tr, 'ding'); - } - driverArrivePassengerDialoge(); - - update(); - } else if (message.notification!.title! == "Cancel Trip from driver") { + } else if (category == 'Hi ,I Arrive your site') { + // <-- كان 'Hi ,I Arrive your site'.tr + final controller = Get.find(); + // if (controller.currentRideState.value == RideState.driverApplied) { + Log.print('[FCM] السائق وصل. تغيير الحالة إلى driverArrived'); + controller.currentRideState.value = RideState.driverArrived; + // } + } else if (category == 'Cancel Trip from driver') { + // <-- كان "Cancel Trip from driver" Get.back(); if (Platform.isAndroid) { - notificationController.showNotification("Cancel Trip from driver".tr, - "We will look for a new driver.\nPlease wait.".tr, 'cancel'); + notificationController.showNotification(title, body, 'cancel'); } Get.defaultDialog( - title: "The driver canceled your ride.".tr, + title: "The driver canceled your ride.".tr, // العنوان المترجم للعرض middleText: "We will look for a new driver.\nPlease wait.".tr, confirm: MyElevatedButton( kolor: AppColor.greenColor, @@ -229,66 +217,42 @@ class FirebaseMessagesController extends GetxController { onPressed: () { Get.offAll(() => const MapPagePassenger()); }, - ) - // Get.find() - // .searchNewDriverAfterRejectingFromDriver(); - ); - } else if (message.notification!.title! == 'Driver Finish Trip'.tr) { - // الخطوة 1: استقبل البيانات وتحقق من وجودها + )); + } else if (category == 'Driver Finish Trip') { + // <-- كان 'Driver Finish Trip'.tr final rawData = message.data['DriverList']; - List driverList = []; // ابدأ بقائمة فارغة كإجراء وقائي - - // الخطوة 2: قم بفك تشفير البيانات بأمان + List driverList = []; if (rawData != null && rawData is String) { try { driverList = jsonDecode(rawData); - Log.print('Successfully decoded DriverList: $driverList'); } catch (e) { Log.print('Error decoding DriverList JSON: $e'); - // اترك القائمة فارغة في حالة حدوث خطأ } } else { Log.print('Error: DriverList data is null or not a String.'); } - // الخطوة 3: استخدم البيانات فقط إذا كانت القائمة تحتوي على العناصر المطلوبة - // هذا يمنع خطأ "RangeError" إذا كانت القائمة أقصر من المتوقع - if (driverList.length >= 4) { + if (driverList.length >= 3) { if (Platform.isAndroid) { notificationController.showNotification( - "Driver Finish Trip".tr, - '${'you will pay to Driver'.tr} ${driverList[3].toString()} \$', // تم تحسين طريقة عرض النص + title, + '${'you will pay to Driver'.tr} ${driverList[3].toString()} \$', 'tone1'); } - Get.find().stopRecording(); - - if ((double.tryParse( - box.read(BoxName.passengerWalletTotal).toString()) ?? - 0) < - 0) { - box.write(BoxName.passengerWalletTotal, 0); - } - + // ... (باقي كود المحفظة) ... Get.find().tripFinishedFromDriver(); - - NotificationController().showNotification( - 'Don’t forget your personal belongings.'.tr, - 'Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app' - .tr, - 'ding'); - + // ... (إشعار "لا تنسى متعلقاتك") ... Get.to(() => RateDriverFromPassenger(), arguments: { 'driverId': driverList[0].toString(), 'rideId': driverList[1].toString(), 'price': driverList[3].toString() }); } else { - Log.print( - 'Error: Decoded driverList does not have enough elements. Received: $driverList'); - // هنا يمكنك عرض رسالة خطأ للمستخدم إذا لزم الأمر + Log.print('Error: TRIP_FINISHED decoded list error.'); } - } else if (message.notification!.title! == "Finish Monitor".tr) { + } else if (category == 'Finish Monitor') { + // <-- كان "Finish Monitor".tr Get.defaultDialog( titleStyle: AppStyle.title, title: 'Trip finished '.tr, @@ -298,69 +262,7 @@ class FirebaseMessagesController extends GetxController { onPressed: () { Get.offAll(() => const MapPagePassenger()); })); - } - // else if (message.notification!.title! == "Trip Monitoring".tr) { - // Get.to(() => const TripMonitor()); - // } - else if (message.notification!.title! == 'Call Income') { - try { - var myListString = message.data['DriverList']; - var driverList = jsonDecode(myListString) as List; - // if (Platform.isAndroid) { - if (Platform.isAndroid) { - notificationController.showNotification( - 'Call Income'.tr, - message.notification!.body!, - 'iphone_ringtone', - ); - } - // } - // Assuming GetMaterialApp is initialized and context is valid for navigation - // Get.to(() => PassengerCallPage( - // channelName: driverList[1].toString(), - // token: driverList[0].toString(), - // remoteID: driverList[2].toString(), - // )); - } catch (e) {} - } else if (message.notification!.title! == 'Call Income from Driver'.tr) { - try { - var myListString = message.data['DriverList']; - var driverList = jsonDecode(myListString) as List; - // if (Platform.isAndroid) { - if (Platform.isAndroid) { - notificationController.showNotification( - 'Call Income'.tr, - message.notification!.body!, - 'iphone_ringtone', - ); - } - // Assuming GetMaterialApp is initialized and context is valid for navigation - // Get.to(() => PassengerCallPage( - // channelName: driverList[1].toString(), - // token: driverList[0].toString(), - // remoteID: driverList[2].toString(), - // )); - } catch (e) {} - } else if (message.notification!.title! == 'Call End'.tr) { - try { - var myListString = message.data['DriverList']; - var driverList = jsonDecode(myListString) as List; - if (Platform.isAndroid) { - notificationController.showNotification( - 'Call End'.tr, - message.notification!.body!, - 'ding', - ); - } - // Assuming GetMaterialApp is initialized and context is valid for navigation - // Get.off(const CallPage()); - } catch (e) {} - } else if (message.notification!.title! == 'Driver Cancelled Your Trip') { - // Get.snackbar( - // 'You will be pay the cost to driver or we will get it from you on next trip' - // .tr, - // 'message', - // backgroundColor: AppColor.redColor); + } else if (category == 'Driver Cancelled Your Trip') { if (Platform.isAndroid) { notificationController.showNotification( 'Driver Cancelled Your Trip'.tr, @@ -374,18 +276,10 @@ class FirebaseMessagesController extends GetxController { Get.find().restCounter(); Get.offAll(() => const MapPagePassenger()); } - // else if (message.notification!.title! == 'Order Applied') { - // Get.snackbar( - // "The order has been accepted by another driver." - // .tr, // Corrected grammar - // "Be more mindful next time to avoid dropping orders." - // .tr, // Improved sentence structure - // backgroundColor: AppColor.yellowColor, - // snackPosition: SnackPosition.BOTTOM, - // ); - // } + // ... (باقي الحالات مثل Call Income, Call End, إلخ) ... + // ... بنفس الطريقة ... - else if (message.notification!.title! == 'Order Applied'.tr) { + else if (category == 'Order Applied') { if (Platform.isAndroid) { notificationController.showNotification( 'The order Accepted by another Driver'.tr, @@ -395,6 +289,308 @@ class FirebaseMessagesController extends GetxController { } } } + // Future fireBaseTitles(RemoteMessage message) async { + // if (message.notification!.title! == 'Order'.tr) { + // Log.print('message: ${message}'); + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Order'.tr, message.notification!.body!, 'Order'); + // } + // } else // ... داخل معالج الإشعارات في تطبيق الراكب ... + + // if (message.notification!.title! == 'Accepted Ride') { + // // ... + + // // انظر هنا: قمنا بتغيير "passengerList" إلى "driverList" + // var driverListJson = message.data['driverList']; + + // // تأكد من أن البيانات ليست null قبل المتابعة + // if (driverListJson != null) { + // var myList = jsonDecode(driverListJson) as List; + // Log.print('myList: ${myList}'); + + // final controller = Get.find(); + + // // استدعاء الدالة الموحدة الجديدة التي أنشأناها + // await controller.processRideAcceptance( + // driverIdFromFCM: myList[0].toString(), + // rideIdFromFCM: myList[3].toString()); + // } else { + // Log.print( + // '❌ خطأ فادح: إشعار "Accepted Ride" وصل بدون بيانات (driverList is null)'); + // } + // } else if (message.notification!.title! == 'Promo'.tr) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Promo', 'Show latest promo'.tr, 'promo'); + // } + // Get.to(const PromosPassengerPage()); + // } else if (message.notification!.title! == 'Trip Monitoring'.tr) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Trip Monitoring'.tr, '', 'iphone_ringtone'); + // } + // var myListString = message.data['DriverList']; + // var myList = jsonDecode(myListString) as List; + // Get.toNamed('/tripmonitor', arguments: { + // 'rideId': myList[0].toString(), + // 'driverId': myList[1].toString(), + // }); + // } else if (message.notification!.title! == 'token change'.tr) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'token change'.tr, 'token change'.tr, 'cancel'); + // } + // GoogleSignInHelper.signOut(); + // } else if (message.notification!.title! == 'Driver Is Going To Passenger') { + // Get.find().isDriverInPassengerWay = true; + // Get.find().update(); + // if (Platform.isAndroid) { + // notificationController.showNotification('Driver is Going To You'.tr, + // 'Please stay on the picked point.'.tr, 'tone1'); + // } + // // Get.snackbar('Driver is Going To Passenger', '', + // // backgroundColor: AppColor.greenColor); + // } else if (message.notification!.title! == 'message From passenger') { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'message From passenger'.tr, ''.tr, 'ding'); + // } + // passengerDialog(message.notification!.body!); + + // update(); + // } else if (message.notification!.title! == 'message From Driver') { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'message From Driver'.tr, ''.tr, 'ding'); + // } + // passengerDialog(message.notification!.body!); + + // update(); + // } else // (هذا الكود في معالج الإشعارات لديك) + // if (message.notification!.title! == 'Trip is Begin') { + // Log.print('[FCM] استقبل إشعار "Trip is Begin".'); + + // // (تم حذف الإشعار المحلي من هنا، نُقل إلى الدالة الموحدة) + + // final controller = Get.find(); + + // // استدعاء حارس البوابة الجديد والآمن + // controller.processRideBegin(); + + // // (تم حذف كل الأوامر التالية من هنا) + // // Get.find().getBeginRideFromDriver(); + // // box.write(BoxName.passengerWalletTotal, '0'); + // // update(); + // } else if (message.notification!.title! == 'Hi ,I will go now'.tr) { + // // Get.snackbar('Hi ,I will go now', '', + // // backgroundColor: AppColor.greenColor); + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'ding'); + // } + // update(); + // } // ... داخل معالج الإشعارات (FCM Handler) ... + // if (message.notification!.title! == 'Hi ,I Arrive your site'.tr) { + // final controller = Get.find(); + + // // 1. التأكد أننا في الحالة الصحيحة (السائق كان في الطريق) + // if (controller.currentRideState.value == RideState.driverApplied) { + // Log.print('[FCM] السائق وصل. تغيير الحالة إلى driverArrived'); + + // // 2. تغيير الحالة فقط! + // controller.currentRideState.value = RideState.driverArrived; + // } + // } else if (message.notification!.title! == "Cancel Trip from driver") { + // Get.back(); + // if (Platform.isAndroid) { + // notificationController.showNotification("Cancel Trip from driver".tr, + // "We will look for a new driver.\nPlease wait.".tr, 'cancel'); + // } + // Get.defaultDialog( + // title: "The driver canceled your ride.".tr, + // middleText: "We will look for a new driver.\nPlease wait.".tr, + // confirm: MyElevatedButton( + // kolor: AppColor.greenColor, + // title: 'Ok'.tr, + // onPressed: () async { + // Get.back(); + // await Get.find() + // .reSearchAfterCanceledFromDriver(); + // }, + // ), + // cancel: MyElevatedButton( + // title: 'Cancel'.tr, + // kolor: AppColor.redColor, + // onPressed: () { + // Get.offAll(() => const MapPagePassenger()); + // }, + // ) + // // Get.find() + // // .searchNewDriverAfterRejectingFromDriver(); + // ); + // } else if (message.notification!.title! == 'Driver Finish Trip'.tr) { + // // الخطوة 1: استقبل البيانات وتحقق من وجودها + // final rawData = message.data['DriverList']; + // List driverList = []; // ابدأ بقائمة فارغة كإجراء وقائي + + // // الخطوة 2: قم بفك تشفير البيانات بأمان + // if (rawData != null && rawData is String) { + // try { + // driverList = jsonDecode(rawData); + // Log.print('Successfully decoded DriverList: $driverList'); + // } catch (e) { + // Log.print('Error decoding DriverList JSON: $e'); + // // اترك القائمة فارغة في حالة حدوث خطأ + // } + // } else { + // Log.print('Error: DriverList data is null or not a String.'); + // } + + // // الخطوة 3: استخدم البيانات فقط إذا كانت القائمة تحتوي على العناصر المطلوبة + // // هذا يمنع خطأ "RangeError" إذا كانت القائمة أقصر من المتوقع + // if (driverList.length >= 4) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // "Driver Finish Trip".tr, + // '${'you will pay to Driver'.tr} ${driverList[3].toString()} \$', // تم تحسين طريقة عرض النص + // 'tone1'); + // } + + // Get.find().stopRecording(); + + // if ((double.tryParse( + // box.read(BoxName.passengerWalletTotal).toString()) ?? + // 0) < + // 0) { + // box.write(BoxName.passengerWalletTotal, 0); + // } + + // Get.find().tripFinishedFromDriver(); + + // NotificationController().showNotification( + // 'Don’t forget your personal belongings.'.tr, + // 'Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app' + // .tr, + // 'ding'); + + // Get.to(() => RateDriverFromPassenger(), arguments: { + // 'driverId': driverList[0].toString(), + // 'rideId': driverList[1].toString(), + // 'price': driverList[3].toString() + // }); + // } else { + // Log.print( + // 'Error: Decoded driverList does not have enough elements. Received: $driverList'); + // // هنا يمكنك عرض رسالة خطأ للمستخدم إذا لزم الأمر + // } + // } else if (message.notification!.title! == "Finish Monitor".tr) { + // Get.defaultDialog( + // titleStyle: AppStyle.title, + // title: 'Trip finished '.tr, + // middleText: '', + // confirm: MyElevatedButton( + // title: 'Ok'.tr, + // onPressed: () { + // Get.offAll(() => const MapPagePassenger()); + // })); + // } + // // else if (message.notification!.title! == "Trip Monitoring".tr) { + // // Get.to(() => const TripMonitor()); + // // } + // else if (message.notification!.title! == 'Call Income') { + // try { + // var myListString = message.data['DriverList']; + // var driverList = jsonDecode(myListString) as List; + // // if (Platform.isAndroid) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Call Income'.tr, + // message.notification!.body!, + // 'iphone_ringtone', + // ); + // } + // // } + // // Assuming GetMaterialApp is initialized and context is valid for navigation + // // Get.to(() => PassengerCallPage( + // // channelName: driverList[1].toString(), + // // token: driverList[0].toString(), + // // remoteID: driverList[2].toString(), + // // )); + // } catch (e) {} + // } else if (message.notification!.title! == 'Call Income from Driver'.tr) { + // try { + // var myListString = message.data['DriverList']; + // var driverList = jsonDecode(myListString) as List; + // // if (Platform.isAndroid) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Call Income'.tr, + // message.notification!.body!, + // 'iphone_ringtone', + // ); + // } + // // Assuming GetMaterialApp is initialized and context is valid for navigation + // // Get.to(() => PassengerCallPage( + // // channelName: driverList[1].toString(), + // // token: driverList[0].toString(), + // // remoteID: driverList[2].toString(), + // // )); + // } catch (e) {} + // } else if (message.notification!.title! == 'Call End'.tr) { + // try { + // var myListString = message.data['DriverList']; + // var driverList = jsonDecode(myListString) as List; + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Call End'.tr, + // message.notification!.body!, + // 'ding', + // ); + // } + // // Assuming GetMaterialApp is initialized and context is valid for navigation + // // Get.off(const CallPage()); + // } catch (e) {} + // } else if (message.notification!.title! == 'Driver Cancelled Your Trip') { + // // Get.snackbar( + // // 'You will be pay the cost to driver or we will get it from you on next trip' + // // .tr, + // // 'message', + // // backgroundColor: AppColor.redColor); + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'Driver Cancelled Your Trip'.tr, + // 'you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet' + // .tr, + // 'cancel'); + // } + // box.write(BoxName.parentTripSelected, false); + // box.remove(BoxName.tokenParent); + + // Get.find().restCounter(); + // Get.offAll(() => const MapPagePassenger()); + // } + // // else if (message.notification!.title! == 'Order Applied') { + // // Get.snackbar( + // // "The order has been accepted by another driver." + // // .tr, // Corrected grammar + // // "Be more mindful next time to avoid dropping orders." + // // .tr, // Improved sentence structure + // // backgroundColor: AppColor.yellowColor, + // // snackPosition: SnackPosition.BOTTOM, + // // ); + // // } + + // else if (message.notification!.title! == 'Order Applied'.tr) { + // if (Platform.isAndroid) { + // notificationController.showNotification( + // 'The order Accepted by another Driver'.tr, + // 'We regret to inform you that another driver has accepted this order.' + // .tr, + // 'order'); + // } + // } + // } SnackbarController driverAppliedTripSnakBar() { return Get.snackbar( @@ -418,40 +614,6 @@ class FirebaseMessagesController extends GetxController { ); } - Future driverArrivePassengerDialoge() { - return Get.defaultDialog( - barrierDismissible: false, - title: 'Hi ,I Arrive your site'.tr, - titleStyle: AppStyle.title, - middleText: 'Please go to Car Driver'.tr, - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok I will go now.'.tr, - onPressed: () { - // sendNotificationToPassengerToken( - // 'Hi ,I will go now', - // 'I will go now'.tr, - // Get.find().driverToken, - // [], - // 'ding'); - NotificationService.sendNotification( - target: - Get.find().driverToken.toString(), - title: 'Hi ,I will go now'.tr, - body: 'I will go now'.tr, - isTopic: false, // Important: this is a token - tone: 'ding', - driverList: [], - ); - Get.find() - .startTimerDriverWaitPassenger5Minute(); - - Get.back(); - Get.find().remainingTime = 0; - Get.find().update(); - })); - } - Future passengerDialog(String message) { return Get.defaultDialog( barrierDismissible: false, @@ -500,246 +662,6 @@ class FirebaseMessagesController extends GetxController { kolor: AppColor.redColor, )); } - - // void sendNotificationAll(String title, body, tone) async { - // // Get the token you want to subtract. - // String token = box.read(BoxName.tokenFCM); - // tokens = box.read(BoxName.tokens); - // // Subtract the token from the list of tokens. - // tokens.remove(token); - - // // Save the list of tokens back to the box. - // // box.write(BoxName.tokens, tokens); - // tokens = box.read(BoxName.tokens); - // for (var i = 0; i < tokens.length; i++) { - // http - // .post( - // Uri.parse('https://fcm.googleapis.com/fcm/send'), - // headers: { - // 'Content-Type': 'application/json', - // 'Authorization': 'key=${AK.serverAPI}' - // }, - // body: jsonEncode({ - // 'message': { - // 'token': token, - // 'notification': { - // 'title': title, - // 'body': body, - // }, - // // 'data': { - // // 'DriverList': jsonEncode(data), - // // }, - // 'android': { - // 'priority': 'HIGH ', // Set priority to high - // 'notification': { - // 'sound': tone, - // }, - // }, - // 'apns': { - // 'headers': { - // 'apns-priority': '10', // Set APNs priority to 10 - // }, - // 'payload': { - // 'aps': { - // 'sound': tone, - // }, - // }, - // }, - // }, - // }), - // ) - // .whenComplete(() {}) - // .catchError((e) {}); - // } - // } - - // for (var i = 0; i < tokens.length; i++) { - // http - // .post(Uri.parse('https://fcm.googleapis.com/fcm/send'), - // headers: { - // 'Content-Type': 'application/json', - // 'Authorization': 'key=${storage.read(key: BoxName.serverAPI}' - // }, - // body: jsonEncode({ - // 'notification': { - // 'title': title, - // 'body': body, - // 'sound': 'true' - // }, - // 'priority': 'HIGH ', - // 'data': { - // 'click_action': 'FLUTTER_NOTIFICATION_CLICK', - // 'id': '1', - // 'status': 'done' - // }, - // 'to': tokens[i], - // })) - // .whenComplete(() {}) - // .catchError((e) { - // }); - // } - // } - - // late String serviceAccountKeyJson; - // '{"type": "service_account", "project_id": "intaleq-d48a7", "private_key_id": "d63a627dad96d0050c08a76c2920b1e48ddc4d38", "private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHgHWUIlGskFWT\\nkjBvSiAYzXz51NbyMtqlvq1rZaiokd/yzqcEsjgxcAEGap93gRu72cuJ7QzDOpec\\nXSmhQwaGrdDyGyuS5x8nBa9ea3QEUGKjk975OhgIDoaIX2YHjah+jf/p3CPvwovC\\n+qypLsErv5DtcFfKtHkL+Z8gKJojU3p0gP2cVLHlhodGG4767w1f70fIv5LmQRHh\\nE0x5GgjO7MfA1CJewgHDWzj9GTuTd9o3G5nF6ojn8H1EOWminNDrsHAagsplY7iV\\nNmdvGoIAg2kRt66y5k4Li7EiH3e2ILvomGvUe3ahxBTcyFAt7UuAC5aPTmB0OCtN\\n39vMkJGtAgMBAAECggEAQ/FoWcBMX4AyXNUzQJuWjcvhzbXiVE7kbwEez44qH+q6\\nQdeGQw+tGo0iFDzYvVrPhqzYaEs+hvib7Kk/xcdtYA2vNNzy/I9Q6TnC7V2b/+Ie\\njcYM8IUL7SaBQ811kon4gc07hDowVPXFImy7w8yEBjGyGmMhywumk+D6A/o/8Fph\\n3lGRzgYZ7K7+mXxDpJVFp8DwX+uqP/3wOzcITXE12GZpvB+re7TQTs01qjsSTJ3/\\nCZMC6CvwYr3BvJzvgrn2TNZ6N6yowHE2iJo/HnoY/DutiB1V0B2EAMgcy05ZUouH\\nnTTOMAyV5LdcxgCtzlz+meCuhV5SUtfSz27bnUluMwKBgQDz+qJM38NhUpW7tmxZ\\nQsYwlo3Zp2a38UV8VC4mNDM9jjsft9QRHShos7potlIvmn9ryxP87SGNZrW9xy/k\\ngvTbDXu65/TwCUa3HYFCC+eJ5S4bBK/ctFwn1sr5AFjxavY2VV6YHUIzGezo8Bsj\\n1R5IGy3UHreTWngDapJYpA3JQwKBgQDRVNK7UP/Qt4qovrTVlNJ5mHjpwk7VoKBC\\nV0yrfbYVjYETFRFMrsKkcwCTQ3uk3lEl/UzAt2vV6o4Ql8KDzYJ/8ZHHXp9Z2eK9\\nTgR2fOIaEh2JJUjyVAUtuJo7RFl61K3a080+ZGWuZCY6K+prGneFqGuJ7XTtveGy\\njIsZTUhSTwKBgQCS0n5/Qp1iYP+IsjQr1zpLnR6KH+p5wXEua75F8V3wqjo8UTUG\\ng4SA1b/VKfr1eMU7ij9iExYA8RFnvom8u248sLWH+fT1yq9KnS/fHijdXBTN35kx\\neTyIIQOOqz3bMqIuelttsRXYiL6AQ5Yhjywk+m4u27lfrK7SZ3zgaQF+3wKBgEBy\\nfgKfmHLY3z6+oAwVqos3LxrA8OaCcnSaTgeKR5HxI+kNFmtmbpSUt3ufTiTfMVqh\\n1oyKrA+LDDv9jSxpDCF57SjVb/gIxe8EYwlbv3zJUQCVUxUQWxvNduaCT44qhnAV\\nv13TKR78xGwqcxyQZHXo+VrYmaRMTn1bGcQrb/WvAoGAIWUnnGQsvf6SwPQ/7gXC\\nVAq4i3E+coLStVyPK552HVorKa7J+TQnNBGHjCaQhxfCgp59/4qeT5AizzQaMhuS\\noGiUwGeo4RY4A1EEGoUpUk3zWZfC+bAjHVDyIjfN0YfxobL6Sh/97N68PMzb6ppq\\nybvddSGGsqZgucSxkEhIdTw=\\n-----END PRIVATE KEY-----\\n", "client_email": "firebase-adminsdk-fbsvc@intaleq-d48a7.iam.gserviceaccount.com", "client_id": "100558924056484926665", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40intaleq-d48a7.iam.gserviceaccount.com", "universe_domain": "googleapis.com"}'; - @override - Future onInit() async { - super.onInit(); - // try { - // // var encryptedKey = Env.privateKeyFCM; - // // // Log.print('encryptedKey: ${encryptedKey}'); - // // serviceAccountKeyJson = - // // EncryptionHelper.instance.decryptData(encryptedKey); - // // Log.print('serviceAccountKeyJson: ${serviceAccountKeyJson}'); - // } catch (e) { - // print('🔴 Error decrypting FCM key: $e'); - // } - } - - // Future sendNotificationToDriverMAP( - // String title, String body, String token, List data, String tone, - // {int retryCount = 1}) async { - // try { - // if (serviceAccountKeyJson.isEmpty) { - // print("🔴 Error: Service Account Key is empty"); - // return; - // } - - // // Initialize AccessTokenManager - // final accessTokenManager = AccessTokenManager(serviceAccountKeyJson); - // // Log.print( - // // 'accessTokenManager: ${accessTokenManager.serviceAccountJsonKey}'); - - // // Obtain an OAuth 2.0 access token - // final accessToken = await accessTokenManager.getAccessToken(); - // // Log.print('accessToken: ${accessToken}'); - - // // Send the notification - // final response = await http.post( - // Uri.parse( - // 'https://fcm.googleapis.com/v1/projects/intaleq-d48a7/messages:send'), - // headers: { - // 'Content-Type': 'application/json', - // 'Authorization': 'Bearer $accessToken', - // }, - // body: jsonEncode({ - // 'message': { - // 'token': token, - // 'notification': { - // 'title': title, - // 'body': body, - // }, - // 'data': { - // 'DriverList': jsonEncode(data), - // }, - // 'android': { - // 'priority': 'HIGH ', // Set priority to high - // 'notification': { - // 'sound': tone, - // }, - // }, - // 'apns': { - // 'headers': { - // 'apns-priority': '10', // Set APNs priority to 10 - // }, - // 'payload': { - // 'aps': { - // 'sound': tone, - // }, - // }, - // }, - // }, - // }), - // ); - - // if (response.statusCode == 200) { - // print( - // 'Notification sent successfully. Status code: ${response.statusCode}'); - // // print('Response token: ${token}'); - // } else { - // print( - // 'Failed to send notification. Status code: ${response.statusCode}'); - // print('Response body: ${response.body}'); - // if (retryCount > 0) { - // print('Retrying... Attempts remaining: $retryCount'); - // await Future.delayed( - // Duration(seconds: 2)); // Optional delay before retrying - // return sendNotificationToDriverMAP(title, body, token, data, tone, - // retryCount: retryCount - 1); - // } - // } - // } catch (e) { - // print('Error sending notification: $e'); - // if (retryCount > 0) { - // print('Retrying... Attempts remaining: $retryCount'); - // await Future.delayed( - // Duration(seconds: 2)); // Optional delay before retrying - // return sendNotificationToDriverMAP(title, body, token, data, tone, - // retryCount: retryCount - 1); - // } - // } - // } - - // void sendNotificationToPassengerToken( - // String title, body, token, List map, String tone) async { - // try { - // if (serviceAccountKeyJson.isEmpty) { - // print("🔴 Error: Service Account Key is empty"); - // return; - // } - // // Initialize AccessTokenManager - // final accessTokenManager = AccessTokenManager(serviceAccountKeyJson); - - // // Obtain an OAuth 2.0 access token - // final accessToken = await accessTokenManager.getAccessToken(); - // // Log.print('accessToken: ${accessToken}'); - - // // Send the notification - // final response = await http.post( - // Uri.parse( - // 'https://fcm.googleapis.com/v1/projects/intaleq-d48a7/messages:send'), - // headers: { - // 'Content-Type': 'application/json', - // 'Authorization': 'Bearer $accessToken', - // }, - // body: jsonEncode({ - // 'message': { - // 'token': token, - // 'notification': { - // 'title': title, - // 'body': body, - // }, - // 'android': { - // 'priority': 'HIGH ', // Set priority to high - // 'notification': { - // 'sound': tone, - // }, - // }, - // 'apns': { - // 'headers': { - // 'apns-priority': '10', // Set APNs priority to 10 - // }, - // 'payload': { - // 'aps': { - // 'sound': tone, - // }, - // }, - // }, - // }, - // }), - // ); - - // if (response.statusCode == 200) { - // print('✅ Notification sent successfully!'); - // } else { - // print( - // '🔴 Failed to send notification. Status code: ${response.statusCode}'); - // print('Response body: ${response.body}'); - // } - // } catch (e) { - // print('🔴 Error sending notification: $e'); - // } - // } } class DriverTipWidget extends StatelessWidget { diff --git a/lib/controller/firebase/notification_service.dart b/lib/controller/firebase/notification_service.dart index 11b7e6b..233b7b2 100644 --- a/lib/controller/firebase/notification_service.dart +++ b/lib/controller/firebase/notification_service.dart @@ -1,3 +1,4 @@ +import 'package:Intaleq/print.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; @@ -5,11 +6,13 @@ class NotificationService { // استبدل هذا الرابط بالرابط الصحيح لملف PHP على السيرفر الخاص بك static const String _serverUrl = 'https://syria.intaleq.xyz/intaleq/fcm/send_fcm.php'; - + static const String _batchServerUrl = + 'https://syria.intaleq.xyz/intaleq/fcm/send_fcm_batch.php'; static Future sendNotification({ required String target, required String title, required String body, + required String? category, // <-- [الإضافة الأولى] String? tone, List? driverList, // <-- [تعديل 1] : إضافة المتغير الجديد bool isTopic = false, @@ -21,7 +24,10 @@ class NotificationService { 'body': body, 'isTopic': isTopic, }; - + if (category != null) { + payload['category'] = + category; // <-- [الإضافة الثانية] (النص الثابت للتحكم) + } // نضيف النغمة فقط إذا لم تكن فارغة if (tone != null) { payload['tone'] = tone; @@ -52,4 +58,56 @@ class NotificationService { print('❌ An error occurred while sending notification: $e'); } } + + /// [4] !! دالة جديدة مضافة !! + /// ترسل إشعاراً "مجمعاً" إلى قائمة من السائقين + static Future sendBatchNotification({ + required List targets, // <-- قائمة التوكينز + required String title, + required String body, + String? tone, + List? driverList, // <-- بيانات الرحلة (نفسها للجميع) + }) async { + // لا ترسل شيئاً إذا كانت القائمة فارغة + if (targets.isEmpty) { + Log.print('⚠️ [Batch] No targets to send to. Skipped.'); + return; + } + + try { + final Map payload = { + // "targets" بدلاً من "target" + 'targets': jsonEncode(targets), // تشفير قائمة التوكينز + 'title': title, + 'body': body, + }; + + if (tone != null) { + payload['tone'] = tone; + } + + // بيانات الرحلة (DriverList) + if (driverList != null) { + payload['driverList'] = jsonEncode(driverList); + } + + final response = await http.post( + Uri.parse(_batchServerUrl), // <-- !! تستخدم الرابط الجديد + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode(payload), + ); + + if (response.statusCode == 200) { + Log.print('✅ [Batch] Notifications sent successfully.'); + Log.print('Server Response: ${response.body}'); + } else { + Log.print('❌ [Batch] Failed to send. Status: ${response.statusCode}'); + Log.print('Server Error: ${response.body}'); + } + } catch (e) { + Log.print('❌ [Batch] An error occurred: $e'); + } + } } diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 6e40486..6e63ba5 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -17,9 +17,6 @@ import 'encrypt_decrypt.dart'; import 'upload_image.dart'; import 'dart:io'; -import 'package:jwt_decoder/jwt_decoder.dart'; - -import 'network/connection_check.dart'; import 'network/net_guard.dart'; class CRUD { @@ -364,29 +361,29 @@ class CRUD { } } - Future getTokenParent({ - required String link, - Map? payload, - }) async { - // Uses Basic Auth, so it's a separate implementation. - var url = Uri.parse( - link, - ); - var response = await http.post( - url, - body: payload, - headers: { - "Content-Type": "application/x-www-form-urlencoded", - 'Authorization': - 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', - }, - ); - if (response.statusCode == 200) { - return jsonDecode(response.body); - } - // Consider adding error handling here. - return null; - } + // Future getTokenParent({ + // required String link, + // Map? payload, + // }) async { + // // Uses Basic Auth, so it's a separate implementation. + // var url = Uri.parse( + // link, + // ); + // var response = await http.post( + // url, + // body: payload, + // headers: { + // "Content-Type": "application/x-www-form-urlencoded", + // 'Authorization': + // 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', + // }, + // ); + // if (response.statusCode == 200) { + // return jsonDecode(response.body); + // } + // // Consider adding error handling here. + // return null; + // } Future sendWhatsAppAuth(String to, String token) async { var res = await CRUD() diff --git a/lib/controller/functions/launch.dart b/lib/controller/functions/launch.dart index f80ab1f..e0c2a7e 100644 --- a/lib/controller/functions/launch.dart +++ b/lib/controller/functions/launch.dart @@ -8,11 +8,32 @@ void showInBrowser(String url) async { } Future makePhoneCall(String phoneNumber) async { + // 1. تنظيف الرقم (إزالة المسافات والفواصل) + String formattedNumber = phoneNumber.replaceAll(RegExp(r'\s+'), ''); + + // 2. التحقق من طول الرقم لتحديد طريقة التنسيق + if (formattedNumber.length > 6) { + // --- التعديل المطلوب --- + if (formattedNumber.startsWith('09')) { + // إذا كان يبدأ بـ 09 (رقم موبايل سوري محلي) + // نحذف أول خانة (الصفر) ونضيف +963 + formattedNumber = '+963${formattedNumber.substring(1)}'; + } else if (!formattedNumber.startsWith('+')) { + // إذا لم يكن يبدأ بـ + (ولم يكن يبدأ بـ 09)، نضيف + في البداية + // هذا للحفاظ على منطقك القديم للأرقام الدولية الأخرى + formattedNumber = '+$formattedNumber'; + } + } + + // 3. التنفيذ (Launch) final Uri launchUri = Uri( scheme: 'tel', - path: phoneNumber, + path: formattedNumber, ); - await launchUrl(launchUri); + + if (await canLaunchUrl(launchUri)) { + await launchUrl(launchUri); + } } void launchCommunication( diff --git a/lib/controller/functions/location_controller.dart b/lib/controller/functions/location_controller.dart index e6be0e2..d559fd0 100644 --- a/lib/controller/functions/location_controller.dart +++ b/lib/controller/functions/location_controller.dart @@ -1,148 +1,148 @@ -import 'dart:async'; +// import 'dart:async'; -import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:location/location.dart'; -import 'package:Intaleq/constant/box_name.dart'; -import 'package:Intaleq/constant/links.dart'; -import 'package:Intaleq/controller/functions/crud.dart'; -import 'package:Intaleq/controller/home/payment/captain_wallet_controller.dart'; -import 'package:Intaleq/main.dart'; +// import 'package:get/get.dart'; +// import 'package:google_maps_flutter/google_maps_flutter.dart'; +// import 'package:location/location.dart'; +// import 'package:Intaleq/constant/box_name.dart'; +// import 'package:Intaleq/constant/links.dart'; +// import 'package:Intaleq/controller/functions/crud.dart'; +// import 'package:Intaleq/controller/home/payment/captain_wallet_controller.dart'; +// import 'package:Intaleq/main.dart'; -// LocationController.dart -class LocationController extends GetxController { - LocationData? _currentLocation; - late Location location; - bool isLoading = false; - late double heading = 0; - late double accuracy = 0; - late double previousTime = 0; - late double latitude; - late double totalDistance = 0; - late double longitude; - late DateTime time; - late double speed = 0; - late double speedAccuracy = 0; - late double headingAccuracy = 0; - bool isActive = false; - late LatLng myLocation; - String totalPoints = '0'; - LocationData? get currentLocation => _currentLocation; - Timer? _locationTimer; +// // LocationController.dart +// class LocationController extends GetxController { +// LocationData? _currentLocation; +// late Location location; +// bool isLoading = false; +// late double heading = 0; +// late double accuracy = 0; +// late double previousTime = 0; +// late double latitude; +// late double totalDistance = 0; +// late double longitude; +// late DateTime time; +// late double speed = 0; +// late double speedAccuracy = 0; +// late double headingAccuracy = 0; +// bool isActive = false; +// late LatLng myLocation; +// String totalPoints = '0'; +// LocationData? get currentLocation => _currentLocation; +// Timer? _locationTimer; - @override - void onInit() async { - super.onInit(); - location = Location(); - getLocation(); - // startLocationUpdates(); +// @override +// void onInit() async { +// super.onInit(); +// location = Location(); +// getLocation(); +// // startLocationUpdates(); - totalPoints = Get.put(CaptainWalletController()).totalPoints; - } +// totalPoints = Get.put(CaptainWalletController()).totalPoints; +// } - Future startLocationUpdates() async { - if (box.read(BoxName.driverID) != null) { - _locationTimer = - Timer.periodic(const Duration(seconds: 5), (timer) async { - try { - totalPoints = Get.find().totalPoints; +// Future startLocationUpdates() async { +// if (box.read(BoxName.driverID) != null) { +// _locationTimer = +// Timer.periodic(const Duration(seconds: 5), (timer) async { +// try { +// totalPoints = Get.find().totalPoints; - // if (isActive) { - if (double.parse(totalPoints) > -300) { - await getLocation(); +// // if (isActive) { +// if (double.parse(totalPoints) > -300) { +// await getLocation(); - // if (box.read(BoxName.driverID) != null) { - await CRUD() - .post(link: AppLink.addCarsLocationByPassenger, payload: { - 'driver_id': box.read(BoxName.driverID).toString(), - 'latitude': myLocation.latitude.toString(), - 'longitude': myLocation.longitude.toString(), - 'heading': heading.toString(), - 'speed': (speed * 3.6).toStringAsFixed(1), - 'distance': totalDistance == 0 - ? '0' - : totalDistance < 1 - ? totalDistance.toStringAsFixed(3) - : totalDistance.toStringAsFixed(1), - 'status': box.read(BoxName.statusDriverLocation).toString() - }); - } +// // if (box.read(BoxName.driverID) != null) { +// await CRUD() +// .post(link: AppLink.addCarsLocationByPassenger, payload: { +// 'driver_id': box.read(BoxName.driverID).toString(), +// 'latitude': myLocation.latitude.toString(), +// 'longitude': myLocation.longitude.toString(), +// 'heading': heading.toString(), +// 'speed': (speed * 3.6).toStringAsFixed(1), +// 'distance': totalDistance == 0 +// ? '0' +// : totalDistance < 1 +// ? totalDistance.toStringAsFixed(3) +// : totalDistance.toStringAsFixed(1), +// 'status': box.read(BoxName.statusDriverLocation).toString() +// }); +// } - // } - } catch (e) { - // Handle the error gracefully - } - }); - } - } +// // } +// } catch (e) { +// // Handle the error gracefully +// } +// }); +// } +// } - void stopLocationUpdates() { - _locationTimer?.cancel(); - } +// void stopLocationUpdates() { +// _locationTimer?.cancel(); +// } - Future getLocation() async { - // isLoading = true; - // update(); - bool serviceEnabled; - PermissionStatus permissionGranted; +// Future getLocation() async { +// // isLoading = true; +// // update(); +// bool serviceEnabled; +// PermissionStatus permissionGranted; - // Check if location services are enabled - serviceEnabled = await location.serviceEnabled(); - if (!serviceEnabled) { - serviceEnabled = await location.requestService(); - if (!serviceEnabled) { - // Location services are still not enabled, handle the error - return; - } - } +// // Check if location services are enabled +// serviceEnabled = await location.serviceEnabled(); +// if (!serviceEnabled) { +// serviceEnabled = await location.requestService(); +// if (!serviceEnabled) { +// // Location services are still not enabled, handle the error +// return; +// } +// } - // Check if the app has permission to access location - permissionGranted = await location.hasPermission(); - if (permissionGranted == PermissionStatus.denied) { - permissionGranted = await location.requestPermission(); - if (permissionGranted != PermissionStatus.granted) { - // Location permission is still not granted, handle the error - return; - } - } +// // Check if the app has permission to access location +// permissionGranted = await location.hasPermission(); +// if (permissionGranted == PermissionStatus.denied) { +// permissionGranted = await location.requestPermission(); +// if (permissionGranted != PermissionStatus.granted) { +// // Location permission is still not granted, handle the error +// return; +// } +// } - // Configure location accuracy - // LocationAccuracy desiredAccuracy = LocationAccuracy.high; +// // Configure location accuracy +// // LocationAccuracy desiredAccuracy = LocationAccuracy.high; - // Get the current location - LocationData _locationData = await location.getLocation(); - myLocation = - (_locationData.latitude != null && _locationData.longitude != null - ? LatLng(_locationData.latitude!, _locationData.longitude!) - : null)!; - speed = _locationData.speed!; - heading = _locationData.heading!; -// Calculate the distance between the current location and the previous location - // if (Get.find().rideId == 'rideId') { - // if (previousTime > 0) { - // double distance = calculateDistanceInKmPerHour( - // previousTime, _locationData.time, speed); - // totalDistance += distance; - // } +// // Get the current location +// LocationData _locationData = await location.getLocation(); +// myLocation = +// (_locationData.latitude != null && _locationData.longitude != null +// ? LatLng(_locationData.latitude!, _locationData.longitude!) +// : null)!; +// speed = _locationData.speed!; +// heading = _locationData.heading!; +// // Calculate the distance between the current location and the previous location +// // if (Get.find().rideId == 'rideId') { +// // if (previousTime > 0) { +// // double distance = calculateDistanceInKmPerHour( +// // previousTime, _locationData.time, speed); +// // totalDistance += distance; +// // } - // previousTime = _locationData.time!; - // } - // Print location details - // isLoading = false; - update(); - } +// // previousTime = _locationData.time!; +// // } +// // Print location details +// // isLoading = false; +// update(); +// } - double calculateDistanceInKmPerHour( - double? startTime, double? endTime, double speedInMetersPerSecond) { - // Calculate the time difference in hours - double timeDifferenceInHours = (endTime! - startTime!) / 1000 / 3600; +// double calculateDistanceInKmPerHour( +// double? startTime, double? endTime, double speedInMetersPerSecond) { +// // Calculate the time difference in hours +// double timeDifferenceInHours = (endTime! - startTime!) / 1000 / 3600; - // Convert speed to kilometers per hour - double speedInKmPerHour = speedInMetersPerSecond * 3.6; +// // Convert speed to kilometers per hour +// double speedInKmPerHour = speedInMetersPerSecond * 3.6; - // Calculate the distance in kilometers - double distanceInKilometers = speedInKmPerHour * timeDifferenceInHours; +// // Calculate the distance in kilometers +// double distanceInKilometers = speedInKmPerHour * timeDifferenceInHours; - return distanceInKilometers; - } -} +// return distanceInKilometers; +// } +// } diff --git a/lib/controller/home/contact_us_controller.dart b/lib/controller/home/contact_us_controller.dart index afc879f..48dbe29 100644 --- a/lib/controller/home/contact_us_controller.dart +++ b/lib/controller/home/contact_us_controller.dart @@ -1,3 +1,4 @@ +import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; @@ -7,10 +8,9 @@ import '../../../constant/colors.dart'; import '../functions/launch.dart'; class ContactUsController extends GetxController { - final String phone1 = '+201018805430'; - final String phone2 = '+201080182934'; - final TimeOfDay workStartTime = const TimeOfDay(hour: 12, minute: 0); - final TimeOfDay workEndTime = const TimeOfDay(hour: 19, minute: 0); + /// WORKING HOURS (10:00 → 16:00) + final TimeOfDay workStartTime = const TimeOfDay(hour: 10, minute: 0); + final TimeOfDay workEndTime = const TimeOfDay(hour: 16, minute: 0); bool _isWithinWorkTime(TimeOfDay now) { return (now.hour > workStartTime.hour || @@ -20,8 +20,23 @@ class ContactUsController extends GetxController { (now.hour == workEndTime.hour && now.minute <= workEndTime.minute)); } + /// PHONE LIST (USED FOR CALLS + WHATSAPP) + final List phoneNumbers = [ + '+963952475734', + '+963952475740', + '+963952475742' + ]; + + /// RANDOM PHONE SELECTOR + String getRandomPhone() { + final random = Random(); + return phoneNumbers[random.nextInt(phoneNumbers.length)]; + } + + /// SHOW DIALOG void showContactDialog(BuildContext context) { TimeOfDay now = TimeOfDay.now(); + bool withinHours = _isWithinWorkTime(now); showCupertinoModalPopup( context: context, @@ -29,25 +44,34 @@ class ContactUsController extends GetxController { title: Text('Contact Us'.tr), message: Text('Choose a contact option'.tr), actions: [ - if (_isWithinWorkTime(now)) + /// 📞 CALL (RANDOM) — ONLY DURING WORK HOURS + if (withinHours) CupertinoActionSheetAction( - child: Text(phone1), - onPressed: () => makePhoneCall( - phone1, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Icon(CupertinoIcons.phone), + Text('Call Support'.tr), + ], ), + onPressed: () { + final phone = getRandomPhone(); + makePhoneCall(phone); + }, ), - if (_isWithinWorkTime(now)) - CupertinoActionSheetAction( - child: Text(phone2), - onPressed: () => makePhoneCall(phone2), - ), - if (!_isWithinWorkTime(now)) + + /// ⛔ OUTSIDE WORK HOURS — SHOW INFO + if (!withinHours) CupertinoActionSheetAction( child: Text( - 'Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.' - .tr), + 'Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.' + .tr, + textAlign: TextAlign.center, + ), onPressed: () => Navigator.pop(context), ), + + /// 💬 WHATSAPP (RANDOM) CupertinoActionSheetAction( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, @@ -59,15 +83,21 @@ class ContactUsController extends GetxController { Text('Send WhatsApp Message'.tr), ], ), - onPressed: () => - launchCommunication('whatsapp', phone1, 'Hello'.tr), + onPressed: () { + final phone = getRandomPhone(); + launchCommunication('whatsapp', phone, 'Hello'.tr); + }, ), + + /// 📧 EMAIL CupertinoActionSheetAction( child: Text('Send Email'.tr), - onPressed: () => - launchCommunication('email', 'support@sefer.live', 'Hello'.tr), + onPressed: () => launchCommunication( + 'email', 'support@intaleqapp.com', 'Hello'.tr), ), ], + + /// ❌ CANCEL BUTTON cancelButton: CupertinoActionSheetAction( child: Text('Cancel'.tr), onPressed: () => Navigator.pop(context), diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 0db38f3..509eb98 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -5,6 +5,9 @@ import 'dart:math' show Random, atan2, cos, max, min, pi, pow, sin, sqrt; import 'dart:math' as math; import 'dart:ui'; import 'dart:convert'; +import 'package:crypto/crypto.dart'; +import 'package:Intaleq/views/Rate/rate_captain.dart'; +import 'package:Intaleq/views/Rate/rating_driver_bottom.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; @@ -32,9 +35,11 @@ import 'package:Intaleq/controller/home/points_for_rider_controller.dart'; import 'package:Intaleq/views/home/map_widget.dart/form_serch_multiy_point.dart'; import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; +import '../../constant/country_polygons.dart'; import '../../constant/info.dart'; import '../../constant/links.dart'; import '../../constant/table_names.dart'; +import '../../env/env.dart'; import '../../main.dart'; import '../../models/model/locations.dart'; import '../../models/model/painter_copoun.dart'; @@ -54,11 +59,23 @@ import '../functions/launch.dart'; import '../functions/package_info.dart'; import '../functions/secure_storage.dart'; import '../payment/payment_controller.dart'; +import '../rate/rate_conroller.dart'; import 'decode_polyline_isolate.dart'; import 'deep_link_controller.dart'; import 'device_tier.dart'; import 'vip_waitting_page.dart'; +enum RideState { + noRide, // لا يوجد رحلة جارية، عرض واجهة البحث + cancelled, // تم إلغاء الرحلة + preCheckReview, // يوجد رحلة منتهية، تحقق من التقييم + searching, // جاري البحث عن كابتن + driverApplied, // تم قبول الطلب + driverArrived, // وصل السائق + inProgress, // الرحلة بدأت بالفعل + finished, // انتهت الرحلة (سيتم تحويلها إلى preCheckReview) +} + class MapPassengerController extends GetxController { bool isLoading = true; TextEditingController placeDestinationController = TextEditingController(); @@ -269,6 +286,812 @@ class MapPassengerController extends GetxController { late double costDistance = 0; late double distance = 0; late double duration = 0; + bool _isDriverAppliedLogicExecuted = false; // فلاج لمنع التنفيذ المتكرر + bool _isDriverArrivedLogicExecuted = false; + bool _isRideBeginLogicExecuted = false; + DateTime? _searchStartTime; // لتتبع مدة البحث + DateTime? _lastDriversNotifyTime; // لتتبع آخر مرة تم إرسال إشعار للسائقين + final int _masterTimerIntervalSeconds = 5; // فاصل زمني ثابت للمؤقت الرئيسي + final int _searchTimeoutSeconds = 60; // مهلة البحث قبل عرض خيار زيادة السعر + final int _notifyDriversIntervalSeconds = + 25; // إرسال إشعار للسائقين كل 25 ثانية + // --- إضافة جديدة: متغيرات لإدارة البحث المتوسع --- + int _currentSearchPhase = 0; // لتتبع المرحلة الحالية للبحث + // قائمة بأنصاف الأقطار (بالأمتار) لكل مرحلة + final List _searchRadii = [ + 3000, + 4500, + 6000 + ]; // 0 ثانية، 30 ثانية، 60 ثانية + // المدة الزمنية لكل مرحلة بحث (بالثواني) + final int _searchPhaseDurationSeconds = 30; + // المهلة الإجمالية للبحث قبل عرض خيار زيادة السعر + final int _totalSearchTimeoutSeconds = 90; // 90 ثانية +// --- noRide throttling --- + int _noRideSearchCount = 0; + final int _noRideMaxTries = 3; // نفذ البحث 6 مرات فقط + final int _noRideIntervalSec = 5; // بين كل محاولة وأخرى 5 ثواني + DateTime? _noRideNextAllowed; // متى نسمح بالمحاولة التالية + bool _noRideSearchCapped = false; // وصلنا للحد وتوقفنا + // ============== new design to manage ride state ============== + // === 1. حالة الرحلة والمؤقت الرئيسي (Single Source of Truth) === + Rx currentRideState = RideState.noRide.obs; + Timer? _masterTimer; + final int _pollingIntervalSeconds = 4; // فاصل زمني موحد للاستعلام + + void _startMasterTimer() { + // نضمن أن مؤقت واحد فقط يعمل في أي وقت + _masterTimer?.cancel(); + _masterTimer = + Timer.periodic(Duration(seconds: _pollingIntervalSeconds), (_) { + _handleRideState(currentRideState.value); + }); + } + + void stopAllTimers() { + _masterTimer?.cancel(); + // إذا كان لديك مؤقتات زمنية (مثل عداد الـ 5 دقائق للانتظار) قم بإلغائها هنا أيضاً + cancelTimerToPassengerFromDriverAfterApplied(); + // ... + } + + final int _maxNoRideSearch = 3; // عدد المرات القصوى + final int _noRideDelaySeconds = 6; // الفاصل الزمني بين كل بحث +// + // + // !!! يرجى استبدال الدالة القديمة بالكامل بهذه الدالة الجديدة !!! + // + // + + Future _handleRideState(RideState state) async { + Log.print('Handling state: $state'); + + int effectivePollingInterval = _pollingIntervalSeconds; + + switch (state) { + case RideState.noRide: + final now = DateTime.now(); + if (_noRideSearchCount >= _noRideMaxTries) { + if (!_noRideSearchCapped) { + _noRideSearchCapped = true; + Log.print('[noRide] search capped at $_noRideMaxTries attempts'); + } + break; + } + if (_noRideNextAllowed != null && now.isBefore(_noRideNextAllowed!)) { + break; + } + _noRideSearchCount++; + Log.print('_noRideSearchCount: ${_noRideSearchCount}'); + _noRideNextAllowed = now.add(Duration(seconds: _noRideIntervalSec)); + String currentCarType = box.read(BoxName.carType) ?? 'yet'; + getCarsLocationByPassengerAndReloadMarker(currentCarType, 3000); + getNearestDriverByPassengerLocation(); + break; + + case RideState.cancelled: + Log.print('[handleRideState] Ride cancelled. Stopping polling.'); + stopAllTimers(); + effectivePollingInterval = 3600; + break; + + case RideState.preCheckReview: + stopAllTimers(); + _checkLastRideForReview(); + break; + + case RideState.searching: + effectivePollingInterval = 5; + + // 1. التحقق من حالة الطلب (هل قبله أحد؟) + try { + String statusFromServer = await getRideStatus(rideId); + if (statusFromServer == 'Apply' || statusFromServer == 'Applied') { + await processRideAcceptance(); + break; + } + } catch (e) { + Log.print('Error polling getRideStatus: $e'); + } + + final now = DateTime.now(); + final int elapsedSeconds = now.difference(_searchStartTime!).inSeconds; + + // انتهاء وقت البحث الكلي + if (elapsedSeconds > _totalSearchTimeoutSeconds) { + stopAllTimers(); + currentRideState.value = RideState.noRide; + isSearchingWindow = false; + update(); + _showIncreaseFeeDialog(); + break; + } + + // 2. إدارة مراحل البحث (توسيع النطاق) + // السيناريو الجديد: لا نقوم بالقصف العشوائي، نرسل بناء على المرحلة أو مرور وقت كافٍ لدخول سائقين جدد + + int targetPhase = + (elapsedSeconds / _searchPhaseDurationSeconds).floor(); + if (targetPhase >= _searchRadii.length) { + targetPhase = _searchRadii.length - 1; + } + + // هل تغيرت المرحلة (توسع النطاق)؟ أو هل مر 10 ثواني منذ آخر محاولة إرسال؟ + // هذا يمنع إرسال الإشعار في كل دورة (كل 5 ثواني) ويقلل الازعاج + bool isNewPhase = targetPhase > _currentSearchPhase; + bool timeToScanForNewDrivers = + (elapsedSeconds % 15 == 0); // كل 15 ثانية نفحص الدخول الجديد + + if (isNewPhase || timeToScanForNewDrivers || elapsedSeconds < 5) { + _currentSearchPhase = targetPhase; + int currentRadius = _searchRadii[_currentSearchPhase]; + + Log.print( + '[Search Logic] Scanning for drivers. Phase: $_currentSearchPhase, Radius: $currentRadius'); + // استدعاء دالة الإشعار الذكية + _findAndNotifyNearestDrivers(currentRadius); + } + + // تحديث نصوص الواجهة + if (elapsedSeconds < 5) { + driversStatusForSearchWindow = 'Your order is being prepared'.tr; + } else if (elapsedSeconds < 15) { + driversStatusForSearchWindow = 'Your order sent to drivers'.tr; + } else { + driversStatusForSearchWindow = + 'The drivers are reviewing your request'.tr; + } + update(); + break; + + case RideState.driverApplied: + effectivePollingInterval = 10; + if (!_isDriverAppliedLogicExecuted) { + Log.print('[handleRideState] Execution driverApplied logic.'); + rideAppliedFromDriver(true); + _isDriverAppliedLogicExecuted = true; + } + try { + String statusFromServer = await getRideStatus(rideId); + if (statusFromServer == 'Arrived') { + currentRideState.value = RideState.driverArrived; + break; + } else if (statusFromServer == 'Begin' || + statusFromServer == 'inProgress') { + processRideBegin(); + break; + } + } catch (e) { + Log.print('Error polling for Arrived/Begin status: $e'); + } + getDriverCarsLocationToPassengerAfterApplied(); + break; + + case RideState.driverArrived: + if (!_isDriverArrivedLogicExecuted) { + _isDriverArrivedLogicExecuted = true; + startTimerDriverWaitPassenger5Minute(); + driverArrivePassengerDialoge(); + } + effectivePollingInterval = 8; + break; + + case RideState.inProgress: + effectivePollingInterval = 11; + try { + String statusFromServer = await getRideStatus(rideId); + if (statusFromServer == 'Finished' || + statusFromServer == 'finished') { + if (currentRideState.value == RideState.inProgress) { + currentRideState.value = RideState.finished; + break; + } + } + } catch (e) { + Log.print('Error polling for Finished status: $e'); + } + + if (!_isRideBeginLogicExecuted) { + _isRideBeginLogicExecuted = true; + _executeBeginRideLogic(); + } + getDriverCarsLocationToPassengerAfterApplied(); + break; + + case RideState.finished: + tripFinishedFromDriver(); + stopAllTimers(); + effectivePollingInterval = 3600; + break; + } + + if (_masterTimer?.tick != effectivePollingInterval) { + _masterTimer?.cancel(); + _masterTimer = + Timer.periodic(Duration(seconds: effectivePollingInterval), (_) { + _handleRideState(currentRideState.value); + }); + } + } +// Future _handleRideState(RideState state) async { +// Log.print('Handling state: $state'); + +// int effectivePollingInterval = _pollingIntervalSeconds; + +// switch (state) { +// // 1. تم فصل "noRide" عن "cancelled" +// case RideState.noRide: +// final now = DateTime.now(); +// if (_noRideSearchCount >= _noRideMaxTries) { +// if (!_noRideSearchCapped) { +// _noRideSearchCapped = true; +// Log.print('[noRide] search capped at $_noRideMaxTries attempts'); +// } +// break; +// } +// if (_noRideNextAllowed != null && now.isBefore(_noRideNextAllowed!)) { +// break; +// } +// _noRideSearchCount++; +// Log.print('_noRideSearchCount: ${_noRideSearchCount}'); +// _noRideNextAllowed = now.add(Duration(seconds: _noRideIntervalSec)); +// String currentCarType = box.read(BoxName.carType) ?? 'yet'; +// getCarsLocationByPassengerAndReloadMarker(currentCarType, 3000); +// getNearestDriverByPassengerLocation(); +// break; + +// // 2. "cancelled" أصبحت حالة منفصلة توقف كل شيء +// case RideState.cancelled: +// Log.print('[handleRideState] Ride cancelled. Stopping polling.'); +// stopAllTimers(); // أوقف المؤقت الرئيسي +// effectivePollingInterval = 3600; // إيقاف فعلي للمؤقت +// break; + +// case RideState.preCheckReview: +// stopAllTimers(); +// _checkLastRideForReview(); +// break; + +// case RideState.searching: +// // ... (منطق هذا الكيس سيبقى كما هو تماماً - لا تغيير هنا) +// effectivePollingInterval = 3; +// try { +// String statusFromServer = await getRideStatus(rideId); +// if (statusFromServer == 'Apply' || statusFromServer == 'Applied') { +// await processRideAcceptance(); +// break; +// } +// } catch (e) { +// Log.print('Error polling getRideStatus: $e'); +// } +// final now = DateTime.now(); +// final int elapsedSeconds = now.difference(_searchStartTime!).inSeconds; +// if (elapsedSeconds > _totalSearchTimeoutSeconds) { +// stopAllTimers(); +// currentRideState.value = RideState.noRide; +// isSearchingWindow = false; +// update(); +// _showIncreaseFeeDialog(); +// break; +// } +// int targetPhase = +// (elapsedSeconds / _searchPhaseDurationSeconds).floor(); +// if (targetPhase >= _searchRadii.length) { +// targetPhase = _searchRadii.length - 1; +// } +// bool needsNewSearch = false; +// if (targetPhase > _currentSearchPhase) { +// _currentSearchPhase = targetPhase; +// needsNewSearch = true; +// Log.print( +// '[Search] Expanding to Phase $_currentSearchPhase (Radius: ${_searchRadii[_currentSearchPhase]}m)'); +// } else if (elapsedSeconds < effectivePollingInterval) { +// needsNewSearch = true; +// Log.print('[Search] Starting Phase 0 (Radius: ${_searchRadii[0]}m)'); +// } +// // if (needsNewSearch) { +// int currentRadius = _searchRadii[_currentSearchPhase]; +// // _findAndNotifyNearestDrivers(currentRadius); +// // } +// // (3) [!! التعديل الجوهري !!] +// // احذف 'if (needsNewSearch)' وقم بالاستدعاء مباشرة +// // هذا سيضمن أنه في كل دورة (كل 4 ثوانٍ)، يتم إعادة جلب السائقين +// Log.print( +// '[Search Polling] Finding new drivers in Phase $_currentSearchPhase (Radius: ${currentRadius}m)'); +// _findAndNotifyNearestDrivers(currentRadius); +// if (elapsedSeconds < 5) { +// driversStatusForSearchWindow = 'Your order is being prepared'.tr; +// } else if (elapsedSeconds < 15) { +// driversStatusForSearchWindow = 'Your order sent to drivers'.tr; +// } else { +// driversStatusForSearchWindow = +// 'The drivers are reviewing your request'.tr; +// } +// update(); +// break; + +// // ... +// case RideState.driverApplied: +// effectivePollingInterval = 10; // فاصل زمني مناسب +// if (!_isDriverAppliedLogicExecuted) { +// Log.print('[handleRideState] تنفيذ منطق "driverApplied" لأول مرة.'); +// rideAppliedFromDriver(true); // هذا يشغل عداد وصول السائق +// _isDriverAppliedLogicExecuted = true; +// } + +// // [!! إضافة مهمة !!] +// // استمر في التحقق من حالة الرحلة (Status) +// try { +// String statusFromServer = await getRideStatus(rideId); +// if (statusFromServer == 'Arrived') { +// Log.print('[Polling] اكتشف "Arrived". تغيير الحالة.'); +// currentRideState.value = RideState.driverArrived; +// break; // اخرج (سيتم تفعيل case driverArrived في الدورة القادمة) +// } else if (statusFromServer == 'Begin' || +// statusFromServer == 'inProgress') { +// Log.print('[Polling] اكتشف "Begin" (تجاوز حالة الوصول).'); +// // استدعاء حارس البوابة الآمن +// processRideBegin(); // هذه الدالة ستغير الحالة إلى inProgress +// break; +// } +// } catch (e) { +// Log.print('Error polling for Arrived/Begin status: $e'); +// } +// // [!! نهاية الإضافة !!] + +// getDriverCarsLocationToPassengerAfterApplied(); // استمر بجلب الموقع أيضاً +// break; +// // ... + +// case RideState.driverArrived: +// if (!_isDriverArrivedLogicExecuted) { +// _isDriverArrivedLogicExecuted = true; +// Log.print( +// '[handleRideState] اكتشف "driverArrived". بدء عداد 5 دقائق.'); +// startTimerDriverWaitPassenger5Minute(); +// driverArrivePassengerDialoge(); +// } +// effectivePollingInterval = 8; // يبقى يعمل لاكتشاف "inProgress" +// break; + +// case RideState.inProgress: +// effectivePollingInterval = 11; + +// // 3. إضافة "بحث دوري" (Polling) لاكتشاف إنهاء الرحلة +// try { +// String statusFromServer = await getRideStatus(rideId); +// if (statusFromServer == 'Finished' || +// statusFromServer == 'finished') { +// if (currentRideState.value == RideState.inProgress) { +// Log.print('[Polling] اكتشف "Finished". تغيير الحالة.'); +// currentRideState.value = RideState.finished; // غيّر الحالة +// break; // اخرج (سيتم تفعيل case finished في الدورة القادمة) +// } +// } +// } catch (e) { +// Log.print('Error polling for Finished status: $e'); +// } +// // --- نهاية الإضافة --- + +// if (!_isRideBeginLogicExecuted) { +// _isRideBeginLogicExecuted = true; +// _executeBeginRideLogic(); +// } +// getDriverCarsLocationToPassengerAfterApplied(); // استمر في تتبع الموقع +// break; + +// // 4. "finished" أصبحت حالة نهائية آمنة +// case RideState.finished: +// // إشعار FCM (الذي يملك بيانات السعر) هو المسؤول عن الانتقال للتقييم +// // هذه الحالة هي مجرد "نقطة توقف" للمؤقت. +// Log.print('[handleRideState] Ride is Finished. Stopping all activity.'); + +// // نستدعي هذه لضمان تصفير الواجهة، حتى لو فاز البحث الدوري +// tripFinishedFromDriver(); // (سنقوم بتعديل هذه الدالة في الخطوة 3) + +// stopAllTimers(); +// effectivePollingInterval = 3600; // إيقاف فعلي +// break; +// } + +// if (_masterTimer?.tick != effectivePollingInterval) { +// _masterTimer?.cancel(); +// _masterTimer = +// Timer.periodic(Duration(seconds: effectivePollingInterval), (_) { +// _handleRideState(currentRideState.value); +// }); +// } +// } +// // === 4. المنطق الجديد: فحص الرحلة الأخيرة للتقييم === + + Future _checkInitialRideStatus() async { + // 1. جلب الحالة من السيرفر (باستخدام getRideStatusFromStartApp) + await getRideStatusFromStartApp(); + String _status = rideStatusFromStartApp['data']['status']; + // Log.print('rideStatusFromStartApp: ${rideStatusFromStartApp}'); + // Log.print('_status: ${_status}'); + + if (_status == 'waiting' || _status == 'Apply' || _status == 'Begin') { + // رحلة جارية + rideId = rideStatusFromStartApp['data']['rideId'].toString(); + currentRideState.value = _status == 'waiting' + ? RideState.searching + : _status == 'Apply' + ? RideState.driverApplied + : _status == 'Begin' + ? RideState.inProgress + : _status == 'Cancel' + ? RideState.cancelled + : RideState.noRide; + } else if (_status == 'Finished') { + // رحلة منتهية/ملغاة + if (rideStatusFromStartApp['data']['needsReview'] == 1) { + currentRideState.value = RideState.preCheckReview; + } else { + currentRideState.value = RideState.noRide; + } + } else { + currentRideState.value = RideState.noRide; + } + + // بدء المعالجة الفورية + _handleRideState(currentRideState.value); + } + + Future _checkLastRideForReview() async { + // (يتم استدعاؤها مرة واحدة عند الدخول لحالة preCheckReview) + // 1. استعلام السيرفر للتأكد من الحاجة للتقييم + getRideStatusFromStartApp(); + String needsReview = + rideStatusFromStartApp['data']['needsReview'].toString(); + + if (needsReview == '1') { + // 2. إظهار Bottom Sheet للتقييم (إجبار الراكب على التقييم) + Get.to(() => RatingDriverBottomSheet(), arguments: { + 'driverId': rideStatusFromStartApp['data']['driver_id'].toString(), + 'rideId': rideStatusFromStartApp['data']['rideId'].toString(), + 'driverName': rideStatusFromStartApp['data']['driverName'], + 'price': rideStatusFromStartApp['data']['price'], + }); + // showRatingScreen(); + print('>>> Showing forced Rating Bottom Sheet for ride: $rideId'); + + // بمجرد انتهاء التقييم، يتم تعيين الحالة إلى NO_RIDE + // onRatingSubmitted: () { + // currentRideState.value = RideState.noRide; + // _startMasterTimer(); // إعادة تشغيل المؤقت لحالة NO_RIDE + // } + } else { + // لا تحتاج تقييم، العودة لحالة لا رحلة + currentRideState.value = RideState.noRide; + _startMasterTimer(); // إعادة تشغيل المؤقت لحالة NO_RIDE + } + } + + // [داخل MapPassengerController] + +// (افترض وجود هذه الدالة لديك بالفعل) + // === 5. دوال التغيير في الحالة التي تستدعى من واجهة المستخدم === + + // void startSearchingForDriver() { + // confirmRideForAllDriverAvailable(); + // currentRideState.value = RideState.searching; + // _startMasterTimer(); + // } + + /// هذه هي الدالة التي يتم استدعاؤها من الواجهة عند ضغط المستخدم على زر تأكيد الطلب + + void startSearchingForDriver() async { + isSearchingWindow = true; + update(); + + bool rideCreated = await postRideDetailsToServer(); + if (!rideCreated) { + isSearchingWindow = false; + update(); + return; + } + + await _addRideToWaitingTable(); + + Log.print('[startSearchingForDriver] Starting fresh search sequence.'); + + // تصفير القائمة هنا ضروري لأنها رحلة جديدة + notifiedDrivers.clear(); + + _searchStartTime = DateTime.now(); + _lastDriversNotifyTime = null; + _currentSearchPhase = 0; + _isDriverAppliedLogicExecuted = false; + _isDriverArrivedLogicExecuted = false; + _isRideBeginLogicExecuted = false; + + // تنفيذ البحث الأولي فوراً + await _findAndNotifyNearestDrivers(_searchRadii[0]); + + currentRideState.value = RideState.searching; + isSearchingWindow = true; + update(); + _startMasterTimer(); + } + + /// دالة جديدة للبحث عن السائقين وإرسال الإشعارات لهم + // تم التعديل: الآن تقبل نصف القطر (radius) + /// [!! إصلاح خطأ البيلود !!] + /// تم التعديل: العودة إلى إرسال إشعارات فردية (لكل سائق) + /// لإرسال "البيلود" الصحيح الذي يتوقعه تطبيق السائق + Future _findAndNotifyNearestDrivers(int radius) async { + Log.print('[Notify Logic] Finding drivers within $radius meters...'); + + // 1. جلب السائقين وتحديث الماركر + // ملاحظة: تأكد أن هذه الدالة تعيد true/false لتدل على النجاح + await getCarsLocationByPassengerAndReloadMarker( + box.read(BoxName.carType), radius); + + // التأكد من صحة البيانات + if (dataCarsLocationByPassenger == null || + dataCarsLocationByPassenger == 'failure' || + dataCarsLocationByPassenger['message'] == null) { + Log.print('[Notify Logic] No drivers found or API failure.'); + return; + } + + int newDriversNotified = 0; + var driversList = dataCarsLocationByPassenger['message']; + + if (driversList is! List) { + Log.print('[Notify Logic] Drivers data is not a list.'); + return; + } + + // 2. المرور على كل سائق + for (var driverData in driversList) { + // حماية من البيانات الناقصة + if (driverData['driver_id'] == null || driverData['token'] == null) { + continue; + } + + String driverId = driverData['driver_id'].toString(); + String driverToken = driverData['token'].toString(); + + // تجاهل التوكن الفارغ أو غير الصالح + if (driverToken.isEmpty || driverToken == 'null') continue; + + // 3. التحقق من القائمة المرجعية (المنع الصارم للتكرار) + if (!notifiedDrivers.contains(driverId)) { + // إضافة السائق للقائمة فوراً لمنع تكرار الإرسال في الدورات القادمة + notifiedDrivers.add(driverId); + newDriversNotified++; + + // 4. بناء البيلود وإرسال الإشعار + try { + final body = constructNotificationBody(driverData); + + Log.print('[Notify Logic] Sending New Order to Driver ID: $driverId'); + + NotificationService.sendNotification( + target: driverToken, + title: 'Order', + body: endNameAddress, // عنوان الوجهة كنص مختصر + isTopic: false, + tone: 'tone1', + category: 'Order', + driverList: body); + } catch (e) { + Log.print('[Notify Logic] Error sending to driver $driverId: $e'); + // في حال فشل الإرسال، هل تريد حذفه من القائمة ليحاول مرة أخرى؟ + // يفضل عدم الحذف لتجنب الإزعاج، إلا إذا كان خطأ شبكة مؤقت. + } + } else { + // Log.print('[Notify Logic] Driver $driverId already notified. Skipping.'); + } + } + Log.print( + '[Notify Logic] Cycle finished. Sent to $newDriversNotified NEW drivers.'); + } + + /// دالة لإظهار النافذة المنبثقة لزيادة السعر + void _showIncreaseFeeDialog() { + Get.dialog( + CupertinoAlertDialog( + title: Text("No drivers accepted your request yet".tr), + content: Text( + "Increasing the fare might attract more drivers. Would you like to increase the price?" + .tr), + actions: [ + CupertinoDialogAction( + child: Text("Cancel Ride".tr, + style: const TextStyle(color: AppColor.redColor)), + onPressed: () { + Get.back(); + changeCancelRidePageShow(); + // cancelRide(); // دالة إلغاء الرحلة + }, + ), + CupertinoDialogAction( + child: Text("Increase Fare".tr, + style: const TextStyle(color: AppColor.greenColor)), + onPressed: () { + Get.back(); + // هنا يمكنك عرض نافذة أخرى لإدخال السعر الجديد + // وبعدها استدعاء الدالة التالية + // كمثال، سنزيد السعر بنسبة 10% + double newPrice = totalPassenger * 1.10; + increasePriceAndRestartSearch(newPrice); + }, + ), + ], + ), + barrierDismissible: false, + ); + } + + /// دالة لتحديث السعر وإعادة بدء البحث + Future increasePriceAndRestartSearch(double newPrice) async { + totalPassenger = newPrice; + update(); + + await CRUD().post(link: AppLink.updateRides, payload: { + "id": rideId, + "price": newPrice.toStringAsFixed(2), + }); + CRUD().post(link: "${AppLink.server}/ride/rides/update.php", payload: { + "id": rideId, + "price": newPrice.toStringAsFixed(2), + }); + + // تصفير القائمة لأن السعر تغير، ويجب إبلاغ الجميع (حتى من وصله الإشعار سابقاً) + Log.print( + '[increasePrice] Price changed. Clearing notified list to resend.'); + notifiedDrivers.clear(); + + _searchStartTime = DateTime.now(); + _currentSearchPhase = 0; + + isSearchingWindow = true; + update(); + + _startMasterTimer(); + } + + /// (دالة جديدة موحدة) + /// هذه هي الدالة الوحيدة المسؤولة عن بدء عملية قبول الرحلة. + /// يتم استدعاؤها إما من إشعار Firebase أو من البحث الدوري (Polling). + /// هي تحتوي على "حارس البوابة" لمنع تضارب السباق. + Future processRideAcceptance( + {String? driverIdFromFCM, String? rideIdFromFCM}) async { + // 1. حارس البوابة (منع السباق) + // هل ما زلنا في حالة البحث؟ + if (currentRideState.value != RideState.searching) { + Log.print( + '[processRideAcceptance] تم الحظر: الحالة ليست searching، تم قبول الرحلة مسبقاً.'); + return; // اخرج فوراً. العملية تمت بالفعل. + } + +// getDriverCarsLocationToPassengerAfterApplied(); + // 2. فزنا بالسباق! قم بتغيير الحالة فوراً + // هذا السطر يضمن أن أي استدعاء آخر (من الإشعار أو البحث) سيفشل في الشرط أعلاه + currentRideState.value = RideState.driverApplied; + Log.print('[processRideAcceptance] نجح: تغيير الحالة إلى driverApplied.'); + + // 3. تحديث البيانات (كما في كود الإشعار الخاص بك) + // إذا كان الاستدعاء من الإشعار، استخدم البيانات الممررة + if (driverIdFromFCM != null) { + driverId = driverIdFromFCM; + } + if (rideIdFromFCM != null) { + rideId = rideIdFromFCM; + } + // (ملاحظة: إذا كان الاستدعاء من البحث الدوري، فإن 'rideId' معروف مسبقاً) + await getUpdatedRideForDriverApply(rideId); + // 4. تحديث واجهة المستخدم (كما في كود الإشعار) + statusRide = 'Apply'; + isSearchingWindow = false; + update(); // إخفاء نافذة البحث وتحديث الواجهة + + // 5. إظهار الإشعار المحلي (توحيد المنطق) + // (نقلنا هذا من معالج الإشعارات إلى هنا) + if (Get.isRegistered()) { + Get.find().showNotification( + 'Accepted Ride'.tr, 'Driver Accepted the Ride for You'.tr, 'ding'); + } + + // 6. !! تم الحذف !! + // await rideAppliedFromDriver(true); <-- (تم حذف هذا السطر) + // الآن هذه الدالة آمنة ولا تشغل أي تايمرات. + } + + Future driverArrivePassengerDialoge() { + return Get.defaultDialog( + barrierDismissible: false, + title: 'Hi ,I Arrive your site'.tr, + titleStyle: AppStyle.title, + middleText: 'Please go to Car Driver'.tr, + middleTextStyle: AppStyle.title, + confirm: MyElevatedButton( + title: 'Ok I will go now.'.tr, + onPressed: () { + NotificationService.sendNotification( + target: driverToken.toString(), + title: 'Hi ,I will go now'.tr, + body: 'I will go now'.tr, + isTopic: false, // Important: this is a token + tone: 'ding', + driverList: [], + category: 'Hi ,I will go now', + ); + + Get.back(); + remainingTime = 0; + update(); + })); + } + + /// (دالة خاصة جديدة) + /// تحتوي على كل المنطق الفعلي لبدء الرحلة. + void _executeBeginRideLogic() { + Log.print('[executeBeginRideLogic] تنفيذ منطق بدء الرحلة...'); + + // 1. تصفير كل عدادات ما قبل الرحلة + timeToPassengerFromDriverAfterApplied = 0; + remainingTime = 0; + remainingTimeToPassengerFromDriverAfterApplied = 0; + remainingTimeDriverWaitPassenger5Minute = 0; + + // 2. تحديث الحالة والواجهة + rideTimerBegin = true; + statusRide = 'Begin'; + isDriverInPassengerWay = false; + isDriverArrivePassenger = false; // لإخفاء واجهة "السائق وصل" + + // 3. (من كود الإشعار الخاص بك) + box.write(BoxName.passengerWalletTotal, '0'); + update(); // تحديث الواجهة قبل بدء المؤقتات + + // 4. بدء مؤقتات الرحلة الفعلية + rideIsBeginPassengerTimer(); // مؤقت عداد مدة الرحلة + runWhenRideIsBegin(); // مؤقت تتبع موقع السائق أثناء الرحلة + + // 5. إشعار الراكب (من كود الإشعار الخاص بك) + NotificationController().showNotification( + 'Trip is Begin'.tr, + 'The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey' + .tr, + 'start'); + } + + /// (دالة جديدة موحدة) + /// حارس البوابة الآمن لبدء الرحلة. تمنع تضارب السباق. + // + // + // !!! يرجى استبدال الدالة القديمة بالكامل بهذه الدالة الجديدة !!! + // + // + + /// (دالة جديدة موحدة) + /// حارس البوابة الآمن لبدء الرحلة. تمنع تضارب السباق. + void processRideBegin() { + // [!! تعديل رقم 3: حل مشكلة "تم الحظر" !!] + // اقبل بدء الرحلة إذا كانت الحالة (وصل) أو (قَبِل) + // هذا يضمن أنه إذا فاتنا إشعار "الوصول" واستلمنا "البدء" مباشرة، فإنه سيعمل + if (currentRideState.value != RideState.driverArrived && + currentRideState.value != RideState.driverApplied) { + Log.print( + '[processRideBegin] تم الحظر: الحالة ليست driverArrived أو driverApplied.'); + return; + } + + // تأكد من تغيير الحالة فقط إذا لم تكن كذلك بالفعل + if (currentRideState.value != RideState.inProgress) { + currentRideState.value = RideState.inProgress; + Log.print('[processRideBegin] نجح: تغيير الحالة إلى inProgress.'); + } + + // لا تقم بتشغيل أي منطق هنا + // المنطق الفعلي (_executeBeginRideLogic) سيتم استدعاؤه بواسطة + // المؤقت الرئيسي (_handleRideState) عند اكتشاف حالة inProgress + // هذا يضمن أنه يعمل مرة واحدة فقط وبشكل آمن + } late Duration durationToAdd; late DateTime newTime = DateTime.now(); @@ -406,41 +1229,33 @@ class MapPassengerController extends GetxController { "order_id": rideId.toString(), // Convert to String "status": 'waiting' }); - if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { - CRUD().post( - link: "${AppLink.endPoint}/ride/driver_order/update.php", - payload: { - "order_id": rideId.toString(), // Convert to String - "status": 'waiting' - }); - } + await CRUD().post(link: AppLink.updateRides, payload: { "id": rideId.toString(), // Convert to String "status": 'waiting' }); - if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { - CRUD().post( - link: "${AppLink.endPoint}/ride/rides/update.php", - payload: { - "id": rideId.toString(), // Convert to String - "status": 'waiting' - }); - } + CRUD().post(link: AppLink.updateWaitingTrip, payload: { "id": rideId.toString(), // Convert to String "status": 'wait' }); - if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { - CRUD().post( - link: - "${AppLink.endPoint}/ride/notificationCaptain/updateWaitingTrip.php", - payload: { - "id": rideId.toString(), // Convert to String - "status": 'wait' - }); - } - tick = 0; + CRUD().post( + link: "${AppLink.endPoint}/ride/rides/update.php", + payload: { + "id": rideId.toString(), // Convert to String + "status": 'waiting' + }); + // if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { + CRUD().post( + link: + "${AppLink.endPoint}/ride/notificationCaptain/updateWaitingTrip.php", + payload: { + "id": rideId.toString(), // Convert to String + "status": 'wait' + }); } + tick = 0; + // } await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 4000); // confirmRideForAllDriverAvailable(); @@ -597,16 +1412,49 @@ class MapPassengerController extends GetxController { launchCommunication('sms', to, message); } - void sendWhatsapp(String to) async { - // Get the driver's phone number. - // String driverPhone = dataCarsLocationByPassenger['message'][carsOrder]['phone'].toString(); + String formatSyrianPhone(String phone) { + // Remove spaces and + + phone = phone.replaceAll(' ', '').replaceAll('+', ''); - // Format the message. + // If starts with 00963 → remove 00 → 963 + if (phone.startsWith('00963')) { + phone = phone.replaceFirst('00963', '963'); + } + + // If starts with 0963 (common mistake) → fix it + if (phone.startsWith('0963')) { + phone = phone.replaceFirst('0963', '963'); + } + + // If starts with 963 (already correct) + if (phone.startsWith('963')) { + return phone; // nothing to do + } + + // If starts with 09 → remove leading 0 → add 963 + if (phone.startsWith('09')) { + return '963' + phone.substring(1); // 9xxxxxxxxx + } + + // If starts with 9xxxxxxxxx (no country code) + if (phone.startsWith('9') && phone.length == 9) { + return '963' + phone; + } + + // Otherwise return raw phone + return phone; + } + + void sendWhatsapp(String to) async { + // Normalize phone number before sending + String formattedPhone = formatSyrianPhone(to); + + // Message body String message = '${'${'Hi! This is'.tr} ${(box.read(BoxName.name).toString().split(' ')[0]).toString()}.\n${' I am using'.tr}'} ${AppInformation.appName}${' to ride with'.tr} $passengerName${' as the driver.'.tr} $passengerName \n${'is driving a '.tr}$model\n${' with license plate '.tr}$licensePlate.\n${' I am currently located at '.tr} https://www.google.com/maps/place/${passengerLocation.latitude},${passengerLocation.longitude}.\n${' If you need to reach me, please contact the driver directly at'.tr}\n\n $driverPhone.'; - // Launch the URL to send the WhatsApp message. - launchCommunication('whatsapp', to, message); + // Send WhatsApp message + launchCommunication('whatsapp', formattedPhone, message); } void changeCancelRidePageShow() { @@ -634,44 +1482,6 @@ class MapPassengerController extends GetxController { return distance2; } - // bool isTimerFromDriverToPassengerAfterAppliedRunning = true; - // int beginRideInterval = 4; // Interval in seconds for getBeginRideFromDriver - - // void startTimerFromDriverToPassengerAfterApplied() async { - // int secondsElapsed = 0; - - // while (secondsElapsed <= timeToPassengerFromDriverAfterApplied && - // isTimerFromDriverToPassengerAfterAppliedRunning) { - // await Future.delayed(const Duration(seconds: 1)); - // secondsElapsed++; - - // progressTimerToPassengerFromDriverAfterApplied = - // secondsElapsed / timeToPassengerFromDriverAfterApplied; - // remainingTimeToPassengerFromDriverAfterApplied = - // timeToPassengerFromDriverAfterApplied - secondsElapsed; - - // if (remainingTimeToPassengerFromDriverAfterApplied < 59) { - // if (rideTimerBegin == false) { - // rideTimerBegin = true; - // } - // } - - // // Call getBeginRideFromDriver every 4 seconds - // if (secondsElapsed % beginRideInterval == 0) { - // getBeginRideFromDriver(); - // uploadPassengerLocation(); - // } - - // int minutes = - // (remainingTimeToPassengerFromDriverAfterApplied / 60).floor(); - // int seconds = remainingTimeToPassengerFromDriverAfterApplied % 60; - // stringRemainingTimeToPassenger = - // '$minutes:${seconds.toString().padLeft(2, '0')}'; - - // update(); - // } - // } - StreamController _timerStreamController = StreamController(); Stream get timerStream => _timerStreamController.stream; bool isTimerFromDriverToPassengerAfterAppliedRunning = true; @@ -679,53 +1489,62 @@ class MapPassengerController extends GetxController { int beginRideInterval = 4; // Interval in seconds for getBeginRideFromDriver void startTimerFromDriverToPassengerAfterApplied() { - if (isTimerRunning) return; // Prevent duplicate streams + if (isTimerRunning) return; isTimerRunning = true; int secondsElapsed = 0; - // Start the stream + // استدعاء فوري لأول مرة + getDriverCarsLocationToPassengerAfterApplied(); + Timer.periodic(const Duration(seconds: 1), (timer) { + // شروط الإيقاف if (secondsElapsed > timeToPassengerFromDriverAfterApplied || !isTimerFromDriverToPassengerAfterAppliedRunning) { timer.cancel(); isTimerRunning = false; - _timerStreamController.close(); // Close the stream when done + if (!_timerStreamController.isClosed) { + _timerStreamController.close(); + } return; } secondsElapsed++; - _timerStreamController.add(secondsElapsed); // Emit elapsed time + if (!_timerStreamController.isClosed) { + _timerStreamController.add(secondsElapsed); + } - // Calculate progress and remaining time - progressTimerToPassengerFromDriverAfterApplied = - secondsElapsed / timeToPassengerFromDriverAfterApplied; + // حسابات الوقت للواجهة remainingTimeToPassengerFromDriverAfterApplied = timeToPassengerFromDriverAfterApplied - secondsElapsed; - // Update remaining time as string + // حماية من القيم السالبة + if (remainingTimeToPassengerFromDriverAfterApplied < 0) + remainingTimeToPassengerFromDriverAfterApplied = 0; + int minutes = (remainingTimeToPassengerFromDriverAfterApplied / 60).floor(); int seconds = remainingTimeToPassengerFromDriverAfterApplied % 60; stringRemainingTimeToPassenger = '$minutes:${seconds.toString().padLeft(2, '0')}'; - if (remainingTimeToPassengerFromDriverAfterApplied < 59 && - !rideTimerBegin) { - rideTimerBegin = true; - } - - // Call periodic functions + // كل 4 ثواني، نحدث موقع السائق ونعيد الرسم if (secondsElapsed % beginRideInterval == 0) { + // 1. تحقق من حالة الرحلة (هل بدأت؟) getBeginRideFromDriver(); + + // 2. ارفع موقع الراكب uploadPassengerLocation(); + + // 3. الأهم: جلب موقع السائق وتحديث الخريطة والمسار + // لا نحتاج لعمل await هنا حتى لا نعطل عداد الثواني + getDriverCarsLocationToPassengerAfterApplied(); + } else { + // تحديث الواجهة فقط للعداد في الثواني التي لا نطلب فيها الموقع + update(); } - - update(); // Notify listeners }); - } - - // void startTimerFromDriverToPassengerAfterApplied() async { + } // void startTimerFromDriverToPassengerAfterApplied() async { // if (isTimerRunning) return; // Exit if timer is already running // isTimerRunning = true; // Set the flag to true @@ -771,13 +1590,53 @@ class MapPassengerController extends GetxController { } void startTimerDriverWaitPassenger5Minute() async { + // 1. [مهم] إيقاف المؤقت السابق (مؤقت تتبع وصول السائق) stopTimerFromDriverToPassengerAfterApplied(); + isTimerRunning = false; // (إذا كنت تستخدم فلاج للتحكم بالمؤقت السابق) + + // 2. تحديث حالة الواجهة فوراً isDriverArrivePassenger = true; isDriverInPassengerWay = false; timeToPassengerFromDriverAfterApplied = 0; update(); + + Log.print('[startTimerDriverWaitPassenger5Minute] بدأ عداد الـ 5 دقائق.'); + + // 3. بدء عداد الخمس دقائق (300 ثانية) for (int i = 0; i <= 300; i++) { - await Future.delayed(const Duration(seconds: 1)); + // 4. [حارس السباق 1] التحقق من الحالة + // إذا فاز إشعار FCM (FCM Winner) وتغيرت الحالة، أوقف هذا العداد فوراً. + if (currentRideState.value != RideState.driverArrived) { + Log.print( + '[startTimerDriverWaitPassenger5Minute] إيقاف العد: الحالة تغيرت (FCM فاز).'); + break; // اخرج من loop الخمس دقائق + } + + // 5. [البحث الدوري 2] التحقق من السيرفر (كل 6 ثوانٍ) + if (i % 6 == 0 && i > 0) { + // (نتخطى الثانية صفر) + try { + var res = await CRUD().get( + link: AppLink.getRideStatusBegin, payload: {'ride_id': rideId}); + + if (res != 'failure') { + var decode = jsonDecode(res); + if (decode['data']['status'] == 'Begin') { + Log.print( + '[startTimerDriverWaitPassenger5Minute] اكتشف "Begin" (Polling فاز).'); + + // 6. استدعاء حارس البوابة الآمن + processRideBegin(); + + break; // اخرج من loop الخمس دقائق + } + } + } catch (e) { + Log.print('خطأ أثناء البحث الدوري عن بدء الرحلة: $e'); + } + } + + // 7. تحديث واجهة المستخدم (العداد) progressTimerDriverWaitPassenger5Minute = i / 300; remainingTimeDriverWaitPassenger5Minute = 300 - i; @@ -787,7 +1646,13 @@ class MapPassengerController extends GetxController { '$minutes:${seconds.toString().padLeft(2, '0')}'; update(); + + // 8. الانتظار ثانية واحدة + await Future.delayed(const Duration(seconds: 1)); } + + Log.print( + '[startTimerDriverWaitPassenger5Minute] انتهى (إما بالوقت أو ببدء الرحلة).'); } // Create a StreamController to manage the timer values @@ -977,57 +1842,45 @@ class MapPassengerController extends GetxController { } void tripFinishedFromDriver() { + // هذه الدالة الآن مسؤولة فقط عن تصفير الواجهة + // معالج الإشعار (FCM) هو المسؤول عن الانتقال لصفحة التقييم + Log.print('[tripFinishedFromDriver] Resetting UI flags for finished ride.'); + isRideFinished = true; rideTimerBegin = false; statusRideVip = 'Finished'; + statusRide = 'Finished'; // لضمان التناسق box.write(BoxName.arrivalTime, ''); remainingTimeTimerRideBegin = 0; - box.write(BoxName.passengerWalletTotal, '0'); + + // (ملاحظة: لقد أبقيت على منطق المحفظة في معالج الإشعار لأنه مرتبط بالسعر) + // box.write(BoxName.passengerWalletTotal, '0'); // تم نقله إلى FCM + update(); + + // إرسال إشعار للوالدين (إذا كان مفعلاً) if (box.read(BoxName.parentTripSelected) == true) { NotificationService.sendNotification( + category: "Finish Monitor", target: box.read(BoxName.tokenParent), title: "Finish Monitor".tr, body: 'Finish Monitor'.tr, - isTopic: false, // Important: this is a token + isTopic: false, tone: 'tone1', ); box.write(BoxName.parentTripSelected, false); box.remove(BoxName.tokenParent); } + + // ---!! تم حذف الانتقال من هنا لمنع الازدواجية !! --- + // Get.to(() => RateDriverFromPassenger(), arguments: { + // 'driverId': driverId.toString(), + // 'rideId': rideId.toString(), + // 'price': costForDriver.toString() + // }); + // --- نهاية الحذف --- } - // bool isBeginRideFromDriver = false; - // void getBeginRideFromDriver() async { - // try { - // if (isBeginRideFromDriver) return; // Prevent duplicate streams - // isBeginRideFromDriver = true; - // var res = await CRUD() - // .get(link: AppLink.getRideStatusBegin, payload: {'ride_id': rideId}); - // if (res != 'failure') { - // var decode = jsonDecode(res); - - // // if (decode['data']['status'] != 'Apply') { - // if (decode['data']['status'] == 'Begin') { - // timeToPassengerFromDriverAfterApplied = 0; - // remainingTime = 0; - // remainingTimeToPassengerFromDriverAfterApplied = 0; - // remainingTimeDriverWaitPassenger5Minute = 0; - // rideTimerBegin = true; - // statusRide = 'Begin'; - // isDriverInPassengerWay = false; - // isDriverArrivePassenger = false; - // update(); - // // isCancelRidePageShown = true; - // rideIsBeginPassengerTimer(); - // runWhenRideIsBegin(); - // } else {} - // } - // } catch (e) { - // // Handle the error or perform any necessary actions - // } - // } - StreamController _beginRideStreamController = StreamController.broadcast(); Stream get beginRideStream => _beginRideStreamController.stream; @@ -1108,44 +1961,43 @@ class MapPassengerController extends GetxController { } Map rideStatusFromStartApp = {}; + bool isStartAppHasRide = false; getRideStatusFromStartApp() async { try { var res = await CRUD().get( link: AppLink.getRideStatusFromStartApp, payload: {'passenger_id': box.read(BoxName.passengerID)}); - print(res); - print('1070'); + // print(res); + Log.print('rideStatusFromStartApp: ${res}'); + // print('1070'); if (res == 'failure') { + rideStatusFromStartApp = { + 'data': {'status': 'NoRide', 'needsReview': false} + }; + isStartAppHasRide = false; print( "No rides found for the given passenger ID within the last hour."); } rideStatusFromStartApp = jsonDecode(res); - if (rideStatusFromStartApp['data']['status'] == 'Begin') { - statusRide = 'Begin'; + if (rideStatusFromStartApp['data']['status'] == 'Begin' || + rideStatusFromStartApp['data']['status'] == 'Apply' || + rideStatusFromStartApp['data']['status'] == 'Applied') { + statusRide = rideStatusFromStartApp['data']['status']; + isStartAppHasRide = true; + RideState.inProgress; driverId = rideStatusFromStartApp['data']['driver_id']; passengerName = rideStatusFromStartApp['data']['driverName']; driverRate = rideStatusFromStartApp['data']['rateDriver'].toString(); statusRideFromStart = true; - // DateTime endTime = - // DateTime.parse(rideStatusFromStartApp['data']['endtime']); - // DateTime rideTimeStart = - // DateTime.parse(rideStatusFromStartApp['data']['rideTimeStart']); - // - // // Calculate the new end time by adding the duration to the rideTimeStart - // DateTime newEndTime = rideTimeStart.add( - // Duration(seconds: endTime.difference(rideTimeStart).inSeconds)); - // - // // Save the new end time in a variable - // var newEndTimeVariable = newEndTime.toString(); + update(); Map tripData = box.read(BoxName.tripData) as Map; - String pointsString = - (tripData["routes"][0]["overview_polyline"]["points"]); - + final String pointsString = tripData['polyline']; List decodedPoints = await compute(decodePolylineIsolate, pointsString); + // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); for (int i = 0; i < decodedPoints.length; i++) { polylineCoordinates.add(decodedPoints[i]); @@ -1167,7 +2019,7 @@ class MapPassengerController extends GetxController { isDriverArrivePassenger = false; // update(); // isCancelRidePageShown = true; - durationToAdd = tripData['routes'][0]['legs'][0]['duration']['value']; + durationToAdd = tripData['distance_m']; rideIsBeginPassengerTimer(); runWhenRideIsBegin(); update(); @@ -1379,24 +2231,34 @@ class MapPassengerController extends GetxController { Set notifiedDrivers = {}; - addRideToNotificationDriverAvailable() async { - await CRUD().post(link: AppLink.addWaitingRide, payload: { - 'id': rideId.toString(), - 'start_location': - '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', - 'end_location': - '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', - "date": DateTime.now().toString(), - "time": DateTime.now().toString(), - "price": totalPassenger.toStringAsFixed(2), - 'passenger_id': box.read(BoxName.passengerID).toString(), - 'status': 'waiting', - 'carType': box.read(BoxName.carType), - 'passengerRate': passengerRate.toStringAsFixed(2), - 'price_for_passenger': totalME.toStringAsFixed(2), - 'distance': distance.toStringAsFixed(1), - 'duration': duration.toStringAsFixed(1), - }); + /// [إضافة جديدة] + /// دالة مخصصة لإضافة الرحلة إلى جدول الانتظار (waiting_ride) + Future _addRideToWaitingTable() async { + try { + await CRUD().post(link: AppLink.addWaitingRide, payload: { + 'id': rideId.toString(), + "start_location": + '${startLocation.latitude},${startLocation.longitude}', + "end_location": '${endLocation.latitude},${endLocation.longitude}', + // 'start_location': + // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', + // 'end_location': + // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', + "date": DateTime.now().toString(), + "time": DateTime.now().toString(), + "price": totalPassenger.toStringAsFixed(2), + 'passenger_id': box.read(BoxName.passengerID).toString(), + 'status': 'waiting', // الحالة الرئيسية لجدول الانتظار + 'carType': box.read(BoxName.carType), + 'passengerRate': passengerRate.toStringAsFixed(2), + 'price_for_passenger': totalME.toStringAsFixed(2), + 'distance': distance.toStringAsFixed(1), + 'duration': duration.toStringAsFixed(1), + }); + Log.print('[WaitingTable] Ride $rideId added to waiting_ride table.'); + } catch (e) { + Log.print('Error adding ride to waiting_ride table: $e'); + } } // Future confirmRideForAllDriverAvailable1() async { @@ -1777,58 +2639,58 @@ class MapPassengerController extends GetxController { // }); // } - showAndResearchForCaptain() { - Get.snackbar( - "No Captain Accepted Your Order".tr, - "We are looking for a captain but the price may increase to let a captain accept" - .tr, - duration: const Duration(seconds: 5), - backgroundColor: AppColor.yellowColor, - ); - isSearchingWindow == true; - update(); - } + // showAndResearchForCaptain() { + // Get.snackbar( + // "No Captain Accepted Your Order".tr, + // "We are looking for a captain but the price may increase to let a captain accept" + // .tr, + // duration: const Duration(seconds: 5), + // backgroundColor: AppColor.yellowColor, + // ); + // isSearchingWindow == true; + // update(); + // } String driversStatusForSearchWindow = ''; - Future confirmRideForAllDriverAvailable() async { - bool driversFound = false; - const maxAttempts = 8; - const attemptDelay = Duration(seconds: 3); + // Future confirmRideForAllDriverAvailable() async { + // bool driversFound = false; + // const maxAttempts = 8; + // const attemptDelay = Duration(seconds: 3); - for (int attempt = 0; attempt < maxAttempts; attempt++) { - final reloadDuration = attempt > 5 ? 4500 : 3000; - await getCarsLocationByPassengerAndReloadMarker( - box.read(BoxName.carType), reloadDuration); - // await getNearestDriverByPassengerLocation(); - currentTimeSearchingCaptainWindow = 0; - driversStatusForSearchWindow = 'We are search for nearst driver'.tr; - if (isDriversDataValid()) { - driversFound = true; - break; - } + // for (int attempt = 0; attempt < maxAttempts; attempt++) { + // final reloadDuration = attempt > 5 ? 4500 : 3000; + // await getCarsLocationByPassengerAndReloadMarker( + // box.read(BoxName.carType), reloadDuration); + // // await getNearestDriverByPassengerLocation(); + // currentTimeSearchingCaptainWindow = 0; + // driversStatusForSearchWindow = 'We are search for nearst driver'.tr; + // if (isDriversDataValid()) { + // driversFound = true; + // break; + // } - await Future.delayed(attemptDelay); - } + // await Future.delayed(attemptDelay); + // } - if (!driversFound) { - showNoDriversDialog(); - return; - } - driversStatusForSearchWindow = 'Your order is being prepared'.tr; - Log.print('driversStatusForSearchWindow: $driversStatusForSearchWindow'); - update(); - await postRideDetailsToServer(); - driversStatusForSearchWindow = 'Your order sent to drivers'.tr; + // if (!driversFound) { + // showNoDriversDialog(); + // return; + // } + // driversStatusForSearchWindow = 'Your order is being prepared'.tr; + // Log.print('driversStatusForSearchWindow: $driversStatusForSearchWindow'); + // update(); + // await postRideDetailsToServer(); + // driversStatusForSearchWindow = 'Your order sent to drivers'.tr; - await notifyAvailableDrivers(); + // await notifyAvailableDrivers(); - driversStatusForSearchWindow = 'The drivers are reviewing your request'.tr; - Log.print('driversStatusForSearchWindow: $driversStatusForSearchWindow'); - update(); - delayAndFetchRideStatusForAllDriverAvailable(rideId); - // update(); - } + // driversStatusForSearchWindow = 'The drivers are reviewing your request'.tr; + // Log.print('driversStatusForSearchWindow: $driversStatusForSearchWindow'); + // update(); + // delayAndFetchRideStatusForAllDriverAvailable(rideId); + // // update(); + // } Future updateConfirmRideForAllDriverAvailable() async { bool driversFound = false; @@ -1855,7 +2717,7 @@ class MapPassengerController extends GetxController { } // await postRideDetailsToServer(); - delayAndFetchRideStatusForAllDriverAvailable(rideId); + // delayAndFetchRideStatusForAllDriverAvailable(rideId); // update(); await notifyAvailableDrivers(); } @@ -1893,52 +2755,97 @@ class MapPassengerController extends GetxController { ); } - Future postRideDetailsToServer() async { + Future postRideDetailsToServer() async { final paymentController = Get.find(); + startLocation = polylineCoordinates.first; + endLocation = polylineCoordinates.last; + // '${startLocation.latitude},${startLocation.longitude}', + // "end_location": '${endLocation.latitude},${endLocation.longitude}', final payload = constructRidePayload(paymentController); + Log.print('constructRidePayload: ${payload}'); try { - final response = await CRUD().post( - link: "${AppLink.IntaleqSyriaServer}/ride/rides/add.php", - payload: payload); + final response = await CRUD() + .post(link: "${AppLink.ride}/ride/rides/add.php", payload: payload); if (response is String) { final parsedValue = jsonDecode(response); rideId = parsedValue['message']; + return true; } else if (response is Map) { rideId = response['message']; + CRUD().post( + link: "${AppLink.server}/ride/rides/add.php", payload: payload); + return true; } else { Log.print('Unexpected response type: ${response.runtimeType}'); + return false; } } catch (e) { Log.print('Error posting ride details: $e'); + return false; } } - Map constructRidePayload( + late LatLng endLocation; +// polylineCoordinates.last; + // Log.print('endLocation: ${endLocation}'); + late LatLng startLocation; + // polylineCoordinates.first; + // Log.print('startLocation: ${startLocation}'); + Map? constructRidePayload( PaymentController paymentController) { - final startLocation = - '${data[0]['start_location']['lat']},${data[0]['start_location']['lng']}'; - final endLocation = - '${data[0]['end_location']['lat']},${data[0]['end_location']['lng']}'; + try { + final msg = dataCarsLocationByPassenger?['message']; + final hasDrivers = msg is List && + msg.isNotEmpty && + carsOrder >= 0 && + carsOrder < msg.length; - return { - "start_location": startLocation, - "end_location": endLocation, - "date": DateTime.now().toString(), - "time": DateTime.now().toString(), - "endtime": durationToAdd.toString(), - "price": totalPassenger.toStringAsFixed(2), - "passenger_id": box.read(BoxName.passengerID).toString(), - "driver_id": dataCarsLocationByPassenger['message'][carsOrder] - ['driver_id'] - .toString(), - "status": "waiting", - 'carType': box.read(BoxName.carType), - "price_for_driver": totalPassenger.toString(), - "price_for_passenger": totalME.toString(), - "distance": distance.toString(), - "paymentMethod": paymentController.isWalletChecked.toString(), - }; + if (!hasDrivers) { + // لا يوجد سائقين -> عرض دايلوغ وارجاع null + _showNoDriversDialog(); + return null; + } + + // الآن آمن القراءة + final driverId = msg[carsOrder]['driver_id'] ?? 'new_driver'; + + return { + "start_location": + '${startLocation.latitude},${startLocation.longitude}', + "end_location": '${endLocation.latitude},${endLocation.longitude}', + "date": DateTime.now().toString(), + "time": DateTime.now().toString(), + "endtime": durationToAdd.toString(), + "price": totalPassenger.toStringAsFixed(2), + "passenger_id": box.read(BoxName.passengerID).toString(), + "driver_id": driverId, + "status": "waiting", + 'carType': box.read(BoxName.carType), + "price_for_driver": totalPassenger.toString(), + "price_for_passenger": totalME.toString(), + "distance": distance.toString(), + "paymentMethod": paymentController.isWalletChecked.toString(), + }; + } catch (e, st) { + Log.print('Error in constructRidePayload: $e'); + Log.print(st.toString()); + // في حال أي استثناء، اعتبره كعدم وجود سائقين أو خطأ -> عرض دايلوغ + _showNoDriversDialog(); + return null; + } + } + + void _showNoDriversDialog() { + // اذا تستخدم GetX: + MyDialog().getDialog( + 'Sorry'.tr, + 'No cars are available at the moment. Please try again later.'.tr, + () { + Get.back(); // closes the dialog + cancelRide(); // cancels or resets the ride + }, + ); } Future notifyAvailableDrivers() async { @@ -1986,8 +2893,9 @@ class MapPassengerController extends GetxController { // body, // 'order'); NotificationService.sendNotification( + category: 'Order', target: (driverData['token'].toString()), - title: 'Order', + title: 'Order'.tr, body: endNameAddress, isTopic: false, // Important: this is a token tone: 'tone1', @@ -2032,18 +2940,14 @@ class MapPassengerController extends GetxController { (distanceToDriverInMeters * 1.25).toStringAsFixed(0); Future.delayed(const Duration(microseconds: 10)); final body = constructNotificationBody(driverData); - // Log.print('body:ww ${body}'); + Log.print('body:ww ${body}'); Log.print( '[DEBUG] Sending to driver: ${driverData['driver_id']}, token: ${driverData['token']}'); - // firebaseMessagesController.sendNotificationToDriverMAP( - // 'Order', // without tr since background not valid - // endNameAddress, - // (driverData['token'].toString()), - // body, - // 'order'); + NotificationService.sendNotification( + category: 'Order', target: (driverData['token'].toString()), - title: 'Order', + title: 'Order'.tr, body: endNameAddress, isTopic: false, // Important: this is a token tone: 'tone1', @@ -2056,13 +2960,15 @@ class MapPassengerController extends GetxController { List constructNotificationBody(var driverData) { final paymentController = Get.find(); return [ - '${data[0]['start_location']['lat']},${data[0]['start_location']['lng']}', - '${data[0]['end_location']['lat']},${data[0]['end_location']['lng']}', + // '${data[0]['start_location']['lat']},${data[0]['start_location']['lng']}', + // '${data[0]['end_location']['lat']},${data[0]['end_location']['lng']}', + '${startLocation.latitude},${startLocation.longitude}', + '${endLocation.latitude},${endLocation.longitude}', totalPassenger.toStringAsFixed(2), totalDriver.toStringAsFixed(2), durationToRide.toString(), distance.toStringAsFixed(2), - driverData['driver_id'].toString(), + driverData?['driver_id']?.toString() ?? 'N/A', box.read(BoxName.passengerID).toString(), (box.read(BoxName.name).toString().split(' ')[0]).toString(), (box.read(BoxName.tokenFCM).toString()), @@ -2070,11 +2976,11 @@ class MapPassengerController extends GetxController { durationToPassenger.toStringAsFixed(0) ?? '120', distanceByPassenger.toString() ?? '2000', paymentController.isWalletChecked.toString(), - (driverData['token'].toString()), + driverData?['token']?.toString() ?? 'N/A', durationToPassenger.toString(), rideId.toString(), rideTimerBegin.toString(), - driverData['driver_id'].toString(), + driverData?['driver_id']?.toString() ?? 'N/A', durationToRide.toString(), Get.find().wayPoints.length > 1 ? 'haveSteps' @@ -2089,9 +2995,9 @@ class MapPassengerController extends GetxController { ? double.parse(box.read(BoxName.passengerWalletTotal)) .toStringAsFixed(2) : '0'), - box.read(BoxName.email).toString(), - data[0]['start_address'], - data[0]['end_address'], + box.read(BoxName.email).toString() ?? 'none', + startNameAddress, + endNameAddress, box.read(BoxName.carType), kazan.toStringAsFixed(0), passengerRate.toStringAsFixed(2), @@ -2104,88 +3010,88 @@ class MapPassengerController extends GetxController { int maxAttempts = 28; - Future delayAndFetchRideStatusForAllDriverAvailable( - String rideId) async { - int attemptCounter = 0; - bool isApplied = false; - tick = 0; - await addRideToNotificationDriverAvailable(); - Timer.periodic(const Duration(seconds: 1), (timer) async { - if (attemptCounter >= maxAttempts || isApplied == true) { - timer.cancel(); - _rideStatusStreamController.close(); // Close the stream when done - return; - } + // Future delayAndFetchRideStatusForAllDriverAvailable( + // String rideId) async { + // int attemptCounter = 0; + // bool isApplied = false; + // tick = 0; + // await addRideToNotificationDriverAvailable(); + // Timer.periodic(const Duration(seconds: 1), (timer) async { + // if (attemptCounter >= maxAttempts || isApplied == true) { + // timer.cancel(); + // _rideStatusStreamController.close(); // Close the stream when done + // return; + // } - attemptCounter++; - tick++; + // attemptCounter++; + // tick++; - try { - var res = await getRideStatus(rideId); - String rideStatusDelayed = res.toString(); - Log.print('rideStatusDelayed: $rideStatusDelayed'); + // try { + // var res = await getRideStatus(rideId); + // String rideStatusDelayed = res.toString(); + // Log.print('rideStatusDelayed: $rideStatusDelayed'); - _rideStatusStreamController - .add(rideStatusDelayed); // Emit the ride status - // addRideToNotificationDriverString(); - if (rideStatusDelayed == 'Cancel') { - timer.cancel(); - NotificationController().showNotification( - "Order Cancelled".tr, "you canceled order".tr, 'ding'); - _rideStatusStreamController - .close(); // Close stream after cancellation - // - // - } else if (rideStatusDelayed == 'Apply' || - rideStatusDelayed == 'Applied') { - isApplied = true; - // timer.cancel(); - rideAppliedFromDriver(isApplied); + // _rideStatusStreamController + // .add(rideStatusDelayed); // Emit the ride status + // // addRideToNotificationDriverString(); + // if (rideStatusDelayed == 'Cancel') { + // timer.cancel(); + // NotificationController().showNotification( + // "Order Cancelled".tr, "you canceled order".tr, 'ding'); + // _rideStatusStreamController + // .close(); // Close stream after cancellation + // // + // // + // } else if (rideStatusDelayed == 'Apply' || + // rideStatusDelayed == 'Applied') { + // isApplied = true; + // // timer.cancel(); + // rideAppliedFromDriver(isApplied); - timer.cancel(); - // Close stream after applying - } else if (attemptCounter >= maxAttempts || - rideStatusDelayed == 'waiting') { - // timer.cancel(); //todo - // addRideToNotificationDriverString(); - // Show dialog to increase fee... + // timer.cancel(); + // // Close stream after applying + // } else if (attemptCounter >= maxAttempts || + // rideStatusDelayed == 'waiting') { + // // timer.cancel(); //todo + // // addRideToNotificationDriverString(); + // // Show dialog to increase fee... - // buildTimerForIncrease(); - Get.defaultDialog( - title: 'Are you want to wait drivers to accept your order'.tr, - middleText: '', - onConfirm: () { - Log.print('[DEBUG] User chose to wait again'); - Get.back(); - notifyAvailableDriversAgain(); - delayAndFetchRideStatusForAllDriverAvailable(rideId); - // addRideToNotificationDriverAvailable(); - }, - onCancel: () { - timer.cancel(); - Get.back(); - showCancelRideBottomSheet(); - }, - ); - // MyDialog().getDialog( - // 'Are you want to wait drivers to accept your order'.tr, '', () { - // Get.back(); - // addRideToNotificationDriverAvailable(); - // }); - update(); - _rideStatusStreamController - .close(); // Close stream after max attempts - } - } catch (e) { - _rideStatusStreamController.addError(e); // Handle errors in the stream - } - }); - } + // // buildTimerForIncrease(); + // Get.defaultDialog( + // title: 'Are you want to wait drivers to accept your order'.tr, + // middleText: '', + // onConfirm: () { + // Log.print('[DEBUG] User chose to wait again'); + // Get.back(); + // notifyAvailableDriversAgain(); + // delayAndFetchRideStatusForAllDriverAvailable(rideId); + // // addRideToNotificationDriverAvailable(); + // }, + // onCancel: () { + // timer.cancel(); + // Get.back(); + // showCancelRideBottomSheet(); + // }, + // ); + // // MyDialog().getDialog( + // // 'Are you want to wait drivers to accept your order'.tr, '', () { + // // Get.back(); + // // addRideToNotificationDriverAvailable(); + // // }); + // update(); + // _rideStatusStreamController + // .close(); // Close stream after max attempts + // } + // } catch (e) { + // _rideStatusStreamController.addError(e); // Handle errors in the stream + // } + // }); + // } Future rideAppliedFromDriver(bool isApplied) async { await getUpdatedRideForDriverApply(rideId); NotificationController().showNotification( - 'Accepted Ride', + 'Accepted Ride'.tr, '$driverName ${'accepted your order at price'.tr} ${totalPassenger.toStringAsFixed(1)} ${'with type'.tr} ${box.read(BoxName.carType)}', 'ding'); if (box.read(BoxName.carType) == 'Speed' || @@ -2204,14 +3110,95 @@ class MapPassengerController extends GetxController { rideConfirm = false; isSearchingWindow = false; update(); - startTimer(); -// todo stop this because this method in startTimer() - // startTimerFromDriverToPassengerAfterApplied(); + // تشغيل التايمر لجلب موقع السائق بشكل دوري + startTimerFromDriverToPassengerAfterApplied(); + // 1. جلب موقع السائق الأولي فوراً + await getDriverCarsLocationToPassengerAfterApplied(); - // timer.cancel(); + // 2. رسم المسار مرة واحدة فقط هنا + if (driverCarsLocationToPassengerAfterApplied.isNotEmpty) { + await drawDriverPathOnly( + driverCarsLocationToPassengerAfterApplied.last, passengerLocation); + + // ضبط الكاميرا لتشمل السائق والراكب مرة واحدة في البداية + _fitCameraToPoints( + driverCarsLocationToPassengerAfterApplied.last, passengerLocation); + } + + startUiCountdown(); _rideStatusStreamController.close(); } +// دالة خفيفة وسريعة لرسم خط المسار فقط (بدون أسعار أو خطوات) + Future drawDriverPathOnly(LatLng driverPos, LatLng passengerPos) async { + final String apiUrl = 'https://routec.intaleq.xyz/route'; + final String apiKey = Env.mapKeyOsm; + + final String origin = '${driverPos.latitude},${driverPos.longitude}'; + final String dest = '${passengerPos.latitude},${passengerPos.longitude}'; + + // استخدام overview=full للدقة، و steps=false للسرعة + final Uri uri = Uri.parse( + '$apiUrl?origin=$origin&destination=$dest&steps=false&overview=full'); + + try { + final response = await http.get(uri, headers: {'X-API-KEY': apiKey}); + + if (response.statusCode == 200) { + final data = jsonDecode(response.body); + + if (data['status'] == 'ok' && data['polyline'] != null) { + final String pointsString = data['polyline']; + + // فك التشفير + List decodedPoints = + await compute(decodePolylineIsolate, pointsString); + + // إزالة خط مسار السائق القديم فقط + polyLines + .removeWhere((p) => p.polylineId.value == 'driver_track_line'); + + // إضافة الخط الجديد + polyLines.add(Polyline( + polylineId: const PolylineId('driver_track_line'), + points: decodedPoints, + color: Colors.black87, // لون مميز لمسار السائق + width: 5, + jointType: JointType.round, + startCap: Cap.roundCap, + endCap: Cap.roundCap, + patterns: [ + PatternItem.dash(10), + PatternItem.gap(10) + ], // جعله منقطاً + )); + + // لا تستدعي update هنا، سيتم استدعاؤها في الدالة الأب (getDriverCars...) لتقليل عدد التحديثات + } + } + } catch (e) { + print('Error drawing driver path: $e'); + } + } + + // دالة مساعدة لضبط الكاميرا + void _fitCameraToPoints(LatLng p1, LatLng p2) { + double minLat = min(p1.latitude, p2.latitude); + double maxLat = max(p1.latitude, p2.latitude); + double minLng = min(p1.longitude, p2.longitude); + double maxLng = max(p1.longitude, p2.longitude); + + mapController?.animateCamera( + CameraUpdate.newLatLngBounds( + LatLngBounds( + southwest: LatLng(minLat, minLng), + northeast: LatLng(maxLat, maxLng), + ), + 100 // Padding + ), + ); + } + // Listening to the Stream void listenToRideStatusStream() { rideStatusStream.listen((rideStatus) { @@ -2236,27 +3223,43 @@ class MapPassengerController extends GetxController { void start15SecondTimer(String rideId) { Timer(const Duration(seconds: 15), () { - delayAndFetchRideStatusForAllDriverAvailable(rideId); + // delayAndFetchRideStatusForAllDriverAvailable(rideId); }); } - void startTimer() async { - for (int i = 0; i <= durationTimer; i++) { - await Future.delayed(const Duration(seconds: 1)); + // Replaces void startTimer() + Timer? + _uiCountdownTimer; // Add this variable to your class to manage lifecycle + + void startUiCountdown() { + // Cancel any existing timer to avoid duplicates + _uiCountdownTimer?.cancel(); + + // Reset variables + progress = 0; + remainingTime = durationTimer; + + _uiCountdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) { + // Logic from your loop, but non-blocking + int i = timer.tick; // current tick + progress = i / durationTimer; remainingTime = durationTimer - i; - if (remainingTime == 0) { + + if (remainingTime <= 0) { + timer.cancel(); // Stop this specific timer rideConfirm = false; + // Add the duration to the tracking time logic timeToPassengerFromDriverAfterApplied += durationToPassenger; - // timeToPassengerFromDriverAfterApplied.toString()); - startTimerFromDriverToPassengerAfterApplied(); - update(); + // Note: We do NOT call startTimerFromDriverToPassengerAfterApplied() here + // because we already started it in rideAppliedFromDriver! + + timerEnded(); // Call your existing completion logic } - update(); - } - timerEnded(); + update(); // Update the UI progress bar + }); } void timerEnded() async { @@ -2268,7 +3271,7 @@ class MapPassengerController extends GetxController { Future getRideStatus(String rideId) async { final response = await CRUD().get( - link: "${AppLink.endPoint}/ride/rides/getRideStatus.php", + link: "${AppLink.ride}/ride/rides/getRideStatus.php", payload: {'id': rideId}); print(response); print('2176'); @@ -2279,48 +3282,60 @@ class MapPassengerController extends GetxController { driverCarMake, driverLicensePlate, driverName = ''; - getUpdatedRideForDriverApply(String rideId) async { - // if (isDriversTokensSend) { - final res = await CRUD().get( - link: "${AppLink.endPoint}/ride/rides/getRideOrderID.php", - payload: {'id': rideId}); - if (res != 'failure') { - var response = jsonDecode(res); - Log.print('getUpdatedRideForDriverApply: $response'); - driverId = response['data']['driver_id']; - driverPhone = (response['data']['phone']); - driverCarMake = response['data']['make']; - model = response['data']['model']; - colorHex = response['data']['color_hex']; - carColor = response['data']['color']; - make = response['data']['make']; - licensePlate = (response['data']['car_plate']); - passengerName = (response['data']['passengerName']); - driverName = (response['data']['driverName'].toString()); - driverToken = (response['data']['token']); - // Log.print('driverToken updated: $driverToken'); - carYear = response['data']['year']; - driverRate = response['data']['ratingDriver'].toString(); + Future getUpdatedRideForDriverApply(String rideId) async { + // حماية مبدئية: إذا كان المعرف غير صالح لا تكمل + if (rideId == 'yet' || rideId.isEmpty) return; + + try { + final res = await CRUD().get( + link: "${AppLink.server}/ride/rides/getRideOrderID.php", + payload: {'passengerID': box.read(BoxName.passengerID).toString()}); + + if (res != 'failure') { + var response = jsonDecode(res); + Log.print('getUpdatedRideForDriverApply Response: $response'); + + // [هام] التحقق من أن data عبارة عن Map وليست false أو null + // هذا يمنع الخطأ: Class 'bool' has no instance method '[]' + if (response['status'] == 'success' && + response['data'] != null && + response['data'] is Map) { + var data = response['data']; + + // استخدام ?.toString() ?? '' للحماية من القيم الفارغة (Null Safety) + driverId = data['driver_id']?.toString() ?? ''; + driverPhone = data['phone']?.toString() ?? ''; + driverCarMake = data['make']?.toString() ?? ''; + model = data['model']?.toString() ?? ''; + colorHex = data['color_hex']?.toString() ?? ''; + carColor = data['color']?.toString() ?? ''; + make = data['make']?.toString() ?? ''; + licensePlate = data['car_plate']?.toString() ?? ''; + + // دمج الاسم الأول والأخير للراكب + String firstName = data['passengerName']?.toString() ?? ''; + String lastName = data['last_name']?.toString() ?? ''; + passengerName = + lastName.isNotEmpty ? "$firstName $lastName" : firstName; + + driverName = data['driverName']?.toString() ?? ''; + + // [هام] التوكن ضروري للإشعارات + driverToken = data['token']?.toString() ?? ''; + + carYear = data['year']?.toString() ?? ''; + driverRate = data['ratingDriver']?.toString() ?? '5.0'; + + update(); // تحديث الواجهة بالبيانات الجديدة + } else { + Log.print( + "Warning: Ride data not found or invalid (data is false/null)"); + // اختياري: يمكنك هنا التعامل مع حالة عدم العثور على السائق بعد + } + } + } catch (e) { + Log.print("Error in getUpdatedRideForDriverApply: $e"); } - // driversToken.remove(driverToken); - // for (var i = 1; i < driversToken.length; i++) { - // firebaseMessagesController.sendNotificationToDriverMAP( - // 'Order Accepted', - // '$driverName${'Accepted your order'.tr}', - // driverToken.toString(), - // [], - // 'start', - // ); - NotificationService.sendNotification( - target: driverToken.toString(), - title: 'Order Accepted', - body: '$driverName${'Accepted your order'.tr}', - isTopic: false, // Important: this is a token - tone: 'tone1', - // driverList: body, - ); - // } - // } } late LatLng currentDriverLocation; @@ -2532,42 +3547,73 @@ class MapPassengerController extends GetxController { }); } + // String getLocationArea(double latitude, double longitude) { + // final locations = box.read(BoxName.locationName) ?? []; + // for (final location in locations) { + // final locationData = location as Map; + + // // Debugging: Print location data + // // print('Location Data: $locationData'); + + // // Convert string values to double + // final minLatitude = + // double.tryParse(locationData['min_latitude'].toString()) ?? 0.0; + // final maxLatitude = + // double.tryParse(locationData['max_latitude'].toString()) ?? 0.0; + // final minLongitude = + // double.tryParse(locationData['min_longitude'].toString()) ?? 0.0; + // final maxLongitude = + // double.tryParse(locationData['max_longitude'].toString()) ?? 0.0; + + // // Debugging: Print converted values + // print( + // 'Converted Values: minLatitude=$minLatitude, maxLatitude=$maxLatitude, minLongitude=$minLongitude, maxLongitude=$maxLongitude'); + + // if (latitude >= minLatitude && + // latitude <= maxLatitude && + // longitude >= minLongitude && + // longitude <= maxLongitude) { + // box.write(BoxName.serverChosen, (locationData['server_link'])); + // // Log.print( + // // 'locationData----server_link: ${(locationData['server_link'])}'); + // return locationData['name']; + // } + // } + + // // Default case + // box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); + // return 'Cairo'; + // } String getLocationArea(double latitude, double longitude) { - final locations = box.read(BoxName.locationName) ?? []; - for (final location in locations) { - final locationData = location as Map; + LatLng passengerPoint = LatLng(latitude, longitude); - // Debugging: Print location data - // print('Location Data: $locationData'); - - // Convert string values to double - final minLatitude = - double.tryParse(locationData['min_latitude'].toString()) ?? 0.0; - final maxLatitude = - double.tryParse(locationData['max_latitude'].toString()) ?? 0.0; - final minLongitude = - double.tryParse(locationData['min_longitude'].toString()) ?? 0.0; - final maxLongitude = - double.tryParse(locationData['max_longitude'].toString()) ?? 0.0; - - // Debugging: Print converted values - print( - 'Converted Values: minLatitude=$minLatitude, maxLatitude=$maxLatitude, minLongitude=$minLongitude, maxLongitude=$maxLongitude'); - - if (latitude >= minLatitude && - latitude <= maxLatitude && - longitude >= minLongitude && - longitude <= maxLongitude) { - box.write(BoxName.serverChosen, (locationData['server_link'])); - // Log.print( - // 'locationData----server_link: ${(locationData['server_link'])}'); - return locationData['name']; - } + // 1. فحص الأردن + if (isPointInPolygon(passengerPoint, CountryPolygons.jordanBoundary)) { + box.write(BoxName.countryCode, 'Jordan'); + // يمكنك تعيين AppLink.endPoint هنا إذا كان منطقك الداخلي لا يزال يعتمد عليه + box.write(BoxName.serverChosen, + AppLink.IntaleqSyriaServer); // مثال: اختر سيرفر سوريا للبيانات + return 'Jordan'; } - // Default case + // 2. فحص سوريا + if (isPointInPolygon(passengerPoint, CountryPolygons.syriaBoundary)) { + box.write(BoxName.countryCode, 'Syria'); + box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); + return 'Syria'; + } + + // 3. فحص مصر + if (isPointInPolygon(passengerPoint, CountryPolygons.egyptBoundary)) { + box.write(BoxName.countryCode, 'Egypt'); + box.write(BoxName.serverChosen, AppLink.IntaleqAlexandriaServer); + return 'Egypt'; + } + + // 4. الافتراضي (إذا كان خارج المناطق المخدومة) + box.write(BoxName.countryCode, 'Jordan'); box.write(BoxName.serverChosen, AppLink.IntaleqSyriaServer); - return 'Cairo'; + return 'Unknown Location (Defaulting to Jordan)'; } // if (latitude >= 29.918901 && @@ -2668,6 +3714,15 @@ class MapPassengerController extends GetxController { 'northeastLon': bounds.northeast.longitude.toString(), }); break; + case 'Van': + res = await CRUD() + .get(link: AppLink.getCarsLocationByPassengerVan, payload: { + 'southwestLat': bounds.southwest.latitude.toString(), + 'southwestLon': bounds.southwest.longitude.toString(), + 'northeastLat': bounds.northeast.latitude.toString(), + 'northeastLon': bounds.northeast.longitude.toString(), + }); + break; default: res = await CRUD() .get(link: AppLink.getCarsLocationByPassenger, payload: { @@ -2692,17 +3747,6 @@ class MapPassengerController extends GetxController { // Check if 'message' is present and not null if (dataCarsLocationByPassenger != null && dataCarsLocationByPassenger.isNotEmpty) { - // Check if carsOrder is within bounds - // if (carsOrder < dataCarsLocationByPassenger['message'].length) { - // driverId = dataCarsLocationByPassenger['message'][carsOrder] - // ['driver_id'] - // .toString(); - // gender = dataCarsLocationByPassenger['message'][carsOrder]['gender'] - // .toString(); - // driverToken = dataCarsLocationByPassenger['message'][carsOrder] - // ['token'] - // .toString(); - // } else { print('carsOrder is in of bounds for message array'); // return false; // } @@ -2813,43 +3857,6 @@ class MapPassengerController extends GetxController { } } - void _smoothlyUpdateMarker(Marker oldMarker, LatLng newPosition, - double newHeading, BitmapDescriptor icon) { - String markerId = oldMarker.markerId.value; - LatLng startPosition = oldMarker.position; - double startHeading = oldMarker.rotation ?? 0; - - _animationTimers[markerId]?.cancel(); - _animationTimers[markerId] = - Timer.periodic(Duration(milliseconds: updateIntervalMs), (timer) { - double progress = - timer.tick / (500 / updateIntervalMs); // 500ms total duration - if (progress >= 1.0) { - timer.cancel(); - _animationTimers.remove(markerId); - progress = 1.0; - } - - LatLng intermediatePosition = LatLng( - startPosition.latitude + - (newPosition.latitude - startPosition.latitude) * progress, - startPosition.longitude + - (newPosition.longitude - startPosition.longitude) * progress); - double intermediateHeading = - startHeading + (newHeading - startHeading) * progress; - - markers.removeWhere((m) => m.markerId == oldMarker.markerId); - markers.add(Marker( - markerId: oldMarker.markerId, - position: intermediatePosition, - rotation: intermediateHeading, - icon: icon, - )); - - update(); - }); - } - double _calculateDistance(LatLng start, LatLng end) { // Implement distance calculation (e.g., Haversine formula) // For simplicity, this is a placeholder. Replace with actual implementation. @@ -2875,8 +3882,30 @@ class MapPassengerController extends GetxController { return '963$trimmedPhone'; } - Future getTokenForParent() async { - if (box.read(BoxName.sosPhonePassenger) == null) { + String generateTrackingLink(String rideId, String driverId) { + String cleanRideId = rideId.toString().trim(); + String cleanDriverId = driverId.toString().trim(); + + // الكلمة السرية للمطابقة مع السيرفر + const String secretSalt = "Intaleq_Secure_Track_2025"; + + // الدمج والتشفير + String rawString = "$cleanRideId$cleanDriverId$secretSalt"; + var bytes = utf8.encode(rawString); + var digest = md5.convert(bytes); + String token = digest.toString(); + + // الرابط المباشر لصفحة التتبع + return "https://intaleqapp.com/track/index.html?id=$cleanRideId&token=$token"; + } + + // 2. الدالة الرئيسية (تم تعديلها لإرسال واتساب بدلاً من الإشعارات) + Future shareTripWithFamily() async { + // التحقق أولاً: هل الرقم موجود؟ + String? storedPhone = box.read(BoxName.sosPhonePassenger); + + if (storedPhone == null) { + // --- (نفس المنطق القديم: فتح ديالوج لإضافة الرقم) --- Get.defaultDialog( title: 'Add SOS Phone'.tr, titleStyle: AppStyle.title, @@ -2894,8 +3923,11 @@ class MapPassengerController extends GetxController { onPressed: () async { if (sosFormKey.currentState!.validate()) { Get.back(); + // تنسيق الرقم var numberPhone = formatSyrianPhoneNumber(sosPhonePassengerProfile.text); + + // حفظ في السيرفر await CRUD().post( link: AppLink.updateprofile, payload: { @@ -2903,22 +3935,223 @@ class MapPassengerController extends GetxController { 'sosPhone': numberPhone, }, ); + + // حفظ محلياً box.write(BoxName.sosPhonePassenger, numberPhone); + + // استدعاء الدالة مرة أخرى للمتابعة + shareTripWithFamily(); } })); + return; } - var numberPhone = formatSyrianPhoneNumber(sosPhonePassengerProfile.text); - var res = await CRUD().getTokenParent( - link: AppLink.getTokenParent, payload: {'phone': numberPhone}); - // Check if `res` is already a map + // --- (المنطق الجديد: إرسال واتساب مباشرة) --- + + // 1. التأكد من وجود بيانات للرحلة + if (rideId == 'yet' || driverId.isEmpty) { + Get.snackbar("Alert".tr, "Wait for the trip to start first".tr); + return; + } + + // 2. تنسيق الرقم + var numberPhone = formatSyrianPhoneNumber(storedPhone); + + // 3. توليد الرابط + String trackingLink = generateTrackingLink(rideId, driverId); + + // 4. تجهيز الرسالة (بالإنجليزية وجاهزة للترجمة) + // لاحظ: استخدمت المتغيرات الموجودة في الكنترولر (passengerName هنا عادة يحمل اسم السائق في الكنترولر الخاص بك حسب الكود السابق) + String message = """ +مرحباً، تابع رحلتي مباشرة على تطبيق انطلق 🚗 + +يمكنك تتبع مسار الرحلة من هنا: +$trackingLink + +السائق: $passengerName +السيارة: $model - $licensePlate +شكراً لاستخدامك انطلق! +""" + .tr; + + String messageEn = """Hello, follow my trip live on Intaleq 🚗 + +Track my ride here: +$trackingLink + +Driver: $passengerName +Car: $model - $licensePlate +Thank you for using Intaleq! +"""; + + // اختر الرسالة بناءً على اللغة المفضلة (مثال بسيط) + String userLanguage = box.read(BoxName.lang) ?? 'ar'; + message = (userLanguage == 'ar') ? message : messageEn; +// وضعنا .tr لكي تتمكن من ترجمتها للعربية في ملفات اللغة إذا أردت، أو تركها إنجليزية + + print("Sending WhatsApp to: $numberPhone"); + + // 5. فتح واتساب + launchCommunication('whatsapp', numberPhone, message); + + // (اختياري) حفظ أن التتبع مفعل لتغيير حالة الأيقونة في الواجهة + box.write(BoxName.parentTripSelected, true); + update(); + } + + Future getTokenForParent() async { + // 1. التحقق أولاً: هل الرقم موجود؟ + String? storedPhone = box.read(BoxName.sosPhonePassenger); + + if (storedPhone == null) { + // --- حالة الرقم غير موجود: نفتح الديالوج فقط --- + Get.defaultDialog( + title: 'Add SOS Phone'.tr, + titleStyle: AppStyle.title, + content: Form( + key: sosFormKey, + child: MyTextForm( + controller: sosPhonePassengerProfile, + label: 'insert sos phone'.tr, + hint: 'e.g. 0912345678'.tr, + type: TextInputType.phone, + ), + ), + confirm: MyElevatedButton( + title: 'Add SOS Phone'.tr, + onPressed: () async { + if (sosFormKey.currentState!.validate()) { + // إغلاق الديالوج الحالي + Get.back(); + + // تنسيق الرقم (تأكد أن هذا التنسيق يطابق ما تم تخزينه عند تسجيل الراكب) + var numberPhone = + formatSyrianPhoneNumber(sosPhonePassengerProfile.text); + + // حفظ الرقم في السيرفر (تحديث البروفايل) + await CRUD().post( + link: AppLink.updateprofile, + payload: { + 'id': box.read(BoxName.passengerID), + 'sosPhone': numberPhone, + }, + ); + + // حفظ الرقم محلياً + box.write(BoxName.sosPhonePassenger, numberPhone); + + // استدعاء الدالة مرة أخرى + getTokenForParent(); + } + })); + return; + } + generateTrackingLink(rideId, driverId); + // --- حالة الرقم موجود: نكمل التنفيذ --- + var numberPhone = formatSyrianPhoneNumber(storedPhone); + print("Searching for Parent Token with Phone: $numberPhone"); + + // استدعاء السكريبت (استخدم POST بدلاً من GET) + var res = await CRUD() + .post(link: AppLink.getTokenParent, payload: {'phone': numberPhone}); + + // التعامل مع الاستجابة if (res is Map) { - var res1 = res; - handleResponse(res1); + handleResponse(res); } else { - // If it's a string, decode it - var res1 = jsonDecode(res); - handleResponse(res1); + try { + // var jsonRes = jsonDecode(res); + handleResponse(res); + } catch (e) { + print("Error parsing response: $res"); + } + } + } + + void handleResponse(Map res) { + print("Handle Response: $res"); // للتأكد من دخول الدالة + + // الحالة 1: الرقم غير مسجل (Failure) + if (res['status'] == 'failure') { + // إذا كان هناك أي ديالوج تحميل مفتوح، نغلقه أولاً، لكن بحذر + if (Get.isDialogOpen ?? false) Get.back(); + + Get.defaultDialog( + title: "No user found".tr, // اختصرت العنوان ليظهر بشكل أفضل + titleStyle: AppStyle.title, + content: Column( + children: [ + Text( + "No passenger found for the given phone number".tr, + style: AppStyle.title, // غيرت الستايل ليكون أصغر قليلاً + textAlign: TextAlign.center, + ), + const SizedBox(height: 10), + Text( + "Send Intaleq app to him".tr, + style: AppStyle.title + .copyWith(color: AppColor.greenColor, fontSize: 14), + textAlign: TextAlign.center, + ) + ], + ), + confirm: MyElevatedButton( + title: 'Send Invite'.tr, + onPressed: () { + Get.back(); // إغلاق الديالوج + + var rawPhone = box.read(BoxName.sosPhonePassenger); + // تأكد أن rawPhone ليس null + if (rawPhone == null) return; + + var phone = formatSyrianPhoneNumber(rawPhone); + + // تصحيح نص الرسالة + var message = '''Dear Friend, + +🚀 I have just started an exciting trip on Intaleq! +Download the app to track my ride: + +👉 Android: https://play.google.com/store/apps/details?id=com.Intaleq.intaleq&hl=en-US +👉 iOS: https://apps.apple.com/st/app/intaleq-rider/id6748075179 + +See you there! +Intaleq Team'''; + + launchCommunication('whatsapp', phone, message); + }), + cancel: MyElevatedButton( + title: 'Cancel'.tr, + onPressed: () { + Get.back(); + })); + } + // الحالة 2: نجاح (Success) + else if (res['status'] == 'success') { + // إغلاق أي ديالوج سابق (مثل Loading) + if (Get.isDialogOpen ?? false) Get.back(); + + Get.snackbar("Success".tr, "The invitation was sent successfully".tr, + backgroundColor: AppColor.greenColor, colorText: Colors.white); + + List tokensData = res['data']; + + for (var device in tokensData) { + String tokenParent = device['token']; + + NotificationService.sendNotification( + category: "Trip Monitoring", + target: tokenParent, + title: "Trip Monitoring".tr, + body: "Click to track the trip".tr, + isTopic: false, + tone: 'tone1', + driverList: [rideId, driverId], + ); + // حفظ آخر توكن + box.write(BoxName.tokenParent, tokenParent); + } + box.write(BoxName.parentTripSelected, true); } } @@ -3009,95 +4242,47 @@ class MapPassengerController extends GetxController { } } - void handleResponse(Map res1) { - if (res1['message'] == "No passenger found for the given phone number") { - Get.defaultDialog( - title: "No user found for the given phone number".tr, - titleStyle: AppStyle.title, - content: Column( - children: [ - Text( - "No passenger found for the given phone number".tr, - style: AppStyle.title, - ), - Text( - "Send Intaleq app to him".tr, - style: AppStyle.title.copyWith(color: AppColor.greenColor), - ) - ], - ), - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - var phone = box.read(BoxName.countryCode) == 'Egypt' - ? '+2${box.read(BoxName.sosPhonePassenger)}' - : '+962${box.read(BoxName.sosPhonePassenger)}'; - var message = '''Dear , - - 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location. - - 👉 Download link: - Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride] - iOS [https://getapp.cc/app/6458734951] - - I look forward to keeping you close during my adventure! - - Intaleq ,''' - .tr; - launchCommunication('whatsapp', phone, message); - }), - cancel: MyElevatedButton( - title: 'No'.tr, - onPressed: () { - Get.back(); - })); - } else if (res1['status'] == 'success') { - var tokenParent = (res1['data'][0]['token']); - Get.snackbar("The invitation was sent successfully".tr, '', - backgroundColor: AppColor.greenColor); - // firebaseMessagesController.sendNotificationToPassengerToken( - // "Trip Monitoring".tr, - // "Trip Monitoring".tr, - // tokenParent, - // [rideId, driverId], - // 'order1', - // ); - NotificationService.sendNotification( - target: tokenParent.toString(), - title: "Trip Monitoring".tr, - body: "Trip Monitoring".tr, - isTopic: false, // Important: this is a token - tone: 'tone1', - driverList: [rideId, driverId], - ); - box.write(BoxName.parentTripSelected, true); - box.write(BoxName.tokenParent, tokenParent); - } - } - LatLng driverLocationToPassenger = const LatLng(32, 35); Future getDriverCarsLocationToPassengerAfterApplied() async { - driverCarsLocationToPassengerAfterApplied = []; - + // 1. جلب البيانات من السيرفر var res = await CRUD().get( link: AppLink.getDriverCarsLocationToPassengerAfterApplied, payload: {'driver_id': driverId}); - datadriverCarsLocationToPassengerAfterApplied = jsonDecode(res); - driverLocationToPassenger = LatLng( - double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['latitude']), - double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['longitude'])); - driverCarsLocationToPassengerAfterApplied.add(LatLng( - double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['latitude']), - double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['longitude']))); - CarLocationModel model = CarLocationModel.fromJson( - datadriverCarsLocationToPassengerAfterApplied['message'][0]); - carLocationsModels.add(model); + if (res != 'failure') { + datadriverCarsLocationToPassengerAfterApplied = jsonDecode(res); + + if (datadriverCarsLocationToPassengerAfterApplied['message'] != null && + datadriverCarsLocationToPassengerAfterApplied['message'].isNotEmpty) { + var _data = datadriverCarsLocationToPassengerAfterApplied['message'][0]; + + // تحديث إحداثيات السائق الحالية + LatLng newDriverPos = LatLng( + double.parse(_data['latitude']), double.parse(_data['longitude'])); + + driverLocationToPassenger = newDriverPos; + driverCarsLocationToPassengerAfterApplied.add(newDriverPos); + + // 2. تنظيف الخريطة من السيارات الوهمية والقديمة (الإبقاء فقط على السائق والمسار) + clearMarkersExceptStartEndAndDriver(); + + // 3. تحديث ماركر السائق (تحريكه) + reloadMarkerDriverCarsLocationToPassengerAfterApplied(); + + // 4. رسم/تحديث خط المسار بين السائق والراكب + // نتحقق أننا في حالة تستدعي الرسم + // if (rideTimerBegin || + // statusRide == 'Apply' || + // currentRideState.value == RideState.driverApplied || + // currentRideState.value == RideState.inProgress) { + // await drawDriverPathOnly(newDriverPos, passengerLocation); + // } + + // // 5. تحديث الكاميرا لتشمل السائق والراكب (اختياري: يمكنك وضع شرط لعدم الازعاج اذا حرك المستخدم الخريطة) + // _fitCameraToPoints(newDriverPos, passengerLocation); + } + } + // 6. تحديث الواجهة بعد انتهاء كل العمليات update(); } @@ -3136,6 +4321,22 @@ class MapPassengerController extends GetxController { // final int updateIntervalMs = 100; // Update every 100ms // final double minMovementThreshold = // 1.0; // Minimum movement in meters to trigger update + void clearMarkersExceptStartEndAndDriver() { + markers.removeWhere((marker) { + String id = marker.markerId.value; + // لا تحذف نقطة البداية + if (id == 'start') return false; + // لا تحذف نقطة النهاية + if (id == 'end') return false; + // لا تحذف السائق الحالي + if (id == currentDriverMarkerId) return false; + + // احذف أي شيء آخر (مثل السيارات التي ظهرت وقت البحث) + return true; + }); + + // ملاحظة: لا نستدعي update() هنا لأننا سنستدعيها في نهاية الدالة الرئيسية + } void clearMarkersExceptStartEnd() { Set markersToRemove = markers @@ -3150,36 +4351,120 @@ class MapPassengerController extends GetxController { update(); } + // 1. تعريف ID ثابت للسائق طوال الرحلة + String get currentDriverMarkerId => 'driver_marker_$driverId'; + void reloadMarkerDriverCarsLocationToPassengerAfterApplied() { - // clearMarkersExceptStartEnd(); + if (datadriverCarsLocationToPassengerAfterApplied == null || + datadriverCarsLocationToPassengerAfterApplied['message'] == null || + datadriverCarsLocationToPassengerAfterApplied['message'].isEmpty) { + return; + } - LatLng driverPosition = LatLng( - double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['latitude']), - double.parse(datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['longitude'])); + var driverData = + datadriverCarsLocationToPassengerAfterApplied['message'][0]; - double heading = double.parse( - datadriverCarsLocationToPassengerAfterApplied['message'][0]['heading'] - .toString()); + // جلب الإحداثيات الجديدة + LatLng newPosition = LatLng(double.parse(driverData['latitude'].toString()), + double.parse(driverData['longitude'].toString())); - BitmapDescriptor icon = - datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['model'] - .toString() - .contains('دراجة') || - datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['make'] - .toString() - .contains('دراجة') - ? motoIcon - : datadriverCarsLocationToPassengerAfterApplied['message'][0] - ['gender'] == - 'Female' - ? ladyIcon - : carIcon; + double newHeading = + double.tryParse(driverData['heading'].toString()) ?? 0.0; - _updateMarkerPosition(driverPosition, heading, icon); + // تحديد الأيقونة + BitmapDescriptor icon; + if (driverData['model'].toString().contains('دراجة') || + driverData['make'].toString().contains('دراجة')) { + icon = motoIcon; + } else if (driverData['gender'] == 'Female') { + icon = ladyIcon; + } else { + icon = carIcon; + } + + // 2. البحث عن الماركر القديم وتحديثه أو إنشاء جديد + final MarkerId markerId = MarkerId(currentDriverMarkerId); + + // التحقق هل الماركر موجود مسبقاً؟ + final int existingIndex = markers.indexWhere((m) => m.markerId == markerId); + + if (existingIndex != -1) { + // الماركر موجود، نقوم بتحريكه (Animation) + Marker oldMarker = markers[existingIndex]; + _smoothlyUpdateMarker(oldMarker, newPosition, newHeading, icon); + } else { + // الماركر غير موجود، نقوم بإنشائه + markers.add(Marker( + markerId: markerId, + position: newPosition, + rotation: newHeading, + icon: icon, + anchor: const Offset(0.5, 0.5), // مهم لكي تدور السيارة حول مركزها + infoWindow: InfoWindow(title: driverName), + )); + update(); // تحديث الخريطة + } + } + + // التأكد من دالة التحريك السلس + void _smoothlyUpdateMarker(Marker oldMarker, LatLng newPosition, + double newHeading, BitmapDescriptor icon) { + // إذا كانت المسافة صغيرة جداً لا داعي للتحريك (لتقليل الوميض) + double distance = Geolocator.distanceBetween( + oldMarker.position.latitude, + oldMarker.position.longitude, + newPosition.latitude, + newPosition.longitude); + + if (distance < 2.0) return; + + final String markerIdKey = oldMarker.markerId.value; + + // إلغاء أي أنيميشن سابق لنفس الماركر + _animationTimers[markerIdKey]?.cancel(); + + int ticks = 0; + const int totalSteps = 20; // عدد الخطوات (نعومة الحركة) + const int stepDuration = 50; // سرعة التحديث بالميلي ثانية (المجموع 1 ثانية) + + double latStep = + (newPosition.latitude - oldMarker.position.latitude) / totalSteps; + double lngStep = + (newPosition.longitude - oldMarker.position.longitude) / totalSteps; + double headingStep = (newHeading - oldMarker.rotation) / totalSteps; + + // معالجة مشكلة الدوران (مثلاً الانتقال من 350 درجة إلى 10 درجات) + if (headingStep.abs() > 180) { + // منطق لضبط الدوران في الاتجاه الأقرب (اختياري) + } + + LatLng currentPos = oldMarker.position; + double currentHeading = oldMarker.rotation; + + _animationTimers[markerIdKey] = + Timer.periodic(const Duration(milliseconds: stepDuration), (timer) { + ticks++; + + currentPos = + LatLng(currentPos.latitude + latStep, currentPos.longitude + lngStep); + currentHeading += headingStep; + + // تحديث القائمة + int index = markers.indexWhere((m) => m.markerId.value == markerIdKey); + if (index != -1) { + markers[index] = oldMarker.copyWith( + positionParam: currentPos, + rotationParam: currentHeading, + iconParam: icon, // تحديث الأيقونة في حال تغيرت + ); + update(); // تحديث الواجهة في كل خطوة + } + + if (ticks >= totalSteps) { + timer.cancel(); + _animationTimers.remove(markerIdKey); + } + }); } void _updateMarkerPosition( @@ -3211,25 +4496,19 @@ class MapPassengerController extends GetxController { mapController?.animateCamera(CameraUpdate.newLatLng(newPosition)); } - // @override - // void onClose() { - // _timer?.cancel(); - // _animationTimers.forEach((_, timer) => timer.cancel()); - // _animationTimers.clear(); - // super.onClose(); - // } @override void onClose() { print( "--- MapPassengerController: Closing and cleaning up all resources. ---"); - // 1. إلغاء المؤقتات الفردية - // Using ?.cancel() is safe even if the timer is null - markerReloadingTimer!.cancel(); - markerReloadingTimer1!.cancel(); - markerReloadingTimer2!.cancel(); + // 1. إلغاء المؤقتات الفردية (باستخدام ?. الآمن) + markerReloadingTimer?.cancel(); + markerReloadingTimer1?.cancel(); + markerReloadingTimer2?.cancel(); timerToPassengerFromDriverAfterApplied?.cancel(); _timer?.cancel(); + _masterTimer?.cancel(); // (أضف المؤقت الرئيسي) + _camThrottle?.cancel(); // (أضف مؤقت الكاميرا) // 2. إلغاء جميع المؤقتات في الخريطة (للتحريكات السلسة) _animationTimers.forEach((key, timer) { @@ -3238,7 +4517,6 @@ class MapPassengerController extends GetxController { _animationTimers.clear(); // 3. إغلاق متحكمات البث (StreamControllers) لمنع تسريب الذاكرة - // Using .close() is the correct way to shut down a stream if (!_timerStreamController.isClosed) { _timerStreamController.close(); } @@ -3307,12 +4585,12 @@ class MapPassengerController extends GetxController { "id": rideId.toString(), // Convert to String "status": 'notApplyFromAnyDriver' }); - if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { - CRUD().post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: { - "id": rideId.toString(), // Convert to String - "status": 'notApplyFromAnyDriver' - }); - } + + CRUD().post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: { + "id": rideId.toString(), // Convert to String + "status": 'notApplyFromAnyDriver' + }); + rideConfirm = false; statusRide == 'Cancel'; isSearchingWindow = false; @@ -3331,42 +4609,43 @@ class MapPassengerController extends GetxController { Future cancelRide() async { clearPlacesDestination(); clearPolyline(); - // clearPolylineAll(); data = []; changeCancelRidePageShow(); + if (rideId != 'yet') { Log.print('cancelRide: 1'); - // await firebaseMessagesController.sendNotificationToDriverMAP( - // 'Cancel Trip', - // 'Trip Cancelled'.tr, - // driverToken.toString(), - // [], - // 'cancel', - // ); await NotificationService.sendNotification( + category: 'Cancel Trip', target: driverToken.toString(), title: 'Cancel Trip'.tr, body: 'Cancel Trip'.tr, - isTopic: false, // Important: this is a token + isTopic: false, tone: 'tone1', driverList: [], ); await Future.wait([ - CRUD().post(link: AppLink.updateRides, payload: { - "id": rideId.toString(), // Convert to String - "status": 'Cancel' - }), - CRUD().post(link: AppLink.updateDriverOrder, payload: { - "order_id": rideId.toString(), // Convert to String - "status": 'Cancel' - }), - CRUD().post(link: AppLink.updateWaitingTrip, payload: { - "id": rideId.toString(), // Convert to String - "status": 'Cancel' - }), + CRUD().post( + link: AppLink.updateRides, + payload: {"id": rideId.toString(), "status": 'Cancel'}), + CRUD().post( + link: "${AppLink.server}/ride/rides/update.php", + payload: {"id": rideId.toString(), "status": 'Cancel'}), + CRUD().post( + link: AppLink.updateDriverOrder, + payload: {"order_id": rideId.toString(), "status": 'Cancel'}), + CRUD().post( + link: AppLink.updateWaitingTrip, + payload: {"id": rideId.toString(), "status": 'Cancel'}), ]); } - // Future.delayed(const Duration(seconds: 1)); + + // ---!! الإضافة الحاسمة لحل مشكلة "cancelled" !! --- + Log.print( + '[cancelRide] User cancelled. Setting state and stopping timers.'); + currentRideState.value = RideState.cancelled; // 1. تعيين الحالة + stopAllTimers(); // 2. إيقاف المؤقت الرئيسي + // --- نهاية الإضافة --- + Get.offAll(() => const MapPagePassenger()); } @@ -3598,7 +4877,7 @@ class MapPassengerController extends GetxController { final lng = passengerLocation.longitude; // نصف قطر البحث بالكيلومتر - const radiusKm = 200.0; + const radiusKm = 45.0; // حساب النطاق الجغرافي (Bounding Box) لإرساله للسيرفر final latDelta = _kmToLatDelta(radiusKm); @@ -4004,7 +5283,6 @@ class MapPassengerController extends GetxController { Timer? _camThrottle; DateTime _lastUiUpdate = DateTime.fromMillisecondsSinceEpoch(0); -// نادِها في onInit مثلاً Future detectPerfMode() async { try { if (GetPlatform.isAndroid) { @@ -4299,12 +5577,12 @@ class MapPassengerController extends GetxController { (_locationData.latitude != null && _locationData.longitude != null ? LatLng(_locationData.latitude!, _locationData.longitude!) : null)!; - getLocationArea(passengerLocation.latitude, passengerLocation.longitude); - Log.print('AppLink.endPoint: ${AppLink.endPoint}'); + // getLocationArea(passengerLocation.latitude, passengerLocation.longitude); + // Log.print('AppLink.endPoint: ${AppLink.endPoint}'); // Log.print('BoxName.serverChosen: ${box.read(BoxName.serverChosen)}'); newStartPointLocation = passengerLocation; - Log.print('passengerLocation: $passengerLocation'); + // Log.print('passengerLocation: $passengerLocation'); speed = _locationData.speed!; // //print location details isLoading = false; @@ -4676,86 +5954,347 @@ class MapPassengerController extends GetxController { stopPoints.remove(stop); update(); // Trigger a rebuild of the UI } +// [تعديل] نحتاج هذه المكتبات لإرسال طلب HTTP مع هيدر - getDirectionMap(String origin, destination, +// ... (باقي imports الخاصة بك) +// داخل MapPassengerController + // Future getReverseGeocoding(LatLng location) async { + // final lat = location.latitude; + // final lon = location.longitude; + + // // بناء رابط الـ Reverse Geocoding + // final url = + // 'https://geocode.intaleq.xyz/reverse_geocode.php?lat=$lat&lon=$lon'; + + // try { + // // استخدام دالة CRUD للطلب (نفترض أن CRUD تستخدم http.get أو ما شابه) + // final response = await CRUD().get(link: url, payload: {}); + + // if (response != 'failure') { + // final data = jsonDecode(response); + // // if (data['status'] == 'ok') { + // // نفضل استخدام display_name أو neighbourhood إذا كان متاحًا + // String name = data['display_name'] ?? + // data['neighbourhood'] ?? + // 'Unknown Location'.tr; + // return name; + // // } + // } + // } catch (e) { + // Log.print('Error in Reverse Geocoding: $e'); + // } + + // // العودة لقيمة افتراضية في حالة الفشل + // return 'Unknown Location'.tr; + // } + + Future getReverseGeocoding(LatLng location) async { + final lat = location.latitude; + final lon = location.longitude; + final url = + 'https://geocode.intaleq.xyz/reverse_geocode.php?lat=$lat&lon=$lon'; + + try { + final response = await http.get(Uri.parse(url)); + + // Log raw response for debugging + + // Check if the request was successful + if (response.statusCode == 200) { + String body = response.body.trim(); + + // Validate it's actual JSON + if (body.startsWith('{') && body.endsWith('}')) { + final data = jsonDecode(body); + + // Handle case where API returns {"status":"ok", ...} + if (data is Map && data['status'] == 'ok') { + String? name = data['display_name'] ?? data['neighbourhood']; + return name ?? 'Unknown Location'.tr; + } else { + // API returned JSON but not with "status: ok" + return 'Unknown Location'.tr; + } + } else { + // Not valid JSON (e.g., just "ok" or error message) + print('[WARNING] Invalid JSON: $body'); + return 'Unknown Location'.tr; + } + } else { + print('[ERROR] HTTP ${response.statusCode}: ${response.body}'); + return 'Unknown Location'.tr; + } + } catch (e) { + print('Error in Reverse Geocoding: $e'); + return 'Unknown Location'.tr; + } + } + + bool isDrawingRoute = false; + showDrawingBottomSheet() { + Get.bottomSheet( + Container( + width: double.infinity, + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + CircularProgressIndicator( + color: AppColor.primaryColor, + ), + const SizedBox(height: 15), + Text( + 'Drawing route on map...'.tr, + style: AppStyle.title.copyWith(fontSize: 16), + ), + const SizedBox(height: 5), + Text( + 'Please wait while we prepare your trip.'.tr, + style: TextStyle(color: Colors.grey[600]), + ), + ], + ), + ), + isDismissible: false, + enableDrag: false, + ); + } + + String dynamicApiUrl = 'https://routec.intaleq.xyz/route'; + Future getDistanceFromDriverAfterAcceptedRide( + String origin, String destination) async { + String apiKey = Env.mapKeyOsm; // مفتاح API الخاص بك + if (origin.isEmpty) { + origin = + '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; + } + // 2. بناء الرابط (URI) + // Waypoints غير مدعومة حالياً في OSRM، لذلك تم تجاهلها + var uri = Uri.parse( + '$dynamicApiUrl?origin=$origin&destination=$destination&steps=false&overview=false'); + Log.print('uri: ${uri}'); + + // 3. إرسال الطلب مع الهيدر + http.Response response; + Map responseData; + + try { + response = await http.get( + uri, + headers: { + 'X-API-KEY': apiKey, + }, + ).timeout(const Duration(seconds: 20)); // تايم آوت 20 ثانية + + if (response.statusCode != 200) { + print('Error from API: ${response.statusCode}'); + isLoading = false; + update(); + return; // خروج في حالة الخطأ + } + if (Get.isBottomSheetOpen ?? false) { + Get.back(); // لإغلاق شاشة "جاري الرسم" + } + isDrawingRoute = false; // Reset state + + responseData = json.decode(response.body); + Log.print('responseData: ${responseData}'); + + if (responseData['status'] != 'ok') { + print('API returned an error: ${responseData['message']}'); + isLoading = false; + update(); + return; // خروج في حالة خطأ منطقي (مثل "no path") + } + } catch (e) { + print('Failed to get directions: $e'); + isLoading = false; + update(); + return; // خروج عند فشل الاتصال + } + } + + // (b = 1.5348) هو المعامل الذي تم حسابه من مقارنة 60 رحلة بين Google و OSRM + double kDurationScalar = + 1.5348; //this from colab 60 random locations from google and routec +// LatLng endPoint=LatLng(33, 36); + Future getDirectionMap(String origin, String destination, [List waypoints = const []]) async { isLoading = true; + isDrawingRoute = true; update(); - remainingTime = 25; //to make cancel every call - // startCarLocationSearch(box.read(BoxName.carType)); + if (isDrawingRoute) showDrawingBottomSheet(); + // --- هذا الجزء يبقى كما هو (تحميل السيارات، الخ) --- + remainingTime = 25; await getCarsLocationByPassengerAndReloadMarker( box.read(BoxName.carType), 5000); - // await getCarsLocationByPassengerAndReloadMarker(); var coordDestination = destination.split(','); double latPassengerDestination = double.parse(coordDestination[0]); double lngPassengerDestination = double.parse(coordDestination[1]); myDestination = LatLng(latPassengerDestination, lngPassengerDestination); if (origin.isEmpty) { origin = - '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; //todo + '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; } isLoading = false; + update(); - var url = - ('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang) ?? 'ar'}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}'); - if (waypoints.isNotEmpty) { - String formattedWaypoints = waypoints.join('|'); - url += '&waypoints=$formattedWaypoints'; + + // --- [تعديل] بناء الرابط والاتصال بالـ API الجديد --- + + // 1. تعريف الرابط والمفتاح + // final String countryCode = + // box.read(BoxName.countryCode)?.toString() ?? 'Jordan'; + + // تحديد رابط API المناسب + String dynamicApiUrl; + + dynamicApiUrl = 'https://routec.intaleq.xyz/route'; + + String apiKey = Env.mapKeyOsm; // مفتاح API الخاص بك + + // 2. بناء الرابط (URI) + // Waypoints غير مدعومة حالياً في OSRM، لذلك تم تجاهلها + var uri = Uri.parse( + '$dynamicApiUrl?origin=$origin&destination=$destination&steps=false&overview=full'); + Log.print('uri: ${uri}'); + + // 3. إرسال الطلب مع الهيدر + http.Response response; + Map responseData; + + try { + response = await http.get( + uri, + headers: { + 'X-API-KEY': apiKey, + }, + ).timeout(const Duration(seconds: 20)); // تايم آوت 20 ثانية + + if (response.statusCode != 200) { + print('Error from API: ${response.statusCode}'); + isLoading = false; + update(); + return; // خروج في حالة الخطأ + } + + responseData = json.decode(response.body); + Log.print('responseData: ${responseData}'); + + if (responseData['status'] != 'ok') { + print('API returned an error: ${responseData['message']}'); + isLoading = false; + update(); + return; // خروج في حالة خطأ منطقي (مثل "no path") + } + } catch (e) { + print('Failed to get directions: $e'); + isLoading = false; + update(); + return; // خروج عند فشل الاتصال } - var response = await CRUD().getGoogleApi(link: url, payload: {}); + // --- نهاية جزء [تعديل] الاتصال --- + + // --- [تعديل] قراءة البيانات من الـ API الجديد --- + // الـ API الجديد لا يرسل 'legs' أو 'routes'، البيانات مباشرة - data = response['routes'][0]['legs']; box.remove(BoxName.tripData); - box.write(BoxName.tripData, response); + box.write( + BoxName.tripData, polylineCoordinate); // [تعديل] حفظ الاستجابة الجديدة - startNameAddress = shortenAddress(data[0]['start_address']); - // print('data[0][start_address]: ${data[0]['start_address']}'); - endNameAddress = shortenAddress(data[0]['end_address']); - isLoading = false; - newStartPointLocation = LatLng( - data[0]["start_location"]['lat'], data[0]["start_location"]['lng']); + isBottomSheetShown = true; - durationToRide = data[0]['duration']['value']; - final String pointsString = - response['routes'][0]["overview_polyline"]["points"]; + // [تعديل] قراءة البولي لاين والزمن والمسافة + // durationToRide = ((responseData['duration_s'] as num) * 1.4).toInt(); + durationToRide = + ((responseData['duration_s'] as num) * kDurationScalar).toInt(); + Log.print('durationToRide: ${durationToRide}'); + final String pointsString = responseData['polyline']; + double distanceOfTrip = (responseData['distance_m'] as num) / 1000.0; + Log.print('distanceOfTrip: ${distanceOfTrip}'); + distance = distanceOfTrip; + Log.print('distance: ${distance}'); + Log.print('distance: ${distance.toString()}'); +// ... داخل getDirectionMap, بعد التحقق من responseData['status'] == 'ok' ... + data = responseData['steps']; +// ... أكمل باقي الكود ... List decodedPoints = await compute(decodePolylineIsolate, pointsString); - // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); + + // مسح الإحداثيات القديمة وإضافة الجديدة + polylineCoordinates.clear(); + // box.remove(BoxName.tripData); for (int i = 0; i < decodedPoints.length; i++) { - // double lat = decodedPoints[i][0].toDouble(); - // double lng = decodedPoints[i][1].toDouble(); polylineCoordinates.add(decodedPoints[i]); } -// Define the northeast and southwest coordinates + box.write(BoxName.tripData, responseData); + if (polylineCoordinates.isEmpty) { + print("Polyline is empty!"); + return; + } + final LatLng startLoc = decodedPoints.first; + final LatLng endLoc = decodedPoints.last; -// Define the northeast and southwest coordinates - final bounds = response["routes"][0]["bounds"]; - LatLng northeast = - LatLng(bounds['northeast']['lat'], bounds['northeast']['lng']); - LatLng southwest = - LatLng(bounds['southwest']['lat'], bounds['southwest']['lng']); + try { + final results = await Future.wait([ + getReverseGeocoding(startLoc), // الطلب الأول (index 0) + getReverseGeocoding(endLoc), // الطلب الثاني (index 1) + ]); -// Create the LatLngBounds object - LatLngBounds boundsData = - LatLngBounds(northeast: northeast, southwest: southwest); + startNameAddress = results[0]; + endNameAddress = results[1]; + } catch (e) { + // في حال حدث خطأ في Future.wait + print("Error in parallel reverse geocoding: $e"); + startNameAddress = 'Unknown Location'.tr; + endNameAddress = 'Unknown Location'.tr; + } + // [تعديل] الـ API الجديد لا يرسل 'start_location' أو 'bounds' + // لذلك سنقوم باشتقاقها مباشرة من البولي لاين + if (Get.isBottomSheetOpen ?? false) { + Get.back(); // لإغلاق شاشة "جاري الرسم" + } + isDrawingRoute = false; // Reset state + // 1. تحديد نقطة البداية والنهاية من البولي لاين + newStartPointLocation = polylineCoordinates.first; + LatLng endLocation = polylineCoordinates.last; -// Fit the camera to the bounds + // 2. إنشاء 'bounds' يدوياً ليناسب الكاميرا + // Find the northeast and southwest points from polyline coordinates + double? minLat, maxLat, minLng, maxLng; + for (LatLng point in polylineCoordinates) { + minLat = minLat == null ? point.latitude : min(minLat!, point.latitude); + maxLat = maxLat == null ? point.latitude : max(maxLat!, point.latitude); + minLng = minLng == null ? point.longitude : min(minLng!, point.longitude); + maxLng = maxLng == null ? point.longitude : max(maxLng!, point.longitude); + } + LatLngBounds boundsData = LatLngBounds( + northeast: LatLng(maxLat!, maxLng!), + southwest: LatLng(minLat!, minLng!)); + + // 3. تحديث الكاميرا (نفس الكود القديم، سيعمل الآن) var cameraUpdate = CameraUpdate.newLatLngBounds(boundsData, 130); mapController!.animateCamera(cameraUpdate); - // getDistanceFromText(data[0]['distance']['text']); - double distanceOfTrip = (data[0]['distance']['value']) / 1000; - distance = distanceOfTrip; + // --- باقي الكود (إضافة العلامات ورسم الخطوط) يبقى كما هو تقريباً --- + durationToAdd = Duration(seconds: durationToRide); hours = durationToAdd.inHours; minutes = (durationToAdd.inMinutes % 60).round(); - // updateCameraForDistanceAfterGetMap(); + markers.clear(); update(); markers.add( Marker( markerId: const MarkerId('start'), - position: newStartPointLocation, + position: newStartPointLocation, // [تعديل] نستخدم النقطة من البولي لاين icon: startIcon, infoWindow: InfoWindow( title: startNameAddress, @@ -4764,12 +6303,11 @@ class MapPassengerController extends GetxController { ), ); -// Add end marker + // Add end marker markers.add( Marker( markerId: const MarkerId('end'), - position: LatLng( - data[0]["end_location"]['lat'], data[0]["end_location"]['lng']), + position: endLocation, // [تعديل] نستخدم النقطة من البولي لاين icon: endIcon, infoWindow: InfoWindow( title: endNameAddress, @@ -4777,28 +6315,16 @@ class MapPassengerController extends GetxController { '$distance ${'KM'.tr} ⌛ ${hours > 0 ? '${'Your Ride Duration is '.tr}$hours ${'H and'.tr} $minutes ${'m'.tr}' : '${'Your Ride Duration is '.tr} $minutes ${'m'.tr}'}'), ), ); -// // Show info windows automatically - // Future.delayed(const Duration(milliseconds: 500), () { - // mapController?.showMarkerInfoWindow(const MarkerId('start')); - // }); - // Future.delayed(const Duration(milliseconds: 500), () { - // mapController?.showMarkerInfoWindow(const MarkerId('end')); - // }); - // update(); if (polyLines.isNotEmpty) { clearPolyline(); } else { - // الآن نقرأ القيمة ونحدد عدد النقاط بناءً عليها - bool lowEndMode = box.read(BoxName.lowEndMode) ?? - false; // الأفضل أن يكون الافتراضي هو الجودة العالية + bool lowEndMode = box.read(BoxName.lowEndMode) ?? false; - // نمرر عدد النقاط المناسب هنا if (Platform.isIOS) { animatePolylineLayered( polylineCoordinates, - maxPoints: - lowEndMode ? 30 : 150, // 30 نقطة لوضع الأداء، 150 للوضع العادي + maxPoints: lowEndMode ? 30 : 150, ); } else { polyLines.add(Polyline( @@ -4819,6 +6345,148 @@ class MapPassengerController extends GetxController { } } +// getDirectionMap(String origin, destination, +// [List waypoints = const []]) async { +// isLoading = true; +// update(); +// remainingTime = 25; //to make cancel every call +// // startCarLocationSearch(box.read(BoxName.carType)); +// await getCarsLocationByPassengerAndReloadMarker( +// box.read(BoxName.carType), 5000); +// // await getCarsLocationByPassengerAndReloadMarker(); +// var coordDestination = destination.split(','); +// double latPassengerDestination = double.parse(coordDestination[0]); +// double lngPassengerDestination = double.parse(coordDestination[1]); +// myDestination = LatLng(latPassengerDestination, lngPassengerDestination); +// if (origin.isEmpty) { +// origin = +// '${passengerLocation.latitude.toString().split(',')[0]},${passengerLocation.longitude.toString().split(',')[1]}'; //todo +// } +// isLoading = false; +// update(); +// var url = +// ('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang) ?? 'ar'}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}'); +// if (waypoints.isNotEmpty) { +// String formattedWaypoints = waypoints.join('|'); +// url += '&waypoints=$formattedWaypoints'; +// } +// var response = await CRUD().getGoogleApi(link: url, payload: {}); + +// data = response['routes'][0]['legs']; +// box.remove(BoxName.tripData); +// box.write(BoxName.tripData, response); + +// startNameAddress = shortenAddress(data[0]['start_address']); +// // print('data[0][start_address]: ${data[0]['start_address']}'); +// endNameAddress = shortenAddress(data[0]['end_address']); +// isLoading = false; +// newStartPointLocation = LatLng( +// data[0]["start_location"]['lat'], data[0]["start_location"]['lng']); + +// durationToRide = data[0]['duration']['value']; +// final String pointsString = +// response['routes'][0]["overview_polyline"]["points"]; +// List decodedPoints = +// await compute(decodePolylineIsolate, pointsString); +// // decodePolyline(response["routes"][0]["overview_polyline"]["points"]); +// for (int i = 0; i < decodedPoints.length; i++) { +// // double lat = decodedPoints[i][0].toDouble(); +// // double lng = decodedPoints[i][1].toDouble(); +// polylineCoordinates.add(decodedPoints[i]); +// } +// // Define the northeast and southwest coordinates + +// // Define the northeast and southwest coordinates +// final bounds = response["routes"][0]["bounds"]; +// LatLng northeast = +// LatLng(bounds['northeast']['lat'], bounds['northeast']['lng']); +// LatLng southwest = +// LatLng(bounds['southwest']['lat'], bounds['southwest']['lng']); + +// // Create the LatLngBounds object +// LatLngBounds boundsData = +// LatLngBounds(northeast: northeast, southwest: southwest); + +// // Fit the camera to the bounds +// var cameraUpdate = CameraUpdate.newLatLngBounds(boundsData, 130); +// mapController!.animateCamera(cameraUpdate); + +// // getDistanceFromText(data[0]['distance']['text']); +// double distanceOfTrip = (data[0]['distance']['value']) / 1000; +// distance = distanceOfTrip; +// durationToAdd = Duration(seconds: durationToRide); +// hours = durationToAdd.inHours; +// minutes = (durationToAdd.inMinutes % 60).round(); +// // updateCameraForDistanceAfterGetMap(); +// markers.clear(); +// update(); +// markers.add( +// Marker( +// markerId: const MarkerId('start'), +// position: newStartPointLocation, +// icon: startIcon, +// infoWindow: InfoWindow( +// title: startNameAddress, +// snippet: '', +// ), +// ), +// ); + +// // Add end marker +// markers.add( +// Marker( +// markerId: const MarkerId('end'), +// position: LatLng( +// data[0]["end_location"]['lat'], data[0]["end_location"]['lng']), +// icon: endIcon, +// infoWindow: InfoWindow( +// title: endNameAddress, +// snippet: +// '$distance ${'KM'.tr} ⌛ ${hours > 0 ? '${'Your Ride Duration is '.tr}$hours ${'H and'.tr} $minutes ${'m'.tr}' : '${'Your Ride Duration is '.tr} $minutes ${'m'.tr}'}'), +// ), +// ); +// // // Show info windows automatically +// // Future.delayed(const Duration(milliseconds: 500), () { +// // mapController?.showMarkerInfoWindow(const MarkerId('start')); +// // }); +// // Future.delayed(const Duration(milliseconds: 500), () { +// // mapController?.showMarkerInfoWindow(const MarkerId('end')); +// // }); +// // update(); + +// if (polyLines.isNotEmpty) { +// clearPolyline(); +// } else { +// // الآن نقرأ القيمة ونحدد عدد النقاط بناءً عليها +// bool lowEndMode = box.read(BoxName.lowEndMode) ?? +// false; // الأفضل أن يكون الافتراضي هو الجودة العالية + +// // نمرر عدد النقاط المناسب هنا +// if (Platform.isIOS) { +// animatePolylineLayered( +// polylineCoordinates, +// maxPoints: +// lowEndMode ? 30 : 150, // 30 نقطة لوضع الأداء، 150 للوضع العادي +// ); +// } else { +// polyLines.add(Polyline( +// polylineId: const PolylineId('route'), +// points: polylineCoordinates, +// width: 6, +// color: AppColor.primaryColor, +// endCap: Cap.roundCap, +// startCap: Cap.roundCap, +// jointType: JointType.round, +// )); +// } + +// rideConfirm = false; +// isMarkersShown = true; + +// update(); +// } +// } + // 1) تقليل النقاط إلى حد أقصى 30 نقطة (مع بداية ونهاية محفوظة وتوزيع متساوٍ) List _downsampleEven(List coords, {int maxPoints = 30}) { if (coords.isEmpty) return const []; @@ -5071,7 +6739,7 @@ class MapPassengerController extends GetxController { final promo = TextEditingController(); bool promoTaken = false; - applyPromoCodeToPassenger(BuildContext context) async { + void applyPromoCodeToPassenger(BuildContext context) async { if (promoTaken == true) { MyDialog().getDialog( 'Promo Already Used'.tr, @@ -5083,8 +6751,8 @@ class MapPassengerController extends GetxController { if (!promoFormKey.currentState!.validate()) return; - // عتبات تفعيل البرومو بالليرة السورية - const double minPromoLowSYP = 16000; // Speed / Balash + // العتبات بالليرة السورية + const double minPromoLowSYP = 17200; // Speed / Balash const double minPromoHighSYP = 20000; // Comfort / Electric / Lady try { @@ -5102,7 +6770,7 @@ class MapPassengerController extends GetxController { return; } - // تحقق أولي: هل عندنا أي فئة حاليًا فوق العتبات لتفعيل البرومو؟ + // هل يوجد فئة مؤهلة أصلاً قبل الخصم؟ final bool eligibleNow = (totalPassengerSpeed >= minPromoLowSYP) || (totalPassengerBalash >= minPromoLowSYP) || (totalPassengerComfort >= minPromoHighSYP) || @@ -5111,8 +6779,10 @@ class MapPassengerController extends GetxController { if (!eligibleNow) { Get.snackbar( - 'Lowest Price Achieved'.tr, 'Cannot apply further discounts.'.tr, - backgroundColor: AppColor.yellowColor); + 'Lowest Price Achieved'.tr, + 'Cannot apply further discounts.'.tr, + backgroundColor: AppColor.yellowColor, + ); return; } @@ -5133,33 +6803,41 @@ class MapPassengerController extends GetxController { final int discountPercentage = int.tryParse(firstElement['amount'].toString()) ?? 0; - // قيمة المحفظة (قد تكون سالبة) + // قيمة المحفظة - قد تكون سالبة final double walletVal = double.tryParse( box.read(BoxName.passengerWalletTotal)?.toString() ?? '0') ?? 0.0; - // دالة مساعدة: تطبق الخصم لكل فئة حسب عتبتها + final bool isWalletNegative = walletVal < 0; + + // -------------------------- + // دالة تُطبّق الخصم دون النزول تحت الحد الأدنى + // -------------------------- double _applyDiscountPerTier({ required double fare, required double minThreshold, required bool isWalletNegative, }) { - if (fare < minThreshold) return fare; // غير مؤهل + if (fare < minThreshold) return fare; // غير مؤهل أصلاً - // منطقك السابق: - // - إذا المحفظة سالبة: fare + (-wallet) - (fare * pct) - // - إذا المحفظة ليست سالبة: fare - (fare * pct) final double discount = fare * (discountPercentage / 100.0); + double result; if (isWalletNegative) { - final double neg = (-1) * walletVal; // walletVal < 0 - return (fare + neg - discount).clamp(0, double.infinity); + double neg = (-1) * walletVal; // walletVal < 0 => neg positive + result = fare + neg - discount; } else { - return (fare - discount).clamp(0, double.infinity); + result = fare - discount; } - } - final bool isWalletNegative = walletVal < 0; + // لا نسمح بالنزول دون الحد الأدنى + if (result < minThreshold) { + result = minThreshold; + } + + // ولا نسمح بمبلغ سالب + return result.clamp(0.0, double.infinity); + } // Comfort totalPassengerComfort = _applyDiscountPerTier( @@ -5196,15 +6874,13 @@ class MapPassengerController extends GetxController { isWalletNegative: isWalletNegative, ); - // (اختياري) لو عندك فئات أخرى تريد تطبيق البرومو عليها، أضفها بنفس النمط. - - // تعديل دخل السائق حسب نسبة البرومو (كما كان في كودك) + // تعديل دخل السائق وفق نسبة الخصم totalDriver = totalDriver - (totalDriver * discountPercentage / 100.0); promoTaken = true; update(); - // مؤثرات نجاح + // مؤثرات Confetti.launch( context, options: const ConfettiOptions(particleCount: 100, spread: 70, y: 0.6), @@ -5237,7 +6913,7 @@ class MapPassengerController extends GetxController { double totalPassengerRayehGaiComfort = 0; double totalPassengerRayehGaiBalash = 0; Future bottomSheet() async { - if (data.isEmpty) return; + // if (data.isEmpty) return; // === إعدادات عامة === const double minFareSYP = 16000; // حد أدنى @@ -5245,6 +6921,10 @@ class MapPassengerController extends GetxController { const double ladyFlatAddon = 2000; // إضافة ثابتة لـ Lady const double airportAddonSYP = 20000; // إضافة المطار + // --- ⬇️ الإضافة الجديدة: إضافة حدود مطار دمشق ⬇️ --- + const double damascusAirportBoundAddon = 140000; // إضافة المطار (حدود) + // --- ⬆️ نهاية الإضافة ⬆️ --- + // كهرباء const double electricPerKmUplift = 400; // زيادة/كم const double electricFlatAddon = 1000; // زيادة ثابتة @@ -5258,7 +6938,7 @@ class MapPassengerController extends GetxController { const double longDistThresholdKm = 35.0; // >35كم const double longTripPerMin = 600.0; const int minuteCapMedium = 60; // سقف دقائق عند >25كم - const int minuteCapLong = 60; // سقف دقائق عند >35كم + const int minuteCapLong = 80; // سقف دقائق عند >35كم const int freeMinutesLong = 10; // عفو 10 دقائق عند >35كم // تخفيضات المسافات الكبيرة للفئات غير Speed @@ -5291,6 +6971,23 @@ class MapPassengerController extends GetxController { s.contains('ملهى ليلي'); } + // --- ⬇️ الإضافة الجديدة: دالة التحقق من حدود المطار ⬇️ --- + // (P1: 33.415313, 36.499687) (P2: 33.400265, 36.531505) + bool _isInsideDamascusAirportBounds(double lat, double lng) { + final double northLat = 33.415313; + final double southLat = 33.400265; + final double eastLng = 36.531505; + final double westLng = 36.499687; + + // التحقق من خط العرض (بين الشمال والجنوب) + bool isLatInside = (lat <= northLat) && (lat >= southLat); + // التحقق من خط الطول (بين الشرق والغرب) + bool isLngInside = (lng <= eastLng) && (lng >= westLng); + + return isLatInside && isLngInside; + } + // --- ⬆️ نهاية الإضافة ⬆️ --- + // أسعار الدقيقة من السيرفر final double naturePerMin = naturePrice; // طبيعي final double latePerMin = latePrice; // ليل @@ -5318,6 +7015,18 @@ class MapPassengerController extends GetxController { _isAirport(startNameAddress) || _isAirport(endNameAddress); final bool clubCtx = _isClub(startNameAddress) || _isClub(endNameAddress); + // --- ⬇️ الإضافة الجديدة: التحقق من سياق حدود المطار ⬇️ --- + // !! ⚠️ تأكد من أن هذه هي المتغيرات الصحيحة لإحداثيات نقطة النهاية !! + final bool damascusAirportBoundCtx = _isInsideDamascusAirportBounds( + myDestination.latitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح + myDestination.longitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح + ); + final bool isInDamascusAirportBoundCtx = _isInsideDamascusAirportBounds( + newMyLocation.latitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح + newMyLocation.longitude, // <-- ⚠️ غيّر هذا للمتغير الصحيح + ); + // --- ⬆️ نهاية الإضافة ⬆️ --- + // ====== مسافة مفوترة ====== final double billableDistance = (distance < minBillableKm) ? minBillableKm : distance; @@ -5330,18 +7039,15 @@ class MapPassengerController extends GetxController { isLongSpeed ? longSpeedPerKm : perKmSpeedBaseFromServer; // ====== تخفيضات الفئات الأخرى حسب بُعد الرحلة ====== - // نسبة التخفيض عند >40كم محسوبة مقارنة بسعر Speed الأساسي القادم من السيرفر + // ... (الكود كما هو) ... double reductionPct40 = 0.0; if (perKmSpeedBaseFromServer > 0) { reductionPct40 = (1.0 - (longSpeedPerKm / perKmSpeedBaseFromServer)) .clamp(0.0, maxReductionCap); } - // نسبة التخفيض عند >100كم final double reductionPct100 = (reductionPct40 + extraReduction100).clamp(0.0, maxReductionCap); - - // نحدد أي تخفيض سنستخدمه - double distanceReduction = 0.0; // لا تخفيض افتراضيًا + double distanceReduction = 0.0; if (billableDistance > 100.0) { distanceReduction = reductionPct100; } else if (billableDistance > 40.0) { @@ -5349,45 +7055,38 @@ class MapPassengerController extends GetxController { } // ====== منطق الدقيقة يعمل لكل الأوقات ويتكيّف مع المسافة ====== + // ... (الكود كما هو) ... double effectivePerMin = _perMinuteByTime(currentTime, clubCtx); int billableMinutes = totalMinutes; - if (billableDistance > longDistThresholdKm) { - // >35كم: 600/د + سقف 60 + عفو 10 effectivePerMin = longTripPerMin; final int capped = (billableMinutes > minuteCapLong) ? minuteCapLong : billableMinutes; billableMinutes = capped - freeMinutesLong; if (billableMinutes < 0) billableMinutes = 0; } else if (billableDistance > mediumDistThresholdKm) { - // >25كم و≤35كم: 600/د + سقف 60 (بدون عفو) effectivePerMin = longTripPerMin; billableMinutes = (billableMinutes > minuteCapMedium) ? minuteCapMedium : billableMinutes; } - // ≤25كم: نبقي السعر حسب الوقت بدون سقف/عفو // ====== أسعار/كم قبل التخفيض ====== + // ... (الكود كما هو) ... final double perKmComfortRaw = comfortPrice; final double perKmDelivery = deliveryPrice; final double perKmVanRaw = (familyPrice > 0 ? familyPrice : (speedPrice + 1300)); - // Electric مبني على Comfort final double perKmElectricRaw = perKmComfortRaw + electricPerKmUplift; // ====== تطبيق التخفيضات على الفئات (نفس نسبة Speed للبعيد) ====== - // ملاحظة: Balash يتبع Speed دائمًا (Speed-500) فلا حاجة لتخفيض إضافي له. + // ... (الكود كما هو) ... double perKmComfort = perKmComfortRaw * (1.0 - distanceReduction); double perKmElectric = perKmElectricRaw * (1.0 - distanceReduction); double perKmVan = perKmVanRaw * (1.0 - distanceReduction); - - // نضمن عدم الهبوط تحت الصفر perKmComfort = perKmComfort.clamp(0, double.infinity); perKmElectric = perKmElectric.clamp(0, double.infinity); perKmVan = perKmVan.clamp(0, double.infinity); - - // Awfar/Balash: مرتبط بسرعة Speed بعد التفعيل final double perKmBalash = (perKmSpeed - 500).clamp(0, double.infinity); // ====== دوال الاحتساب ====== @@ -5402,6 +7101,13 @@ class MapPassengerController extends GetxController { fare += flatAddon; if (isLady) fare += ladyFlatAddon; if (airportCtx) fare += airportAddonSYP; + + // --- ⬇️ الإضافة الجديدة: تطبيق إضافة حدود المطار ⬇️ --- + if (damascusAirportBoundCtx || isInDamascusAirportBoundCtx) { + fare += damascusAirportBoundAddon; + } + // --- ⬆️ نهاية الإضافة ⬆️ --- + return _applyMinFare(fare); } @@ -5412,6 +7118,14 @@ class MapPassengerController extends GetxController { double timePart = (billableMinutes * 2) * effectivePerMin; double fare = distPart + timePart; if (airportCtx) fare += airportAddonSYP; + + // --- ⬇️ الإضافة الجديدة: تطبيق إضافة حدود المطار ⬇️ --- + // تنطبق أيضاً على رحلات الذهاب والعودة لأنها "تصل" إلى الوجهة + if (damascusAirportBoundCtx || isInDamascusAirportBoundCtx) { + fare += damascusAirportBoundAddon; + } + // --- ⬆️ نهاية الإضافة ⬆️ --- + return _applyMinFare(fare); } @@ -5469,7 +7183,6 @@ class MapPassengerController extends GetxController { update(); changeBottomSheetShown(); } - // addToken() async { // String fingerPrint = await DeviceHelper.getDeviceFingerprint(); @@ -5751,8 +7464,9 @@ class MapPassengerController extends GetxController { // ], // 'order'); await NotificationService.sendNotification( + category: 'OrderVIP', target: driver['token'].toString(), - title: 'OrderVIP', + title: 'OrderVIP'.tr, body: '$rideId - VIP Trip', isTopic: false, // Important: this is a token tone: 'tone1', @@ -5785,6 +7499,7 @@ class MapPassengerController extends GetxController { // 'cancel', // ); await NotificationService.sendNotification( + category: 'Order VIP Canceld', target: response['previous_driver_token'].toString(), title: 'Order VIP Canceld'.tr, body: 'Passenger cancel order'.tr, @@ -5825,14 +7540,8 @@ class MapPassengerController extends GetxController { } sendToDriverAgain(String token) { - // firebaseMessagesController.sendNotificationToDriverMAP( - // 'Order VIP Canceld'.tr, - // 'Passenger cancel order'.tr, - // token, - // [], - // 'cancel', - // ); NotificationService.sendNotification( + category: 'Order VIP Canceld', target: token.toString(), title: 'Order VIP Canceld'.tr, body: 'Passenger cancel order'.tr, @@ -6026,7 +7735,8 @@ class MapPassengerController extends GetxController { unawaited(_stageNiceToHave()); // ابدأ إعادة تحميل الماركر لكن بثروتل داخلي - startMarkerReloading(); // تأكد أنه مَخنوق التحديث (throttled) + // startMarkerReloading(); // تأكد أنه مَخنوق التحديث (throttled) + _startMasterTimer(); } // === Helpers === @@ -6043,7 +7753,7 @@ class MapPassengerController extends GetxController { await getKazanPercent(); // أسعار السيرفر } catch (_) {} try { - await getRideStatusFromStartApp(); + _checkInitialRideStatus(); // تحقق من حالة الرحلة الحالية } catch (_) {} // لو عندك ضبط “وضع خفيف” حسب الجهاز: _applyLowEndModeIfNeeded(); @@ -6108,42 +7818,6 @@ class MapPassengerController extends GetxController { // لاحقاً فعّل: map.trafficEnabled=false, buildingsEnabled=false, تبسيط polylines... // controller.lowEndMode = true; } - // @override - // void onInit() async { - // mapAPIKEY = await storage.read(key: BoxName.mapAPIKEY); - // // k = await getAIKey('HERE_API'); - // getFavioratePlaces(); - // readyWayPoints(); - // addCustomPicker(); - // addCustomCarIcon(); - // addCustomLadyIcon(); - // addCustomMotoIcon(); - // addCustomStepIcon(); - // addCustomStartIcon(); - // addCustomEndIcon(); - // addToken(); - // await getLocation(); - // addFingerPrint(); - // // getPassengerLocationUniversity(); - // // _initializePolygons(); - // // await addToken(); - // getKazanPercent(); - // getPassengerRate(); - // getRideStatusFromStartApp(); - // reloadStartApp = false; - // startMarkerReloading(); - // Get.put(TextToSpeechController()); - // Get.put(FirebaseMessagesController()); - // box.write(BoxName.carType, 'yet'); - // box.write(BoxName.tipPercentage, '0'); - // Get.put(AudioRecorderController()); - // // await getNearestDriverByPassengerLocation(); - // firstTimeRunToGetCoupon(); - // initilizeGetStorage(); - // cardNumber = await SecureStorage().readData(BoxName.cardNumber); - - // super.onInit(); - // } uploadPassengerLocation() async { await CRUD().post(link: AppLink.addpassengerLocation, payload: { diff --git a/lib/controller/home/points_for_rider_controller.dart b/lib/controller/home/points_for_rider_controller.dart index 5c9a551..10ff0ba 100644 --- a/lib/controller/home/points_for_rider_controller.dart +++ b/lib/controller/home/points_for_rider_controller.dart @@ -112,7 +112,7 @@ class WayPointController extends GetxController { @override void onInit() { - Get.put(LocationController()); + // Get.put(LocationController()); addWayPoints(); myLocation = Get.find().passengerLocation; super.onInit(); diff --git a/lib/controller/home/profile/invit_controller.dart b/lib/controller/home/profile/invit_controller.dart index 329270f..c73c06c 100644 --- a/lib/controller/home/profile/invit_controller.dart +++ b/lib/controller/home/profile/invit_controller.dart @@ -162,7 +162,7 @@ ${'Download the Intaleq app now and enjoy your ride!'.tr} // 2. If it already starts with the country code, we assume it's correct. if (digitsOnly.startsWith('963')) { - return '+$digitsOnly'; + return '$digitsOnly'; } // 3. If it starts with '09' (common local format), remove the leading '0'. @@ -171,7 +171,7 @@ ${'Download the Intaleq app now and enjoy your ride!'.tr} } // 4. Prepend the Syrian country code. - return '+963$digitsOnly'; + return '963$digitsOnly'; } /// **IMPROVEMENT**: This method now uses the new phone formatting logic and diff --git a/lib/controller/local/phone_intel/countries.dart b/lib/controller/local/phone_intel/countries.dart index 13e4bab..528d4fa 100644 --- a/lib/controller/local/phone_intel/countries.dart +++ b/lib/controller/local/phone_intel/countries.dart @@ -6603,7 +6603,7 @@ const List countries = [ code: "SY", dialCode: "963", minLength: 9, - maxLength: 9, + maxLength: 10, ), Country( name: "Taiwan", diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 99c614c..d688007 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -201,7 +201,16 @@ class MyTranslation extends Translations { "Top up Wallet": "تعبئة المحفظة", "Add funds using our secure methods": "أضف رصيداً باستخدام طرقنا الآمنة", - "Speed": "سرعة", + 'Driver is waiting': 'الكابتن في انتظارك', + 'Type your message...': 'اكتب رسالتك...', + 'Driver Accepted Request': 'الكابتن قبل الطلب', + 'Message': 'رسالة', + 'Call': 'اتصال', + "You can call or record audio during this trip.": + "يمكنك الاتصال أو تسجيل صوت أثناء هذه الرحلة.", + "Warning: Speeding detected!": "تحذير: تم الكشف عن تجاوز السرعة!", + 'Fixed Price': 'سعر ثابت', + 'Report': 'إبلاغ', "Comfort": "‏مريحة", "Intaleq Balance": "رصيد انطلق", 'Search for a starting point': 'ابحث عن نقطة انطلاق', @@ -316,6 +325,8 @@ class MyTranslation extends Translations { "Van for familly": "سيارة فان للعائلة", "Are you sure to delete this location?": "هل أنت متأكد من حذف هذا الموقع؟", + 'Change Work location?': 'تغيير موقع العمل؟', + 'Change Home location?': 'تغيير موقع البيت؟', "Submit a Complaint": "تقديم شكوى", "Submit Complaint": "إرسال الشكوى", "No trip history found": "لا يوجد سجل للرحلات", @@ -395,6 +406,41 @@ class MyTranslation extends Translations { "OK": "موافق", "Confirm Pick-up Location": "تأكيد موقع الانطلاق", "Set Location on Map": "حدد الموقع على الخريطة", + 'Leave a detailed comment (Optional)': + 'اترك تعليقاً مفصلاً (اختياري)', + 'Share your experience to help us improve...': + 'شارك تجربتك لمساعدتنا على التحسن...', + 'Your valuable feedback helps us improve our service quality.': + 'ملاحظاتك القيمة تساعدنا في تحسين جودة خدماتنا.', + 'witout zero': 'بدون صفر', + 'Top up Balance': 'اشحن الرصيد', + 'An error occurred': 'حدث خطأ', + 'Send WhatsApp Message': 'إرسال رسالة واتساب', + 'How was your trip with': 'كيف كانت رحلتك مع', + 'Drawing route on map...': 'جارٍ رسم المسار على الخريطة...', + 'Please wait while we prepare your trip.': + 'يرجى الانتظار بينما نحضر رحلتك.', + 'Submit Rating': 'إرسال التقييم', + 'Call Support': 'الاتصال بالدعم', + "You can contact us during working hours from 10:00 - 16:00.": + "يمكنك التواصل معنا خلال ساعات العمل من 10:00 إلى 16:00.", + "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": + """إنطلِق هو التطبيق الأكثر أماناً وموثوقية لمشاركة الركوب والمصمم خصيصاً للركّاب في سوريا. نوفر لك تجربة تنقّل مريحة، محترمة، وبأسعار مناسبة، مع ميزات تضع سلامتك وراحتك في المقام الأول. + +جميع الكباتن لدينا موثوقون، مُؤمَّنون، وتخضع سياراتهم لصيانة دورية يقوم بها مهندسون مختصون لضمان أفضل جودة. كما نقدّم خدمات دعم على الطريق لضمان أن تكون كل رحلة سلسة وخالية من القلق. + +مع إنطلِق، ستستمتع دائماً بالأمان، والجودة، وراحة البال في كل رحلة تقوم بها.""", + 'Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.': + 'وقت العمل من 10:00 صباحاً إلى 16:00 مساءً.\nيمكنك إرسال رسالة واتساب أو بريد إلكتروني.', + 'Sorry': 'عذراً', + "Customer MSISDN doesn’t have customer wallet": + "رقم هاتف العميل لا يحتوي على محفظة عميل", + 'Please enter the number without the leading 0': + 'يرجى إدخال الرقم بدون الصفر الأولي', + 'Please enter your phone number': 'يرجى إدخال رقم هاتفك', + 'Phone number seems too short': 'يبدو أن رقم الهاتف قصير جدًا', + 'No cars are available at the moment. Please try again later.': + 'لا توجد سيارات متاحة حالياً. الرجاء المحاولة مرة أخرى لاحقاً.', "Nearest Car: ~": "أقرب سيارة: ~", "Nearest Car": "أقرب سيارة", "No cars nearby": "لا توجد سيارات قريبة", diff --git a/lib/controller/notification/passenger_notification_controller.dart b/lib/controller/notification/passenger_notification_controller.dart index fb7e617..04c8cb4 100644 --- a/lib/controller/notification/passenger_notification_controller.dart +++ b/lib/controller/notification/passenger_notification_controller.dart @@ -56,6 +56,7 @@ class PassengerNotificationController extends GetxController { // 'iphone_ringtone', // ); await NotificationService.sendNotification( + category: title, target: 'token'.toString(), title: title, body: body.tr, diff --git a/lib/controller/payment/passenger_wallet_history_controller.dart b/lib/controller/payment/passenger_wallet_history_controller.dart index b9f9d4d..33ae390 100644 --- a/lib/controller/payment/passenger_wallet_history_controller.dart +++ b/lib/controller/payment/passenger_wallet_history_controller.dart @@ -31,9 +31,9 @@ class PassengerWalletHistoryController extends GetxController { }); } } catch (e) { - MyDialog().getDialog('An error occurred'.tr, e.toString(), () { - Get.back(); - }); + // MyDialog().getDialog('An error occurred'.tr, '', () { + // Get.back(); + // }); } finally { isLoading = false; update(); diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index c44f88a..15a30e1 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -144,8 +144,9 @@ class PaymentController extends GetxController { // 'cancel', // ); await NotificationService.sendNotification( + category: 'Cancel', target: Get.find().driverToken.toString(), - title: 'Cancel', + title: 'Cancel'.tr, body: 'Trip Cancelled. The cost of the trip will be added to your wallet.' .tr, diff --git a/lib/controller/rate/rate_conroller.dart b/lib/controller/rate/rate_conroller.dart index 77bac9b..8bdd4f4 100644 --- a/lib/controller/rate/rate_conroller.dart +++ b/lib/controller/rate/rate_conroller.dart @@ -9,7 +9,6 @@ import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/map_page_passenger.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; -import '../firebase/firbase_messge.dart'; import '../firebase/notification_service.dart'; import '../payment/payment_controller.dart'; @@ -18,7 +17,7 @@ import '../payment/payment_controller.dart'; class RateController extends GetxController { double selectedRateItemId = -1; TextEditingController comment = TextEditingController(); - String? rideId, passengerId, driverId, price; + String? rideId, passengerId, driverId, driverName, price; late GlobalKey formKey; @override void onInit() { @@ -26,6 +25,7 @@ class RateController extends GetxController { passengerId = Get.arguments['passengerId']; rideId = Get.arguments['rideId']; driverId = Get.arguments['driverId']; + driverName = Get.arguments['driverName']; price = Get.arguments['price']; box.write(BoxName.tipPercentage, '0'); super.onInit(); @@ -61,7 +61,7 @@ class RateController extends GetxController { box.read(BoxName.countryCode) == 'Egypt' ? tip.toStringAsFixed(0) : (tip * 100).toString()); - await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { + await CRUD().postWallet(link: AppLink.addDriversWalletPoints, payload: { 'driverID': Get.find().driverId.toString(), 'paymentID': '${Get.find().rideId}tip', 'amount': box.read(BoxName.countryCode) == 'Egypt' @@ -71,16 +71,10 @@ class RateController extends GetxController { 'token': token1, }); if (res != 'failure') { - // Get.find().sendNotificationToDriverMAP( - // 'You Have Tips'.tr, - // '${'${tip.toString()}\$${' tips\nTotal is'.tr}'} ${tip + (Get.find().totalPassenger)}', - // Get.find().driverToken.toString(), - // [], - // 'ding', - // ); await NotificationService.sendNotification( + category: 'You Have Tips', target: Get.find().driverToken.toString(), - title: 'You Have Tips', + title: 'You Have Tips'.tr, body: '${'${tip.toString()}\$${' tips\nTotal is'.tr}'} ${tip + (Get.find().totalPassenger)}', isTopic: false, // Important: this is a token @@ -91,26 +85,15 @@ class RateController extends GetxController { } } await CRUD().post( - link: "${AppLink.IntaleqSyriaServer}/ride/rate/addRateToDriver.php", - payload: { - 'passenger_id': box.read(BoxName.passengerID).toString(), - 'driver_id': driverId.toString(), - 'ride_id': rideId.toString(), - 'rating': selectedRateItemId.toString(), - 'comment': comment.text, - }); - - if (AppLink.endPoint != AppLink.IntaleqSyriaServer) { - CRUD().post( - link: "${AppLink.endPoint}/ride/rate/addRateToDriver.php", - payload: { - 'passenger_id': box.read(BoxName.passengerID).toString(), - 'driver_id': driverId.toString(), - 'ride_id': rideId.toString(), - 'rating': selectedRateItemId.toString(), - 'comment': comment.text, - }); - } + link: "${AppLink.server}/ride/rate/addRateToDriver.php", + payload: { + 'passenger_id': box.read(BoxName.passengerID).toString(), + 'driver_id': driverId.toString(), + 'ride_id': rideId.toString(), + 'rating': selectedRateItemId.toString(), + 'comment': comment.text, + }, + ); Get.find().restCounter(); Get.offAll(const MapPagePassenger()); diff --git a/lib/env/env.dart b/lib/env/env.dart index 7f8874e..736322a 100644 --- a/lib/env/env.dart +++ b/lib/env/env.dart @@ -10,6 +10,9 @@ abstract class Env { @EnviedField(varName: 'basicCompareFaces', obfuscate: true) static final String basicCompareFaces = _Env.basicCompareFaces; + @EnviedField(varName: 'mapKeyOsm', obfuscate: true) + static final String mapKeyOsm = _Env.mapKeyOsm; + @EnviedField(varName: 'sss_encryptionSalt', obfuscate: true) static final String sss_encryptionSalt = _Env.sss_encryptionSalt; diff --git a/lib/env/env.g.dart b/lib/env/env.g.dart index 2db99d7..caf595d 100644 --- a/lib/env/env.g.dart +++ b/lib/env/env.g.dart @@ -11,71 +11,71 @@ part of 'env.dart'; // generated_from: .env final class _Env { static const List _enviedkeybasicAuthCredentials = [ - 4234915833, - 3928216899, - 3410912984, - 2407692179, - 2446795710, - 2936914067, - 2249400578, - 1163862693, - 2186618797, - 2677973112, - 2210337486, - 2863659743, - 1943484302, - 244978853, - 2460307113, - 3175448389, - 3712650198, - 188576852, - 1433192897, - 350773884, - 907745278, - 2290737213, - 2700419638, - 2264853687, - 1243244371, - 4034005781, - 2222610217, - 963001681, - 3316612901, - 92693012, - 2456022798, + 43044676, + 864909550, + 4242758126, + 2514357568, + 1555483995, + 1142069238, + 1205503833, + 1967239324, + 1860681093, + 3229905743, + 3243147856, + 1002171964, + 2971668333, + 3009646440, + 331994719, + 3443456963, + 813108254, + 2398669640, + 2665467623, + 1880765956, + 3552236665, + 3431379130, + 4129886444, + 2497907908, + 2195738790, + 3192394429, + 1329286224, + 3931833945, + 353914251, + 1168254924, + 1798346792, ]; static const List _envieddatabasicAuthCredentials = [ - 4234915726, - 3928216882, - 3410912950, - 2407692286, - 2446795727, - 2936914146, - 2249400689, - 1163862735, - 2186618836, - 2677973006, - 2210337465, - 2863659701, - 1943484408, - 244978847, - 2460307143, - 3175448372, - 3712650148, - 188576781, - 1433192843, - 350773804, - 907745214, - 2290737164, - 2700419585, - 2264853636, - 1243244388, - 4034005837, - 2222610267, - 963001609, - 3316612937, - 92693078, - 2456022882, + 43044659, + 864909471, + 4242758016, + 2514357549, + 1555483946, + 1142069127, + 1205503786, + 1967239414, + 1860681212, + 3229905721, + 3243147815, + 1002171990, + 2971668251, + 3009646418, + 331994673, + 3443456946, + 813108332, + 2398669585, + 2665467565, + 1880766036, + 3552236601, + 3431379083, + 4129886427, + 2497907959, + 2195738769, + 3192394469, + 1329286178, + 3931833857, + 353914343, + 1168254862, + 1798346820, ]; static final String basicAuthCredentials = String.fromCharCodes( @@ -88,65 +88,65 @@ final class _Env { _enviedkeybasicAuthCredentials[i])); static const List _enviedkeybasicCompareFaces = [ - 3670186193, - 1875065285, - 413592326, - 3628880127, - 497603442, - 1766586063, - 2090599229, - 2847291910, - 3987981166, - 2577739453, - 1431163461, - 65696213, - 616553583, - 758841712, - 3076780249, - 1221199957, - 331246655, - 422005507, - 332597777, - 2348587503, - 2833388866, - 1661320722, - 3311668374, - 361129657, - 2620096974, - 3531121486, - 3707762195, - 1920617253, + 3727333105, + 1843694516, + 3611997723, + 2407362513, + 1356628908, + 2977101071, + 1936901014, + 2964813805, + 197648233, + 3590224812, + 3940587702, + 2375653923, + 764212019, + 500016560, + 3035095344, + 1159165809, + 3677722776, + 3500824290, + 3405327942, + 2095637207, + 3941804910, + 2161512590, + 1479882886, + 327839885, + 153188006, + 365671944, + 436594973, + 98326119, ]; static const List _envieddatabasicCompareFaces = [ - 3670186155, - 1875065263, - 413592435, - 3628880021, - 497603358, - 1766586042, - 2090599244, - 2847292000, - 3987981086, - 2577739479, - 1431163519, - 65696187, - 616553502, - 758841602, - 3076780160, - 1221199935, - 331246671, - 422005571, - 332597792, - 2348587480, - 2833388913, - 1661320741, - 3311668430, - 361129675, - 2620096918, - 3531121442, - 3707762257, - 1920617289, + 3727333003, + 1843694558, + 3611997806, + 2407362491, + 1356628928, + 2977101178, + 1936901095, + 2964813707, + 197648153, + 3590224838, + 3940587660, + 2375653965, + 764212034, + 500016578, + 3035095401, + 1159165723, + 3677722856, + 3500824226, + 3405327991, + 2095637216, + 3941804893, + 2161512633, + 1479882974, + 327839999, + 153188094, + 365672036, + 436595039, + 98326027, ]; static final String basicCompareFaces = String.fromCharCodes( @@ -157,136 +157,188 @@ final class _Env { ).map((int i) => _envieddatabasicCompareFaces[i] ^ _enviedkeybasicCompareFaces[i])); + static const List _enviedkeymapKeyOsm = [ + 1880725877, + 1912740320, + 3266542548, + 2054336914, + 1379127872, + 227009578, + 1846478925, + 2878974208, + 3213278626, + 1144816508, + 2203359042, + 735878522, + 2466200304, + 946402320, + 879102837, + 2671812745, + 3872307814, + 4055984631, + 763879643, + 2036980354, + ]; + + static const List _envieddatamapKeyOsm = [ + 1880725784, + 1912740225, + 3266542520, + 2054337014, + 1379127845, + 227009628, + 1846478861, + 2878974322, + 3213278669, + 1144816393, + 2203359030, + 735878431, + 2466200285, + 946402420, + 879102746, + 2671812837, + 3872307722, + 4055984534, + 763879593, + 2036980465, + ]; + + static final String mapKeyOsm = String.fromCharCodes(List.generate( + _envieddatamapKeyOsm.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatamapKeyOsm[i] ^ _enviedkeymapKeyOsm[i])); + static const List _enviedkeysss_encryptionSalt = [ - 3363710070, - 4271671361, - 1265812073, - 1283668769, - 4162856663, - 761049106, - 1572031423, - 4193649778, - 1826833844, - 3927730830, - 3291753144, - 2560155452, - 2345185371, - 1056977461, - 698954416, - 2553363475, - 2947812014, - 1283225378, - 4289553862, - 1542386655, - 1827775001, - 1077873162, - 1858272745, - 499846513, - 701552642, - 2360041577, - 1152655624, - 3490004507, - 898560501, - 1333751609, - 4168446801, - 3381376174, - 1704048368, - 284631013, - 2153842081, - 331530398, - 3998206813, - 2500954056, - 4084136045, - 4167242937, - 208606685, - 3900195215, - 2793181355, - 131568241, - 1382602125, - 3695432877, - 818015198, - 2083106888, - 46646629, - 2704955575, - 99966621, - 2095833913, - 1835928593, - 4112801470, - 1337663931, - 1986459651, - 1312582186, - 2401667805, - 4239913855, - 3205692034, - 753076457, - 2877179298, - 2068671395, + 2142255476, + 284366874, + 1270706260, + 748215919, + 3776340499, + 2561096438, + 2457298913, + 2960978234, + 3161273143, + 3930985837, + 1018819817, + 2074811740, + 3001526957, + 4071104153, + 2899558977, + 2789268373, + 2541058341, + 1634579503, + 997672564, + 2969112716, + 2447544998, + 1502588636, + 1988629125, + 2924861119, + 2138175500, + 2187714698, + 1601108451, + 228144794, + 2397079823, + 3312472734, + 2136600304, + 998965048, + 129266895, + 4206281394, + 1306643977, + 3223055380, + 1131453015, + 1087145342, + 259389477, + 315073875, + 112155829, + 841060857, + 3480083606, + 3550310828, + 1157550670, + 3157014039, + 2803451551, + 3492161659, + 296978924, + 3653454494, + 3228245663, + 2933207844, + 571656288, + 748970365, + 3674906033, + 659647310, + 2533357593, + 2934855029, + 11938227, + 2934294970, + 940307896, + 2899367891, + 1005948227, ]; static const List _envieddatasss_encryptionSalt = [ - 3363709964, - 4271671334, - 1265812036, - 1283668823, - 4162856636, - 761049214, - 1572031446, - 4193649687, - 1826833817, - 3927730876, - 3291753172, - 2560155405, - 2345185281, - 1056977497, - 698954432, - 2553363563, - 2947812039, - 1283225454, - 4289553804, - 1542386665, - 1827775086, - 1077873243, - 1858272678, - 499846407, - 701552736, - 2360041483, - 1152655676, - 3490004559, - 898560411, - 1333751674, - 4168446824, - 3381376246, - 1704048258, - 284630941, - 2153842118, - 331530443, - 3998206744, - 2500954033, - 4084135995, - 4167242984, - 208606612, - 3900195322, - 2793181341, - 131568165, - 1382602180, - 3695432937, - 818015210, - 2083106873, - 46646581, - 2704955523, - 99966683, - 2095833964, - 1835928644, - 4112801487, - 1337663956, - 1986459728, - 1312582175, - 2401667717, - 4239913741, - 3205692122, - 753076357, - 2877179360, - 2068671439, + 2142255374, + 284366973, + 1270706297, + 748215833, + 3776340600, + 2561096346, + 2457298824, + 2960978271, + 3161273114, + 3930985823, + 1018819717, + 2074811757, + 3001527031, + 4071104245, + 2899558961, + 2789268461, + 2541058380, + 1634579555, + 997672510, + 2969112762, + 2447545041, + 1502588557, + 1988629194, + 2924861129, + 2138175598, + 2187714792, + 1601108439, + 228144846, + 2397079905, + 3312472797, + 2136600265, + 998965088, + 129266877, + 4206281418, + 1306644078, + 3223055425, + 1131452946, + 1087145223, + 259389555, + 315073794, + 112155900, + 841060748, + 3480083616, + 3550310904, + 1157550599, + 3157014099, + 2803451563, + 3492161546, + 296978876, + 3653454506, + 3228245721, + 2933207921, + 571656245, + 748970252, + 3674906078, + 659647261, + 2533357612, + 2934854957, + 11938241, + 2934295010, + 940307924, + 2899367825, + 1005948207, ]; static final String sss_encryptionSalt = String.fromCharCodes( @@ -298,73 +350,73 @@ final class _Env { _envieddatasss_encryptionSalt[i] ^ _enviedkeysss_encryptionSalt[i])); static const List _enviedkeysss_pass = [ - 2957388960, - 1016568316, - 4031218948, - 3443559542, - 2187924255, - 2971503316, - 1774974948, - 3367538086, - 1707922614, - 4183558157, - 2928123449, - 1864070315, - 1235324979, - 3477070092, - 2220030051, - 235258417, - 3712415255, - 1505115718, - 1498006653, - 3503228559, - 3072328486, - 3341712304, - 467164808, - 2037769495, - 2236257785, - 3903148985, - 754995296, - 3924320121, - 2099864066, - 4025262266, - 1235350657, - 4240041822, + 2936667352, + 876206380, + 3186128085, + 3644475235, + 4171551389, + 3935055651, + 4185160202, + 3383043288, + 3512428989, + 273877880, + 2194175269, + 1682477365, + 3966359733, + 1028886641, + 3350459976, + 4292396371, + 3148371564, + 710615900, + 1115304974, + 2505747022, + 3041382642, + 2936086504, + 4085505205, + 108362252, + 2692491002, + 2152838152, + 3563449119, + 2874766139, + 555351262, + 3788871382, + 3226362165, + 1225811350, ]; static const List _envieddatasss_pass = [ - 2957389015, - 1016568205, - 4031219050, - 3443559451, - 2187924334, - 2971503269, - 1774974871, - 3367538124, - 1707922639, - 4183558267, - 2928123470, - 1864070365, - 1235324937, - 3477070178, - 2220029970, - 235258435, - 3712415354, - 1505115679, - 1498006583, - 3503228639, - 3072328550, - 3341712257, - 467164863, - 2037769508, - 2236257742, - 3903148929, - 754995256, - 3924320011, - 2099864154, - 4025262294, - 1235350723, - 4240041778, + 2936667311, + 876206429, + 3186128059, + 3644475150, + 4171551468, + 3935055698, + 4185160313, + 3383043250, + 3512428996, + 273877774, + 2194175314, + 1682477379, + 3966359695, + 1028886559, + 3350459961, + 4292396321, + 3148371457, + 710615813, + 1115305028, + 2505746974, + 3041382578, + 2936086489, + 4085505154, + 108362303, + 2692490957, + 2152838192, + 3563449159, + 2874766153, + 555351174, + 3788871354, + 3226362231, + 1225811450, ]; static final String sss_pass = String.fromCharCodes(List.generate( @@ -374,21 +426,21 @@ final class _Env { ).map((int i) => _envieddatasss_pass[i] ^ _enviedkeysss_pass[i])); static const List _enviedkeyaddd = [ - 3802864355, - 694127154, - 2637747405, - 3297266250, - 1735467737, - 547178785, + 856359347, + 522158964, + 1370037474, + 3606466936, + 960432668, + 1732434775, ]; static const List _envieddataaddd = [ - 3802864289, - 694127198, - 2637747343, - 3297266214, - 1735467671, - 547178829, + 856359409, + 522158872, + 1370037408, + 3606466836, + 960432722, + 1732434747, ]; static final String addd = String.fromCharCodes(List.generate( @@ -398,35 +450,35 @@ final class _Env { ).map((int i) => _envieddataaddd[i] ^ _enviedkeyaddd[i])); static const List _enviedkeypassnpassenger = [ - 735262426, - 1065404328, - 2592209502, - 1331943947, - 3853096721, - 1438384492, - 3632062475, - 3777234152, - 2773181059, - 2100082350, - 241029789, - 2804430832, - 943434224, + 1792474850, + 1924104668, + 391311376, + 1647542146, + 668170995, + 988459319, + 1243891080, + 2395250797, + 2083894806, + 163003598, + 2320848855, + 3562560371, + 3133824981, ]; static const List _envieddatapassnpassenger = [ - 735262386, - 1065404362, - 2592209465, - 1331944041, - 3853096824, - 1438384408, - 3632062569, - 3777234096, - 2773181169, - 2100082422, - 241029871, - 2804430770, - 943434114, + 1792474762, + 1924104638, + 391311479, + 1647542240, + 668170906, + 988459331, + 1243891178, + 2395250741, + 2083894884, + 163003542, + 2320848805, + 3562560305, + 3133824935, ]; static final String passnpassenger = String.fromCharCodes(List.generate( @@ -436,15 +488,15 @@ final class _Env { ).map((int i) => _envieddatapassnpassenger[i] ^ _enviedkeypassnpassenger[i])); static const List _enviedkeynewId = [ - 1840427478, - 1515241912, - 727169366, + 3220512096, + 1148287903, + 4066941307, ]; static const List _envieddatanewId = [ - 1840427448, - 1515241949, - 727169313, + 3220512014, + 1148287994, + 4066941196, ]; static final String newId = String.fromCharCodes(List.generate( @@ -454,31 +506,31 @@ final class _Env { ).map((int i) => _envieddatanewId[i] ^ _enviedkeynewId[i])); static const List _enviedkeyallowed = [ - 3245922844, - 3960293110, - 2494038330, - 3383672532, - 2565644717, - 633540861, - 1073844359, - 3761346352, - 3217759142, - 794258953, - 587814512, + 1921270333, + 2061111604, + 3841100501, + 4129347794, + 1797614554, + 2186603037, + 2827436722, + 1539632237, + 3191692936, + 736776115, + 218392634, ]; static const List _envieddataallowed = [ - 3245922929, - 3960293017, - 2494038360, - 3383672509, - 2565644737, - 633540760, - 1073844394, - 3761346385, - 3217759190, - 794259065, - 587814474, + 1921270352, + 2061111643, + 3841100471, + 4129347771, + 1797614518, + 2186603128, + 2827436703, + 1539632140, + 3191693048, + 736776131, + 218392576, ]; static final String allowed = String.fromCharCodes(List.generate( @@ -488,107 +540,107 @@ final class _Env { ).map((int i) => _envieddataallowed[i] ^ _enviedkeyallowed[i])); static const List _enviedkeyapiKeyHere = [ - 2497256966, - 2656782120, - 2954632987, - 1480445769, - 2031217901, - 2952958862, - 645891282, - 4176787568, - 2720346953, - 1022134612, - 540296077, - 1179899270, - 68211885, - 688928707, - 864767937, - 1652463025, - 1422712854, - 2353119962, - 4283815969, - 2188302898, - 956858964, - 2655359296, - 304137545, - 3887053185, - 1170711390, - 770074829, - 2764237341, - 1813058297, - 2277735149, - 151036681, - 1454785905, - 1157158939, - 510843536, - 1229132871, - 1139320636, - 1283343580, - 2072923610, - 3731187106, - 1369691015, - 52820701, - 3058040268, - 799434774, - 3408763096, - 389600260, - 1956942181, - 3371512899, - 37659254, - 743953669, - 700307688, + 3817268896, + 4161775699, + 3301141030, + 1134146372, + 3857066077, + 2722898092, + 3934718659, + 3063587468, + 1822209404, + 4077554629, + 757295573, + 976327143, + 3144131708, + 3652349276, + 4136573864, + 1630918124, + 1883011707, + 2138798218, + 3463168398, + 2798516309, + 2130629731, + 2691517471, + 944278046, + 1837676307, + 3326908696, + 3172767852, + 2506241482, + 4072360526, + 2641044003, + 2624375478, + 1621395439, + 1757597560, + 2570551575, + 2303844382, + 1388240981, + 545560487, + 2022366108, + 4107939182, + 3708908872, + 2921895529, + 971259046, + 1041402734, + 1428626189, + 1025360981, + 2661920942, + 2598284823, + 4170160364, + 3394231170, + 108567072, ]; static const List _envieddataapiKeyHere = [ - 2497257057, - 2656782199, - 2954633036, - 1480445703, - 2031217848, - 2952958956, - 645891303, - 4176787516, - 2720346980, - 1022134560, - 540296191, - 1179899375, - 68211933, - 688928697, - 864767990, - 1652463004, - 1422712912, - 2353119970, - 4283816014, - 2188302943, - 956858908, - 2655359280, - 304137500, - 3887053292, - 1170711353, - 770074756, - 2764237415, - 1813058225, - 2277735130, - 151036748, - 1454785829, - 1157159038, - 510843608, - 1229132926, - 1139320644, - 1283343494, - 2072923618, - 3731187184, - 1369691120, - 52820634, - 3058040203, - 799434799, - 3408763015, - 389600323, - 1956942173, - 3371512889, - 37659182, - 743953724, - 700307625, + 3817268935, + 4161775628, + 3301141105, + 1134146314, + 3857065992, + 2722898126, + 3934718710, + 3063587520, + 1822209361, + 4077554609, + 757295527, + 976327054, + 3144131596, + 3652349222, + 4136573855, + 1630918081, + 1883011645, + 2138798258, + 3463168481, + 2798516280, + 2130629675, + 2691517551, + 944278091, + 1837676414, + 3326908799, + 3172767781, + 2506241456, + 4072360454, + 2641043988, + 2624375539, + 1621395387, + 1757597469, + 2570551647, + 2303844391, + 1388240941, + 545560573, + 2022366116, + 4107939132, + 3708908863, + 2921895470, + 971259105, + 1041402711, + 1428626258, + 1025360914, + 2661920918, + 2598284909, + 4170160308, + 3394231227, + 108567137, ]; static final String apiKeyHere = String.fromCharCodes(List.generate( @@ -598,159 +650,159 @@ final class _Env { ).map((int i) => _envieddataapiKeyHere[i] ^ _enviedkeyapiKeyHere[i])); static const List _enviedkeygetLocationAreaLinks = [ - 2988453148, - 2427406755, - 1366167126, - 3982814353, - 1564633143, - 3641240814, - 1007919736, - 3681940381, - 1220962261, - 3358260054, - 3925413382, - 3554111612, - 1572983115, - 1753439515, - 681883205, - 3362728642, - 2943311915, - 1919392411, - 2331593584, - 3479475485, - 3433683882, - 4233658646, - 4251689545, - 686782064, - 991537699, - 3065403344, - 4183052841, - 1331978172, - 2497444547, - 4134340357, - 1589859267, - 1612562513, - 417229842, - 348492015, - 1228022136, - 2938089358, - 1062314894, - 2386688534, - 1460800261, - 3486570222, - 2025986404, - 2877703752, - 1594211637, - 89922563, - 702876642, - 4195064730, - 1564366935, - 2736689991, - 3769208807, - 3501429881, - 2464905282, - 2741498107, - 1394551862, - 1880674917, - 263113450, - 2778976267, - 619190408, - 1184445795, - 1477467582, - 485455791, - 386751047, - 4105952945, - 3145334149, - 2133229612, - 2508559635, - 1272931009, - 2059251576, - 181250125, - 3050152587, - 3821717176, - 527371541, - 4224031242, - 2339418020, - 3117132197, - 343452524, + 3404126900, + 3635509459, + 2760068551, + 1135026344, + 361014727, + 2319372031, + 2714864201, + 3531563054, + 1810411494, + 3495896604, + 3923131927, + 3463236857, + 4273060280, + 3250330773, + 3596924584, + 2134775821, + 760926808, + 73878508, + 1821638353, + 582171256, + 3456259047, + 842584153, + 4259212386, + 3452581713, + 596600050, + 898075563, + 2734934163, + 626507477, + 2488240861, + 1729100675, + 2304482244, + 2116746605, + 2229198287, + 4054662819, + 919217506, + 3217274338, + 87409090, + 3028410396, + 2357937549, + 2039888758, + 918643754, + 676818405, + 2278470455, + 762101466, + 703159238, + 4078132155, + 2102302303, + 1758233505, + 327406267, + 2205087070, + 3204855632, + 3474242571, + 576463225, + 2529772108, + 1816139063, + 186395551, + 170455642, + 873083301, + 406004334, + 1746650876, + 3404571507, + 3278932612, + 2364323337, + 1029539922, + 391278705, + 943403502, + 341044865, + 1925641005, + 708085454, + 878870981, + 406709643, + 1348206451, + 2204128571, + 1007920868, + 4073079278, ]; static const List _envieddatagetLocationAreaLinks = [ - 2988453236, - 2427406807, - 1366167074, - 3982814433, - 1564633156, - 3641240788, - 1007919703, - 3681940402, - 1220962228, - 3358260006, - 3925413487, - 3554111570, - 1572983103, - 1753439593, - 681883180, - 3362728626, - 2943311953, - 1919392438, - 2331593493, - 3479475578, - 3433683923, - 4233658726, - 4251689533, - 686782046, - 991537728, - 3065403327, - 4183052868, - 1331978131, - 2497444535, - 4134340471, - 1589859242, - 1612562465, - 417229928, - 348491968, - 1228022026, - 2938089447, - 1062314986, - 2386688627, - 1460800298, - 3486570114, - 2025986315, - 2877703723, - 1594211668, - 89922679, - 702876555, - 4195064821, - 1564366905, - 2736690024, - 3769208704, - 3501429788, - 2464905270, - 2741498020, - 1394551898, - 1880674826, - 263113353, - 2778976362, - 619190524, - 1184445706, - 1477467601, - 485455809, - 386751000, - 4105952976, - 3145334263, - 2133229641, - 2508559730, - 1272930974, - 2059251476, - 181250084, - 3050152677, - 3821717203, - 527371622, - 4224031268, - 2339418068, - 3117132237, - 343452444, + 3404126940, + 3635509415, + 2760068531, + 1135026392, + 361014708, + 2319371973, + 2714864230, + 3531563009, + 1810411399, + 3495896684, + 3923132030, + 3463236823, + 4273060300, + 3250330855, + 3596924609, + 2134775933, + 760926754, + 73878465, + 1821638324, + 582171167, + 3456258974, + 842584105, + 4259212310, + 3452581759, + 596599953, + 898075588, + 2734934270, + 626507514, + 2488240809, + 1729100785, + 2304482221, + 2116746525, + 2229198261, + 4054662796, + 919217424, + 3217274251, + 87409062, + 3028410489, + 2357937570, + 2039888666, + 918643781, + 676818310, + 2278470486, + 762101422, + 703159215, + 4078132180, + 2102302257, + 1758233486, + 327406300, + 2205087035, + 3204855588, + 3474242644, + 576463125, + 2529772067, + 1816139092, + 186395646, + 170455598, + 873083340, + 406004225, + 1746650770, + 3404571436, + 3278932709, + 2364323451, + 1029539895, + 391278608, + 943403441, + 341044973, + 1925641028, + 708085408, + 878870958, + 406709752, + 1348206429, + 2204128587, + 1007920780, + 4073079198, ]; static final String getLocationAreaLinks = String.fromCharCodes( @@ -763,53 +815,53 @@ final class _Env { _enviedkeygetLocationAreaLinks[i])); static const List _enviedkeyinitializationVector = [ - 2749286500, - 653011017, - 3823850079, - 2819999775, - 1828554081, - 1417689459, - 2041538623, - 4027765927, - 2690507925, - 259394592, - 1388767888, - 4160915698, - 3456260235, - 1870239472, - 1244522141, - 3402656970, - 3451631790, - 1672669364, - 1333095329, - 3397434145, - 3170698581, - 886305628, + 2201295168, + 2446211413, + 1881952212, + 2993956456, + 972975111, + 3151220221, + 1530369156, + 2788019061, + 326364544, + 3044280583, + 983993733, + 1260359253, + 3722860874, + 3461661086, + 667702118, + 2522204854, + 3330797164, + 3115156146, + 3573155996, + 2827515416, + 2004019848, + 428764783, ]; static const List _envieddatainitializationVector = [ - 2749286421, - 653010993, - 3823850041, - 2819999846, - 1828553995, - 1417689350, - 2041538644, - 4027765968, - 2690508026, - 259394629, - 1388767991, - 4160915584, - 3456260325, - 1870239378, - 1244522228, - 3402656956, - 3451631862, - 1672669382, - 1333095417, - 3397434195, - 3170698519, - 886305582, + 2201295153, + 2446211373, + 1881952178, + 2993956369, + 972975213, + 3151220104, + 1530369263, + 2788018946, + 326364655, + 3044280674, + 983993826, + 1260359207, + 3722860836, + 3461661180, + 667702031, + 2522204864, + 3330797108, + 3115156160, + 3573156036, + 2827515498, + 2004019914, + 428764701, ]; static final String initializationVector = String.fromCharCodes( @@ -822,129 +874,129 @@ final class _Env { _enviedkeyinitializationVector[i])); static const List _enviedkeybasicCompareFacesURL = [ - 3973357826, - 3400198887, - 1985631089, - 449323848, - 2450512581, - 2954390111, - 772002673, - 1275342913, - 3409575041, - 2693850305, - 1906547295, - 2121046676, - 3828437909, - 292288749, - 182293311, - 2911142470, - 895482220, - 1085090462, - 3682883958, - 3937131252, - 2270937189, - 1896177220, - 3005596072, - 3786810795, - 897648963, - 2010438215, - 2008207525, - 4189171810, - 571207742, - 2706353813, - 4111807772, - 3398991102, - 2640382327, - 3461238840, - 2837856734, - 1097237133, - 271369583, - 2291505016, - 885623071, - 1390450226, - 1279809183, - 2867177619, - 3044088392, - 2714439012, - 1260508590, - 2151000133, - 782957065, - 427958147, - 286478089, - 1660724572, - 3444945325, - 2047686065, - 133130603, - 3706437223, - 4278524698, - 3687107300, - 3186266519, - 2298471765, - 2265388252, - 672076337, + 1330600922, + 2887722883, + 2311059944, + 1416268531, + 3823483437, + 1178246148, + 2679379553, + 3811548580, + 1911437534, + 697424122, + 3139472572, + 2497341502, + 2812690971, + 2271326259, + 1920762681, + 2993486050, + 1687020017, + 3048008054, + 2830274653, + 62070531, + 1614942967, + 3087909243, + 3525994045, + 1276239452, + 748595692, + 32173991, + 1537813415, + 503865261, + 1130536453, + 48682119, + 1829158149, + 297207651, + 2478383607, + 2655797692, + 450448992, + 1384807967, + 1659905640, + 475498785, + 3310131022, + 1000386431, + 1876247973, + 1266592207, + 2214694242, + 3501035720, + 2217940831, + 4007139879, + 635569862, + 2304126238, + 1402568687, + 3524149872, + 3624292399, + 930448730, + 4143781031, + 3937919167, + 577897467, + 18660539, + 792610170, + 442906291, + 2690221051, + 2753670074, ]; static const List _envieddatabasicCompareFacesURL = [ - 3973357930, - 3400198803, - 1985630981, - 449323832, - 2450512566, - 2954390117, - 772002654, - 1275342958, - 3409575143, - 2693850272, - 1906547260, - 2121046769, - 3828437944, - 292288649, - 182293338, - 2911142450, - 895482121, - 1085090557, - 3682883842, - 3937131225, - 2270937091, - 1896177266, - 3005596049, - 3786810777, - 897649015, - 2010438260, - 2008207516, - 4189171792, - 571207773, - 2706353825, - 4111807871, - 3398991049, - 2640382297, - 3461238864, - 2837856699, - 1097237247, - 271369472, - 2291504915, - 885623146, - 1390450259, - 1279809263, - 2867177699, - 3044088422, - 2714438919, - 1260508609, - 2151000104, - 782957094, - 427958240, - 286478182, - 1660724529, - 3444945373, - 2047686096, - 133130521, - 3706437122, - 4278524741, - 3687107202, - 3186266614, - 2298471734, - 2265388217, - 672076354, + 1330600882, + 2887722999, + 2311059868, + 1416268419, + 3823483486, + 1178246206, + 2679379534, + 3811548555, + 1911437496, + 697424027, + 3139472607, + 2497341531, + 2812690998, + 2271326295, + 1920762716, + 2993485974, + 1687019924, + 3048007957, + 2830274601, + 62070574, + 1614942865, + 3087909197, + 3525993988, + 1276239470, + 748595672, + 32173972, + 1537813406, + 503865247, + 1130536550, + 48682163, + 1829158246, + 297207636, + 2478383577, + 2655797716, + 450448901, + 1384808045, + 1659905543, + 475498826, + 3310131003, + 1000386334, + 1876248021, + 1266592191, + 2214694220, + 3501035691, + 2217940784, + 4007139914, + 635569897, + 2304126333, + 1402568576, + 3524149789, + 3624292447, + 930448699, + 4143781077, + 3937919194, + 577897380, + 18660573, + 792610075, + 442906320, + 2690220958, + 2753670089, ]; static final String basicCompareFacesURL = String.fromCharCodes( @@ -957,91 +1009,91 @@ final class _Env { _enviedkeybasicCompareFacesURL[i])); static const List _enviedkeyaccountSIDTwillo = [ - 862883526, - 2506887672, - 493950747, - 884738397, - 4093901780, - 3055722528, - 1985935270, - 3249999780, - 1595427159, - 2189070063, - 1170800771, - 409183994, - 1101502682, - 3046523219, - 1554121562, - 1059275136, - 1654115409, - 1193768856, - 1440036812, - 2426275277, - 3185807929, - 1139172162, - 4266152669, - 1901245621, - 1031726709, - 526581723, - 417278390, - 2785846020, - 587347324, - 2240635656, - 2339279274, - 2087305137, - 3725764621, - 720696096, - 2518537674, - 3736050, - 2055925477, - 4222223098, - 37289279, - 3489115850, - 2024307616, + 2843783092, + 1674419346, + 3803422258, + 132889725, + 1586455900, + 3294810875, + 2713641844, + 719237140, + 2160285213, + 3355031642, + 1044812735, + 465231708, + 2773128885, + 2458872187, + 1257532603, + 2310638280, + 311739674, + 4045327999, + 3499891219, + 628184479, + 4039907483, + 2533330186, + 1341177550, + 1025907715, + 509633930, + 1553205648, + 1248145143, + 3082345651, + 2221820334, + 3094338270, + 624605643, + 2263308676, + 3691275035, + 383131392, + 2080149801, + 794174709, + 2136872233, + 468082603, + 3193516271, + 3874655752, + 284351138, ]; static const List _envieddataaccountSIDTwillo = [ - 862883479, - 2506887614, - 493950819, - 884738413, - 4093901733, - 3055722585, - 1985935250, - 3249999761, - 1595427169, - 2189069957, - 1170800886, - 409183888, - 1101502697, - 3046523243, - 1554121577, - 1059275246, - 1654115432, - 1193768928, - 1440036793, - 2426275252, - 3185807883, - 1139172211, - 4266152676, - 1901245569, - 1031726596, - 526581741, - 417278340, - 2785846077, - 587347213, - 2240635705, - 2339279308, - 2087305179, - 3725764669, - 720696153, - 2518537725, - 3735978, - 2055925399, - 4222223010, - 37289299, - 3489115784, - 2024307660, + 2843783141, + 1674419412, + 3803422282, + 132889677, + 1586455853, + 3294810754, + 2713641792, + 719237153, + 2160285227, + 3355031600, + 1044812746, + 465231670, + 2773128838, + 2458872131, + 1257532552, + 2310638246, + 311739683, + 4045327879, + 3499891302, + 628184550, + 4039907497, + 2533330235, + 1341177591, + 1025907767, + 509634043, + 1553205670, + 1248145093, + 3082345610, + 2221820383, + 3094338287, + 624605613, + 2263308782, + 3691275051, + 383131513, + 2080149790, + 794174637, + 2136872283, + 468082675, + 3193516163, + 3874655818, + 284351182, ]; static final String accountSIDTwillo = String.fromCharCodes( @@ -1053,325 +1105,325 @@ final class _Env { _envieddataaccountSIDTwillo[i] ^ _enviedkeyaccountSIDTwillo[i])); static const List _enviedkeyserverAPI = [ - 2656647173, - 3738555971, - 281108270, - 4209723979, - 3567021072, - 225360194, - 874230964, - 324448041, - 4273370024, - 3171290864, - 3765819248, - 662724599, - 2047066182, - 3619519493, - 2897286852, - 3047694147, - 790659686, - 3515074197, - 375327146, - 3529926859, - 2573542243, - 4228737078, - 2913594502, - 1383997884, - 4292492298, - 4229937260, - 3722853826, - 399391593, - 2098092523, - 2507927804, - 4182713389, - 4136321482, - 4031642392, - 2906398568, - 3039433485, - 1486469364, - 3287927332, - 4051855707, - 874928375, - 1533236064, - 2824180974, - 4042253442, - 4239930079, - 3443675196, - 3564716468, - 2704577044, - 1407020766, - 312475642, - 2940173961, - 461690708, - 4218258654, - 1405581974, - 807774814, - 463555677, - 2318036706, - 748138614, - 800580694, - 446356513, - 2242146812, - 3132748825, - 2324944470, - 2382836717, - 2471074835, - 709103031, - 2588627834, - 2571233829, - 4257930202, - 880614792, - 2534172517, - 646656926, - 807045942, - 3223547540, - 637703075, - 1161587113, - 1694926235, - 1130740693, - 2040003736, - 3957767449, - 4089869355, - 3570713510, - 14130367, - 1219576427, - 4201913743, - 3699569853, - 3757563907, - 2804661805, - 2691763876, - 608324039, - 549520705, - 3637140130, - 1657339636, - 3671506957, - 2075237918, - 1542357058, - 2069518540, - 2531153218, - 3715703881, - 3990467227, - 1608006243, - 1174025013, - 69564333, - 661473778, - 1070512231, - 3865136733, - 2115837623, - 648310106, - 335258452, - 1021565787, - 3703954938, - 3375890797, - 4224311122, - 2559482853, - 2713989796, - 3392185994, - 1571061530, - 2723313727, - 1224456781, - 1568446486, - 3259926001, - 360597493, - 1929460937, - 3726881885, - 246635299, - 1295436405, - 4117808221, - 2081777050, - 1862431732, - 2724794958, - 2157849827, - 1478656727, - 2788113587, - 3645565086, - 2252213239, - 1228971111, - 2723608337, - 1859167267, - 2665722216, - 883112983, - 2670082788, - 313566081, - 1766825866, - 1040972825, - 1061049477, - 3364769065, - 2283071929, - 3916915195, - 3165275472, - 4175844886, - 3353368993, - 1446547397, - 3161796460, - 2394438245, - 3575040228, - 3064925708, - 845257575, - 2932532219, - 2414616306, - 3520694036, + 3976340862, + 876930661, + 2754762348, + 2464537893, + 3707602655, + 2489749710, + 3424437440, + 1372632324, + 2975339402, + 2676738093, + 3221041012, + 744897494, + 1424458647, + 1079081365, + 3562411819, + 4004226372, + 2704808793, + 1168829629, + 1992531918, + 3180887892, + 1772554705, + 4274017960, + 263526825, + 1684978867, + 3658977582, + 2764849002, + 2435386837, + 2434610909, + 1238171864, + 3938577549, + 3000351850, + 1398183753, + 75887018, + 774832896, + 1523285360, + 309110719, + 858312180, + 2818584421, + 3270452275, + 983656457, + 1664075801, + 2926896384, + 769664241, + 1537228947, + 2075245662, + 3146684998, + 2628184795, + 1239022201, + 654943327, + 1715476740, + 1718664042, + 2638834984, + 4184911395, + 489667049, + 1830225181, + 2640753699, + 4200140839, + 201082292, + 701445777, + 3501131445, + 1086182735, + 2058515131, + 4059527038, + 950334178, + 587472557, + 1704249165, + 922220226, + 1556517143, + 1406823262, + 2446727386, + 2079624285, + 37938373, + 1344228475, + 3910369000, + 1492984777, + 1437083473, + 2842770769, + 2576354000, + 1864807939, + 2895209442, + 2917935409, + 567043849, + 576658584, + 4104668683, + 289522001, + 3394727170, + 3201674837, + 1290177783, + 3115294296, + 4259693824, + 3129141406, + 325281440, + 530300610, + 415806151, + 187464629, + 530694302, + 2938142458, + 1021781952, + 291246485, + 3228999424, + 3831388593, + 2533438819, + 2895384640, + 3081205453, + 2373368017, + 2532170150, + 3060366470, + 4244026566, + 1554490727, + 3410670928, + 960347257, + 3614687388, + 3705063013, + 198619704, + 705028789, + 3504828489, + 1242117333, + 774908927, + 3721749151, + 4098061798, + 942891585, + 3861283949, + 111830844, + 3658249279, + 446418689, + 869497804, + 1866712611, + 1426830386, + 2940675768, + 3528266654, + 331680518, + 3378186940, + 1334652234, + 596949604, + 1854281103, + 2800667846, + 476777023, + 3236423334, + 2603128686, + 503959906, + 3681931758, + 2093974656, + 2704910478, + 2439513144, + 3257918460, + 2319599066, + 1093709546, + 3895079102, + 2569178988, + 3737864579, + 839085567, + 273990226, + 2247636415, + 1654429663, + 3419379873, + 3959242870, + 3890025019, + 3201343901, ]; static const List _envieddataserverAPI = [ - 2656647252, - 3738555922, - 281108351, - 4209723930, - 3567021183, - 225360160, - 874231015, - 324448091, - 4273370074, - 3171290806, - 3765819161, - 662724557, - 2047066135, - 3619519571, - 2897286805, - 3047694203, - 790659665, - 3515074285, - 375327231, - 3529926908, - 2573542169, - 4228737089, - 2913594565, - 1383997898, - 4292492391, - 4229937206, - 3722853816, - 399391539, - 2098092431, - 2507927709, - 4182713429, - 4136321471, - 4031642443, - 2906398554, - 3039433579, - 1486469318, - 3287927319, - 4051855618, - 874928323, - 1533235981, - 2824180884, - 4042253493, - 4239930002, - 3443675206, - 3564716493, - 2704577115, - 1407020708, - 312475528, - 2940174001, - 461690683, - 4218258618, - 1405581988, - 807774780, - 463555631, - 2318036692, - 748138557, - 800580623, - 446356568, - 2242146713, - 3132748895, - 2324944439, - 2382836665, - 2471074885, - 709103099, - 2588627773, - 2571233814, - 4257930129, - 880614843, - 2534172429, - 646656998, - 807045891, - 3223547598, - 637703106, - 1161587196, - 1694926306, - 1130740653, - 2040003759, - 3957767548, - 4089869426, - 3570713552, - 14130430, - 1219576370, - 4201913855, - 3699569916, - 3757563989, - 2804661833, - 2691763951, - 608324012, - 549520748, - 3637140112, - 1657339596, - 3671507003, - 2075237968, - 1542357014, - 2069518494, - 2531153195, - 3715703930, - 3990467297, - 1608006160, - 1174024972, - 69564356, - 661473697, - 1070512168, - 3865136691, - 2115837679, - 648310062, - 335258380, - 1021565705, - 3703954867, - 3375890709, - 4224311073, - 2559482770, - 2713989827, - 3392186041, - 1571061585, - 2723313754, - 1224456750, - 1568446548, - 3259925916, - 360597382, - 1929460901, - 3726881902, - 246635381, - 1295436301, - 4117808151, - 2081777059, - 1862431619, - 2724794881, - 2157849806, - 1478656673, - 2788113658, - 3645565166, - 2252213120, - 1228971026, - 2723608357, - 1859167347, - 2665722142, - 883112992, - 2670082688, - 313566186, - 1766825922, - 1040972914, - 1061049565, - 3364769095, - 2283071952, - 3916915086, - 3165275432, - 4175844955, - 3353369074, - 1446547329, - 3161796363, - 2394438194, - 3575040188, - 3064925822, - 845257535, - 2932532119, - 2414616240, - 3520694136, + 3976340783, + 876930612, + 2754762301, + 2464537972, + 3707602608, + 2489749676, + 3424437395, + 1372632438, + 2975339512, + 2676738155, + 3221040925, + 744897516, + 1424458694, + 1079081411, + 3562411898, + 4004226428, + 2704808814, + 1168829637, + 1992531867, + 3180887907, + 1772554667, + 4274018015, + 263526890, + 1684978885, + 3658977603, + 2764848944, + 2435386799, + 2434610823, + 1238171836, + 3938577644, + 3000351762, + 1398183740, + 75887097, + 774832946, + 1523285270, + 309110669, + 858312135, + 2818584380, + 3270452231, + 983656548, + 1664075875, + 2926896439, + 769664188, + 1537229033, + 2075245607, + 3146684937, + 2628184737, + 1239022091, + 654943335, + 1715476843, + 1718663950, + 2638834970, + 4184911425, + 489666971, + 1830225195, + 2640753768, + 4200140926, + 201082317, + 701445876, + 3501131507, + 1086182702, + 2058515183, + 4059526952, + 950334126, + 587472618, + 1704249214, + 922220169, + 1556517156, + 1406823222, + 2446727330, + 2079624296, + 37938335, + 1344228378, + 3910368957, + 1492984752, + 1437083433, + 2842770790, + 2576353973, + 1864808026, + 2895209364, + 2917935472, + 567043920, + 576658664, + 4104668746, + 289521927, + 3394727270, + 3201674782, + 1290177692, + 3115294325, + 4259693874, + 3129141414, + 325281430, + 530300556, + 415806099, + 187464679, + 530694391, + 2938142409, + 1021781946, + 291246566, + 3228999481, + 3831388632, + 2533438768, + 2895384591, + 3081205411, + 2373367945, + 2532170194, + 3060366558, + 4244026516, + 1554490670, + 3410670888, + 960347146, + 3614687467, + 3705062914, + 198619659, + 705028862, + 3504828460, + 1242117302, + 774908861, + 3721749234, + 4098061717, + 942891565, + 3861283934, + 111830890, + 3658249287, + 446418763, + 869497845, + 1866712660, + 1426830461, + 2940675733, + 3528266728, + 331680591, + 3378186956, + 1334652221, + 596949521, + 1854281147, + 2800667798, + 476777033, + 3236423313, + 2603128586, + 503959817, + 3681931686, + 2093974763, + 2704910550, + 2439513174, + 3257918357, + 2319599023, + 1093709458, + 3895079155, + 2569178943, + 3737864647, + 839085464, + 273990149, + 2247636455, + 1654429613, + 3419379961, + 3959242778, + 3890025081, + 3201343985, ]; static final String serverAPI = String.fromCharCodes(List.generate( @@ -1381,87 +1433,87 @@ final class _Env { ).map((int i) => _envieddataserverAPI[i] ^ _enviedkeyserverAPI[i])); static const List _enviedkeymapAPIKEY = [ - 3780650790, - 1261206206, - 3582205783, - 970938258, - 1442725955, - 2770555723, - 1628950528, - 982096424, - 968348506, - 689305316, - 2208399948, - 4025436180, - 1752391980, - 1211534907, - 1702474257, - 3952957510, - 881139483, - 2801348158, - 2349501027, - 3888249220, - 95826764, - 932877792, - 341649545, - 2915100818, - 2442586933, - 937444368, - 661481258, - 2388784846, - 3646082583, - 2359603322, - 1469672324, - 424347918, - 1593811254, - 836201946, - 1783687237, - 476826234, - 4268923061, - 4222039827, - 2938372691, + 2247714160, + 2560268629, + 60973890, + 4238015695, + 3486272014, + 4139058870, + 3284541187, + 1937795265, + 4268641415, + 3452889939, + 3658126130, + 253733115, + 3331289064, + 2627639475, + 4246775286, + 878786301, + 3804413434, + 2745587036, + 1763947689, + 295551841, + 2115785072, + 88958942, + 1115480111, + 3276376593, + 4136534122, + 1162804378, + 14284426, + 17535057, + 2319425705, + 1953711881, + 3792644850, + 1255190121, + 514431811, + 3899457619, + 2021344858, + 1913226202, + 3546162315, + 698376319, + 2354027959, ]; static const List _envieddatamapAPIKEY = [ - 3780650855, - 1261206263, - 3582205741, - 970938355, - 1442725904, - 2770555698, - 1628950593, - 982096504, - 968348444, - 689305270, - 2208399891, - 4025436236, - 1752392014, - 1211534953, - 1702474335, - 3952957558, - 881139523, - 2801348196, - 2349501014, - 3888249293, - 95826742, - 932877779, - 341649608, - 2915100875, - 2442586993, - 937444474, - 661481316, - 2388784791, - 3646082655, - 2359603261, - 1469672398, - 424347977, - 1593811204, - 836201897, - 1783687287, - 476826155, - 4268923106, - 4222039908, - 2938372638, + 2247714097, + 2560268572, + 60973880, + 4238015662, + 3486272093, + 4139058895, + 3284541250, + 1937795217, + 4268641473, + 3452889857, + 3658126189, + 253733027, + 3331288970, + 2627639521, + 4246775224, + 878786253, + 3804413346, + 2745586950, + 1763947676, + 295551784, + 2115784970, + 88958957, + 1115480174, + 3276376648, + 4136534062, + 1162804464, + 14284484, + 17534984, + 2319425761, + 1953711950, + 3792644792, + 1255190062, + 514431857, + 3899457568, + 2021344872, + 1913226123, + 3546162396, + 698376200, + 2354028026, ]; static final String mapAPIKEY = String.fromCharCodes(List.generate( @@ -1471,87 +1523,87 @@ final class _Env { ).map((int i) => _envieddatamapAPIKEY[i] ^ _enviedkeymapAPIKEY[i])); static const List _enviedkeymapAPIKEYIOS = [ - 3558174711, - 1259904136, - 726466956, - 1207571, - 371587597, - 1439381955, - 1288967613, - 403535858, - 2033538595, - 3229798007, - 1556181043, - 4256166143, - 580211841, - 4069263894, - 4260167336, - 2217180963, - 1433884945, - 3562866388, - 4013472303, - 1563614508, - 3243019766, - 2861043552, - 3591305057, - 967952859, - 2224222952, - 3330350152, - 1623144648, - 3466748051, - 4002234704, - 1043529504, - 3166071709, - 65434727, - 2697161795, - 1158757060, - 2532362030, - 3449892849, - 3651832823, - 2612912611, - 3303365501, + 3242026595, + 226759590, + 3513945943, + 1675836857, + 2070623184, + 1212962385, + 2949685960, + 2314727532, + 4229834780, + 2675409629, + 4268245054, + 2647028317, + 1980982459, + 2590627602, + 4006411907, + 740712139, + 2498147417, + 130942695, + 3681207417, + 3402766120, + 3536327117, + 3770297355, + 2085970437, + 566701769, + 4055782816, + 1608102648, + 3393804425, + 2100732790, + 3315765567, + 1614848706, + 1829636998, + 2806101795, + 3386515473, + 2410019939, + 3104463353, + 924278124, + 6962405, + 2844298305, + 701510329, ]; static const List _envieddatamapAPIKEYIOS = [ - 3558174646, - 1259904193, - 726467062, - 1207666, - 371587678, - 1439381946, - 1288967673, - 403535766, - 2033538642, - 3229797916, - 1556181119, - 4256166066, - 580211906, - 4069263972, - 4260167385, - 2217181001, - 1433884999, - 3562866342, - 4013472321, - 1563614491, - 3243019694, - 2861043469, - 3591304960, - 967952831, - 2224222881, - 3330350137, - 1623144625, - 3466748157, - 4002234665, - 1043529551, - 3166071775, - 65434630, - 2697161844, - 1158757012, - 2532362012, - 3449892806, - 3651832760, - 2612912518, - 3303365424, + 3242026530, + 226759663, + 3513945901, + 1675836888, + 2070623107, + 1212962344, + 2949685900, + 2314727432, + 4229834861, + 2675409590, + 4268245106, + 2647028240, + 1980982520, + 2590627680, + 4006412018, + 740712097, + 2498147343, + 130942613, + 3681207319, + 3402766111, + 3536327061, + 3770297446, + 2085970532, + 566701741, + 4055782889, + 1608102537, + 3393804528, + 2100732696, + 3315765574, + 1614848685, + 1829637060, + 2806101826, + 3386515494, + 2410019891, + 3104463307, + 924278107, + 6962346, + 2844298276, + 701510388, ]; static final String mapAPIKEYIOS = String.fromCharCodes(List.generate( @@ -1561,71 +1613,71 @@ final class _Env { ).map((int i) => _envieddatamapAPIKEYIOS[i] ^ _enviedkeymapAPIKEYIOS[i])); static const List _enviedkeytwilloRecoveryCode = [ - 3532317025, - 3199852271, - 2853477449, - 91396203, - 170144762, - 875721478, - 3209237056, - 2472742181, - 828886629, - 154594601, - 4221098919, - 1304577431, - 3884436887, - 2931382789, - 1842499728, - 3015782631, - 383382245, - 3050150358, - 705517746, - 1694727442, - 2134281548, - 1184063988, - 3679795016, - 4016059634, - 2102036619, - 3275788957, - 3673929929, - 3273665123, - 1892561227, - 153252413, - 4225481428, + 2689140138, + 1298299846, + 2057967448, + 2137865182, + 2938356726, + 1691312281, + 2231705315, + 59667461, + 1041068572, + 1212147038, + 3924764144, + 1831149843, + 40385226, + 1407278889, + 3376967208, + 2930603709, + 2681028551, + 325951936, + 450904546, + 1158123913, + 3461876794, + 4048211225, + 3908777410, + 1222192183, + 3459582394, + 3627977289, + 1751140149, + 3573607933, + 3595094674, + 3865880740, + 714370723, ]; static const List _envieddatatwilloRecoveryCode = [ - 3532316962, - 3199852206, - 2853477404, - 91396188, - 170144707, - 875721538, - 3209237000, - 2472742261, - 828886573, - 154594584, - 4221098981, - 1304577533, - 3884436946, - 2931382844, - 1842499776, - 3015782578, - 383382189, - 3050150370, - 705517815, - 1694727494, - 2134281492, - 1184063904, - 3679794971, - 4016059562, - 2102036689, - 3275788997, - 3673929915, - 3273665083, - 1892561191, - 153252479, - 4225481400, + 2689140201, + 1298299783, + 2057967373, + 2137865193, + 2938356687, + 1691312349, + 2231705259, + 59667541, + 1041068628, + 1212147055, + 3924764082, + 1831149945, + 40385167, + 1407278864, + 3376967288, + 2930603752, + 2681028495, + 325951988, + 450904487, + 1158123997, + 3461876834, + 4048211277, + 3908777361, + 1222192239, + 3459582432, + 3627977233, + 1751140167, + 3573607845, + 3595094782, + 3865880806, + 714370767, ]; static final String twilloRecoveryCode = String.fromCharCodes( @@ -1637,87 +1689,87 @@ final class _Env { _envieddatatwilloRecoveryCode[i] ^ _enviedkeytwilloRecoveryCode[i])); static const List _enviedkeyauthTokenTwillo = [ - 274874504, - 136604541, - 414657959, - 1621923202, - 1616905471, - 2762008141, - 364105633, - 3728798235, - 2362214629, - 723326659, - 1267630251, - 2027904562, - 431311898, - 2109483493, - 2341226229, - 1345512578, - 71674775, - 1837938758, - 265252728, - 3925064266, - 2036788307, - 3280316594, - 3656116441, - 3050273829, - 60991170, - 4083413127, - 1762064368, - 1766803797, - 3219199410, - 1656327530, - 693339638, - 859012280, - 1647514073, - 1031863580, - 3538902529, - 3536934850, - 1232882253, - 2131218398, - 3734232272, + 550160046, + 2319335841, + 1053614357, + 3805976816, + 2370913201, + 1385227187, + 1955262560, + 3654581219, + 3218643785, + 3775928016, + 1080892875, + 1144318036, + 1298398762, + 3254180924, + 4054769829, + 576524082, + 916329670, + 4055003212, + 986404453, + 521422304, + 1307751592, + 641572031, + 1969181429, + 3951897168, + 828310667, + 3969389323, + 1200210257, + 3203333471, + 2467733379, + 917204918, + 3855643778, + 3370839775, + 2467915783, + 2462259520, + 2536763376, + 2301343237, + 309682522, + 1346811043, + 9843013, ]; static const List _envieddataauthTokenTwillo = [ - 274874559, - 136604493, - 414658002, - 1621923259, - 1616905415, - 2762008103, - 364105684, - 3728798251, - 2362214615, - 723326706, - 1267630239, - 2027904605, - 431311970, - 2109483421, - 2341226177, - 1345512691, - 71674791, - 1837938739, - 265252687, - 3925064318, - 2036788323, - 3280316544, - 3656116449, - 3050273872, - 60991218, - 4083413173, - 1762064321, - 1766803744, - 3219199366, - 1656327451, - 693339523, - 859012238, - 1647514092, - 1031863620, - 3538902643, - 3536934810, - 1232882209, - 2131218332, - 3734232252, + 550160025, + 2319335825, + 1053614432, + 3805976777, + 2370913161, + 1385227225, + 1955262485, + 3654581203, + 3218643835, + 3775928033, + 1080892927, + 1144318011, + 1298398802, + 3254180932, + 4054769809, + 576524099, + 916329718, + 4055003193, + 986404434, + 521422292, + 1307751576, + 641571981, + 1969181389, + 3951897125, + 828310715, + 3969389369, + 1200210272, + 3203333418, + 2467733431, + 917204935, + 3855643895, + 3370839785, + 2467915826, + 2462259480, + 2536763266, + 2301343325, + 309682486, + 1346811105, + 9842985, ]; static final String authTokenTwillo = String.fromCharCodes(List.generate( @@ -1728,125 +1780,125 @@ final class _Env { (int i) => _envieddataauthTokenTwillo[i] ^ _enviedkeyauthTokenTwillo[i])); static const List _enviedkeychatGPTkey = [ - 4275741706, - 3718972910, - 3196369652, - 2031227723, - 3134027384, - 4064693075, - 291469558, - 3411741135, - 2968554073, - 2817510438, - 3503277486, - 3746671217, - 74427877, - 3579890133, - 621990733, - 2368351242, - 1505340524, - 2610042925, - 339161536, - 3505456852, - 1010166058, - 3088827491, - 2642115279, - 2270149424, - 2082203779, - 2160805222, - 3641083247, - 3515011331, - 1037012782, - 3698404289, - 4115396302, - 779215860, - 163353457, - 2991164379, - 775012981, - 3559214986, - 669368105, - 2049312221, - 2077048456, - 3255335914, - 2185432953, - 585786041, - 394093760, - 59889921, - 405419837, - 3151098589, - 2669471785, - 3133493717, - 4152667824, - 3681742960, - 1163287264, - 1561021221, - 2482595902, - 4214399238, - 3685519560, - 3855750523, - 3182280582, - 4054153899, + 3411261939, + 2148041557, + 1239406863, + 2505787222, + 1026121752, + 506996797, + 1625950291, + 2287542558, + 1602415689, + 3979349983, + 3431506210, + 2145365833, + 1700889457, + 2046901692, + 1940607177, + 3545010845, + 1595543080, + 51154378, + 3799259360, + 2429407672, + 4164116956, + 2680039016, + 3275785567, + 1250429927, + 2147043762, + 1486248192, + 1272778244, + 2987720676, + 1957620816, + 568908027, + 2422341873, + 2109254189, + 2435992579, + 3518627944, + 1350420187, + 2603668676, + 3520694324, + 799269050, + 1126040433, + 3973271653, + 3874166578, + 2691444775, + 499201732, + 1725502412, + 512811952, + 3550319764, + 2791440863, + 3370105785, + 213525776, + 3622779136, + 3508089745, + 3424172753, + 2441788357, + 1587664731, + 3861880036, + 3873561842, + 3004624558, + 3359940933, ]; static const List _envieddatachatGPTkey = [ - 4275741808, - 3718972809, - 3196369625, - 2031227775, - 3134027323, - 4064693089, - 291469504, - 3411741118, - 2968554093, - 2817510517, - 3503277559, - 3746671126, - 74427815, - 3579890078, - 621990684, - 2368351343, - 1505340452, - 2610042999, - 339161476, - 3505456805, - 1010166081, - 3088827444, - 2642115232, - 2270149447, - 2082203840, - 2160805215, - 3641083191, - 3515011441, - 1037012822, - 3698404262, - 4115396251, - 779215793, - 163353367, - 2991164302, - 775012876, - 3559215027, - 669368163, - 2049312143, - 2077048575, - 3255335896, - 2185432843, - 585786068, - 394093814, - 59890000, - 405419791, - 3151098556, - 2669471821, - 3133493687, - 4152667779, - 3681742875, - 1163287178, - 1561021266, - 2482595942, - 4214399348, - 3685519504, - 3855750423, - 3182280644, - 4054153927, + 3411261833, + 2148041522, + 1239406882, + 2505787234, + 1026121819, + 506996751, + 1625950309, + 2287542639, + 1602415741, + 3979349900, + 3431506299, + 2145365806, + 1700889395, + 2046901751, + 1940607128, + 3545010936, + 1595543136, + 51154320, + 3799259300, + 2429407689, + 4164116919, + 2680038975, + 3275785520, + 1250429840, + 2147043825, + 1486248249, + 1272778332, + 2987720598, + 1957620776, + 568907932, + 2422341796, + 2109254248, + 2435992677, + 3518627901, + 1350420130, + 2603668733, + 3520694398, + 799269096, + 1126040326, + 3973271639, + 3874166592, + 2691444810, + 499201778, + 1725502365, + 512811906, + 3550319861, + 2791440827, + 3370105819, + 213525795, + 3622779243, + 3508089851, + 3424172710, + 2441788317, + 1587664681, + 3861879996, + 3873561758, + 3004624620, + 3359940905, ]; static final String chatGPTkey = String.fromCharCodes(List.generate( @@ -1856,133 +1908,133 @@ final class _Env { ).map((int i) => _envieddatachatGPTkey[i] ^ _enviedkeychatGPTkey[i])); static const List _enviedkeytransactionCloude = [ - 1538885746, - 4000436968, - 2120740113, - 3755343355, - 3101451458, - 1571875164, - 2898709933, - 3549552327, - 3798585461, - 58408691, - 3109955156, - 3947944434, - 3045715355, - 470892542, - 2185391531, - 2309843294, - 2470763579, - 3468170466, - 1540198809, - 199220408, - 2005527619, - 2779298863, - 880278397, - 1303754751, - 2946350738, - 1928483668, - 2962092152, - 701102723, - 811456720, - 725575138, - 2165525934, - 4050088422, - 3460870548, - 1630962607, - 2081585775, - 2021612393, - 2198829921, - 1035645253, - 772552654, - 671681368, - 1588567911, - 3989917860, - 51084614, - 2750821950, - 2651455758, - 3637792085, - 2983720624, - 2848491768, - 2096232776, - 3798918285, - 1755293641, - 2030513970, - 3876385884, - 414768342, - 4114546294, - 592053403, - 3506546852, - 3059187090, - 835867188, - 471136174, - 1087132917, - 4200427954, + 3074221553, + 3951058408, + 4067445206, + 4240864769, + 3029822673, + 338343838, + 313992139, + 177933594, + 1201867745, + 902478735, + 2553476916, + 257362754, + 392548703, + 2942901664, + 3789213795, + 3442876235, + 1376555914, + 647608357, + 3179574741, + 942544542, + 1564366485, + 1769541812, + 3204174490, + 3220680781, + 2298243568, + 3608817361, + 1548501007, + 1334349355, + 1102447177, + 1385255816, + 3808195097, + 883667915, + 772327800, + 3925076835, + 3326689581, + 516407938, + 1753712902, + 4211012475, + 186284189, + 2507991086, + 2230197226, + 1267305337, + 3358179646, + 1142302397, + 3106352290, + 1768862547, + 4106756966, + 2172865925, + 480632436, + 2351076572, + 4283776158, + 2544420734, + 207632763, + 3684204177, + 1987313992, + 2918435654, + 203592029, + 2106962387, + 3721228987, + 2850354239, + 1310733976, + 3623391472, ]; static const List _envieddatatransactionCloude = [ - 1538885667, - 4000436864, - 2120740210, - 3755343244, - 3101451447, - 1571875125, - 2898709953, - 3549552296, - 3798585368, - 58408578, - 3109955127, - 3947944349, - 3045715442, - 470892444, - 2185391505, - 2309843215, - 2470763629, - 3468170413, - 1540198854, - 199220466, - 2005527565, - 2779298934, - 880278328, - 1303754683, - 2946350752, - 1928483596, - 2962092079, - 701102786, - 811456738, - 725575124, - 2165526007, - 4050088382, - 3460870623, - 1630962668, - 2081585757, - 2021612349, - 2198829873, - 1035645311, - 772552599, - 671681299, - 1588567894, - 3989917920, - 51084560, - 2750822006, - 2651455800, - 3637792006, - 2983720698, - 2848491706, - 2096232827, - 3798918332, - 1755293575, - 2030513921, - 3876385804, - 414768275, - 4114546247, - 592053454, - 3506546940, - 3059187168, - 835867244, - 471136194, - 1087132855, - 4200427998, + 3074221472, + 3951058304, + 4067445173, + 4240864886, + 3029822628, + 338343927, + 313992103, + 177933685, + 1201867660, + 902478846, + 2553476951, + 257362733, + 392548662, + 2942901698, + 3789213785, + 3442876186, + 1376555996, + 647608426, + 3179574666, + 942544596, + 1564366555, + 1769541869, + 3204174559, + 3220680713, + 2298243522, + 3608817289, + 1548501080, + 1334349418, + 1102447227, + 1385255870, + 3808195136, + 883667859, + 772327731, + 3925076768, + 3326689567, + 516408022, + 1753712982, + 4211012417, + 186284228, + 2507991141, + 2230197211, + 1267305277, + 3358179688, + 1142302453, + 3106352276, + 1768862464, + 4106756908, + 2172865991, + 480632391, + 2351076589, + 4283776208, + 2544420685, + 207632683, + 3684204244, + 1987314041, + 2918435603, + 203591941, + 2106962337, + 3721229027, + 2850354259, + 1310734042, + 3623391388, ]; static final String transactionCloude = String.fromCharCodes( @@ -1994,85 +2046,85 @@ final class _Env { _envieddatatransactionCloude[i] ^ _enviedkeytransactionCloude[i])); static const List _enviedkeyvisionApi = [ - 1321002194, - 2221636957, - 3892683175, - 2473638910, - 1421085640, - 479186114, - 3663426891, - 307158031, - 2923076181, - 2941746960, - 2325378468, - 117857678, - 3926647841, - 277276355, - 2921914885, - 183096241, - 571962768, - 1760225352, - 3860137070, - 3668770176, - 2546872213, - 1587445808, - 934356753, - 1582193161, - 4043739240, - 3585242460, - 687632361, - 4240626178, - 4130313850, - 560755458, - 421797374, - 3537889286, - 219483646, - 1777304863, - 1232320781, - 1258195913, - 4078488333, - 3940223973, + 3449569445, + 1424033417, + 474964228, + 2213678135, + 567698513, + 278969534, + 144214055, + 2659032685, + 3925455488, + 1622357700, + 1136615058, + 2580278842, + 3675016836, + 4191209896, + 2524594001, + 3838616617, + 1876340672, + 2111963964, + 4288508606, + 581945109, + 3240508474, + 1076307663, + 3057404931, + 782678162, + 1629718417, + 3313726635, + 964809155, + 1597079749, + 3336087780, + 1859779564, + 1660419210, + 2578934842, + 4099186848, + 2378904315, + 2338194984, + 881229155, + 436842941, + 3639724217, ]; static const List _envieddatavisionApi = [ - 1321002209, - 2221636909, - 3892683238, - 2473638834, - 1421085627, - 479186099, - 3663426840, - 307158108, - 2923076108, - 2941747012, - 2325378514, - 117857780, - 3926647889, - 277276405, - 2921914940, - 183096288, - 571962789, - 1760225294, - 3860136995, - 3668770249, - 2546872306, - 1587445842, - 934356843, - 1582193251, - 4043739183, - 3585242474, - 687632307, - 4240626227, - 4130313728, - 560755561, - 421797258, - 3537889356, - 219483558, - 1777304941, - 1232320853, - 1258195877, - 4078488399, - 3940223881, + 3449569430, + 1424033529, + 474964293, + 2213678203, + 567698466, + 278969551, + 144214132, + 2659032638, + 3925455577, + 1622357648, + 1136615140, + 2580278848, + 3675016948, + 4191209886, + 2524594024, + 3838616696, + 1876340725, + 2111964026, + 4288508659, + 581945180, + 3240508509, + 1076307629, + 3057405049, + 782678264, + 1629718486, + 3313726621, + 964809113, + 1597079796, + 3336087710, + 1859779463, + 1660419326, + 2578934896, + 4099186936, + 2378904201, + 2338195056, + 881229071, + 436843007, + 3639724245, ]; static final String visionApi = String.fromCharCodes(List.generate( @@ -2082,237 +2134,237 @@ final class _Env { ).map((int i) => _envieddatavisionApi[i] ^ _enviedkeyvisionApi[i])); static const List _enviedkeysecretKey = [ - 3755414173, - 481079106, - 3956588325, - 118331169, - 471942385, - 3562946645, - 4280418514, - 2762150076, - 2731039997, - 3714079618, - 2244153062, - 247950539, - 4105735313, - 483727867, - 377393343, - 2095769161, - 2209252589, - 1161301991, - 3878602467, - 2597223187, - 3953140643, - 3438840315, - 1574011470, - 1439495913, - 1864540922, - 711679133, - 1929577153, - 3182997962, - 1712556548, - 139886386, - 1593032270, - 3709596296, - 405365632, - 1831893576, - 728338839, - 148531355, - 569305918, - 1231190251, - 1201409192, - 1865569438, - 81622455, - 3751204816, - 2563527111, - 1544648056, - 680848828, - 1893848530, - 68090520, - 1145414766, - 4225640590, - 390054069, - 3471296860, - 3857643991, - 2461948108, - 4114188115, - 702150199, - 3271649119, - 2837469336, - 3738964144, - 3792038319, - 2072086338, - 1742098329, - 3599382577, - 1524010918, - 1586975410, - 3634433338, - 2403903118, - 2481372886, - 2671573091, - 2087207072, - 272827005, - 183798869, - 914205099, - 3903056321, - 1001665309, - 726514234, - 4190734179, - 4012513533, - 3018795411, - 1741888405, - 1742713841, - 706259109, - 671313595, - 537229956, - 3196925139, - 3592286979, - 487612167, - 1512232325, - 3093603142, - 1189376562, - 192903225, - 2778587227, - 800764830, - 3592780180, - 1020531064, - 668925238, - 3042113886, - 3531268086, - 1093009588, - 2371489280, - 981175689, - 212461286, - 3152966914, - 3174303892, - 1536492937, - 2281519435, - 2241063694, - 1556160057, - 754108300, - 3866334073, - 1778683763, - 3562032549, - 3268351488, - 1519039826, - 3116637138, + 4140745550, + 3178408042, + 1670814531, + 3711282077, + 1662128599, + 2889772086, + 1014452685, + 3064053161, + 3380164303, + 1121077713, + 3395820404, + 3048260593, + 2971600797, + 1624369151, + 564174429, + 1994829589, + 2238813768, + 3856513925, + 2474391362, + 1671318605, + 1275341974, + 2433357473, + 2300558167, + 3502011188, + 3045159025, + 3673257124, + 3784164155, + 2921536830, + 3053351981, + 1709997607, + 939033529, + 2210749178, + 1543708163, + 3587197731, + 522450157, + 1494024919, + 1215441420, + 4032619068, + 4178537696, + 1895028211, + 814537802, + 3097838214, + 3924531299, + 1123669819, + 2471307014, + 903882385, + 518508348, + 2734682307, + 1609277034, + 2300250967, + 457095514, + 4234953889, + 3319745839, + 3982427809, + 1770484065, + 1929441996, + 668317955, + 2709879740, + 1548907051, + 2501230123, + 906637839, + 2421468484, + 402638955, + 1070192145, + 3349225512, + 1492212846, + 269678157, + 3904211919, + 3200035485, + 2869006894, + 3610364665, + 1788566239, + 3206653378, + 747661071, + 1566895650, + 3568568164, + 3654832529, + 3253616469, + 2410231022, + 2720063622, + 1111909744, + 3148038286, + 778856656, + 3884526090, + 545658427, + 2059041156, + 2243131660, + 450205184, + 3076101930, + 776895230, + 1756916461, + 1964317324, + 1474443632, + 4025902323, + 4141291063, + 3352169569, + 3125356068, + 3252599961, + 3744929749, + 774818637, + 226178144, + 1277440227, + 633593715, + 2779085681, + 3252663185, + 2579559376, + 1983324010, + 2710271075, + 53403007, + 325554330, + 4073441341, + 3337826937, + 1408439834, + 3775185935, ]; static const List _envieddatasecretKey = [ - 3755414247, - 481079077, - 3956588410, - 118331219, - 471942302, - 3562946597, - 4280418488, - 2762150115, - 2731039944, - 3714079669, - 2244153007, - 247950498, - 4105735399, - 483727821, - 377393359, - 2095769092, - 2209252523, - 1161301924, - 3878602401, - 2597223253, - 3953140690, - 3438840264, - 1574011405, - 1439495899, - 1864540820, - 711679147, - 1929577096, - 3182997906, - 1712556648, - 139886431, - 1593032228, - 3709596401, - 405365739, - 1831893560, - 728338927, - 148531423, - 569305939, - 1231190204, - 1201409169, - 1865569453, - 81622500, - 3751204743, - 2563527156, - 1544647950, - 680848842, - 1893848458, - 68090608, - 1145414744, - 4225640630, - 390054112, - 3471296797, - 3857644014, - 2461948056, - 4114188134, - 702150257, - 3271649040, - 2837469386, - 3738964196, - 3792038392, - 2072086309, - 1742098382, - 3599382594, - 1524010994, - 1586975361, - 3634433293, - 2403903197, - 2481372834, - 2671573032, - 2087207123, - 272826930, - 183798789, - 914205135, - 3903056310, - 1001665369, - 726514270, - 4190734096, - 4012513412, - 3018795435, - 1741888484, - 1742713763, - 706259100, - 671313608, - 537230070, - 3196925086, - 3592287062, - 487612267, - 1512232432, - 3093603111, - 1189376602, - 192903242, - 2778587240, - 800764912, - 3592780228, - 1020530992, - 668925248, - 3042113849, - 3531268020, - 1093009621, - 2371489331, - 981175738, - 212461202, - 3152966981, - 3174303999, - 1536492976, - 2281519483, - 2241063800, - 1556160111, - 754108345, - 3866333985, - 1778683649, - 3562032637, - 3268351596, - 1519039760, - 3116637118, + 4140745524, + 3178407949, + 1670814492, + 3711282159, + 1662128568, + 2889772102, + 1014452647, + 3064053238, + 3380164346, + 1121077734, + 3395820349, + 3048260504, + 2971600875, + 1624369097, + 564174381, + 1994829656, + 2238813710, + 3856513990, + 2474391296, + 1671318539, + 1275342055, + 2433357458, + 2300558100, + 3502011142, + 3045158943, + 3673257106, + 3784164210, + 2921536870, + 3053352001, + 1709997642, + 939033555, + 2210749059, + 1543708264, + 3587197779, + 522450069, + 1494024851, + 1215441505, + 4032619115, + 4178537689, + 1895028160, + 814537753, + 3097838289, + 3924531280, + 1123669837, + 2471307120, + 903882441, + 518508372, + 2734682357, + 1609277010, + 2300250882, + 457095451, + 4234953880, + 3319745915, + 3982427796, + 1770484007, + 1929441923, + 668318033, + 2709879784, + 1548907132, + 2501230156, + 906637912, + 2421468471, + 402638911, + 1070192162, + 3349225503, + 1492212797, + 269678137, + 3904211844, + 3200035566, + 2869006945, + 3610364585, + 1788566203, + 3206653365, + 747661131, + 1566895686, + 3568568087, + 3654832616, + 3253616493, + 2410230943, + 2720063700, + 1111909705, + 3148038397, + 778856610, + 3884526151, + 545658478, + 2059041256, + 2243131769, + 450205281, + 3076101954, + 776895117, + 1756916446, + 1964317410, + 1474443552, + 4025902267, + 4141291073, + 3352169478, + 3125356134, + 3252600056, + 3744929766, + 774818686, + 226178068, + 1277440164, + 633593624, + 2779085640, + 3252663201, + 2579559334, + 1983323964, + 2710271062, + 53402919, + 325554408, + 4073441381, + 3337826837, + 1408439896, + 3775186019, ]; static final String secretKey = String.fromCharCodes(List.generate( @@ -2322,237 +2374,237 @@ final class _Env { ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); static const List _enviedkeystripePublishableKe = [ - 2095869746, - 70834621, - 805105471, - 1052849688, - 1906171261, - 3041351216, - 2761167939, - 2808101434, - 668570420, - 2732796291, - 1899233039, - 2539489777, - 16150311, - 1245049504, - 1689923214, - 2155727570, - 2080198536, - 2915060442, - 2919243796, - 1240350892, - 3351631611, - 2184016446, - 4250735169, - 3774590106, - 1004415078, - 3937188227, - 665828934, - 3493814831, - 3526827220, - 3994427264, - 1612223495, - 2441632477, - 3444872050, - 2670489400, - 2820340696, - 379045790, - 400327084, - 977160163, - 185611632, - 2570891165, - 3461206225, - 3263802017, - 2036679992, - 3298527424, - 3987959322, - 1782322571, - 4098852968, - 2404481356, - 2156567605, - 2772234988, - 220646709, - 1749594366, - 500908817, - 2224282212, - 2548037101, - 960614419, - 1918901825, - 2774746951, - 3629124810, - 2228894375, - 972346471, - 3239585424, - 3530792914, - 3644703565, - 4263759910, - 112983671, - 2508881746, - 2525043110, - 2200624054, - 448778033, - 3709740133, - 2138850299, - 2920342308, - 3213336247, - 4282817575, - 2058966542, - 388766975, - 2746106097, - 316164027, - 2824935959, - 1520344173, - 3172978822, - 1467293542, - 2052312890, - 3836513476, - 189139230, - 1877854456, - 1490178022, - 2573972144, - 1173449825, - 68322487, - 1665169618, - 3171202323, - 1389366464, - 1242401893, - 4264972213, - 455196335, - 1955033364, - 500851155, - 1654801215, - 1717808523, - 3542493913, - 1689437433, - 2879832676, - 852682673, - 4132511560, - 1166195214, - 800466477, - 1249583966, - 3955740670, - 2768984457, - 2279483445, - 2571539946, - 117765402, + 1131561294, + 2711604043, + 2145438534, + 2360936889, + 917884507, + 943173038, + 2049302825, + 2388082498, + 1714080331, + 918934053, + 1312375978, + 1430083567, + 3144177047, + 753529424, + 3600024350, + 3533519459, + 3393226149, + 3034528707, + 2274373170, + 705124211, + 3505652149, + 3164031223, + 2980824754, + 4177489357, + 2612244290, + 380737404, + 2073785079, + 2028554690, + 3637466038, + 1326782093, + 3714588566, + 982432894, + 1922869578, + 1801151060, + 1847673334, + 2962612282, + 4172865284, + 2600285898, + 3137668193, + 1757787985, + 2419940104, + 3077560413, + 2958385622, + 1866645297, + 1813098684, + 2931437, + 430881370, + 3054916559, + 3072068927, + 2983391157, + 537211855, + 3016928490, + 2932098291, + 967822812, + 2680842344, + 349884289, + 1918020125, + 4181677295, + 935528141, + 98582932, + 1580985494, + 3131539899, + 1625179159, + 2225003075, + 2057582527, + 2841569269, + 186929617, + 3189508925, + 1770763366, + 353156279, + 878542735, + 3018827748, + 2205537999, + 544189314, + 3077791291, + 3905192562, + 730377716, + 1986075123, + 197393759, + 212586995, + 1540211849, + 4134830671, + 1543569231, + 2828495303, + 2567308120, + 1830630969, + 3757512651, + 2552828232, + 695885796, + 1231146981, + 2871782048, + 1453407665, + 1681892297, + 1140670313, + 2344516727, + 460245895, + 3192034309, + 3434432290, + 2206422758, + 1177540407, + 919924075, + 1753835819, + 3003089654, + 2783922040, + 4124749669, + 3899550883, + 302065634, + 3160408601, + 4084296451, + 416404171, + 98095081, + 115708127, + 3379724151, + 906566332, ]; static const List _envieddatastripePublishableKe = [ - 2095869764, - 70834650, - 805105504, - 1052849768, - 1906171151, - 3041351263, - 2761167923, - 2808101456, - 668570475, - 2732796342, - 1899233080, - 2539489720, - 16150350, - 1245049558, - 1689923256, - 2155727519, - 2080198606, - 2915060377, - 2919243862, - 1240350954, - 3351631498, - 2184016397, - 4250735106, - 3774590120, - 1004414984, - 3937188277, - 665828909, - 3493814881, - 3526827166, - 3994427374, - 1612223581, - 2441632415, - 3444871947, - 2670489454, - 2820340718, - 379045872, - 400327129, - 977160103, - 185611524, - 2570891205, - 3461206196, - 3263802008, - 2036680049, - 3298527402, - 3987959391, - 1782322651, - 4098852903, - 2404481322, - 2156567645, - 2772234881, - 220646725, - 1749594298, - 500908901, - 2224282163, - 2548036992, - 960614503, - 1918901874, - 2774746890, - 3629124742, - 2228894453, - 972346455, - 3239585527, - 3530792835, - 3644703549, - 4263759951, - 112983615, - 2508881713, - 2525043191, - 2200624091, - 448778096, - 3709740067, - 2138850230, - 2920342385, - 3213336295, - 4282817621, - 2058966612, - 388766876, - 2746106050, - 316164074, - 2824936062, - 1520344110, - 3172978882, - 1467293452, - 2052312898, - 3836513414, - 189139268, - 1877854388, - 1490177924, - 2573972168, - 1173449765, - 68322548, - 1665169633, - 3171202422, - 1389366438, - 1242401821, - 4264972258, - 455196375, - 1955033454, - 500851168, - 1654801164, - 1717808617, - 3542493838, - 1689437361, - 2879832661, - 852682731, - 4132511535, - 1166195324, - 800466526, - 1249583878, - 3955740556, - 2768984529, - 2279483481, - 2571539880, - 117765494, + 1131561272, + 2711604012, + 2145438489, + 2360936905, + 917884457, + 943173057, + 2049302873, + 2388082472, + 1714080276, + 918934032, + 1312375965, + 1430083494, + 3144177150, + 753529382, + 3600024360, + 3533519406, + 3393226211, + 3034528640, + 2274373232, + 705124149, + 3505652164, + 3164031172, + 2980824817, + 4177489407, + 2612244268, + 380737354, + 2073784988, + 2028554636, + 3637466108, + 1326782179, + 3714588620, + 982432828, + 1922869555, + 1801150978, + 1847673280, + 2962612308, + 4172865393, + 2600285838, + 3137668117, + 1757787913, + 2419940205, + 3077560420, + 2958385567, + 1866645339, + 1813098745, + 2931389, + 430881301, + 3054916521, + 3072068951, + 2983391192, + 537211839, + 3016928430, + 2932098183, + 967822731, + 2680842245, + 349884405, + 1918020142, + 4181677218, + 935528065, + 98582982, + 1580985510, + 3131539932, + 1625179206, + 2225003059, + 2057582550, + 2841569213, + 186929586, + 3189508972, + 1770763275, + 353156342, + 878542793, + 3018827689, + 2205537946, + 544189394, + 3077791305, + 3905192488, + 730377623, + 1986075072, + 197393678, + 212586906, + 1540211914, + 4134830603, + 1543569189, + 2828495295, + 2567308058, + 1830631011, + 3757512583, + 2552828202, + 695885724, + 1231146913, + 2871782115, + 1453407618, + 1681892268, + 1140670223, + 2344516623, + 460245968, + 3192034429, + 3434432344, + 2206422741, + 1177540356, + 919923977, + 1753835900, + 3003089598, + 2783921993, + 4124749631, + 3899550916, + 302065552, + 3160408682, + 4084296539, + 416404153, + 98095025, + 115708083, + 3379724085, + 906566352, ]; static final String stripePublishableKe = String.fromCharCodes( @@ -2565,125 +2617,125 @@ final class _Env { _enviedkeystripePublishableKe[i])); static const List _enviedkeychatGPTkeySefer = [ - 3792964091, - 2083572641, - 2197396638, - 1826778369, - 2930907163, - 2856933888, - 2538653055, - 1459404000, - 3002714577, - 1952725062, - 32295992, - 737610132, - 3922646120, - 3724013750, - 2457387467, - 2139349162, - 3822074809, - 3090318982, - 1502655442, - 2602237887, - 2413090634, - 2521525037, - 3201239260, - 823083829, - 1714299630, - 941835587, - 3901282511, - 700910794, - 2226904062, - 2958959419, - 3281343295, - 1160140595, - 537233603, - 4236888219, - 2696357588, - 1363639760, - 557953246, - 789379537, - 1312041419, - 499098432, - 3407475386, - 1623308740, - 1427464942, - 2565410321, - 1719221014, - 477658105, - 3347722492, - 995634727, - 1845512597, - 1734844576, - 1004527678, - 4075844754, - 2345039375, - 4107561362, - 3048112341, - 3637374380, - 620841367, - 2675619696, + 1170213883, + 1230796405, + 2692608690, + 586643958, + 1444376389, + 2665329816, + 2520813035, + 1892323135, + 2615026508, + 1821623105, + 470915285, + 2986511910, + 1984021874, + 2378608420, + 4040076084, + 1357339810, + 786958546, + 2745942755, + 3001335999, + 3616186175, + 4272291956, + 1508908783, + 4257149852, + 2993173190, + 3400204933, + 1967437533, + 1568762336, + 2145918089, + 4214034336, + 1367897060, + 3851127028, + 3108930351, + 1212223174, + 2320450111, + 1310355215, + 2550142673, + 77649110, + 2799649395, + 968869800, + 924457208, + 4273065543, + 845117018, + 2884866301, + 1074957533, + 2383930581, + 2489578455, + 4022005017, + 981527223, + 514946709, + 90417695, + 284556780, + 1287050855, + 1681773132, + 2288410432, + 1165774811, + 3493773321, + 3160030646, + 639429337, ]; static const List _envieddatachatGPTkeySefer = [ - 3792963969, - 2083572678, - 2197396659, - 1826778440, - 2930907250, - 2856933970, - 2538653004, - 1459403913, - 3002714597, - 1952725033, - 32296023, - 737610222, - 3922646025, - 3724013701, - 2457387410, - 2139349212, - 3822074833, - 3090319088, - 1502655408, - 2602237830, - 2413090616, - 2521525111, - 3201239223, - 823083780, - 1714299565, - 941835642, - 3901282455, - 700910776, - 2226903942, - 2958959452, - 3281343338, - 1160140662, - 537233651, - 4236888311, - 2696357612, - 1363639738, - 557953164, - 789379459, - 1312041361, - 499098418, - 3407475442, - 1623308718, - 1427464925, - 2565410368, - 1719221107, - 477658060, - 3347722413, - 995634815, - 1845512645, - 1734844620, - 1004527695, - 4075844804, - 2345039447, - 4107561440, - 3048112269, - 3637374400, - 620841429, - 2675619612, + 1170213761, + 1230796306, + 2692608671, + 586643903, + 1444376364, + 2665329866, + 2520813016, + 1892323158, + 2615026552, + 1821623086, + 470915258, + 2986511964, + 1984021779, + 2378608407, + 4040076141, + 1357339860, + 786958522, + 2745942677, + 3001336029, + 3616186118, + 4272291846, + 1508908725, + 4257149943, + 2993173239, + 3400204998, + 1967437540, + 1568762296, + 2145918203, + 4214034392, + 1367896963, + 3851126945, + 3108930410, + 1212223222, + 2320450131, + 1310355255, + 2550142651, + 77649028, + 2799649313, + 968869874, + 924457098, + 4273065487, + 845116976, + 2884866254, + 1074957452, + 2383930544, + 2489578466, + 4022005064, + 981527279, + 514946757, + 90417779, + 284556701, + 1287050801, + 1681773076, + 2288410418, + 1165774723, + 3493773413, + 3160030708, + 639429301, ]; static final String chatGPTkeySefer = String.fromCharCodes(List.generate( @@ -2694,157 +2746,157 @@ final class _Env { (int i) => _envieddatachatGPTkeySefer[i] ^ _enviedkeychatGPTkeySefer[i])); static const List _enviedkeyllamaKey = [ - 1601017339, - 4041100715, - 3890794798, - 1973124786, - 1940195900, - 809233867, - 2868123481, - 3742382215, - 3392168698, - 3482458118, - 3019054138, - 3776803589, - 3284973741, - 2484372152, - 2518569998, - 2809077248, - 1888643629, - 1741089375, - 1768117883, - 1212462528, - 3260945644, - 1267945537, - 1411634194, - 847979547, - 961286188, - 3553334450, - 4008096445, - 2048317156, - 471842337, - 569574257, - 3748064964, - 2270739852, - 2738146669, - 2992133564, - 2952582656, - 2970060863, - 1197039071, - 3265055941, - 529845622, - 324923610, - 1120478377, - 3925216616, - 2105420186, - 60947424, - 1412865716, - 2672308456, - 485519031, - 3252205781, - 3057078302, - 750820140, - 1697889793, - 610623944, - 1672588560, - 3915236117, - 595339916, - 854130657, - 3639730367, - 2168942112, - 1785929236, - 1185400276, - 2026777911, - 195918374, - 2064251329, - 2477021320, - 3166916304, - 2458531038, - 435707941, - 2455511359, - 1124420549, - 215388201, - 3603231367, - 341172830, - 1026463709, - 4087995180, + 2216994654, + 4165720590, + 2390816986, + 2956800409, + 2229394218, + 967747776, + 94923990, + 343817980, + 744985647, + 3686941901, + 1171660115, + 3365633231, + 4148699480, + 3208172736, + 1999091990, + 521684559, + 2316246415, + 3823642181, + 2869414779, + 366505400, + 1520105813, + 2034625152, + 1870663200, + 729470607, + 3908999355, + 4085221290, + 1497281490, + 3213374705, + 3043620130, + 2328360698, + 3378489523, + 3120061209, + 3360390810, + 1054108641, + 3498504396, + 914607340, + 2038771644, + 2528646761, + 2396923777, + 3146042573, + 280186846, + 977954549, + 995303269, + 3809127322, + 3447387968, + 4210006039, + 2032659889, + 1067097282, + 3998891546, + 3195386803, + 1828139144, + 1327307609, + 206086698, + 2844558899, + 229991343, + 2606249556, + 3543194086, + 1263528290, + 1426721303, + 1658400226, + 3147579068, + 3409949773, + 1538614711, + 2565062690, + 2007018161, + 1405116349, + 448046420, + 3360054307, + 49411291, + 2622305860, + 2198106288, + 395273829, + 1696907761, + 3580203004, ]; static const List _envieddatallamaKey = [ - 1601017257, - 4041100793, - 3890794755, - 1973124855, - 1940195913, - 809233842, - 2868123446, - 3742382273, - 3392168638, - 3482458195, - 3019054156, - 3776803683, - 3284973823, - 2484372220, - 2518570060, - 2809077359, - 1888643655, - 1741089387, - 1768117837, - 1212462502, - 3260945590, - 1267945482, - 1411634259, - 847979631, - 961286247, - 3553334520, - 4008096398, - 2048317074, - 471842382, - 569574204, - 3748065020, - 2270739905, - 2738146585, - 2992133515, - 2952582710, - 2970060807, - 1197039036, - 3265055893, - 529845523, - 324923536, - 1120478463, - 3925216607, - 2105420253, - 60947374, - 1412865744, - 2672308393, - 485519068, - 3252205701, - 3057078346, - 750820199, - 1697889893, - 610623889, - 1672588584, - 3915236186, - 595340008, - 854130572, - 3639730310, - 2168942158, - 1785929248, - 1185400243, - 2026777936, - 195918433, - 2064251312, - 2477021377, - 3166916325, - 2458530969, - 435707996, - 2455511376, - 1124420509, - 215388251, - 3603231455, - 341172786, - 1026463647, - 4087995200, + 2216994572, + 4165720668, + 2390817015, + 2956800476, + 2229394271, + 967747769, + 94923961, + 343817914, + 744985707, + 3686941848, + 1171660069, + 3365633193, + 4148699402, + 3208172676, + 1999092052, + 521684512, + 2316246501, + 3823642225, + 2869414733, + 366505438, + 1520105743, + 2034625227, + 1870663265, + 729470715, + 3908999408, + 4085221344, + 1497281505, + 3213374599, + 3043620173, + 2328360631, + 3378489483, + 3120061268, + 3360390894, + 1054108630, + 3498504442, + 914607316, + 2038771679, + 2528646713, + 2396923876, + 3146042503, + 280186760, + 977954498, + 995303202, + 3809127380, + 3447387940, + 4210006102, + 2032659930, + 1067097234, + 3998891598, + 3195386872, + 1828139244, + 1327307520, + 206086674, + 2844558972, + 229991371, + 2606249529, + 3543194079, + 1263528204, + 1426721315, + 1658400133, + 3147579099, + 3409949706, + 1538614726, + 2565062763, + 2007018116, + 1405116410, + 448046381, + 3360054348, + 49411203, + 2622305846, + 2198106344, + 395273737, + 1696907699, + 3580202896, ]; static final String llamaKey = String.fromCharCodes(List.generate( @@ -2854,6329 +2906,6329 @@ final class _Env { ).map((int i) => _envieddatallamaKey[i] ^ _enviedkeyllamaKey[i])); static const List _enviedkeyprivateKeyFCM = [ - 687057079, - 2351747206, - 667131453, - 3163379448, - 244169149, - 1842471636, - 1777298140, - 3370684253, - 2417822253, - 3239766084, - 2635588247, - 3484980800, - 964320657, - 449894188, - 2089552722, - 1384563282, - 2747374620, - 2322693829, - 468105247, - 1775438936, - 114910042, - 3630378722, - 525036902, - 1362487531, - 1135304363, - 1787329960, - 896419944, - 4045619456, - 2215203006, - 242979155, - 3239620291, - 2243180734, - 1140341584, - 1269640209, - 958814573, - 2704745197, - 2312092250, - 1131650715, - 1365473300, - 3058935625, - 1034259935, - 3056986789, - 2369562258, - 3495105664, - 2652088463, - 1877240437, - 2502858205, - 2874879828, - 2273458784, - 2039818114, - 2638912853, - 3307648553, - 2804245355, - 2449604784, - 1949077240, - 4079189058, - 1126902374, - 1532742925, - 860939965, - 3945049624, - 2270623769, - 3910629066, - 1015583378, - 1867074372, - 2465101826, - 517997833, - 253498833, - 888353475, - 3523149854, - 1836954369, - 1418962041, - 549889195, - 119196116, - 3815764433, - 4222827241, - 4200717733, - 3545037878, - 702961295, - 1996110315, - 2339379893, - 3916247695, - 792232860, - 1268068044, - 3530286623, - 3038176899, - 3103585943, - 1003136018, - 378173846, - 3626936752, - 1111889643, - 830344127, - 3502592700, - 1346804649, - 921908300, - 1796505394, - 1970348983, - 1213723960, - 2022652076, - 2960785983, - 3479729248, - 651823848, - 4220177280, - 3332209731, - 3812845199, - 3817638499, - 2687987651, - 185546263, - 4084649919, - 4104752746, - 1395361837, - 3072044259, - 4213754638, - 667246499, - 3413465581, - 1104137927, - 1652811912, - 1629739625, - 1281193375, - 3105940646, - 716032233, - 2655485488, - 105696133, - 3210900363, - 1179645092, - 2642202477, - 585078584, - 4249051312, - 3943384562, - 1787047748, - 3580516897, - 846963645, - 1929683045, - 1716497621, - 2263167773, - 1491556894, - 2440675827, - 547085541, - 1140351068, - 4042203569, - 1534001699, - 2007965703, - 2422116758, - 1259191204, - 2585656914, - 990823966, - 2666168448, - 4091045220, - 2746205287, - 2281755217, - 4019845627, - 2305393694, - 25134251, - 1597358055, - 518518628, - 638187380, - 3676090453, - 1455278670, - 4110759478, - 3661034822, - 1083265479, - 700597410, - 603820923, - 1897158471, - 312537683, - 3800705376, - 1491396271, - 166463088, - 3804013469, - 1291657596, - 1642701925, - 1996010988, - 1949562731, - 356074648, - 3050374307, - 3397446731, - 2619755239, - 2555055478, - 1326004946, - 2978212397, - 3189868302, - 3919328974, - 3202181406, - 997267899, - 3071128875, - 3896656187, - 1532948546, - 3589177649, - 3857962590, - 2331592977, - 2279342650, - 3941034724, - 3274722023, - 548476279, - 892941162, - 2158930517, - 191171282, - 527249675, - 1010994138, - 3551807589, - 656140011, - 1268780703, - 1841291250, - 2107784625, - 1333706309, - 2430612682, - 1109102275, - 2933832787, - 3111867669, - 2253205018, - 1609624176, - 4086503578, - 2926453881, - 1101436772, - 217953360, - 239708506, - 2376010433, - 4024108921, - 3294172692, - 1045166676, - 210617118, - 3886987639, - 4031539950, - 3104339998, - 1294299399, - 520535486, - 501227617, - 306325296, - 1202402059, - 3723715796, - 2212498814, - 3273227097, - 3348215565, - 3107513990, - 1580502700, - 865597222, - 3203205623, - 347528836, - 691095430, - 518666983, - 752476105, - 1070210910, - 1328358167, - 712849806, - 979358934, - 1739004217, - 1650805147, - 3211750412, - 4111303259, - 2391613624, - 3700200201, - 1330926107, - 1110755379, - 3815566203, - 1987837546, - 1590898906, - 325629307, - 1693179454, - 4108392389, - 903375139, - 1749831042, - 1497463773, - 3248155068, - 1971381954, - 2466378213, - 3466183019, - 852268931, - 1488536109, - 682839548, - 135322709, - 344119370, - 3881270673, - 3227487939, - 2151628530, - 167635503, - 3725249750, - 3152629376, - 1663985986, - 2210105824, - 2848263070, - 3687606972, - 3523295046, - 1521619289, - 465615461, - 4033741306, - 1628996849, - 1567365916, - 320533902, - 1341484520, - 3707123029, - 3761971597, - 2995027430, - 3508317180, - 4175740758, - 2913612090, - 1644059757, - 2559420391, - 11499368, - 4233853942, - 561558510, - 1796863374, - 3445165393, - 417676018, - 1260199706, - 4081736595, - 3489912362, - 3930082947, - 3168753505, - 3457806501, - 72557440, - 1634530617, - 1781670458, - 3548731408, - 3659721326, - 411972880, - 3257203202, - 1118205266, - 3791581586, - 1269049055, - 3526733766, - 295712945, - 3822033175, - 1129163376, - 2013063341, - 1807587912, - 3046977771, - 4191572441, - 31158651, - 416060273, - 2124999371, - 2305340950, - 252766739, - 2555023632, - 2030281626, - 2675404104, - 1347703471, - 3898305332, - 1191736963, - 2444925098, - 774938004, - 4096414482, - 722317162, - 1110029869, - 3531804663, - 2137291193, - 2613587805, - 1760379995, - 2509810867, - 531913930, - 3315801751, - 1604337874, - 4152488397, - 314587349, - 115455679, - 2664093883, - 1270508838, - 988788384, - 1563335105, - 1431885410, - 2300103799, - 2105569121, - 34079738, - 3837339872, - 862200166, - 2374437718, - 3763062236, - 3948621131, - 3728118445, - 1466018864, - 3659356775, - 1740312934, - 2490567310, - 3353665964, - 1184219929, - 2998433130, - 2881676273, - 1367812056, - 1893075199, - 1328528890, - 3676685247, - 2394762602, - 1138100166, - 1001711142, - 2080430370, - 1405550151, - 2349784840, - 2048576973, - 1293844821, - 4031262692, - 1452968057, - 319431249, - 2394605576, - 2734257547, - 3552822452, - 2083729673, - 2155270851, - 662136377, - 2639811182, - 3994095936, - 3972429038, - 2652529983, - 3552382204, - 374720860, - 2867639054, - 50989261, - 2097631777, - 3114682742, - 751413525, - 3289840503, - 2503026336, - 3536214363, - 3874517482, - 1059484157, - 1789453418, - 4101203024, - 1527096069, - 1430864941, - 2753642593, - 2452695082, - 1255464058, - 1594937780, - 1548279570, - 678081118, - 2254220411, - 4048297023, - 3930824303, - 460346134, - 3296095154, - 2346322448, - 157751439, - 66795354, - 3540450045, - 948024300, - 4203366357, - 2985827121, - 3154322543, - 2369269073, - 979650289, - 865258732, - 2140951570, - 1794619740, - 1780069351, - 343919625, - 3140351754, - 2223497373, - 2753711133, - 374166729, - 2367696013, - 2869765837, - 81755526, - 102874001, - 1026539829, - 3266936795, - 3891160179, - 1511029681, - 2164675898, - 708649631, - 66135995, - 804371000, - 1727519579, - 3775998969, - 268870442, - 511645840, - 1925243591, - 3909426981, - 837369557, - 1392273380, - 1244366215, - 1594792494, - 401954727, - 4099624863, - 2786854907, - 1550121971, - 1546091874, - 3426410426, - 2491320968, - 357273460, - 2754430940, - 1667329053, - 2994892425, - 733231654, - 557032415, - 3668375243, - 3953347159, - 2430734619, - 3468644793, - 1310189567, - 1518085679, - 2669482954, - 3649695749, - 4256299573, - 2973002620, - 1069219141, - 446446623, - 268164197, - 4226082514, - 1145782416, - 45593296, - 3258159646, - 2579021638, - 3769117812, - 2534156761, - 3103773519, - 1597185314, - 1607401608, - 2559722231, - 1199481122, - 2258313015, - 51926177, - 414790251, - 2014941673, - 2586533746, - 364300310, - 2992864475, - 942582844, - 4020007036, - 4248592193, - 815986888, - 71527357, - 3607848290, - 1020035144, - 1444669068, - 199040461, - 2994149491, - 1607832930, - 1393714451, - 1002443717, - 6367102, - 3920656484, - 2902373953, - 3556625549, - 4223522629, - 2523730300, - 4144857007, - 1018257487, - 1895368465, - 1980167240, - 3170550741, - 3917908466, - 1051732329, - 384847217, - 1796040071, - 3943863989, - 4151237426, - 1496652690, - 1592764172, - 3758811795, - 944833236, - 3536409318, - 315366750, - 1152576428, - 1574005339, - 3563403457, - 77656859, - 1509468996, - 1963658491, - 326154952, - 2688289555, - 3634806784, - 989391393, - 2940770249, - 820707405, - 1418767280, - 3355902393, - 1491491169, - 123239375, - 3656357358, - 2477619870, - 1138227218, - 3799404060, - 4157807638, - 503931457, - 978113374, - 2961913270, - 2834292118, - 1253918904, - 1895171311, - 4239667176, - 2242957452, - 2984808750, - 2836044031, - 1345370064, - 2159997771, - 2387877203, - 1854857239, - 218749056, - 3926444871, - 2467554404, - 2108347528, - 2074253384, - 2185435541, - 2553968558, - 1544832355, - 3215152527, - 1201050264, - 1216987979, - 1961650682, - 434459519, - 1011677681, - 1880825849, - 1470825482, - 888564100, - 1505511000, - 2483609612, - 877619376, - 1041963477, - 2866304447, - 57001036, - 2608376087, - 206503454, - 2762557426, - 4099064194, - 3301815840, - 2196783735, - 1790797940, - 609245135, - 2345566295, - 1772348453, - 2768220044, - 32911054, - 68068628, - 3131207316, - 552488226, - 3548258378, - 82032475, - 1099870857, - 3236886902, - 3108183291, - 377011552, - 763328957, - 3004541928, - 2619543622, - 2814834482, - 2963609991, - 3346435525, - 3914676697, - 4026933377, - 1122540537, - 2473234468, - 3845442999, - 3041363406, - 1119985505, - 2107539389, - 2069905260, - 3665449744, - 3265374142, - 1550780233, - 757498339, - 3719481035, - 1634894424, - 2041572055, - 2519019164, - 2165441811, - 3876721927, - 421888809, - 3883568098, - 1112109153, - 2550420844, - 3155930256, - 3698428699, - 3880483550, - 3891891544, - 879728845, - 2522888996, - 1891622831, - 1409321550, - 20894261, - 692880680, - 297400526, - 2892899232, - 3691302916, - 3079043131, - 722522485, - 751168220, - 2989246682, - 101047894, - 3403828991, - 673627920, - 1779274049, - 2371877749, - 3594596574, - 1659179656, - 2296460637, - 759667893, - 711462584, - 3137361171, - 2545414154, - 404329041, - 2606123633, - 2800154590, - 2816641222, - 1796973586, - 2802712773, - 1812798677, - 1000879192, - 1875389778, - 67581215, - 1832387794, - 2166002390, - 2587804334, - 1665786156, - 3757850316, - 2897333466, - 2011093392, - 765940923, - 2062905557, - 589979896, - 2976125411, - 3911360778, - 460591879, - 1742620316, - 473132652, - 3263667854, - 2292507297, - 759419921, - 566145932, - 1952430102, - 729127368, - 3182834958, - 627055911, - 3374240752, - 2824819124, - 2035650496, - 3170603930, - 2485312128, - 2462910300, - 3047470161, - 618836850, - 2463661700, - 991550390, - 2003136948, - 3054747182, - 3875052813, - 2958047413, - 3330148517, - 1848353723, - 848233218, - 1520010434, - 3098676778, - 1414309289, - 2584119892, - 1838183326, - 335442739, - 59961309, - 3701403010, - 3721175388, - 3269427627, - 3722129778, - 3172413731, - 2373186239, - 807365581, - 1188657451, - 697175560, - 1438233659, - 482253715, - 2053663331, - 3615704099, - 4060801346, - 676072965, - 2194875039, - 2525637744, - 4224693448, - 1222035228, - 2356236804, - 4217200057, - 3573338387, - 660887104, - 2554363594, - 1548620183, - 2867229317, - 377754927, - 955745194, - 1709721537, - 2303101506, - 3151813970, - 845622516, - 4212176103, - 3625474867, - 2863246174, - 406853587, - 2495520114, - 2819499479, - 1542024378, - 459058118, - 1063310388, - 1486141137, - 1329315786, - 2688628887, - 28727376, - 3868867821, - 2984554988, - 3322479268, - 2676752139, - 510374450, - 1586075819, - 3334331721, - 3301414375, - 2483864183, - 3645666707, - 2712019414, - 78762158, - 2055652830, - 2874158033, - 3599958482, - 1532212378, - 1945558325, - 2037003295, - 4063468470, - 321332483, - 1315177267, - 836246881, - 3977243502, - 5609619, - 3682172481, - 2383852259, - 1255801867, - 1137572442, - 776912708, - 2953171230, - 3337348048, - 3292271038, - 2454974546, - 1018738570, - 4197584067, - 3612878747, - 1204529855, - 2654233085, - 2434739586, - 4034318384, - 2661089688, - 2743459660, - 2336599113, - 3302365960, - 947135981, - 393097740, - 1793369989, - 1493963913, - 3831129104, - 3227353937, - 3117169983, - 1481880488, - 2756896130, - 81470185, - 1114201099, - 493138608, - 595972748, - 1708809163, - 1109115953, - 188241530, - 2186297787, - 3983306726, - 503132899, - 4118504147, - 4234361487, - 847354832, - 4037006686, - 152462190, - 3278825299, - 3004284475, - 2392241000, - 407470260, - 863107185, - 3856075679, - 275930806, - 54470221, - 401108493, - 3998192962, - 2879285554, - 2647024601, - 3251264677, - 1245511469, - 2411226037, - 2559214272, - 2880381975, - 3530263299, - 2927569821, - 1217886146, - 126286172, - 1087192482, - 4044143509, - 1565735015, - 1981026909, - 1036437541, - 3713013964, - 3146126384, - 343341725, - 3685441657, - 1506986636, - 2987513019, - 2111309944, - 3613085697, - 415340507, - 3212801515, - 1121277922, - 1400486483, - 1359408118, - 2344647144, - 4279931857, - 1130038458, - 3333053499, - 1017720918, - 1773665619, - 3496765482, - 1119782144, - 809979117, - 1091047844, - 4253337096, - 835823116, - 1759789636, - 419736575, - 2490166855, - 3599918197, - 4151755816, - 4205360640, - 5412101, - 1188705793, - 3540340874, - 2959754229, - 1457769512, - 3201484834, - 3485029145, - 2818711145, - 840135719, - 1453257261, - 3028565942, - 3881176472, - 3083126361, - 3364025556, - 3275851602, - 2982936160, - 3996764968, - 2554783386, - 847830920, - 3746702497, - 4069794515, - 4071461367, - 2872433726, - 4018472458, - 4057158505, - 522807946, - 2853793894, - 2112824153, - 1973868741, - 3071410123, - 2467552995, - 900382958, - 2296420889, - 1997314432, - 2084074979, - 3515937635, - 1500363423, - 3871385040, - 1856985228, - 1425350714, - 888001363, - 4136503031, - 2630455104, - 2289167233, - 3879236641, - 1372407661, - 2332626681, - 1007264533, - 2142684008, - 421005143, - 1435867370, - 863732356, - 2062979939, - 1734475146, - 880196294, - 1785339720, - 1043211352, - 1872541446, - 1897348439, - 3191959783, - 3158232939, - 3017421759, - 562380533, - 662261109, - 1540463263, - 3042159956, - 1091497064, - 3505648335, - 3143699386, - 933491977, - 3896430121, - 3300637803, - 1232558878, - 3326559922, - 1219163376, - 50578019, - 2314181759, - 19825246, - 4174758417, - 4004574845, - 1269884450, - 3744227404, - 3057252160, - 3779151297, - 1119798054, - 2464378164, - 2553424932, - 4181954181, - 4070036195, - 2389752194, - 1824247239, - 129514773, - 494902284, - 1982490088, - 3221839139, - 327785416, - 3910598529, - 2752518580, - 2098112453, - 3981442983, - 4187370412, - 2593119760, - 1212906831, - 555741341, - 147662103, - 975657579, - 2797768342, - 2342733405, - 2612118665, - 2191167256, - 2499583016, - 1744758645, - 1790320343, - 51243132, - 1715597284, - 2711004167, - 3704883515, - 3104128969, - 4040597518, - 1033009439, - 3549733769, - 32223739, - 3923764403, - 2920295374, - 1719182933, - 4012934874, - 2260339325, - 3630173916, - 24041145, - 3660474771, - 3015073477, - 1619707821, - 1230068818, - 1419388656, - 2360091524, - 1185277476, - 1103855240, - 1332503056, - 469645431, - 3367840401, - 2219967304, - 3177438183, - 748839940, - 1761293042, - 3818898451, - 4133496856, - 209117495, - 365143123, - 3948529502, - 1771875336, - 232366538, - 1085365737, - 959059687, - 3752710054, - 2118669743, - 3584233639, - 2437720477, - 1383722831, - 3590990192, - 2196379909, - 1542084929, - 420606323, - 347316987, - 4280747624, - 2959375733, - 2586808693, - 3388943718, - 2698094088, - 154512768, - 802527428, - 3204930647, - 4090575641, - 2954267874, - 3749593459, - 2039348872, - 3517950786, - 3509596534, - 601095607, - 1880541133, - 1057635966, - 2550068704, - 3924172495, - 1956025903, - 902799355, - 3095238090, - 3354994440, - 576288474, - 497097467, - 1983446519, - 282150801, - 1960862526, - 510871273, - 561272344, - 2714686472, - 1453039977, - 3224743482, - 3404274053, - 1585277829, - 3528845995, - 2767857678, - 3794820334, - 2616678721, - 1032175228, - 1035920675, - 1260209722, - 1735428035, - 984077599, - 3555667121, - 1671203012, - 563059802, - 191501785, - 3300115567, - 2855229368, - 3769856777, - 3215059759, - 551852997, - 1712697746, - 2077336594, - 3435584095, - 2878999468, - 2538255998, - 3818215603, - 229426622, - 441368015, - 1929867295, - 1435459927, - 4048400643, - 1338455069, - 3026518496, - 538685489, - 236625948, - 643620683, - 1870450508, - 3730561842, - 514744311, - 3523747799, - 2434601518, - 1958963547, - 1631769895, - 2467756286, - 2927450952, - 3825407136, - 1701741084, - 854290719, - 2874714901, - 351649092, - 1410359106, - 4156801641, - 958255435, - 1547996473, - 261564465, - 708094825, - 4136089501, - 1429611522, - 247733547, - 1834783415, - 2786502982, - 1141278502, - 1194991935, - 222560834, - 3860333268, - 2747473392, - 1422089000, - 2115133598, - 1415725869, - 1216314561, - 1901716473, - 1321782220, - 3587865812, - 2367918032, - 1156171968, - 2140668637, - 679524086, - 103129606, - 3767653414, - 2031162119, - 576992129, - 11290963, - 429659469, - 1209139081, - 3871630244, - 2485062480, - 671574871, - 933912045, - 2713354365, - 2047389931, - 1660529201, - 602428999, - 3456824423, - 1057991073, - 2017605041, - 1630114209, - 3173043290, - 3787901681, - 2521976700, - 3140411017, - 979674148, - 3060278327, - 4081843166, - 1496707447, - 1744597853, - 857288536, - 2721170970, - 1042422660, - 2243861605, - 1512846576, - 1437903518, - 1744561266, - 1185338942, - 2083194919, - 4179612903, - 862105826, - 3076397863, - 4070386161, - 4217086657, - 4034416762, - 3305310260, - 3281643249, - 463785933, - 1119900165, - 1796281357, - 3594496981, - 862284631, - 794204282, - 4040619773, - 3638464854, - 2601293411, - 2614489452, - 2951004407, - 1860978234, - 3221826768, - 2085629243, - 1629566636, - 2838374185, - 3970556609, - 3099087882, - 102895484, - 3468842478, - 1828989275, - 120240699, - 1255717261, - 2146838627, - 2292171642, - 1530615799, - 3200849313, - 648367621, - 1308447279, - 1613467214, - 1068079422, - 981110874, - 3001377729, - 3672163590, - 2712573569, - 4042020017, - 4267212093, - 1214765294, - 699325660, - 1726835413, - 4021704379, - 2661347104, - 3047423374, - 593227823, - 4083599051, - 3147462669, - 3597068786, - 2252591540, - 2622481301, - 1383631613, - 2529526425, - 2955700986, - 1700945606, - 2424313906, - 431817280, - 1755603718, - 2386625783, - 564491699, - 3655125403, - 300208800, - 1549986998, - 1634437363, - 3219256033, - 3021363360, - 2751324782, - 1892310402, - 1676654461, - 2791807815, - 1389810820, - 3115138316, - 815549858, - 3159863687, - 1893556514, - 235598206, - 4180654125, - 2248312935, - 3366772910, - 2423147183, - 4234149266, - 2083041163, - 4185126586, - 706683359, - 2280100331, - 1311484038, - 571736894, - 186564831, - 3226358297, - 720979626, - 502688629, - 3960422596, - 25839204, - 1998157702, - 1857769034, - 152483112, - 4099198885, - 3806302110, - 3861075092, - 3291731554, - 2451947383, - 153934840, - 3584032134, - 1055703950, - 2259950984, - 3033562239, - 4015054780, - 4191421287, - 1724389784, - 173500298, - 2676569926, - 428867879, - 3350579648, - 1701885666, - 2443647270, - 199956937, - 1684356100, - 1343705022, - 434806002, - 3925873251, - 952037685, - 4106604512, - 1687088952, - 1004993114, - 3820753619, - 3501401477, - 3314813712, - 3923516079, - 104481065, - 3579162014, - 424798113, - 3793094825, - 4186820209, - 2590691841, - 1609505292, - 3632617103, - 4201566887, - 2915403252, - 1429347316, - 3912134885, - 345631340, - 2031989841, - 4155174313, - 1418931855, - 2405200950, - 714190182, - 2015515848, - 2210742627, - 2274372343, - 3237429755, - 4187884229, - 3372763760, - 1514519290, - 2076514894, - 3797164844, - 3588245856, - 16311355, - 2799511255, - 1983090359, - 1139172365, - 3552215368, - 3759111275, - 2836754368, - 3363240389, - 2334058986, - 947585366, - 4244513058, - 639171218, - 1634887775, - 23915018, - 2542148947, - 3349121762, - 3421120284, - 3148054665, - 789047573, - 140301456, - 3328659670, - 62303638, - 2970552124, - 3242610715, - 2806792908, - 350982898, - 458731044, - 1058330987, - 2720319600, - 889342485, - 2612162003, - 1553167181, - 1287526025, - 3162717175, - 133320362, - 3661506572, - 2516764683, - 527865565, - 1723326843, - 2477797735, - 3832327476, - 2472419889, - 2044235411, - 1760849029, - 2498516145, - 1573571577, - 1582835959, - 1022618241, - 414370822, - 3442091479, - 2528300826, - 43696063, - 2841455467, - 3188146847, - 1659214581, - 2621459502, - 3187762907, - 690182092, - 2468470126, - 2340929141, - 2375691043, - 1148895935, - 693110316, - 2488951163, - 2636273264, - 2981594722, - 3862004927, - 3132103729, - 3031530860, - 1117224084, - 2102468514, - 3574460295, - 1950849835, - 3876104697, - 904185801, - 2860577571, - 1880104790, - 2699480140, - 3744178861, - 2233344567, - 3453244659, - 1887227300, - 1421077692, - 1600079619, - 2756615402, - 645649571, - 1425520843, - 3591069400, - 1314365324, - 1549038705, - 1728246717, - 400596232, - 1429908521, - 1374890200, - 4129367566, - 2678982212, - 1761830984, - 2592087435, - 1036086178, - 2046949001, - 696629482, - 4107653028, - 3478155641, - 3153631139, - 1402546556, - 3547299130, - 1785506013, - 1250016436, - 1668746929, - 1726109745, - 2605352822, - 3947577364, - 3110530094, - 700707908, - 2026287542, - 3251635261, - 551575189, - 2330151476, - 2636398390, - 3168989361, - 833257225, - 1007652898, - 660822419, - 3592671386, - 2338657609, - 1666106716, - 1770032347, - 3354296136, - 122850411, - 3292088327, - 2536071113, - 2803728520, - 846490214, - 3526364223, - 1925010802, - 1325166508, - 2185802743, - 3385608276, - 2495791552, - 4290963494, - 1090376706, - 3176709603, - 4115255550, - 3566057613, - 2451773617, - 1634723142, - 2075898512, - 2398898701, - 3551325893, - 262523877, - 3508691962, - 3760752092, - 2219471898, - 1593836559, - 1954961030, - 144409040, - 602548168, - 3257325627, - 3602183475, - 282669673, - 1937067335, - 1302666207, - 2698354096, - 3753893362, - 571009134, - 2808205099, - 698587333, - 1860015780, - 3820993699, - 1097851710, - 2203032010, - 1721845647, - 128579788, - 4091486227, - 3573618513, - 1972061245, - 2755413536, - 722873017, - 1799229660, - 4024295792, - 1409994833, - 444147594, - 2144628994, - 2462394151, - 611247012, - 466983608, - 1296557259, - 1951031518, - 2443083110, - 3995071020, - 1862280353, - 3406963575, - 364215005, - 2112417477, - 3760429338, - 393056168, - 1176637805, - 3492188218, - 1807796182, - 3617920911, - 1482648991, - 3287228369, - 3326794224, - 190629366, - 3030557761, - 1762522623, - 3977792998, - 1210401657, - 1720865084, - 2774685282, - 196568357, - 2605760355, - 3013233165, - 4239472837, - 2176216472, - 41705825, - 1958042941, - 2117425760, - 1213321518, - 3585151134, - 3953187075, - 3574672053, - 4176889672, - 248618274, - 1483679606, - 2101487732, - 1908240561, - 2978848386, - 2426336165, - 582604107, - 1884202016, - 3890119224, - 364621186, - 50642886, - 4235475404, - 1541425472, - 1021003091, - 1692351735, - 4090009432, - 1199569107, - 139700987, - 1539856014, - 4010367699, - 776051511, - 4161379508, - 3362660648, - 3362933895, - 1595099599, - 1750829335, - 2817626204, - 3280800252, - 2673398663, - 3278641105, - 1145314781, - 3199702531, - 3483200266, - 2717056850, - 2966990179, - 1313642157, - 1351664353, - 3453774583, - 3865042715, - 2146019311, - 2950968868, - 1926027786, - 635336671, - 2923312894, - 3513779230, - 4001636890, - 3559307941, - 2200783641, - 1664911668, - 3394323888, - 453047397, - 1071623851, - 3789661736, - 2527200264, - 102941685, - 263141578, - 2307359346, - 2740419288, - 1115777586, - 1267367041, - 233074674, - 2083840361, - 2078788804, - 309905466, - 2971109767, - 2479642390, - 2140676243, - 4253952963, - 1883170250, - 3255842229, - 3107476566, - 740971553, - 3772904425, - 3759186696, - 3461284943, - 2714700206, - 645919934, - 333316632, - 2937368823, - 2360933678, - 573118577, - 3668725774, - 3733000674, - 552727782, - 2360969346, - 3308327605, - 619775256, - 1968641139, - 2159527629, - 1488973370, - 4062278078, - 1285317736, - 348784262, - 3210695140, - 869163098, - 1113606821, - 2721898281, - 837876076, - 4072986810, - 2432394675, - 846757484, - 4265572578, - 3985301751, - 790556301, - 132651821, - 1828966256, - 3670493210, - 2579643949, - 3056609498, - 3401633203, - 605046127, - 3362013150, - 3988153259, - 3728410042, - 2195455363, - 4044618747, - 1086995772, - 3459124291, - 4208269935, - 3252289201, - 2005514716, - 1003143339, - 455259999, - 3902713972, - 3099388844, - 2913415194, - 1736284676, - 259831467, - 934776365, - 1132967735, - 3929468114, - 1186215129, - 303902622, - 1384763834, - 1653124763, - 816655936, - 84094336, - 3588380704, - 2486118744, - 1972011361, - 1413898229, - 525112733, - 340074487, - 398911653, - 3609891159, - 507930188, - 3781826326, - 3170274360, - 2288925939, - 3263569715, - 1362019934, - 2653887073, - 607849241, - 2922569743, - 138029884, - 3088914087, - 3521596714, - 1273936360, - 3969510332, - 3021785278, - 2729763013, - 3848719062, - 458005231, - 900491384, - 1893587973, - 2294177991, - 2126472151, - 3463975257, - 2636311359, - 1893129673, - 1121737102, - 1058116590, - 2868047548, - 997083072, - 1897976806, - 996416690, - 3305746585, - 2970998253, - 2022791040, - 2607631123, - 718440410, - 4201371767, - 2872034387, - 2212440578, - 3935324582, - 2127878844, - 2548031950, - 1816305608, - 2456002064, - 1374064180, - 41466680, - 2262400356, - 2126629829, - 980405607, - 2865848366, - 1323410402, - 3976688696, - 808937607, - 209378329, - 4074649425, - 1368491056, - 4095438362, - 2364159397, - 2522613524, - 198853894, - 2628341778, - 927056545, - 4108425957, - 2301003812, - 3587370274, - 4150522224, - 2209895620, - 3908364272, - 4257216312, - 3241088522, - 126450006, - 2117838901, - 4257436894, - 686637736, - 929608238, - 4193642834, - 2628783584, - 1309883767, - 2704921289, - 666888819, - 3719163176, - 2924752921, - 1144685600, - 3782699742, - 1533462637, - 2275967774, - 2479574989, - 1297525490, - 1297469388, - 2547070566, - 4019364989, - 673340225, - 983597739, - 274091954, - 2025682316, - 1811560977, - 2221254271, - 2886479201, - 2958126770, - 1928023792, - 2877609555, - 577908807, - 116589053, - 2484735765, - 1587306869, - 1726921114, - 595634491, - 2793295313, - 531096301, - 2045232609, - 3666077513, - 1104075425, - 244854375, - 1635631175, - 2628160246, - 3410251124, - 1294420946, - 3197193879, - 2815602021, - 3655430435, - 4047117570, - 3068445488, - 3235883748, - 1801429361, - 4225535302, - 225591692, - 2915889927, - 3063251768, - 1674625365, - 3514602608, - 2371586316, - 842184960, - 3424213245, - 1785330344, - 544848530, - 3933375673, - 1550299426, - 3506804560, - 889967574, - 2865538612, - 1510065055, - 481388344, - 1505310876, - 3123264505, - 302532862, - 3697584553, - 3129173181, - 437632653, - 2183071760, - 3629256754, - 442984178, - 1600520378, - 3713883613, - 825746831, - 925411795, - 3701054882, - 256189893, - 3797670785, - 1921412952, - 2579222528, - 293531179, - 3441755577, - 298312222, - 2303118839, - 2282020784, - 3020828986, - 260339485, - 2782865180, - 3587981817, - 2594383328, - 3070813776, - 2098473474, - 3841840947, - 7301781, - 2468465022, - 3500802579, - 1405027995, - 3814441531, - 1374265952, - 1257833626, - 1366426544, - 3473168482, - 1702184357, - 4214047138, - 3551642375, - 1601351920, - 2964622713, - 2294029168, - 154644041, - 802414254, - 2030826848, - 1822907892, - 300475879, - 1814415221, - 2939668189, - 1861001683, - 352953223, - 47273464, - 2489624933, - 1243630700, - 3505801559, - 1123536391, - 3206896390, - 1187961258, - 93545767, - 1846891525, - 64601453, - 498710634, - 3422512955, - 3550746640, - 1705381822, - 3084441822, - 1517410162, - 1529103845, - 3279641459, - 2426658716, - 1393794663, - 1786296953, - 1043669284, - 3857073397, - 1812167417, - 3759306938, - 1593787659, - 2926438374, - 3291442728, - 2722577020, - 2109282558, - 4001725501, - 791947940, - 1050815256, - 2457267855, - 3017947862, - 1187926094, - 204524026, - 2186284790, - 1066702998, - 1987957208, - 3610792984, - 1464846770, - 3076515316, - 3592662119, - 2582657975, - 3469403644, - 1729344767, - 2230216081, - 523905850, - 1377877559, - 1044407096, - 2535621744, - 2565899854, - 2549466860, - 4285293733, - 1174176189, - 563659531, - 828083873, - 1281328703, - 3050843079, - 1686524497, - 3866297928, - 812922438, - 2480388657, - 1749405533, - 3556382577, - 2889692568, - 842449437, - 451589270, - 2242988643, - 1744996516, - 3835435824, - 1651192724, - 4270202603, - 191567261, - 4237983491, - 2242409957, - 1968994463, - 3841863523, - 485016455, - 1762592660, - 1440823595, - 2142853169, - 3807669245, - 3486448910, - 2708079791, - 1886199137, - 396604352, - 1894810025, - 3322932198, - 2874755644, - 1177828275, - 788195146, - 1663608713, - 3221704186, - 3275933790, - 3911014068, - 814783345, - 1502762181, - 3667844163, - 3341830300, - 577744152, - 1319281141, - 923465425, - 3481921614, - 69565846, - 1515390521, - 1982026753, - 2087961493, - 1747201566, - 4058446524, - 3204271754, - 3481421441, - 663388971, - 2767142344, - 408729700, - 1596948789, - 3868304185, - 4084280705, - 547112299, - 1867907233, - 3013713113, - 1638890900, - 670766528, - 4074223937, - 827803095, - 3872998490, - 518985652, - 2854068531, - 3831429349, - 425482591, - 3094837784, - 3220678593, - 506609354, - 1741302204, - 859435688, - 922645650, - 642414198, - 2223884351, - 2254027420, - 3516356560, - 519023533, - 14784219, - 4204090178, - 3688470789, - 992627966, - 733835118, - 1444517878, - 2257941900, - 4193993571, - 611980030, - 2160776641, - 558595111, - 3834522183, - 715544113, - 2238959902, - 2736798254, - 2456390630, - 1794763507, - 2169165301, - 2915238839, - 3368740491, - 1693861111, - 760087766, - 2063427003, - 3970490888, - 3394307715, - 2955287118, - 445364770, - 609873573, - 2072897648, - 2261677260, - 3806367190, - 3568442474, - 750983910, - 2687187645, - 1710169571, - 1729518985, - 433487059, - 743359777, - 3058216543, - 465877167, - 3950450061, - 232743277, - 1641000951, - 4061389217, - 1016466991, - 1189762170, - 1781922654, - 2168257717, - 1971007678, - 976572526, - 1037463022, - 3826163845, - 3314506319, - 2226319494, - 1008571196, - 1129623603, - 1049117856, - 1438165549, - 2867722350, - 3821803656, - 1495053079, - 1207578308, - 3594594148, - 302778688, - 3122849373, - 840773145, - 2378751081, - 4123654464, - 2376001509, - 1531823781, - 2272226073, - 1006517085, - 4131845447, - 1440093624, - 1443373464, - 508360104, - 394894556, - 2986578880, - 3795251554, - 2829678804, - 1747419833, - 482393181, - 1336063135, - 1790510519, - 823554068, - 2781095544, - 1150081753, - 2417582025, - 2623557722, - 1239575524, - 810066689, - 1202010439, - 948586594, - 4259779707, - 1189800045, - 1182156115, - 2099071473, - 3326209994, - 782000940, - 1740864793, - 1472648631, - 722067282, - 966711910, - 3494035757, - 2469324682, - 3438529300, - 253271059, - 2620026614, - 1012143427, - 4258053577, - 3744456716, - 4248537716, - 169693114, - 1218091720, - 1862192514, - 465776778, - 3338875597, - 4280772628, - 1380726413, - 791326558, - 375245783, - 2811969318, - 3080475216, - 966414624, - 198042574, - 2088549123, - 3038004090, - 3089751014, - 3360855542, - 890686343, - 1196973573, - 3768953844, - 2559028317, - 3222966002, - 2246741908, - 2467120224, - 4159789822, - 2660566853, - 811323397, - 2891803219, - 3931298206, - 1405836857, - 937567908, - 2425248355, - 662720017, - 1365940315, - 108557695, - 2812596501, - 498759184, - 452655339, - 1205430617, - 88179654, - 3700266475, - 855156422, - 1946617338, - 3716920953, - 493943002, - 1483201258, - 2603462578, - 2690836156, - 3990954230, - 2512596193, - 2997971725, - 2891233344, - 4126727642, - 2179518368, - 3948855922, - 2369610577, - 3986739729, - 88146727, - 1930943650, - 788081377, - 3912013223, - 3301833212, - 2182633210, - 3081879973, - 3848001252, - 1555554910, - 1020546564, - 2052800026, - 2504761048, - 1021855392, - 2682940166, - 2597546538, - 785422220, - 4245430067, - 3943959326, - 2858781631, - 3000134794, - 2213391626, - 2004917673, - 1298224146, - 2802838728, - 2746157011, - 1867128334, - 3214999196, - 3339528870, - 1328909697, - 2423575841, - 3978255632, - 1070108544, - 3925683549, - 1157778957, - 3226667235, - 1813762961, - 905662077, - 3694109643, - 2479928003, - 4154160529, - 471717029, - 1458914579, - 1623776258, - 3744381408, - 893552342, - 1930448661, - 2050792647, - 1082572583, - 1425625913, - 147296666, - 511770230, - 3119508349, - 3487641229, - 3475473372, - 1718052312, - 1851871446, - 3939695533, - 2756572133, - 3854345588, - 2835912889, - 3818244300, - 3430718242, - 571639672, - 3692421081, - 2258871566, - 2532246832, - 703479692, - 3325978268, - 3673013163, - 419114401, - 2963829607, - 3030817697, - 1743482467, - 1137341271, - 120092804, - 1863168918, - 3742525389, - 1474387003, - 1461044857, - 2748538255, - 3076345863, - 1463227409, - 692461954, - 489527882, - 3843058943, - 2403029593, - 1912953214, - 3997226044, - 2606977817, - 3697239906, - 4237833819, - 2207324223, - 1036691690, - 2138018044, - 2365778586, - 3032905339, - 122588033, - 1523098984, - 2137521843, - 134209504, - 4105309244, - 786033733, - 353463353, - 203230587, - 3942410342, - 3100419228, - 1423565466, - 4286998952, - 924910686, - 2963832535, - 3483394278, - 4066158346, - 99684928, - 1728039846, - 2280521622, - 411833822, - 3871124595, - 3813380475, - 2297610082, - 2104776217, - 3723086576, - 1743090367, - 1660418683, - 3426016656, - 3100321159, - 2746488621, - 4021595633, - 1131760366, - 2900157258, - 3270393076, - 1255666025, - 1994046426, - 1411985810, - 2229134278, - 3884515985, - 2047257724, - 674979366, - 3437828089, - 2680116354, - 3912169584, - 3612921182, - 293115910, - 1330732279, - 2292150329, - 816625677, - 1634824109, - 1083165075, - 3440396222, - 3352859815, - 1459413765, - 928043348, - 264525234, - 710410361, - 1897922345, - 1973879897, - 54426473, - 198454496, - 2188858935, - 3609528389, - 3210878676, - 1543140526, - 2716622017, - 4223055990, - 377827846, - 3241399649, - 1346497660, - 4064587200, - 2589749996, - 1130131044, - 2554215558, - 157934055, - 361637228, - 3709204300, - 3725743327, - 1965153188, - 3202140077, - 586810837, - 3122882356, - 666677333, - 2059997589, - 2999405141, - 2835827010, - 2299221910, - 1846275477, - 1786364161, - 4178433282, - 1144622284, - 1030453102, - 1825448943, - 704706544, - 1350687478, - 2314134861, - 3564424588, - 3512408470, - 1148286220, - 62469661, - 3333105441, - 2450781290, - 3342340097, - 2137405343, - 3440748131, - 2182856253, - 1113319135, - 3617878679, - 2155844386, - 2236226610, - 1221133304, - 4050211401, - 3375649574, - 3741706540, - 2749881406, - 4029058636, - 3859024747, - 4053480432, - 1506860004, - 2901248784, - 3947867856, - 2258044765, - 2936257214, - 4087380351, - 4042337338, - 2013381685, - 817220423, - 620445341, - 2011774260, - 485058158, - 4156038932, - 1808491761, - 1659001700, - 3749218285, - 4133191875, - 2807656996, - 1821447261, - 2744650806, - 2233294365, - 1367763708, - 884528909, - 2341857233, - 812576098, - 1652042969, - 3127749394, - 4047689545, - 182169632, - 3291780446, - 4041714675, - 653232675, - 1882349367, - 2727020002, - 1829747661, - 2647466309, - 3900975336, - 1701731878, - 2453858761, - 2946827895, - 2204967081, - 4213056215, - 3951797042, - 2645498875, - 2462043962, - 3157929313, - 621628566, - 1513278578, - 671339253, - 2156096369, - 2993920613, - 2525337150, - 675964356, - 1168343180, - 3741888649, - 999056206, - 3915545622, - 3219112594, - 1621580284, - 3162172682, - 2218933109, - 1653702092, - 3205030915, - 3465748152, - 164902814, - 2263288504, - 1567343911, - 1268332303, - 2308969286, - 2432327158, - 2064300430, - 692364531, - 187250643, - 2753384218, - 1367824009, - 362577885, - 3555746238, - 3183162841, - 2532467756, - 575337975, - 2395555564, - 3217365580, - 2708604761, - 3605474289, - 2884942613, - 1435997178, - 1729583194, - 1169394554, - 3303972194, - 3100266376, - 2393449468, - 3501795843, - 3571819737, - 116967652, - 430795881, - 2107539052, - 3726533729, - 234899922, - 2871273572, - 3170921880, - 2043438129, - 88343536, - 4232542650, - 2355232777, - 4036021352, - 1464000942, - 3904893346, - 4097422301, - 1876747734, - 3393527198, - 660757643, - 141114556, - 3954570375, - 2375811557, - 2631690958, - 477037291, - 2684376213, - 2132813433, - 3671542759, - 2791568826, - 1164809356, - 2684600550, - 639228984, - 2383423027, - 1059723428, - 1382552328, - 4190547477, - 630276883, - 3039976000, - 2569387999, - 1100621665, - 3600544672, - 1819012003, - 3214358214, - 233073438, - 2190915277, - 3195615000, - 97847030, - 1227165977, - 350883529, - 1969430637, - 3216605303, - 3057793619, - 276232335, - 1803447338, - 3422694724, - 2350872442, - 3533441829, - 2247697858, - 2769820770, - 2587304009, - 4217437062, - 2002337620, - 934025300, - 334365841, - 2856437662, - 280192703, - 709865125, - 2974794415, - 3881606082, - 4204620087, - 3788982063, - 2905118448, - 2284460044, - 2620979123, - 4074932169, - 4094442173, - 1887750138, - 1967064442, - 2799613129, - 177563610, - 3816846022, - 2260545242, - 1762248036, - 813927418, - 1600576646, - 4255962008, - 3232760603, - 3660429721, - 3032546798, - 3601740325, - 663047654, - 646877103, - 2644152888, - 630077074, - 2145879036, - 3760786687, - 1735737734, - 4196190683, - 1288024723, - 1921979769, - 634937384, - 3101833356, - 3892904867, - 150124530, - 926575275, - 2845669386, - 2420994182, - 2119212705, - 1455782699, - 2122665982, - 3539485165, - 1684509485, - 1959389873, - 3445300489, - 4132010989, - 930755202, - 1830380447, - 1377637619, - 3403285930, - 2996376806, - 2426416529, - 4063726978, - 1379340169, - 598667045, - 564398153, - 769733136, - 2570525879, - 3467765359, - 455407080, - 3255377931, - 4020627415, - 2675088019, - 3296899639, - 395218663, - 2201082764, - 339297632, - 763633999, - 2485012951, - 1156065215, - 4266953497, - 44098845, - 3591300872, - 130337459, - 2075622984, - 204781279, - 365478107, - 2744287453, - 1065652622, - 3180151040, - 3670598409, - 500576669, - 1848254550, - 3986630, - 4018383888, - 1403759579, - 1333159287, - 3566149237, - 819317215, - 1542875039, - 3160595843, - 1881347781, - 1331719360, - 1039873559, - 3624327606, - 2004760892, - 1075947794, - 79486482, - 2427723019, - 3999317588, - 977070872, - 243107343, - 320754025, - 2923336259, - 1841865855, - 939432982, - 2756625244, - 3935358312, - 1895162848, - 1313785524, - 628990980, - 3424212044, - 467279067, - 3139354987, - 4193810109, - 1846713955, - 1470590801, - 3160681814, - 2766123455, - 3056450533, - 2928737518, - 514223904, - 4110546975, - 3220183169, - 2173047615, - 837419813, - 1689233534, - 3560401788, - 127325180, - 2408660879, - 258113338, - 332495388, - 964733966, - 541877186, - 3109009146, - 2995994617, - 2799631235, - 897666826, - 695007615, - 4041425770, - 3874653492, - 2842906874, - 357211075, - 3532475880, - 1226894577, - 1876848153, - 2920485646, - 4215825147, - 2713655972, - 2198608898, - 1286722655, - 2900522257, - 3569523387, - 3060212248, - 365030521, - 2071620037, - 1955343916, - 3797673030, - 1738609170, - 2638194203, - 2278408688, - 4275883830, - 3443795951, - 4047855122, - 3056934145, - 1440271388, - 238770103, - 1474264327, - 740886099, - 2747770377, - 3464290025, - 1932010879, - 2671764594, - 1672936916, - 2549189453, - 4278963915, - 3960684793, - 3214080534, - 1484784127, - 1512330890, - 1321215302, - 653814409, - 3044844689, - 2671969243, - 2964352136, - 1180654960, - 3736388042, - 270953505, - 4028121272, - 1303704964, - 2191349043, - 205695441, - 3960027946, - 4142275297, - 1949084015, - 4238415223, - 3455341272, - 2531753534, - 1945912394, - 2863978485, - 2947103483, - 879846686, - 1718078715, - 2311017828, - 201671226, - 588434003, - 1035591877, - 2290866376, - 2009136026, - 3784994230, - 2814288298, - 3478478583, - 449418876, - 959539210, - 4262300411, - 648167045, - 3952721675, - 1394175859, - 4129836437, - 758894259, - 192620680, - 1280712949, - 2050377500, - 55431520, - 1783980147, - 2158384970, - 2845994783, - 2018589645, - 1284324504, - 3236618266, - 2900155381, - 1268382232, - 3223986971, - 3281293589, - 1007297183, - 928385161, - 503272815, - 179902068, - 3634610711, - 2883407586, - 286591806, - 2907653608, - 2522953051, - 3801950893, - 1083935685, - 2765645735, - 4013759222, - 3956360119, - 2580189717, - 495089352, - 1297715482, - 4270261403, - 2526378455, - 1439118311, - 2064901249, - 1860637243, - 1357945982, - 1686728437, - 460786278, - 1385164615, - 1164733317, - 1457570115, - 3133639864, - 1117904734, - 2620934780, - 3344547813, - 331483216, - 16979525, - 2665774317, - 1152630146, - 3940228727, - 2081420806, - 4135766843, - 3617732761, - 2706978295, - 666930665, - 3021468996, - 3650350937, - 1093621819, - 2788800602, - 438396872, - 583008794, - 1324518741, - 3545586105, - 4144082269, - 2523457348, - 2580575394, - 598960611, - 1112099410, - 840978119, - 3138280242, - 564041924, - 2662009774, - 89890401, - 1624465277, - 3484361338, - 3840728599, - 1686920401, - 1380176598, - 1523440339, - 832201811, - 662821006, - 491620143, - 1147627486, - 3570670424, - 1003369288, - 555519073, - 2380360939, - 107402190, - 773942370, - 1277470225, - 2530129343, - 3376097361, - 506273866, - 3597522609, - 3378375791, - 2651107960, - 3456047794, - 1017933908, - 756693140, - 674610191, - 3982716147, - 1780621215, - 536359747, - 3177404689, - 1971220836, - 25364812, - 77921551, - 1531567041, - 1472602961, - 271037535, - 2995588418, - 4010399406, - 1479322205, - 1980775435, - 1058443757, - 3139831827, - 1595853732, - 2654258940, - 2353033261, - 2277252451, - 2829442034, - 3009309014, - 869142005, - 1410727054, - 1906065739, - 183807779, - 4212255772, - 2200299503, - 1750206716, - 608830433, - 2296923234, - 1583236866, - 385554921, - 1412599810, - 3081151844, - 174035745, - 850118382, - 3779145525, - 549514231, - 3302310446, - 1542955273, - 2783427954, - 734949705, - 166498629, - 1449523536, - 3522733769, - 1122948662, - 3845312466, - 2428143467, - 79399689, - 287738573, - 3362293539, - 1140986044, - 2473126899, - 4128444475, - 1273622053, - 667097288, - 2256278337, - 1686670295, - 3152518693, - 1423504223, - 4177922192, - 2179415532, - 4131102936, - 705012397, - 1109703256, - 3942346384, - 2279758820, - 3425900963, - 1383453563, - 3301272450, - 2238200683, - 4199038331, - 3573409441, - 2668451057, - 792023180, - 597047782, - 1636441072, - 1227757656, - 1451821589, - 148702654, - 654135269, - 575362083, - 3247081139, - 4042923961, - 2016309835, - 2465559718, - 1040400442, - 1968308315, - 3067545968, - 1747771130, - 361282784, - 1190767935, - 137201374, - 1930788714, - 1547194187, - 25583865, - 3906022462, - 3280130100, - 3627319163, - 231753487, - 868911627, - 2994795888, - 808461854, - 3768519643, - 4128495168, - 2361442472, - 1044773079, - 977814697, - 3723880525, - 2006382980, - 410821911, - 1280292865, - 2201674456, - 3851130910, - 61886248, - 2464310790, - 2770238715, - 4097369668, - 1877066181, - 3169333755, - 391956542, - 639106288, - 3723686737, - 3788128256, - 94768609, - 750091756, - 4222613643, - 3598856790, - 628732620, - 3912375826, - 3550484181, - 2856461016, - 1395458384, - 1803971132, - 1306614417, - 1980448411, - 3963988014, - 431033577, - 1712725796, - 523323795, - 3149195062, - 2234101401, - 285844374, - 1854666151, - 2924383367, - 882592350, - 882424809, - 3090746011, - 1368363310, - 3585771724, - 2906203476, - 2898846888, - 1684108533, - 2788521074, - 232253272, - 691422149, - 3056692878, - 227820943, - 950696708, - 1743114468, - 875328305, - 1982288781, - 1411667918, - 1990316377, - 3564888888, - 3871955772, - 4268777337, - 2700429303, - 4203316666, - 1272037948, - 518056967, - 2031490776, - 2279300850, - 335791080, - 2026221455, - 2101730954, - 962463518, - 685097926, - 1481520043, - 4121370487, - 1656262518, - 4186103536, - 3239438075, - 2320585658, - 811619567, - 1493124498, - 1360628870, - 1280145210, - 223011921, - 3206625373, - 434798073, - 2524593229, - 2153022036, - 1420127930, - 3733902132, - 1170406999, - 4169661930, - 2841558279, - 4101291647, - 2780595314, - 3047256960, - 581356343, - 2893659304, + 737108508, + 573120338, + 87095031, + 3005608619, + 2324184303, + 319812, + 2992299153, + 1346659080, + 2924955154, + 62838611, + 2170406324, + 2505515809, + 3735550956, + 3806209478, + 3398063631, + 4084618736, + 1378498819, + 3623321480, + 1059847717, + 656736188, + 1833632012, + 2992399005, + 3804747339, + 3613930643, + 364610222, + 974429030, + 1309336034, + 1575179458, + 589362886, + 2939539774, + 839258162, + 66853677, + 1800855274, + 989131233, + 1213040799, + 991279817, + 1644643465, + 4139169443, + 3747969893, + 2280084727, + 3433754513, + 3069250459, + 2150388496, + 504933718, + 1756200000, + 1163653455, + 1561342080, + 957420387, + 1499889787, + 1738785616, + 1142338960, + 98655020, + 1222420391, + 3251658945, + 1828673116, + 2669757101, + 1663890525, + 4213198241, + 1901515812, + 2006237424, + 3566990374, + 432866887, + 1264698320, + 3101388361, + 2703842830, + 2049244912, + 3628984175, + 1832165781, + 4205264615, + 4014240891, + 969864767, + 703341982, + 2882946897, + 2360807110, + 2781536977, + 3050041755, + 685806492, + 1311138729, + 3060249574, + 1002363991, + 1773186186, + 850997462, + 3999181183, + 3970312693, + 1035395438, + 4109867875, + 3639678784, + 4268164630, + 3408604790, + 3354725165, + 1327178068, + 3339196999, + 3402432680, + 3411255658, + 527910727, + 3283055986, + 3194268840, + 1184094784, + 3791630318, + 3499230394, + 2572662801, + 2946226062, + 2416566560, + 440429692, + 3966221448, + 4121517506, + 4232403026, + 634559426, + 175875236, + 3055100647, + 1446238432, + 2098346578, + 602461515, + 1444886775, + 435403627, + 1988702943, + 1905524171, + 2737701185, + 2042620012, + 2832605364, + 810205668, + 2822943840, + 4273478887, + 2336637032, + 1116549109, + 876235429, + 4220014655, + 4176943484, + 976927884, + 584017154, + 3546447020, + 4242171676, + 2638608556, + 1952394712, + 2917757340, + 3707210940, + 2461337446, + 233635531, + 1707193000, + 2607604006, + 4268905770, + 3870067046, + 3191750736, + 2860161726, + 346202625, + 1644345478, + 2250124580, + 944391642, + 3255524738, + 892954419, + 1808714419, + 1390002373, + 587678839, + 2218828846, + 3374471347, + 1141500902, + 1838733170, + 2966644131, + 880245722, + 2087597934, + 293704416, + 978320167, + 3978037520, + 2180809218, + 248819883, + 1637697607, + 2355943008, + 1795956877, + 3772518787, + 3881755530, + 4269727252, + 2875576223, + 3127537762, + 4034453623, + 2203270748, + 34570445, + 2396105344, + 571104241, + 475073527, + 4159175048, + 1027140149, + 373649624, + 1416965627, + 504987029, + 592068475, + 2921450630, + 3935163257, + 1454349378, + 656342480, + 754900442, + 1182580228, + 1128670799, + 89676618, + 2402432183, + 2014451494, + 3489468502, + 4013501671, + 1653974719, + 2887167246, + 3893150706, + 1533169037, + 1164736734, + 1780892227, + 4014216560, + 1358147922, + 2337430013, + 1741844150, + 4102090228, + 2748631274, + 493501955, + 1850086195, + 1960883912, + 3308646063, + 38467718, + 3028939472, + 917717499, + 2742103999, + 1723815327, + 2119841600, + 3876374749, + 1705086518, + 2881525210, + 1570309733, + 4020838165, + 4042003212, + 3183612656, + 1061776814, + 464840108, + 2286632549, + 1917636967, + 24591962, + 1176332303, + 477225995, + 2125512648, + 2725072293, + 4100958052, + 724903694, + 2328117473, + 763126139, + 2374124356, + 2956326092, + 1671131017, + 3720376838, + 2502605733, + 4144105348, + 657115594, + 799433316, + 4278236939, + 769817051, + 3428656795, + 3593147835, + 1412960909, + 2453315602, + 3669869285, + 1496696873, + 2426769290, + 1026625395, + 3651924245, + 2279303817, + 2686506544, + 1087789694, + 601636723, + 3613706545, + 1825740751, + 2450074753, + 421625639, + 1992538740, + 895723198, + 1259255899, + 3722659894, + 4013418838, + 1562558351, + 1632139253, + 2991629749, + 2273247995, + 599051780, + 1669649043, + 568846846, + 1494068229, + 2739996413, + 2779113522, + 779098913, + 3619089187, + 3385785731, + 1519618858, + 953641745, + 1721296229, + 4044107066, + 3004078488, + 3009551678, + 2517659741, + 46896549, + 2278016083, + 647406909, + 3288514709, + 431566043, + 2590570702, + 1584893263, + 2225661900, + 260418302, + 3321929698, + 119911658, + 1690775963, + 4150474225, + 3566955070, + 549546159, + 3176775036, + 4174765343, + 834562569, + 15792934, + 1553903139, + 3210900562, + 1589989155, + 3760850120, + 1094719765, + 3518056714, + 178402282, + 826054878, + 3928025223, + 2810483389, + 2685635791, + 2372946117, + 1313388299, + 3488829322, + 2825312391, + 2681967164, + 2805496622, + 4084983424, + 2657934618, + 2021592252, + 2915120957, + 2962531015, + 1722337676, + 1280032280, + 2548289251, + 171511951, + 415022382, + 1189000272, + 932422039, + 3216734072, + 341391577, + 3047858348, + 1651917881, + 2277957490, + 490984133, + 4236650724, + 304171102, + 65598413, + 3558705810, + 1971557001, + 171398204, + 2394745268, + 310403285, + 2891827010, + 1724246465, + 2016263904, + 3028194727, + 1651520282, + 3098360562, + 3908082798, + 1842511364, + 2816161470, + 3849091953, + 2742832395, + 790092614, + 1390496218, + 816088873, + 3429482282, + 461830516, + 3199835900, + 3686386062, + 3979458454, + 1170862496, + 1979591381, + 3166629024, + 2643421316, + 893273076, + 1872015831, + 217186267, + 2396243201, + 2114500105, + 2929432768, + 3286322993, + 172230515, + 3745091746, + 2433348965, + 2437658089, + 280270945, + 28997464, + 1196313563, + 275582724, + 3333984396, + 4164495252, + 1044000849, + 333220410, + 1650095926, + 2490214898, + 1724270327, + 2827910655, + 504243810, + 1584872463, + 3188419011, + 1245166968, + 3263494297, + 3798399279, + 1988345126, + 2727316013, + 1196129747, + 431024879, + 1545774225, + 4139702023, + 374409265, + 3588824839, + 1492346082, + 932072585, + 3424993475, + 2422754366, + 998601680, + 2521224794, + 1072875324, + 1159425289, + 737029075, + 3650336061, + 1303107153, + 2039781324, + 2856489033, + 3623638098, + 3845037406, + 2946816830, + 3927059905, + 1845338773, + 1231510506, + 2933439153, + 683918580, + 872778124, + 2604776366, + 1981900781, + 3635907945, + 1550897010, + 3629184493, + 1206118436, + 3648149673, + 727434716, + 1602639726, + 1780556341, + 3850244527, + 1323335048, + 1108496685, + 1157470000, + 2772928365, + 3452416260, + 718494217, + 3881102491, + 215401665, + 3798263247, + 1615013368, + 4035375785, + 900559206, + 1568113547, + 749008281, + 2897102640, + 1614058632, + 1758876724, + 3653676490, + 163972223, + 882695078, + 59167481, + 1834379473, + 2322546183, + 2980393762, + 1490232916, + 4041737500, + 3568989214, + 699988833, + 971275641, + 1742513241, + 1682423804, + 3878685575, + 4216770089, + 226208992, + 3348458910, + 2196695664, + 521500134, + 4280698849, + 1357611769, + 3289541888, + 3393910430, + 2287883831, + 4031431574, + 2828012877, + 3416437096, + 121667562, + 920735091, + 2196578511, + 2948310575, + 248380011, + 3891608726, + 2234400771, + 1770949553, + 252910982, + 152768081, + 992190982, + 4250800032, + 1104665650, + 1620460112, + 910886375, + 988589648, + 2109982703, + 2954961044, + 2885572299, + 3172494047, + 3560837227, + 2608909294, + 716888483, + 2465398108, + 1517335489, + 3736024899, + 2771259711, + 2061806890, + 1417775752, + 2999572845, + 29999225, + 4177180716, + 2514305897, + 1440587013, + 3165606417, + 2277946711, + 3147469051, + 2251725117, + 2992871711, + 2476340157, + 1126230188, + 39175539, + 3398671674, + 1736606847, + 228199498, + 2156353508, + 26073285, + 3799395509, + 2325692300, + 3791842104, + 902520711, + 2617319459, + 4149280098, + 1592411394, + 1938317647, + 240139609, + 768338201, + 2082924395, + 530812431, + 3998049412, + 2081467991, + 2314487964, + 2586281339, + 678618197, + 2528282136, + 451421623, + 1097511910, + 1917811767, + 1394821074, + 3613783713, + 4020287465, + 2271581618, + 2092137012, + 2084276535, + 2554427534, + 1800484963, + 3233181901, + 3031706316, + 2720746266, + 2758588661, + 2813951483, + 3907403596, + 1207599635, + 2169947936, + 2378158479, + 4117306363, + 2977420137, + 2226429496, + 2243095694, + 890007429, + 3283153562, + 2811967260, + 872014127, + 3556991083, + 2961403593, + 2229661479, + 2904431980, + 3855472067, + 1371651097, + 2933911223, + 2739638134, + 2908258650, + 1882535407, + 2431747602, + 3494440069, + 3560078145, + 2160705027, + 44081358, + 3748888990, + 4092449092, + 1623245009, + 2338635800, + 2572708241, + 2954676519, + 444147035, + 3344052727, + 3517469182, + 1471233591, + 650354967, + 3633282511, + 4125039770, + 2705400548, + 1313620863, + 3082416307, + 3978062965, + 279638977, + 854836137, + 4037337142, + 3090453260, + 4193697212, + 4062362249, + 1846808329, + 2578093281, + 4049164058, + 2846163405, + 1582371251, + 2264731836, + 366032606, + 590114350, + 3999681516, + 2376085057, + 820850321, + 1018267856, + 369940615, + 3531233325, + 4268864790, + 3497986315, + 2341486448, + 4227911824, + 2181113229, + 1355479127, + 2749160717, + 3246985925, + 3341528965, + 2073181213, + 699314014, + 1199359806, + 1884703566, + 1550999136, + 1482176013, + 1300010586, + 999931811, + 2273329898, + 2676099752, + 3108976156, + 1024613626, + 1270967057, + 2078640132, + 2774447762, + 3819528373, + 2718802711, + 494397542, + 2530165843, + 1204456198, + 123347534, + 1750412062, + 2496052368, + 4139143146, + 2882254737, + 85720860, + 2519613776, + 4102714487, + 1945156607, + 586502618, + 2827709244, + 2671446606, + 3080614560, + 584388351, + 1498919328, + 2296929519, + 3086107889, + 2976189208, + 735158679, + 4238520014, + 4215975286, + 254924375, + 3680593173, + 1793969614, + 210479610, + 265149446, + 453475021, + 3916600565, + 2504430318, + 115272910, + 603683711, + 1058652331, + 3016477085, + 3630690683, + 3940171619, + 235273795, + 2312000813, + 1769144434, + 1983369480, + 1210401977, + 774429527, + 2735389365, + 3451516815, + 2697681175, + 2873966044, + 107771890, + 340153891, + 3902757494, + 3595538682, + 1710448917, + 789110533, + 2226993021, + 3853510958, + 2412690304, + 3867806110, + 2133599140, + 118636039, + 1464073882, + 1533404869, + 829450745, + 1864196201, + 2173100295, + 2241884490, + 2351157253, + 947820395, + 3437489691, + 3975263411, + 1471809739, + 1798150894, + 1305861513, + 2932005066, + 3352365449, + 4068857789, + 3126210219, + 1856052759, + 390543120, + 207370740, + 2605083184, + 148692290, + 3652608071, + 2309777504, + 1201795662, + 331100815, + 999928362, + 1977239666, + 1611841523, + 725679959, + 2725432383, + 1962919820, + 3833271832, + 1197493782, + 3887581928, + 2346764006, + 2707146122, + 2277292665, + 358692238, + 2638816175, + 1205487518, + 4238210704, + 3610245619, + 4128009742, + 2554570374, + 1067956320, + 3837039785, + 1107712321, + 2083151010, + 3841744080, + 4169811655, + 1076138161, + 2352889067, + 3282931048, + 2323101680, + 443842367, + 2540039222, + 2422063034, + 1730525519, + 2762219325, + 3148840983, + 3874209774, + 196601397, + 4074234285, + 4062274235, + 1880180572, + 3875358394, + 4013145833, + 547311925, + 2450684733, + 2461043683, + 4171289982, + 1640138908, + 1282371500, + 17590684, + 1087296399, + 469602025, + 3623122096, + 747793869, + 3896203969, + 3999952150, + 4190926131, + 2519459794, + 2168164444, + 557626550, + 880135470, + 3187688392, + 3813281250, + 574556672, + 3153433893, + 2430581141, + 2807013398, + 152834970, + 2135828491, + 502818277, + 1130118504, + 4202838221, + 1789641146, + 1467085169, + 396223144, + 597493763, + 1736613021, + 1197732685, + 836437136, + 3465854683, + 3700168912, + 91762645, + 2391202287, + 295023822, + 2581861205, + 449024774, + 3001822024, + 2466418913, + 2872346546, + 300481715, + 572637303, + 1484271709, + 726078579, + 4039959954, + 666631537, + 1023898487, + 1853351749, + 3948710707, + 439645115, + 979350397, + 2222951989, + 2589438737, + 1937329467, + 1501831158, + 2316802053, + 372631927, + 702808879, + 3578596427, + 2126623624, + 2458752824, + 591974828, + 2339297450, + 1288431087, + 3134899097, + 1829570731, + 1748985463, + 1532824309, + 1262165961, + 1620842260, + 3834158622, + 3207937693, + 2620793381, + 4217292006, + 3277388845, + 425428660, + 2751160949, + 56937876, + 2669958664, + 184488470, + 29417658, + 2042579986, + 565191942, + 4291650434, + 3961586806, + 1918052443, + 2110155068, + 4266271406, + 1220892870, + 2242469591, + 3290204425, + 724667407, + 3770454219, + 2387813055, + 480452061, + 2567603094, + 2949949763, + 2282276912, + 1267200881, + 953654159, + 4034685237, + 1216035564, + 1909479177, + 1058998664, + 1366599365, + 1253836179, + 1360163121, + 2167363261, + 3193726845, + 1179755768, + 3433333284, + 773380335, + 3567753495, + 1576466808, + 3739894862, + 2045959091, + 3999190751, + 3100414601, + 2926965518, + 3258699619, + 383894937, + 3934726680, + 2488205526, + 1498264025, + 1161227547, + 3127776177, + 2220619538, + 406109899, + 2833378383, + 2052513668, + 1280065426, + 2747083647, + 1440776597, + 363124222, + 2717590284, + 2092050036, + 4211537666, + 2081321006, + 3920316579, + 2554903412, + 4234188134, + 1395865732, + 3656836441, + 935516021, + 3869038146, + 4070759880, + 3991091986, + 2976518188, + 2127252047, + 1715179207, + 3202801490, + 3025431438, + 928909809, + 1546620296, + 3318207810, + 1054357827, + 1212288271, + 3277649527, + 3553252595, + 3936269711, + 3001222140, + 3103022786, + 4170067321, + 1626772232, + 3277583984, + 1160016141, + 4044133250, + 4131372905, + 66760443, + 3630089669, + 1635899333, + 502492080, + 1312728592, + 2800543548, + 4218566229, + 3255613742, + 1595941176, + 3058111293, + 4042640544, + 3127660476, + 1422193398, + 600918209, + 2420093446, + 4236433793, + 747974874, + 2886017697, + 3114878858, + 167931937, + 1327836548, + 3104741324, + 2684527889, + 1613037900, + 1092139049, + 2037389600, + 3866448239, + 3288595761, + 4179522838, + 171851053, + 3390747309, + 1957846235, + 23954568, + 1558940286, + 3034700871, + 3415480659, + 31874120, + 1522582913, + 2856359821, + 3377785531, + 1500505280, + 2357411074, + 3800478749, + 4101318918, + 1803104233, + 3217189798, + 1959035055, + 1183090872, + 3885183854, + 1832623879, + 1205759224, + 2056117810, + 1299363468, + 972370045, + 2099975250, + 4217065998, + 4257348043, + 418611142, + 1655512169, + 2417558657, + 2909371272, + 2656106451, + 2715763522, + 2079161048, + 911449349, + 1919205988, + 1318085068, + 2274121803, + 3022121620, + 1086658175, + 2320667621, + 838833674, + 1260983287, + 3660810140, + 3113371403, + 1356064041, + 3093057820, + 4073346200, + 1315756395, + 686757640, + 3121357794, + 1236500707, + 3765722282, + 2652649750, + 3709236432, + 3540803614, + 3817916578, + 3883188098, + 3953988724, + 543859401, + 781311165, + 2452456487, + 2916550976, + 2684750456, + 892435042, + 2949028583, + 717754283, + 1888475079, + 1299906003, + 3511116600, + 126850201, + 1270745562, + 2783791148, + 986369010, + 608139713, + 91067219, + 1164090762, + 457020967, + 3861335863, + 822290723, + 1786969484, + 4114107643, + 1303132466, + 518716490, + 3816897171, + 1577554041, + 2339924357, + 2891084300, + 4111620052, + 3322948639, + 1539415787, + 1548519233, + 3926129564, + 696176191, + 925185431, + 395062940, + 3381587935, + 3306889576, + 899581582, + 449788296, + 1019594972, + 1913865482, + 203763988, + 1755407500, + 61297365, + 675631477, + 527690561, + 1096593511, + 2112238977, + 787715666, + 571860435, + 2568655235, + 1903106127, + 2426624345, + 1489747569, + 2080869854, + 1003709041, + 3656976326, + 3137952402, + 3129839596, + 2424355766, + 1454318887, + 3784378793, + 2943475351, + 2000379797, + 1143833414, + 774235851, + 4066300097, + 98194233, + 1878191248, + 2867373123, + 522169991, + 2685739569, + 4256716450, + 3325187370, + 2235760853, + 1640310346, + 3318246218, + 3423908467, + 951516825, + 2362245957, + 3314963287, + 4023177333, + 381459942, + 3542113435, + 569408190, + 1295185712, + 3607258715, + 1292661913, + 247757194, + 987131275, + 2552584360, + 2636622474, + 1860546077, + 2494312162, + 2782351156, + 2896368516, + 838382320, + 2007823094, + 238508444, + 2524339566, + 2363415013, + 2914138234, + 3628020394, + 956855823, + 2261081192, + 2228097171, + 4177271318, + 4158766735, + 3572796950, + 1430343560, + 3441921890, + 3454495262, + 1182316596, + 2269278379, + 1077135908, + 2953651496, + 526971321, + 2859895637, + 3358886671, + 4174772554, + 1567842165, + 251118008, + 670301942, + 3825963349, + 3042555775, + 1426858006, + 1471961782, + 217889906, + 3702626458, + 2455552095, + 3555365240, + 2593708682, + 786674689, + 402322780, + 1874981423, + 3407237843, + 4114519660, + 351189325, + 3161005591, + 150308336, + 1879067335, + 134237765, + 2879585660, + 762142372, + 735835325, + 1401753103, + 398664220, + 14875690, + 4243747163, + 936349311, + 2941560796, + 1819832225, + 3360941066, + 2101168559, + 3516605739, + 3182955717, + 233125019, + 97945065, + 4099904870, + 2261675179, + 547900100, + 2128456938, + 2732575461, + 87231801, + 3385975847, + 3482964761, + 3121124802, + 1597590321, + 2958060603, + 2312160825, + 1250748769, + 3020167481, + 3371053442, + 3126787605, + 4053203213, + 2924348123, + 979929759, + 2756455437, + 148006320, + 3383905452, + 600443167, + 2403008860, + 2978733323, + 928489282, + 1780947185, + 210481903, + 323488255, + 1615005026, + 1406587679, + 3950773997, + 394274012, + 3894535349, + 919963673, + 3631959377, + 3527523437, + 1657473608, + 386182504, + 2937059394, + 1321489105, + 3741745280, + 3920310972, + 3696070760, + 2261738974, + 1952926698, + 225802290, + 1195348745, + 2965761565, + 2056518620, + 396407764, + 956877131, + 1875725986, + 3097739097, + 4101905068, + 2699871357, + 1413749666, + 1109515490, + 13462994, + 3880381067, + 2916419322, + 328116183, + 226106344, + 2081329924, + 1535097045, + 2564774093, + 261153752, + 3399688227, + 3761551783, + 1004728373, + 2532161257, + 3255250062, + 2428018453, + 3469426376, + 3004436359, + 1739930729, + 3599610239, + 1267828660, + 4098765701, + 2386215404, + 1505123847, + 2142089888, + 2321182915, + 2881932175, + 2615077004, + 1415862358, + 1168026497, + 3645446514, + 3372125962, + 938799889, + 1710103627, + 255086590, + 3674651304, + 124795004, + 3199066378, + 3366934121, + 2992417017, + 3415524713, + 2126893206, + 704178108, + 2185287323, + 682500890, + 3868817720, + 3396196232, + 3965823276, + 3045211901, + 1440582217, + 4124975708, + 3663042745, + 958722551, + 3582803003, + 698410183, + 1326584168, + 883957682, + 4041682102, + 1483491300, + 2209582450, + 482929064, + 3263992226, + 1281004503, + 2617265487, + 2142447888, + 1819676160, + 1008729606, + 4034822963, + 3809141533, + 2709813384, + 67866807, + 1557696127, + 3761367730, + 3374392519, + 346552041, + 1703846311, + 3218328747, + 3001103576, + 3412946097, + 2399822036, + 2694597616, + 3997488047, + 1218196704, + 3414355785, + 2436806548, + 2017963340, + 725408394, + 1615692731, + 1087814103, + 2697424351, + 1458392249, + 24065513, + 1070411251, + 447202720, + 1571053203, + 112625802, + 118146864, + 2474166716, + 2842438865, + 3534055229, + 67689917, + 1515927908, + 2734103201, + 1751644415, + 3909275685, + 3384879962, + 3666017748, + 1692475293, + 4217449575, + 3963510214, + 2609960465, + 1773019879, + 1740638298, + 3079688126, + 825059366, + 2525582253, + 809173383, + 2448899203, + 2217736624, + 2277520791, + 1914224962, + 829145164, + 2188695753, + 16465694, + 3434611013, + 3259469704, + 1023650405, + 2687217452, + 761380722, + 2737740268, + 1279609669, + 917421681, + 4101602515, + 3805311991, + 88690492, + 3188616163, + 1894076295, + 4293155904, + 761188336, + 1347314708, + 2426965027, + 1196224288, + 2756209073, + 3055959203, + 689707034, + 499604835, + 2899737222, + 1270153861, + 3031332410, + 3602089111, + 3363204557, + 2438482117, + 3926141544, + 673670532, + 1197517520, + 2178506629, + 1165071025, + 3459297880, + 2491136398, + 2100111560, + 2499580939, + 3129850684, + 1561898561, + 4222189335, + 2858594911, + 2452644462, + 564650845, + 4241715201, + 3050183901, + 3429249115, + 1744088629, + 3505491935, + 1210719655, + 899473164, + 220101518, + 2927579979, + 2257482708, + 3626306094, + 2467319906, + 2553372897, + 2478778089, + 1823007988, + 365664256, + 3933134839, + 801172840, + 1868036938, + 378019419, + 1035773600, + 3525003728, + 1873010767, + 2342038560, + 3993115804, + 3075704627, + 3990883732, + 2838094948, + 2098740841, + 305999125, + 831587975, + 1355628682, + 4022023860, + 4287347855, + 1442429211, + 2559972308, + 3460099817, + 3553454924, + 885235272, + 3728279493, + 1983042396, + 1429545122, + 913342015, + 2367269965, + 1544672492, + 2388114674, + 3250341216, + 818693828, + 2072485903, + 4142497218, + 1958958614, + 1612361722, + 2706445790, + 978171912, + 2084253816, + 958314763, + 2592481316, + 2043038190, + 2170464672, + 4221314248, + 887093129, + 3453655083, + 1854155212, + 63867747, + 116312548, + 135403836, + 1091665580, + 3512840896, + 323240053, + 2474737633, + 3832061396, + 1311071742, + 1638570649, + 2974975999, + 1478237231, + 2326274480, + 914336033, + 1169484559, + 4012288073, + 2942417787, + 360693785, + 4286096455, + 1425575245, + 1127870535, + 1619231999, + 2603112489, + 4222012819, + 833564180, + 330380982, + 1779793167, + 2025688161, + 2561250724, + 3393389550, + 1048169470, + 2471305892, + 1174749206, + 446098583, + 2474897940, + 2883114031, + 3833127176, + 2492943358, + 1613051102, + 811168361, + 2431387582, + 3553946610, + 1570264805, + 3123044116, + 3901492289, + 3235168185, + 3470112902, + 1881735798, + 1685107906, + 3987640058, + 3586110152, + 963626683, + 1969775845, + 2759373690, + 646389819, + 1541048599, + 179753707, + 1559193915, + 2631429993, + 2264097382, + 526413453, + 3415678409, + 1512725176, + 787218320, + 75508960, + 346272688, + 2089974690, + 2322990168, + 3668388399, + 270007621, + 1454966087, + 366506235, + 4011835820, + 4282907384, + 962899261, + 7953992, + 1885674769, + 4122477458, + 478979518, + 1470752794, + 5233456, + 621787137, + 3389803770, + 651426711, + 1422549806, + 960418404, + 1888196357, + 3380956448, + 3068584, + 4113639785, + 560028865, + 2491692851, + 3993048966, + 1300605056, + 3918766673, + 2841666712, + 3817375337, + 1686792805, + 3106757569, + 1982375920, + 3615367808, + 827914130, + 476813543, + 3891456498, + 3621439766, + 1963144944, + 1794052985, + 3430537391, + 2467825840, + 2395936451, + 2598868089, + 877982392, + 882309317, + 3944952157, + 2433750346, + 2918248908, + 2553151756, + 213845474, + 3583080327, + 2818841781, + 2117778591, + 281749132, + 1684124194, + 2678034393, + 452324480, + 152633409, + 2970659676, + 3596194198, + 724922234, + 1015624469, + 1851498348, + 267948356, + 918220441, + 2682008985, + 2313014353, + 4120956231, + 2957427741, + 3284133875, + 1597303758, + 1838259435, + 4039263642, + 3952562195, + 1113742084, + 1035117265, + 1538807463, + 3415876745, + 4185266524, + 2260658205, + 3320051878, + 1491398558, + 2368326563, + 3518122532, + 557159606, + 188220554, + 728450273, + 2669937361, + 3944084932, + 146185271, + 3753049809, + 654749166, + 2548701163, + 1492790078, + 885159436, + 2032180833, + 185541083, + 1408338135, + 4177556901, + 2799355718, + 1962137425, + 4060195839, + 3886028009, + 3062049221, + 3640202633, + 2215380570, + 2851749466, + 1604187894, + 3333853758, + 3308495490, + 3884855944, + 1330134302, + 3860627584, + 1487207126, + 972927344, + 3338038739, + 1450672074, + 3540760251, + 2266667253, + 3100933941, + 1873295160, + 326309452, + 924886925, + 862802014, + 3215289878, + 4164073953, + 3139818106, + 1910022282, + 1288279712, + 2990058922, + 3800086005, + 3739259520, + 1659970167, + 2420358523, + 178844776, + 824545594, + 3630376942, + 2877871673, + 2543016416, + 3154096241, + 2495265942, + 4180559181, + 2935731231, + 2765594424, + 1610187670, + 3518701025, + 4142784444, + 3054890357, + 112345705, + 1324268213, + 2409064639, + 32964358, + 1335035866, + 4270370491, + 1861361973, + 1723022102, + 1009151923, + 2162047271, + 1267993893, + 278717373, + 1324613848, + 3896145043, + 934799488, + 1513616344, + 1207592915, + 1971754670, + 397023240, + 3722562442, + 3449169263, + 2410482035, + 3280773420, + 615291146, + 206999015, + 4265620950, + 891352110, + 4046806586, + 1116027327, + 3524593186, + 4187321562, + 1961121785, + 4073733746, + 1090056247, + 2485658783, + 4204201438, + 3276672999, + 3761441831, + 508897925, + 1506802514, + 1781099422, + 653494937, + 850676639, + 1805005754, + 3141555797, + 676908582, + 1803517501, + 2611079747, + 1564681518, + 2825767216, + 3682456965, + 73543672, + 3773697306, + 1874869614, + 4288118543, + 2264388187, + 716261797, + 4213906212, + 2330637413, + 2636008824, + 327609223, + 3611718407, + 3237500828, + 2461606882, + 1218773841, + 3381243615, + 3683127091, + 180739774, + 3540860418, + 4210302593, + 4255660573, + 1101708331, + 2275520458, + 2956221658, + 705091750, + 128285119, + 348025140, + 3015879819, + 4294433780, + 2283013827, + 2872091639, + 1995514832, + 3898335866, + 369231877, + 3134065288, + 3785352366, + 3449195521, + 2349342163, + 946546054, + 1813497194, + 171256487, + 3632156745, + 612524536, + 269302038, + 1879637666, + 3974863517, + 1839164500, + 1519188293, + 749291211, + 3859073775, + 1920085967, + 348345041, + 832069339, + 2612864119, + 1066316368, + 2939433048, + 4062582254, + 1487983609, + 117681181, + 2292585491, + 2035812192, + 1057146609, + 2115797024, + 583238974, + 2308649929, + 255596716, + 843085928, + 105840604, + 2542246419, + 2300356691, + 1637936571, + 494605222, + 862961433, + 778282545, + 28971885, + 2211284115, + 273242591, + 3381041291, + 510866997, + 873890165, + 1888519834, + 1168926363, + 2785290841, + 1178329596, + 475402216, + 3152982868, + 3322435169, + 1126330723, + 1966599271, + 1984447370, + 733013171, + 3917577367, + 2262567596, + 3843711059, + 2191985467, + 3822513516, + 1099306433, + 1803887553, + 1454209210, + 609003286, + 3839737322, + 4019677114, + 3252288430, + 776485098, + 1531519310, + 1455211875, + 952129344, + 2759034510, + 364205245, + 1770711601, + 951845063, + 1215290123, + 4084089504, + 477941061, + 2264074574, + 2015479554, + 1289454639, + 2969428072, + 2895626307, + 3569496672, + 3568383351, + 3342545915, + 2708719178, + 1492005991, + 3420172830, + 2826721269, + 2628372477, + 1684037350, + 1139606518, + 3929018151, + 3098455923, + 186296217, + 1811168242, + 2284940997, + 3742025144, + 2429700032, + 1801511958, + 1165053060, + 2641259009, + 3658146352, + 1645470446, + 1217120055, + 1920510494, + 3516800778, + 3305472259, + 2054592050, + 4063578358, + 593666440, + 1076195398, + 2860686291, + 1087373254, + 1281209491, + 1433086410, + 58552541, + 4012745489, + 474610793, + 709960614, + 3960616745, + 2635967364, + 3050780856, + 3121903516, + 685939958, + 2781278349, + 3520536842, + 523160525, + 3543296627, + 1588391733, + 3903034586, + 824621684, + 124080467, + 930236687, + 3233189258, + 2197305320, + 699789197, + 3696830151, + 3011553708, + 2829726216, + 3622840010, + 2127420462, + 1200826818, + 100174625, + 3419024423, + 2816514213, + 1529054674, + 1829765057, + 3421549413, + 3237053658, + 2766857046, + 3391000382, + 900303648, + 739008767, + 124496053, + 1723628191, + 1633988332, + 602847449, + 2350559786, + 1561895414, + 98628964, + 869557287, + 3174432014, + 2685076422, + 2908904158, + 1161633329, + 190273391, + 3540362039, + 2126448741, + 2297854532, + 1342031747, + 2305317969, + 3685516741, + 2322878667, + 355614790, + 1785502827, + 3636545872, + 1548295048, + 1645576781, + 782791020, + 4179603951, + 4163928832, + 2661881448, + 1234070201, + 880831587, + 2356023557, + 2377661565, + 2125832884, + 2377522010, + 3591637257, + 928622845, + 2253675010, + 3153308400, + 2383862582, + 794868856, + 966417220, + 1813968216, + 2982461149, + 2409845479, + 2387490767, + 1122654867, + 3175442033, + 2000993418, + 725670439, + 1192129860, + 1132129980, + 1745208070, + 2391341201, + 3041728908, + 2159426814, + 1302004203, + 1617459203, + 1911768148, + 476777400, + 3180606824, + 1248616377, + 3928566530, + 1850108970, + 3502869434, + 2739220178, + 2952410190, + 4210146922, + 2238360923, + 1038610832, + 1605495355, + 4163727637, + 233525315, + 1687242609, + 3676168878, + 740965605, + 3346781024, + 3363598671, + 1069649518, + 3663459067, + 2771448169, + 1018963616, + 831487941, + 4144016834, + 3264560939, + 751076954, + 639736708, + 861511578, + 1059871732, + 175859367, + 811543104, + 3661361784, + 194965611, + 3582278989, + 632916676, + 3739461337, + 864289586, + 3820973112, + 1913974855, + 1657081394, + 657192957, + 1101023031, + 2874327524, + 1168278160, + 3093754513, + 4205829771, + 1749005270, + 1052060195, + 743611671, + 3533429521, + 3867604030, + 4203833123, + 323903819, + 1070185509, + 395653014, + 3703661459, + 2737722089, + 2635756254, + 169890506, + 194909705, + 2509036782, + 4002461430, + 581790067, + 2801365610, + 2184894333, + 1495813188, + 958922075, + 4188590836, + 3526773797, + 4244824144, + 3687154895, + 1726700272, + 3992371074, + 2086690336, + 1106859089, + 3103616298, + 3429869385, + 861527161, + 396196204, + 432619913, + 2829280502, + 2784614857, + 1343210775, + 2412999924, + 3104538665, + 2805969251, + 1481524270, + 1809948259, + 1304964239, + 981654964, + 3054769109, + 3099781004, + 3529798319, + 3794356060, + 1653832115, + 1800861787, + 3845574120, + 867500634, + 1733599597, + 3264188362, + 3837798787, + 212765050, + 3263781488, + 1843586422, + 2798258489, + 179736818, + 1333619755, + 3465220937, + 2098927980, + 773090001, + 2534516902, + 3976028918, + 4218099570, + 2102132164, + 349958245, + 1275818492, + 3643660222, + 2044148648, + 4033014278, + 1571915587, + 278661416, + 4202882002, + 1091713967, + 3043118505, + 1942530998, + 3983613615, + 1773332063, + 3847568268, + 2204552035, + 661684914, + 1789474512, + 218465177, + 4066014252, + 4043422341, + 466066968, + 4285235649, + 1362471588, + 1459910018, + 2048495197, + 2292895974, + 2287214387, + 2467719787, + 452202191, + 561332838, + 1506465554, + 2716724265, + 1625862669, + 2978760393, + 1749644375, + 1660623568, + 3390843917, + 2774383551, + 1943768826, + 2872116418, + 4291881297, + 56892350, + 2020945277, + 3541739198, + 804365932, + 141617903, + 3021370095, + 3736298791, + 2118840600, + 1246547929, + 3997734469, + 3479572, + 1671443415, + 2847570642, + 2438226091, + 2772857050, + 1966757129, + 337494088, + 1781021915, + 4045923063, + 2602228945, + 4199435130, + 348116742, + 2288411135, + 243501321, + 856775941, + 2043385542, + 2807031976, + 1099293477, + 1506043577, + 100599652, + 1753555786, + 530518633, + 206163940, + 3815848638, + 1874846472, + 2040312267, + 3957908769, + 2051469840, + 1046873021, + 3853268326, + 1120770657, + 608359198, + 3650155525, + 562008079, + 3379898922, + 2057937314, + 2829495306, + 1352423463, + 1424167408, + 487002809, + 3206903943, + 4037813154, + 2054021679, + 3918180328, + 1314532147, + 2332954764, + 2755650147, + 22869110, + 2221675638, + 529422952, + 2216813559, + 28460189, + 1186371777, + 419139358, + 3666901497, + 2293040387, + 1227484898, + 238501053, + 2556841463, + 1617308720, + 803025343, + 861238697, + 119514264, + 3229174143, + 1987112011, + 2865057429, + 1112900447, + 1407928884, + 1900474977, + 2768906643, + 3671178356, + 3970256532, + 3057462887, + 480340502, + 1515289858, + 1272730497, + 1804059970, + 1444028903, + 447627905, + 3993520546, + 3303255701, + 1533216601, + 3530272608, + 3547749415, + 4008018797, + 2909571964, + 753947902, + 544210023, + 2373393245, + 3710608871, + 2422318272, + 862834386, + 2977678954, + 1561615415, + 877293941, + 3376143881, + 431649966, + 643816384, + 4012200797, + 1243530181, + 2522196700, + 1308061688, + 2327649160, + 3364635784, + 987491481, + 2296524860, + 3998836545, + 3061738622, + 2301057958, + 2451877545, + 2318043384, + 3528951720, + 3624140615, + 77896408, + 2242427079, + 2592857474, + 1554274825, + 3689357916, + 474505634, + 3228566628, + 3637164040, + 242197890, + 337516152, + 422317770, + 2725263333, + 2476332659, + 2254155961, + 3281599173, + 2527297814, + 326609542, + 3597550691, + 3066376078, + 1629799726, + 3578675441, + 3368771307, + 2480119774, + 4096332419, + 2242369551, + 733301417, + 2336079280, + 401665740, + 46265531, + 4106097814, + 2010267197, + 3626587265, + 3530359458, + 322636037, + 852851961, + 4032337673, + 3773787547, + 1065333391, + 3308839744, + 2275765169, + 3599013970, + 580370296, + 769904862, + 1990798107, + 2195415657, + 2713394321, + 702265631, + 754248649, + 3753592131, + 3297910203, + 27447168, + 638607870, + 4153235966, + 1541837747, + 2444317264, + 3696997815, + 1960327965, + 3469063468, + 2741101681, + 2197375464, + 1675881674, + 990815654, + 1461054978, + 3412711693, + 1722005152, + 2413609765, + 2173530700, + 1683043527, + 3885063087, + 2809478304, + 207231789, + 2040851763, + 2913636631, + 2705415885, + 3377000576, + 3996186714, + 1807884677, + 1374228809, + 4191831456, + 2351813194, + 32879892, + 898623490, + 3536814887, + 2238130323, + 31776039, + 1714925957, + 4280395886, + 320992657, + 69054436, + 1328560455, + 3710506541, + 2326583595, + 2637876344, + 3013094900, + 1875933749, + 3109302611, + 4250050007, + 2071860946, + 1604167520, + 2504576469, + 2885110642, + 314140346, + 2835907504, + 4021924325, + 881595382, + 2508450728, + 3042598433, + 3577228499, + 3221797486, + 316176502, + 1612879805, + 2047075112, + 2160797133, + 1776889792, + 3403420203, + 3485662133, + 1375535023, + 451062288, + 3443563948, + 3242854535, + 3361300026, + 1240080434, + 2832104274, + 649885340, + 852039268, + 753656803, + 1814387483, + 3500678549, + 4246459931, + 1019193347, + 4168437065, + 271266176, + 3571555013, + 1794098201, + 3630587046, + 1893193944, + 543676696, + 2922819465, + 3605835612, + 4259354786, + 697495066, + 1418050267, + 358767164, + 3641238744, + 2240236069, + 1193640740, + 2532558438, + 3162712899, + 1154541657, + 2951418312, + 4248463261, + 540429074, + 1271556058, + 2466175058, + 3967140302, + 746486868, + 1926230165, + 2313857212, + 1746481008, + 4049771007, + 276819718, + 1300410526, + 858057278, + 4159855216, + 2007958802, + 1458631060, + 3011696811, + 1237842519, + 269825411, + 2070571958, + 1056523616, + 4118799167, + 2272898628, + 1511813972, + 220140022, + 2402554623, + 2119219342, + 652198072, + 3132014063, + 867028654, + 1529211883, + 3427379980, + 1851848807, + 419142561, + 3171492047, + 3520737863, + 3875333620, + 3010227615, + 3268216433, + 1001804898, + 2186578344, + 1048133228, + 999941173, + 816741580, + 3534386973, + 3855162922, + 4196200624, + 3207822732, + 3833859943, + 135757702, + 3391657400, + 763171032, + 2287109680, + 3871343181, + 877732000, + 764395419, + 439471433, + 3796002044, + 2793528188, + 2392351897, + 2035365002, + 1223193382, + 4129706955, + 3036778681, + 343996415, + 4160658517, + 1654591154, + 4248047665, + 2252070190, + 2779121866, + 1437154125, + 2593929761, + 3336273139, + 3924543196, + 3310087890, + 3715870187, + 1649871853, + 273759252, + 319291040, + 4213854912, + 723208195, + 1736008610, + 3429417077, + 2166018101, + 1451128230, + 196521758, + 3064637844, + 1055394271, + 1316527796, + 2618766203, + 4023720373, + 4028106986, + 1813236080, + 4202998799, + 1142002362, + 2577236163, + 4071117031, + 902556451, + 437864039, + 3085657673, + 669842288, + 1795096631, + 2911344726, + 2170792561, + 2234546397, + 2690995763, + 2676358759, + 709149943, + 1012312890, + 3849027082, + 1466015008, + 3679555372, + 2136425442, + 3068280767, + 1604393680, + 1271239244, + 2165911239, + 3212576502, + 4119568089, + 4212440637, + 3509698481, + 433244020, + 1198689033, + 3803012383, + 3831485936, + 696582326, + 1273056213, + 4267629071, + 1017357420, + 1413334459, + 3076505173, + 3340334389, + 2884945686, + 2343498209, + 186633817, + 2376862992, + 548323457, + 1358195436, + 2975710699, + 2701493952, + 371993266, + 3071386261, + 2940700998, + 3459878016, + 3873529290, + 891054793, + 2767893467, + 3096804830, + 453580791, + 2803055095, + 1428970493, + 2310757201, + 1807480102, + 4142520804, + 2418197685, + 660457580, + 3379726443, + 1918748089, + 3380544713, + 805590200, + 417915645, + 2592658906, + 2991229834, + 4189616576, + 2580956066, + 2225901297, + 606702186, + 1686419986, + 3555297525, + 1503163476, + 1822325093, + 1325627042, + 467095686, + 1450795955, + 2379131582, + 4097768532, + 1897967225, + 2230833133, + 1655003515, + 1528706843, + 2311482541, + 3254169242, + 618321406, + 1129751153, + 2163467091, + 1131242386, + 3580752534, + 344260348, + 1562907382, + 2963068076, + 1505018536, + 2318526962, + 3552091401, + 1636935726, + 2382887536, + 4073024494, + 604206665, + 179337553, + 3321588108, + 384384652, + 2216525144, + 770124852, + 1445246410, + 3736321303, + 344573115, + 462212969, + 4052963802, + 3468036091, + 1085346189, + 2883315614, + 3361670333, + 1709505992, + 3514670, + 4133931679, + 50927383, + 475373344, + 2445475375, + 4162896623, + 234388227, + 3571053121, + 3171699146, + 3597597359, + 623509604, + 3253962117, + 1905698487, + 3262720417, + 1391758329, + 1196498293, + 516427586, + 3207779051, + 1214752339, + 4007349164, + 2647594653, + 1411353718, + 1208595518, + 2101685446, + 1149330900, + 963947695, + 4131359946, + 2690099763, + 3413659715, + 3204312604, + 2445693581, + 2260843692, + 3167366059, + 3653061237, + 3254204110, + 239819133, + 2699859773, + 4223884450, + 1146977759, + 991186934, + 2364443582, + 1316158362, + 2418505597, + 1820234209, + 3287888021, + 1018316196, + 1868021467, + 663786682, + 848938475, + 3244248876, + 1012591774, + 3103336081, + 3575307952, + 1659916481, + 1131078749, + 1987856229, + 1724042654, + 899857000, + 1915782124, + 1627955056, + 2992643328, + 2104408461, + 1524318379, + 984348781, + 159697712, + 34614736, + 3645806616, + 1627676776, + 3109228302, + 1370554154, + 2040434315, + 1553910911, + 1026540458, + 3867928459, + 431000418, + 152448043, + 691960367, + 4289891560, + 1244496521, + 1377202318, + 3895899651, + 2171093566, + 1561992988, + 2252110915, + 1445096217, + 754104836, + 3619386089, + 4050441378, + 1185348651, + 2627412500, + 1407362265, + 1298068069, + 1430755464, + 3844479895, + 3618517022, + 59736412, + 552100264, + 1115491274, + 3654244247, + 2173460403, + 87368796, + 15996738, + 2475381667, + 340016539, + 2175403706, + 4287126893, + 3678850389, + 1521285129, + 3352740003, + 431171835, + 1917217131, + 4121275216, + 2395517170, + 2907776642, + 2660073619, + 3305497766, + 432211443, + 1044661636, + 4197390238, + 2989717750, + 3219938265, + 1660173246, + 1875513833, + 3160138064, + 1114180220, + 1900942382, + 2570014103, + 24250575, + 1793405122, + 3135775104, + 3691054363, + 1788205993, + 3020995842, + 2777266347, + 205746810, + 3201465979, + 3063789352, + 3389233479, + 271265688, + 2424812677, + 98503380, + 78210431, + 292284637, + 484041607, + 1787870899, + 3590556653, + 909930309, + 3100227788, + 3184061217, + 2849511009, + 4245099983, + 4114171783, + 912316613, + 317027273, + 2009246575, + 2384701120, + 4122715074, + 3875346911, + 942301007, + 2733181543, + 3989143902, + 3592896189, + 3414269848, + 1576595578, + 1232805803, + 1325884808, + 3728880276, + 1830083556, + 2629986692, + 2504078327, + 3144670934, + 791765512, + 3973341621, + 727510202, + 4124368023, + 3483950645, + 1873797351, + 2232106889, + 3290136317, + 1671952923, + 2602619349, + 4279386338, + 3213227055, + 1133211744, + 1346700000, + 2482375216, + 3120611154, + 1382571007, + 1392782475, + 3601732108, + 3556657898, + 950094521, + 309672136, + 967236171, + 1920432479, + 4223184050, + 52721480, + 673995073, + 2699926917, + 709861124, + 2067789480, + 1883200737, + 1801477455, + 4141002550, + 3228364895, + 1983198415, + 857706243, + 2332825183, + 4099244372, + 2432098977, + 2290443223, + 2718865077, + 2363532398, + 353871707, + 796248592, + 3974305086, + 3668153167, + 3010220886, + 2959066356, + 3208768709, + 2548031705, + 3959972152, + 3891484091, + 1395441026, + 1327188347, + 2212970376, + 104935482, + 3907210745, + 3979836769, + 1561382556, + 3948002582, + 539174856, + 3413985039, + 1973453152, + 3266894197, + 3042039942, + 3032792760, + 2180991686, + 4030410608, + 3197502960, + 2835948083, + 516998978, + 1663960567, + 2267681531, + 3353519247, + 3822351886, + 3257728881, + 3696655968, + 3335053992, + 198379156, + 1696585017, + 3772977781, + 3065480492, + 2650933604, + 1785757241, + 3072962718, + 4076518835, + 148543993, + 1352493878, + 3427072025, + 188342029, + 3894678808, + 4088737782, + 3372313219, + 3898295289, + 3876976471, + 4127834099, + 420249418, + 482409197, + 3461256983, + 3269303517, + 2096686210, + 690023618, + 3839651000, + 3364817826, + 2369252370, + 2103265256, + 2910720334, + 3109060832, + 1467810115, + 3251904271, + 2354897991, + 2142098206, + 2204140353, + 1742026742, + 348325637, + 2641698184, + 877361616, + 3661595675, + 2821896091, + 2676446548, + 2486102911, + 3130861206, + 2322539475, + 4064710158, + 643945898, + 789074879, + 3220302062, + 2585312561, + 2766178036, + 2144322290, + 564971392, + 1673385042, + 2687000568, + 1521458096, + 1145728595, + 1322176305, + 1723255860, + 2145650441, + 629297718, + 384473330, + 218873679, + 2716275836, + 2903058153, + 140212026, + 2845868426, + 3150674569, + 3645483047, + 137186379, + 955484067, + 2630986851, + 2911774269, + 1245825734, + 2768219185, + 3021370275, + 457212471, + 2193682090, + 2336342758, + 2681588123, + 2026845002, + 1842827079, + 2441577285, + 4065238976, + 4059717959, + 1630822024, + 3375028927, + 1697093999, + 2055417175, + 4109915499, + 3942456819, + 2683613011, + 1774765807, + 3082184868, + 4100697789, + 3298111565, + 850022871, + 2526040909, + 3499006157, + 785798133, + 3015464099, + 2431506293, + 183695631, + 2978011915, + 2439793236, + 1056650966, + 1850520063, + 191087962, + 3382518053, + 119623700, + 1080030572, + 2228599724, + 2615684184, + 1654047832, + 965690922, + 3349645992, + 3575792007, + 2805409655, + 4276231298, + 3400998476, + 3994695711, + 1518430905, + 2194813207, + 3438408598, + 2398095237, + 668507232, + 1514840721, + 2281009251, + 659163436, + 2373796001, + 338144178, + 1268347232, + 1713458683, + 151107739, + 256716674, + 2859653652, + 3405980334, + 486546124, + 1584119571, + 2597514969, + 1468507195, + 2000577736, + 1843808045, + 1988265849, + 1026376241, + 3277345568, + 2678166464, + 696164723, + 3030809616, + 3302361850, + 2422323485, + 936466401, + 985571383, + 1928548543, + 827494749, + 1670498593, + 3418529383, + 1163435623, + 3716546717, + 1735276449, + 3909999989, + 3682056837, + 1420416230, + 1172221989, + 1189979089, + 2180173803, + 1337511419, + 1981310147, + 2745057916, + 2311566543, + 863237347, + 1156374074, + 3158497072, + 3209643625, + 4280019240, + 632432014, + 473685650, + 481475417, + 1791620933, + 3733485419, + 183631936, + 1152014001, + 210005650, + 1546343676, + 2672416368, + 842247511, + 3931493036, + 46628612, + 3955907689, + 3226700419, + 109755983, + 2697267694, + 71378308, + 3654160173, + 1323910007, + 3041013517, + 2102236205, + 3264224022, + 2497052598, + 1482332770, + 2755593383, + 1647613701, + 1079841219, + 3898622647, + 382553371, + 1070663631, + 3453507166, + 3222582762, + 2338624790, + 874037591, + 3363659527, + 4081838842, + 2035791334, + 914705757, + 2252036853, + 348342028, + 2273729455, + 1998981920, + 1550771241, + 1989761566, + 496642953, + 269017530, + 3396188728, + 2632336744, + 946110016, + 3418015478, + 3346831221, + 2438544059, + 591279900, + 4114795117, + 2370717586, + 4095897209, + 576788505, + 3634120340, + 2919133009, + 245561815, + 957213667, + 1292236995, + 2491904620, + 2815239179, + 3923024807, + 1695656778, + 4105132125, + 2586670745, + 485134428, + 1054405090, + 2674237313, + 1776216389, + 155456865, + 700137022, + 1084647028, + 1539957484, + 1554266451, + 2879174926, ]; static const List _envieddataprivateKeyFCM = [ - 687057120, - 2351747292, - 667131502, - 3163379376, - 244169162, - 1842471576, - 1777298057, - 3370684179, - 2417822308, - 3239766123, - 2635588320, - 3484980780, - 964320744, - 449894240, - 2089552647, - 1384563243, - 2747374677, - 2322693791, - 468105303, - 1775438849, - 114910012, - 3630378701, - 525036822, - 1362487436, - 1135304420, - 1787329991, - 896419934, - 4045619530, - 2215203044, - 242979107, - 3239620271, - 2243180778, - 1140341505, - 1269640288, - 958814502, - 2704745126, - 2312092264, - 1131650771, - 1365473374, - 3058935588, - 1034259882, - 3056986870, - 2369562328, - 3495105707, - 2652088573, - 1877240385, - 2502858132, - 2874879789, - 2273458695, - 2039818232, - 2638912890, - 3307648638, - 2804245312, - 2449604736, - 1949077195, - 4079189047, - 1126902304, - 1532743005, - 860940027, - 3945049675, - 2270623789, - 3910629027, - 1015583454, - 1867074354, - 2465101878, - 517997896, - 253498776, - 888353462, - 3523149892, - 1836954420, - 1418962002, - 549889244, - 119196050, - 3815764371, - 4222827181, - 4200717808, - 3545037839, - 702961384, - 1996110221, - 2339379847, - 3916247739, - 792232876, - 1268068010, - 3530286712, - 3038177001, - 3103586047, - 1003136120, - 378173916, - 3626936791, - 1111889562, - 830344078, - 3502592734, - 1346804702, - 921908261, - 1796505445, - 1970348931, - 1213724012, - 2022652126, - 2960786003, - 3479729204, - 651823744, - 4220177332, - 3332209690, - 3812845287, - 3817638438, - 2687987639, - 185546335, - 4084649941, - 4104752643, - 1395361917, - 3072044215, - 4213754700, - 667246560, - 3413465476, - 1104137890, - 1652812004, - 1629739550, - 1281193430, - 3105940677, - 716032176, - 2655485558, - 105696247, - 3210900451, - 1179645142, - 2642202369, - 585078652, - 4249051268, - 3943384458, - 1787047688, - 3580516981, - 846963701, - 1929682996, - 1716497558, - 2263167781, - 1491556984, - 2440675734, - 547085494, - 1140350982, - 4042203588, - 1534001785, - 2007965747, - 2422116834, - 1259191191, - 2585656869, - 990824004, - 2666168521, - 4091045175, - 2746205237, - 2281755191, - 4019845514, - 2305393780, - 25134302, - 1597357998, - 518518557, - 638187265, - 3676090464, - 1455278710, - 4110759503, - 3661034798, - 1083265408, - 700597399, - 603820851, - 1897158513, - 312537703, - 3800705330, - 1491396294, - 166462998, - 3804013567, - 1291657528, - 1642701904, - 1996010889, - 1949562637, - 356074738, - 3050374361, - 3397446670, - 2619755217, - 2555055421, - 1326004888, - 2978212462, - 3189868391, - 3919328952, - 3202181494, - 997267954, - 3071128923, - 3896656227, - 1532948513, - 3589177722, - 3857962603, - 2331593082, - 2279342603, - 3941034640, - 3274722004, - 548476229, - 892941062, - 2158930456, - 191171260, - 527249767, - 1010994070, - 3551807534, - 656139921, - 1268780751, - 1841291161, - 2107784674, - 1333706292, - 2430612637, - 1109102321, - 2933832745, - 3111867771, - 2253205081, - 1609624104, - 4086503619, - 2926453777, - 1101436726, - 217953310, - 239708437, - 2376010384, - 4024108860, - 3294172760, - 1045166719, - 210617197, - 3886987574, - 4031539842, - 3104340082, - 1294299498, - 520535535, - 501227567, - 306325312, - 1202402115, - 3723715714, - 2212498695, - 3273227118, - 3348215617, - 3107514055, - 1580502731, - 865597268, - 3203205583, - 347528886, - 691095487, - 518666925, - 752476069, - 1070210923, - 1328358230, - 712849889, - 979358867, - 1739004236, - 1650805203, - 3211750497, - 4111303170, - 2391613661, - 3700200300, - 1330926168, - 1110755455, - 3815566132, - 1987837475, - 1590898848, - 325629229, - 1693179403, - 4108392362, - 903375214, - 1749831142, - 1497463701, - 3248155084, - 1971381907, - 2466378146, - 3466182959, - 852268999, - 1488536172, - 682839453, - 135322642, - 344119393, - 3881270771, - 3227487916, - 2151628491, - 167635574, - 3725249714, - 3152629473, - 1663986038, - 2210105742, - 2848263085, - 3687607023, - 3523295095, - 1521619223, - 465615421, - 4033741236, - 1628996784, - 1567365995, - 320533979, - 1341484507, - 3707123005, - 3761971637, - 2995027347, - 3508317099, - 4175740709, - 2913612130, - 1644059660, - 2559420326, - 11499296, - 4233853861, - 561558495, - 1796863459, - 3445165370, - 417675925, - 1260199800, - 4081736615, - 3489912339, - 3930082984, - 3168753414, - 3457806577, - 72557514, - 1634530664, - 1781670518, - 3548731510, - 3659721222, - 411972962, - 3257203322, - 1118205238, - 3791581688, - 1269049069, - 3526733740, - 295713022, - 3822033247, - 1129163314, - 2013063327, - 1807587840, - 3046977674, - 4191572364, - 31158586, - 416060230, - 2124999298, - 2305341039, - 252766826, - 2555023712, - 2030281676, - 2675404048, - 1347703547, - 3898305392, - 1191737078, - 2444925167, - 774938062, - 4096414568, - 722317107, - 1110029919, - 3531804590, - 2137291210, - 2613587826, - 1760380016, - 2509810890, - 531913857, - 3315801765, - 1604337818, - 4152488379, - 314587320, - 115455737, - 2664093911, - 1270508866, - 988788367, - 1563335047, - 1431885331, - 2300103683, - 2105569110, - 34079636, - 3837339780, - 862200113, - 2374437671, - 3763062201, - 3948621093, - 3728118475, - 1466018908, - 3659356755, - 1740312887, - 2490567419, - 3353665946, - 1184219954, - 2998433048, - 2881676254, - 1367811986, - 1893075114, - 1328528831, - 3676685303, - 2394762498, - 1138100135, - 1001711201, - 2080430447, - 1405550081, - 2349784902, - 2048576934, - 1293844796, - 4031262631, - 1452967953, - 319431207, - 2394605692, - 2734257629, - 3552822524, - 2083729763, - 2155270799, - 662136433, - 2639811114, - 3994095887, - 3972428972, - 2652529992, - 3552382155, - 374720774, - 2867639164, - 50989241, - 2097631820, - 3114682691, - 751413630, - 3289840435, - 2503026394, - 3536214316, - 3874517400, - 1059484043, - 1789453331, - 4101202994, - 1527096134, - 1430865019, - 2753642555, - 2452695161, - 1255463944, - 1594937838, - 1548279635, - 678081065, - 2254220337, - 4048297033, - 3930824218, - 460346226, - 3296095206, - 2346322471, - 157751530, - 66795264, - 3540449943, - 948024254, - 4203366329, - 2985827176, - 3154322461, - 2369269045, - 979650204, - 865258718, - 2140951649, - 1794619767, - 1780069265, - 343919676, - 3140351835, - 2223497385, - 2753711210, - 374166687, - 2367696108, - 2869765812, - 81755588, - 102874082, - 1026539865, - 3266936729, - 3891160100, - 1511029633, - 2164675848, - 708649684, - 66136047, - 804370967, - 1727519501, - 3775998859, - 268870514, - 511645914, - 1925243572, - 3909427024, - 837369477, - 1392273326, - 1244366284, - 1594792538, - 401954798, - 4099624872, - 2786854807, - 1550121921, - 1546091784, - 3426410482, - 2491321074, - 357273405, - 2754430858, - 1667329067, - 2994892484, - 733231638, - 557032361, - 3668375206, - 3953347098, - 2430734659, - 3468644844, - 1310189511, - 1518085725, - 2669482918, - 3649695844, - 4256299613, - 2973002574, - 1069219106, - 446446668, - 268164147, - 4226082494, - 1145782441, - 45593226, - 3258159686, - 2579021694, - 3769117721, - 2534156693, - 3103773495, - 1597185345, - 1607401689, - 2559722138, - 1199481109, - 2258313054, - 51926262, - 414790153, - 2014941605, - 2586533643, - 364300353, - 2992864387, - 942582796, - 4020006959, - 4248592245, - 815986848, - 71527380, - 3607848218, - 1020035110, - 1444669163, - 199040442, - 2994149440, - 1607832876, - 1393714488, - 1002443695, - 6367049, - 3920656403, - 2902373933, - 3556625657, - 4223522564, - 2523730180, - 4144857078, - 1018257440, - 1895368565, - 1980167214, - 3170550718, - 3917908401, - 1051732237, - 384847163, - 1796040173, - 3943863941, - 4151237488, - 1496652790, - 1592764265, - 3758811867, - 944833252, - 3536409276, - 315366685, - 1152576495, - 1574005264, - 3563403437, - 77656953, - 1509468933, - 1963658421, - 326154939, - 2688289592, - 3634806892, - 989391472, - 2940770223, - 820707448, - 1418767320, - 3355902448, - 1491491099, - 123239333, - 3656357253, - 2477619933, - 1138227237, - 3799404110, - 4157807733, - 503931410, - 978113341, - 2961913220, - 2834292206, - 1253918954, - 1895171201, - 4239667109, - 2242957538, - 2984808735, - 2836043922, - 1345370035, - 2159997746, - 2387877154, - 1854857282, - 218749164, - 3926444812, - 2467554388, - 2108347594, - 2074253345, - 2185435643, - 2553968583, - 1544832304, - 3215152616, - 1201050330, - 1216987928, - 1961650579, - 434459399, - 1011677621, - 1880825802, - 1470825536, - 888564192, - 1505510952, - 2483609675, - 877619336, - 1041963392, - 2866304491, - 57000969, - 2608376142, - 206503499, - 2762557383, - 4099064300, - 3301815878, - 2196783651, - 1790797858, - 609245099, - 2345566256, - 1772348502, - 2768220148, - 32911077, - 68068722, - 3131207415, - 552488276, - 3548258336, - 82032446, - 1099870908, - 3236886834, - 3108183191, - 377011471, - 763328978, - 3004541918, - 2619543612, - 2814834512, - 2963610091, - 3346435470, - 3914676667, - 4026933448, - 1122540463, - 2473234510, - 3845443026, - 3041363446, - 1119985431, - 2107539413, - 2069905241, - 3665449821, - 3265374189, - 1550780175, - 757498249, - 3719480966, - 1634894442, - 2041572014, - 2519019246, - 2165441831, - 3876722025, - 421888870, - 3883568018, - 1112109059, - 2550420797, - 3155930341, - 3698428706, - 3880483563, - 3891891502, - 879728770, - 2522889075, - 1891622784, - 1409321508, - 20894310, - 692880753, - 297400475, - 2892899274, - 3691303017, - 3079043081, - 722522402, - 751168155, - 2989246634, - 101047846, - 3403828924, - 673628029, - 1779274033, - 2371877687, - 3594596488, - 1659179761, - 2296460554, - 759667948, - 711462623, - 3137361279, - 2545414266, - 404329061, - 2606123568, - 2800154546, - 2816641192, - 1796973669, - 2802712705, - 1812798619, - 1000879134, - 1875389726, - 67581231, - 1832387811, - 2166002342, - 2587804317, - 1665786182, - 3757850301, - 2897333489, - 2011093409, - 765940962, - 2062905532, - 589979776, - 2976125363, - 3911360862, - 460591965, - 1742620406, - 473132546, - 3263667966, - 2292507285, - 759419987, - 566146017, - 1952430114, - 729127312, - 3182835017, - 627055950, - 3374240695, - 2824819197, - 2035650453, - 3170604020, - 2485312237, - 2462910262, - 3047470099, - 618836759, - 2463661767, - 991550343, - 2003136908, - 3054747245, - 3875052892, - 2958047360, - 3330148502, - 1848353737, - 848233317, - 1520010473, - 3098676811, - 1414309374, - 2584119842, - 1838183387, - 335442692, - 59961224, - 3701403118, - 3721175315, - 3269427686, - 3722129665, - 3172413772, - 2373186262, - 807365567, - 1188657484, - 697175645, - 1438233610, - 482253770, - 2053663304, - 3615704151, - 4060801283, - 676073085, - 2194875109, - 2525637650, - 4224693424, - 1222035243, - 2356236848, - 4217200065, - 3573338471, - 660887065, - 2554363564, - 1548620272, - 2867229387, - 377754949, - 955745227, - 1709721527, - 2303101499, - 3151813910, - 845622495, - 4212176032, - 3625474887, - 2863246091, - 406853508, - 2495520025, - 2819499416, - 1542024416, - 459058070, - 1063310400, - 1486141082, - 1329315737, - 2688628931, - 28727349, - 3868867775, - 2984554951, - 3322479252, - 2676752254, - 510374512, - 1586075865, - 3334331695, - 3301414323, - 2483864082, - 3645666811, - 2712019344, - 78762213, - 2055652844, - 2874158053, - 3599958403, - 1532212451, - 1945558341, - 2037003343, - 4063468419, - 321332556, - 1315177319, - 836246866, - 3977243402, - 5609665, - 3682172451, - 2383852194, - 1255801980, - 1137572360, - 776912658, - 2953171312, - 3337348021, - 3292271047, - 2454974465, - 1018738638, - 4197584009, - 3612878804, - 1204529871, - 2654232990, - 2434739667, - 4034318449, - 2661089697, - 2743459636, - 2336599067, - 3302366061, - 947135924, - 393097852, - 1793370063, - 1493964014, - 3831129215, - 3227353862, - 3117169933, - 1481880465, - 2756896197, - 81470099, - 1114201157, - 493138684, - 595972802, - 1708809093, - 1109115998, - 188241471, - 2186297836, - 3983306701, - 503132885, - 4118504166, - 4234361543, - 847354777, - 4037006639, - 152462135, - 3278825218, - 3004284428, - 2392240959, - 407470303, - 863107111, - 3856075765, - 275930758, - 54470167, - 401108540, - 3998193012, - 2879285611, - 2647024534, - 3251264712, - 1245511500, - 2411226010, - 2559214231, - 2880382079, - 3530263377, - 2927569833, - 1217886095, - 126286095, - 1087192554, - 4044143554, - 1565734935, - 1981026834, - 1036437576, - 3713013949, - 3146126408, - 343341771, - 3685441592, - 1506986709, - 2987513076, - 2111309835, - 3613085766, - 415340459, - 3212801457, - 1121277845, - 1400486506, - 1359408039, - 2344647046, - 4279931778, - 1130038472, - 3333053538, - 1017720953, - 1773665552, - 3496765548, - 1119782222, - 809979093, - 1091047889, - 4253337155, - 835823204, - 1759789597, - 419736495, - 2490166788, - 3599918145, - 4151755898, - 4205360711, - 5412170, - 1188705871, - 3540340930, - 2959754136, - 1457769539, - 3201484823, - 3485029210, - 2818711097, - 840135703, - 1453257311, - 3028565986, - 3881176534, - 3083126296, - 3364025572, - 3275851553, - 2982936089, - 3996765018, - 2554783448, - 847831003, - 3746702481, - 4069794443, - 4071461287, - 2872433784, - 4018472569, - 4057158435, - 522807986, - 2853793808, - 2112824113, - 1973868706, - 3071410049, - 2467552910, - 900382892, - 2296420907, - 1997314551, - 2084074889, - 3515937590, - 1500363500, - 3871385060, - 1856985274, - 1425350771, - 888001303, - 4136502959, - 2630455157, - 2289167349, - 3879236711, - 1372407583, - 2332626588, - 1007264582, - 2142683999, - 421005094, - 1435867358, - 863732453, - 2062979867, - 1734475257, - 880196233, - 1785339675, - 1043211296, - 1872541532, - 1897348378, - 3191959728, - 3158232888, - 3017421806, - 562380441, - 662261031, - 1540463319, - 3042159927, - 1091496976, - 3505648284, - 3143699422, - 933492094, - 3896430191, - 3300637757, - 1232558943, - 3326559959, - 1219163264, - 50577953, - 2314181686, - 19825208, - 4174758526, - 4004574778, - 1269884533, - 3744227332, - 3057252115, - 3779151252, - 1119798091, - 2464378225, - 2553424916, - 4181954294, - 4070036123, - 2389752306, - 1824247220, - 129514863, - 494902311, - 1982489997, - 3221839188, - 327785355, - 3910598629, - 2752518637, - 2098112433, - 3981443069, - 4187370462, - 2593119815, - 1212906774, - 555741400, - 147662119, - 975657473, - 2797768417, - 2342733336, - 2612118776, - 2191167345, - 2499583100, - 1744758556, - 1790320284, - 51243054, - 1715597269, - 2711004234, - 3704883471, - 3104128929, - 4040597630, - 1033009521, - 3549733808, - 32223659, - 3923764354, - 2920295331, - 1719182876, - 4012934890, - 2260339262, - 3630173844, - 24041163, - 3660474874, - 3015073523, - 1619707864, - 1230068736, - 1419388581, - 2360091613, - 1185277462, - 1103855297, - 1332503165, - 469645391, - 3367840423, - 2219967267, - 3177438098, - 748840001, - 1761292981, - 3818898514, - 4133496877, - 209117552, - 365143062, - 3948529511, - 1771875421, - 232366584, - 1085365713, - 959059664, - 3752710100, - 2118669792, - 3584233682, - 2437720575, - 1383722777, - 3590990131, - 2196380003, - 1542084866, - 420606296, - 347316914, - 4280747536, - 2959375648, - 2586808641, - 3388943632, - 2698094151, - 154512878, - 802527370, - 3204930622, - 4090575657, - 2954267863, - 3749593365, - 2039348934, - 3517950838, - 3509596442, - 601095677, - 1880541112, - 1057635850, - 2550068612, - 3924172439, - 1956025925, - 902799244, - 3095238063, - 3354994496, - 576288404, - 497097420, - 1983446459, - 282150816, - 1960862564, - 510871203, - 561272364, - 2714686528, - 1453039961, - 3224743547, - 3404274166, - 1585277891, - 3528846029, - 2767857789, - 3794820310, - 2616678672, - 1032175183, - 1035920747, - 1260209769, - 1735427979, - 984077652, - 3555667155, - 1671202986, - 563059823, - 191501716, - 3300115515, - 2855229426, - 3769856860, - 3215059779, - 551852931, - 1712697760, - 2077336672, - 3435584051, - 2878999492, - 2538255920, - 3818215644, - 229426643, - 441367938, - 1929867379, - 1435459867, - 4048400713, - 1338455155, - 3026518450, - 538685507, - 236626008, - 643620657, - 1870450453, - 3730561883, - 514744228, - 3523747741, - 2434601496, - 1958963500, - 1631769966, - 2467756188, - 2927450890, - 3825407224, - 1701741158, - 854290763, - 2874714925, - 351649068, - 1410359152, - 4156801626, - 958255388, - 1547996513, - 261564513, - 708094756, - 4136089555, - 1429611632, - 247733631, - 1834783452, - 2786502948, - 1141278542, - 1194991879, - 222560789, - 3860333247, - 2747473312, - 1422089053, - 2115133689, - 1415725928, - 1216314513, - 1901716363, - 1321782204, - 3587865828, - 2367917980, - 1156171924, - 2140668580, - 679524028, - 103129679, - 3767653396, - 2031162224, - 576992244, - 11290913, - 429659400, - 1209139169, - 3871630284, - 2485062400, - 671574814, - 933911937, - 2713354252, - 2047389857, - 1660529222, - 602428929, - 3456824324, - 1057991121, - 2017605083, - 1630114295, - 3173043212, - 3787901570, - 2521976632, - 3140411108, - 979674210, - 3060278396, - 4081843123, - 1496707363, - 1744597804, - 857288469, - 2721171071, - 1042422755, - 2243861551, - 1512846467, - 1437903604, - 1744561227, - 1185339005, - 2083194911, - 4179612812, - 862105770, - 3076397902, - 4070386057, - 4217086608, - 4034416725, - 3305310303, - 3281643144, - 463785881, - 1119900213, - 1796281420, - 3594496929, - 862284550, - 794204233, - 4040619660, - 3638464770, - 2601293365, - 2614489364, - 2951004304, - 1860978290, - 3221826688, - 2085629204, - 1629566613, - 2838374215, - 3970556601, - 3099087987, - 102895369, - 3468842377, - 1828989239, - 120240749, - 1255717367, - 2146838535, - 2292171551, - 1530615693, - 3200849360, - 648367721, - 1308447341, - 1613467262, - 1068079367, - 981110819, - 3001377678, - 3672163692, - 2712573655, - 4042020063, - 4267212108, - 1214765249, - 699325604, - 1726835328, - 4021704336, - 2661347150, - 3047423456, - 593227899, - 4083599027, - 3147462719, - 3597068704, - 2252591596, - 2622481324, - 1383631565, - 2529526485, - 2955700874, - 1700945568, - 2424313859, - 431817337, - 1755603764, - 2386625715, - 564491649, - 3655125416, - 300208850, - 1549987045, - 1634437253, - 3219255957, - 3021363414, - 2751324680, - 1892310469, - 1676654409, - 2791807755, - 1389810885, - 3115138431, - 815549840, - 3159863793, - 1893556558, - 235598097, - 4180654182, - 2248312843, - 3366772932, - 2423147236, - 4234149333, - 2083041211, - 4185126595, - 706683286, - 2280100268, - 1311484136, - 571736906, - 186564761, - 3226358355, - 720979656, - 502688540, - 3960422575, - 25839143, - 1998157813, - 1857769020, - 152483097, - 4099198919, - 3806302159, - 3861075186, - 3291731514, - 2451947264, - 153934745, - 3584032178, - 1055704045, - 2259951056, - 3033562141, - 4015054730, - 4191421193, - 1724389873, - 173500385, - 2676569909, - 428867859, - 3350579638, - 1701885653, - 2443647311, - 199956923, - 1684356167, - 1343705044, - 434805950, - 3925873177, - 952037744, - 4106604436, - 1687088961, - 1004993043, - 3820753559, - 3501401599, - 3314813818, - 3923516150, - 104481096, - 3579162111, - 424798194, - 3793094883, - 4186820114, - 2590691889, - 1609505387, - 3632617212, - 4201566865, - 2915403213, - 1429347200, - 3912134812, - 345631257, - 2031989820, - 4155174382, - 1418931903, - 2405200980, - 714190085, - 2015515903, - 2210742562, - 2274372253, - 3237429681, - 4187884196, - 3372763716, - 1514519227, - 2076514872, - 3797164894, - 3588245796, - 16311375, - 2799511185, - 1983090388, - 1139172453, - 3552215302, - 3759111257, - 2836754349, - 3363240444, - 2334058938, - 947585294, - 4244513125, - 639171284, - 1634887728, - 23915077, - 2542148891, - 3349121697, - 3421120300, - 3148054764, - 789047633, - 140301533, - 3328659623, - 62303728, - 2970552189, - 3242610773, - 2806792879, - 350982848, - 458731122, - 1058330897, - 2720319492, - 889342582, - 2612161930, - 1553167137, - 1287526095, - 3162717106, - 133320423, - 3661506628, - 2516764731, - 527865499, - 1723326731, - 2477797704, - 3832327522, - 2472419906, - 2044235482, - 1760849136, - 2498516184, - 1573571501, - 1582835896, - 1022618322, - 414370895, - 3442091502, - 2528300878, - 43696076, - 2841455369, - 3188146855, - 1659214466, - 2621459524, - 3187762825, - 690182048, - 2468470044, - 2340929040, - 2375691092, - 1148895886, - 693110303, - 2488951102, - 2636273153, - 2981594677, - 3862004970, - 3132103785, - 3031530786, - 1117224096, - 2102468506, - 3574460404, - 1950849881, - 3876104623, - 904185729, - 2860577602, - 1880104720, - 2699480106, - 3744178900, - 2233344623, - 3453244582, - 1887227367, - 1421077726, - 1600079696, - 2756615322, - 645649606, - 1425520814, - 3591069364, - 1314365410, - 1549038592, - 1728246782, - 400596333, - 1429908507, - 1374890217, - 4129367627, - 2678982195, - 1761830927, - 2592087492, - 1036086226, - 2046949103, - 696629389, - 4107653077, - 3478155550, - 3153631222, - 1402546463, - 3547299151, - 1785506034, - 1250016385, - 1668746982, - 1726109781, - 2605352706, - 3947577421, - 3110530150, - 700707951, - 2026287571, - 3251635210, - 551575251, - 2330151428, - 2636398444, - 3168989314, - 833257329, - 1007652950, - 660822469, - 3592671404, - 2338657573, - 1666106630, - 1770032277, - 3354296121, - 122850365, - 3292088368, - 2536071076, - 2803728607, - 846490175, - 3526364234, - 1925010699, - 1325166549, - 2185802641, - 3385608301, - 2495791491, - 4290963487, - 1090376786, - 3176709525, - 4115255447, - 3566057675, - 2451773657, - 1634723190, - 2075898570, - 2398898760, - 3551325830, - 262523822, - 3508691874, - 3760752053, - 2219471980, - 1593836648, - 1954961072, - 144408998, - 602548154, - 3257325675, - 3602183431, - 282669593, - 1937067318, - 1302666139, - 2698354147, - 3753893252, - 571009051, - 2808205150, - 698587378, - 1860015773, - 3820993785, - 1097851733, - 2203031960, - 1721845695, - 128579757, - 4091486279, - 3573618487, - 1972061193, - 2755413523, - 722873079, - 1799229580, - 4024295686, - 1409994774, - 444147672, - 2144629067, - 2462394222, - 611247094, - 466983566, - 1296557187, - 1951031484, - 2443083020, - 3995071064, - 1862280330, - 3406963514, - 364214958, - 2112417452, - 3760429353, - 393056235, - 1176637734, - 3492188233, - 1807796100, - 3617920995, - 1482649043, - 3287228323, - 3326794174, - 190629326, - 3030557746, - 1762522508, - 3977792906, - 1210401537, - 1720865146, - 2774685188, - 196568423, - 2605760343, - 3013233239, - 4239472796, - 2176216552, - 41705776, - 1958042974, - 2117425703, - 1213321539, - 3585151194, - 3953187195, - 3574672097, - 4176889644, - 248618258, - 1483679488, - 2101487618, - 1908240607, - 2978848483, - 2426336215, - 582604077, - 1884202069, - 3890119176, - 364621287, - 50642876, - 4235475382, - 1541425525, - 1021003028, - 1692351650, - 4090009452, - 1199569042, - 139700899, - 1539856079, - 4010367712, - 776051570, - 4161379542, - 3362660636, - 3362934005, - 1595099542, - 1750829427, - 2817626173, - 3280800147, - 2673398725, - 3278641122, - 1145314704, - 3199702609, - 3483200370, - 2717056804, - 2966990081, - 1313642239, - 1351664295, - 3453774552, - 3865042729, - 2146019233, - 2950968937, - 1926027886, - 635336622, - 2923312796, - 3513779253, - 4001636951, - 3559307920, - 2200783728, - 1664911716, - 3394323940, - 453047347, - 1071623884, - 3789661818, - 2527200338, - 102941634, - 263141564, - 2307359263, - 2740419228, - 1115777601, - 1267367112, - 233074589, - 2083840270, - 2078788785, - 309905422, - 2971109832, - 2479642402, - 2140676344, - 4253952932, - 1883170234, - 3255842284, - 3107476504, - 740971595, - 3772904377, - 3759186765, - 3461284989, - 2714700268, - 645919880, - 333316654, - 2937368742, - 2360933716, - 573118558, - 3668725837, - 3733000576, - 552727732, - 2360969419, - 3308327555, - 619775323, - 1968641066, - 2159527563, - 1488973435, - 4062278096, - 1285317678, - 348784309, - 3210695057, - 869163049, - 1113606894, - 2721898307, - 837875970, - 4072986868, - 2432394719, - 846757461, - 4265572489, - 3985301698, - 790556399, - 132651883, - 1828966204, - 3670493218, - 2579643977, - 3056609516, - 3401633227, - 605046084, - 3362013083, - 3988153316, - 3728410080, - 2195455458, - 4044618659, - 1086995793, - 3459124337, - 4208269837, - 3252289259, - 2005514676, - 1003143398, - 455259923, - 3902713921, - 3099388903, - 2913415221, - 1736284715, - 259831519, - 934776431, - 1132967685, - 3929468038, - 1186215082, - 303902681, - 1384763862, - 1653124782, - 816655874, - 84094455, - 3588380695, - 2486118699, - 1972011311, - 1413898130, - 525112826, - 340074420, - 398911632, - 3609891169, - 507930119, - 3781826407, - 3170274423, - 2288925878, - 3263569788, - 1362019897, - 2653887063, - 607849294, - 2922569825, - 138029944, - 3088914158, - 3521596741, - 1273936273, - 3969510280, - 3021785328, - 2729763007, - 3848719020, - 458005158, - 900491285, - 1893588065, - 2294178047, - 2126472094, - 3463975196, - 2636311390, - 1893129636, - 1121737211, - 1058116532, - 2868047576, - 997083051, - 1897976719, - 996416723, - 3305746680, - 2970998207, - 2022791148, - 2607631147, - 718440433, - 4201371736, - 2872034307, - 2212440625, - 3935324651, - 2127878854, - 2548031973, - 1816305578, - 2456002083, - 1374064134, - 41466637, - 2262400271, - 2126629791, - 980405533, - 2865848431, - 1323410312, - 3976688650, - 808937698, - 209378358, - 4074649444, - 1368491094, - 4095438463, - 2364159485, - 2522613627, - 198854003, - 2628341858, - 927056537, - 4108425907, - 2301003787, - 3587370346, - 4150522180, - 2209895585, - 3908364180, - 4257216369, - 3241088633, - 126449951, - 2117838962, - 4257436859, - 686637793, - 929608260, - 4193642778, - 2628783534, - 1309883650, - 2704921244, - 666888792, - 3719163207, - 2924753005, - 1144685674, - 3782699750, - 1533462561, - 2275967823, - 2479575028, - 1297525431, - 1297469346, - 2547070507, - 4019364923, - 673340166, - 983597770, - 274092008, - 2025682410, - 1811561082, - 2221254166, - 2886479107, - 2958126813, - 1928023736, - 2877609572, - 577908769, - 116588952, - 2484735826, - 1587306820, - 1726921165, - 595634452, - 2793295295, - 531096277, - 2045232530, - 3666077459, - 1104075488, - 244854283, - 1635631154, - 2628160133, - 3410251033, - 1294420901, - 3197193972, - 2815601941, - 3655430470, - 4047117643, - 3068445539, - 3235883690, - 1801429267, - 4225535285, - 225591783, - 2915889988, - 3063251797, - 1674625284, - 3514602555, - 2371586371, - 842185012, - 3424213193, - 1785330375, - 544848603, - 3933375617, - 1550299493, - 3506804576, - 889967489, - 2865538659, - 1510065117, - 481388360, - 1505310928, - 3123264439, - 302532753, - 3697584541, - 3129173138, - 437632696, - 2183071838, - 3629256828, - 442984131, - 1600520428, - 3713883625, - 825746903, - 925411750, - 3701054962, - 256189826, - 3797670871, - 1921412919, - 2579222601, - 293531203, - 3441755585, - 298312271, - 2303118756, - 2282020863, - 3020829016, - 260339537, - 2782865240, - 3587981755, - 2594383272, - 3070813759, - 2098473552, - 3841840967, - 7301857, - 2468464915, - 3500802654, - 1405028053, - 3814441587, - 1374265872, - 1257833641, - 1366426580, - 3473168437, - 1702184403, - 4214047113, - 3551642453, - 1601351881, - 2964622634, - 2294029117, - 154644017, - 802414305, - 2030826773, - 1822907783, - 300475792, - 1814415149, - 2939668103, - 1861001610, - 352953332, - 47273396, - 2489624880, - 1243630630, - 3505801491, - 1123536434, - 3206896496, - 1187961318, - 93545827, - 1846891574, - 64601348, - 498710611, - 3422512993, - 3550746730, - 1705381884, - 3084441771, - 1517410110, - 1529103767, - 3279641393, - 2426658808, - 1393794574, - 1786296882, - 1043669315, - 3857073331, - 1812167314, - 3759306893, - 1593787769, - 2926438320, - 3291442798, - 2722576906, - 2109282474, - 4001725519, - 791947998, - 1050815273, - 2457267916, - 3017947807, - 1187926055, - 204523960, - 2186284722, - 1066703069, - 1987957181, - 3610793054, - 1464846790, - 3076515202, - 3592662058, - 2582658014, - 3469403577, - 1729344665, - 2230216148, - 523905870, - 1377877604, - 1044407147, - 2535621665, - 2565899813, - 2549466789, - 4285293712, - 1174176211, - 563659621, - 828083913, - 1281328654, - 3050843043, - 1686524441, - 3866297883, - 812922430, - 2480388707, - 1749405455, - 3556382515, - 2889692650, - 842449520, - 451589329, - 2242988546, - 1744996491, - 3835435877, - 1651192793, - 4270202542, - 191567282, - 4237983591, - 2242409894, - 1968994555, - 3841863473, - 485016512, - 1762592760, - 1440823645, - 2142853221, - 3807669159, - 3486449019, - 2708079847, - 1886199078, - 396604334, - 1894810072, - 3322932173, - 2874755692, - 1177828308, - 788195072, - 1663608783, - 3221704086, - 3275933750, - 3911014135, - 814783298, - 1502762154, - 3667844122, - 3341830352, - 577744218, - 1319281053, - 923465374, - 3481921540, - 69565941, - 1515390542, - 1982026807, - 2087961504, - 1747201663, - 4058446543, - 3204271810, - 3481421514, - 663388998, - 2767142385, - 408729680, - 1596948801, - 3868304222, - 4084280781, - 547112206, - 1867907302, - 3013713084, - 1638890947, - 670766490, - 4074223992, - 827803010, - 3872998435, - 518985664, - 2854068598, - 3831429251, - 425482538, - 3094837870, - 3220678580, - 506609286, - 1741302158, - 859435727, - 922645723, - 642414135, - 2223884394, - 2254027465, - 3516356513, - 519023553, - 14784235, - 4204090161, - 3688470857, - 992627860, - 733835017, - 1444517784, - 2257941979, - 4193993505, - 611979921, - 2160776635, - 558595103, - 3834522227, - 715544169, - 2238959965, - 2736798277, - 2456390568, - 1794763429, - 2169165240, - 2915238887, - 3368740537, - 1693861009, - 760087700, - 2063426955, - 3970490955, - 3394307818, - 2955287160, - 445364844, - 609873636, - 2072897554, - 2261677214, - 3806367152, - 3568442415, - 750983895, - 2687187655, - 1710169513, - 1729519073, - 433487083, - 743359857, - 3058216457, - 465877223, - 3950450152, - 232743191, - 1641000881, - 4061389271, - 1016467033, - 1189762111, - 1781922577, - 2168257753, - 1971007622, - 976572453, - 1037462936, - 3826163923, - 3314506276, - 2226319562, - 1008571213, - 1129623669, - 1049117908, - 1438165591, - 2867722300, - 3821803769, - 1495053168, - 1207578256, - 3594594066, - 302778667, - 3122849297, - 840773199, - 2378751046, - 4123654435, - 2376001423, - 1531823842, - 2272226081, - 1006517055, - 4131845425, - 1440093682, - 1443373547, - 508360188, - 394894525, - 2986578824, - 3795251465, - 2829678776, - 1747419868, - 482393143, - 1336063174, - 1790510470, - 823554080, - 2781095441, - 1150081711, - 2417582050, - 2623557674, - 1239575459, - 810066737, - 1202010400, - 948586555, - 4259779617, - 1189800025, - 1182156052, - 2099071386, - 3326209955, - 782000973, - 1740864812, - 1472648669, - 722067236, - 966711861, - 3494035799, - 2469324749, - 3438529397, - 253271072, - 2620026559, - 1012143385, - 4258053516, - 3744456829, - 4248537628, - 169693173, - 1218091663, - 1862192567, - 465776866, - 3338875541, - 4280772729, - 1380726472, - 791326492, - 375245723, - 2811969349, - 3080475154, - 966414659, - 198042536, - 2088549235, - 3038004045, - 3089750951, - 3360855430, - 890686422, - 1196973616, - 3768953777, - 2559028263, - 3222965917, - 2246741988, - 2467120148, - 4159789767, - 2660566784, - 811323471, - 2891803141, - 3931298291, - 1405836813, - 937567887, - 2425248264, - 662720067, - 1365940236, - 108557642, - 2812596603, - 498759239, - 452655273, - 1205430639, - 88179615, - 3700266427, - 855156399, - 1946617227, - 3716920859, - 493942944, - 1483201164, - 2603462600, - 2690836100, - 3990954167, - 2512596099, - 2997971770, - 2891233391, - 4126727599, - 2179518454, - 3948855876, - 2369610518, - 3986739800, - 88146800, - 1930943729, - 788081323, - 3912013256, - 3301833147, - 2182633165, - 3081880003, - 3848001236, - 1555554869, - 1020546643, - 2052800043, - 2504761011, - 1021855429, - 2682940243, - 2597546590, - 785422272, - 4245430026, - 3943959373, - 2858781676, - 3000134840, - 2213391716, - 2004917659, - 1298224221, - 2802838704, - 2746156948, - 1867128381, - 3214999247, - 3339528854, - 1328909785, - 2423575926, - 3978255706, - 1070108658, - 3925683460, - 1157779042, - 3226667181, - 1813762984, - 905661960, - 3694109615, - 2479927957, - 4154160615, - 471717068, - 1458914645, - 1623776358, - 3744381324, - 893552355, - 1930448722, - 2050792630, - 1082572643, - 1425625928, - 147296718, - 511770128, - 3119508254, - 3487641273, - 3475473331, - 1718052284, - 1851871375, - 3939695508, - 2756572051, - 3854345536, - 2835912927, - 3818244264, - 3430718324, - 571639627, - 3692421051, - 2258871619, - 2532246871, - 703479769, - 3325978284, - 3673013147, - 419114392, - 2963829556, - 3030817688, - 1743482394, - 1137341281, - 120092896, - 1863168984, - 3742525343, - 1474387027, - 1461044752, - 2748538300, - 3076345941, - 1463227460, - 692462038, - 489527851, - 3843058865, - 2403029520, - 1912953117, - 3997226086, - 2606977873, - 3697239843, - 4237833741, - 2207324253, - 1036691631, - 2138017968, - 2365778602, - 3032905261, - 122588121, - 1523098898, - 2137521899, - 134209455, - 4105309269, - 786033770, - 353463371, - 203230543, - 3942410287, - 3100419295, - 1423565552, - 4286999013, - 924910616, - 2963832463, - 3483394192, - 4066158429, - 99684886, - 1728039904, - 2280521646, - 411833766, - 3871124522, - 3813380419, - 2297610032, - 2104776317, - 3723086522, - 1743090415, - 1660418590, - 3426016756, - 3100321266, - 2746488596, - 4021595577, - 1131760295, - 2900157224, - 3270393015, - 1255665981, - 1994046379, - 1411985849, - 2229134226, - 3884516033, - 2047257606, - 674979433, - 3437827998, - 2680116466, - 3912169528, - 3612921137, - 293115975, - 1330732217, - 2292150339, - 816625760, - 1634824085, - 1083165121, - 3440396244, - 3352859850, - 1459413815, - 928043325, - 264525188, - 710410291, - 1897922332, - 1973879821, - 54426405, - 198454453, - 2188858961, - 3609528372, - 3210878640, - 1543140605, - 2716622070, - 4223055928, - 377827919, - 3241399593, - 1346497557, - 4064587175, - 2589749972, - 1130130985, - 2554215603, - 157933963, - 361637122, - 3709204261, - 3725743335, - 1965153172, - 3202140157, - 586810809, - 3122882427, - 666677305, - 2059997691, - 2999405112, - 2835826981, - 2299221984, - 1846275583, - 1786364263, - 4178433335, - 1144622271, - 1030453080, - 1825448895, - 704706439, - 1350687383, - 2314134841, - 3564424702, - 3512408564, - 1148286274, - 62469675, - 3333105520, - 2450781217, - 3342340172, - 2137405415, - 3440748040, - 2182856197, - 1113319101, - 3617878768, - 2155844372, - 2236226686, - 1221133207, - 4050211328, - 3375649556, - 3741706581, - 2749881465, - 4029058613, - 3859024734, - 4053480377, - 1506859943, - 2901248858, - 3947867877, - 2258044729, - 2936257232, - 4087380252, - 4042337356, - 2013381718, - 817220373, - 620445362, - 2011774323, - 485058057, - 4156038976, - 1808491657, - 1659001644, - 3749218216, - 4133191859, - 2807657054, - 1821447278, - 2744650839, - 2233294454, - 1367763602, - 884528985, - 2341857205, - 812576047, - 1652042920, - 3127749464, - 4047689476, - 182169670, - 3291780391, - 4041714592, - 653232759, - 1882349312, - 2727019937, - 1829747616, - 2647466252, - 3900975256, - 1701731954, - 2453858694, - 2946827810, - 2204967141, - 4213056146, - 3951797117, - 2645498831, - 2462043968, - 3157929228, - 621628671, - 1513278521, - 671339143, - 2156096294, - 2993920572, - 2525337160, - 675964338, - 1168343264, - 3741888716, - 999056163, - 3915545719, - 3219112691, - 1621580164, - 3162172733, - 2218933023, - 1653702141, - 3205031013, - 3465748210, - 164902897, - 2263288514, - 1567343891, - 1268332374, - 2308969335, - 2432327084, - 2064300476, - 692364490, - 187250569, - 2753384311, - 1367824062, - 362577910, - 3555746259, - 3183162782, - 2532467733, - 575337883, - 2395555499, - 3217365566, - 2708604698, - 3605474212, - 2884942715, - 1435997065, - 1729583119, - 1169394499, - 3303972129, - 3100266450, - 2393449363, - 3501795906, - 3571819691, - 116967627, - 430795789, - 2107539015, - 3726533639, - 234899902, - 2871273518, - 3170921974, - 2043438178, - 88343463, - 4232542669, - 2355232877, - 4036021279, - 1464000966, - 3904893422, - 4097422322, - 1876747652, - 3393527238, - 660757731, - 141114569, - 3954570412, - 2375811477, - 2631690924, - 477037184, - 2684376305, - 2132813324, - 3671542741, - 2791568861, - 1164809432, - 2684600459, - 639229023, - 2383422986, - 1059723461, - 1382552442, - 4190547489, - 630276990, - 3039975991, - 2569387952, - 1100621606, - 3600544761, - 1819012051, - 3214358271, - 233073497, - 2190915234, - 3195615097, - 97846931, - 1227166079, - 350883502, - 1969430574, - 3216605246, - 3057793574, - 276232447, - 1803447363, - 3422694664, - 2350872398, - 3533441905, - 2247697905, - 2769820712, - 2587303980, - 4217437165, - 2002337562, - 934025223, - 334365886, - 2856437715, - 280192713, - 709865160, - 2974794485, - 3881606020, - 4204620117, - 3788982086, - 2905118391, - 2284460148, - 2620979167, - 4074932221, - 4094442217, - 1887750060, - 1967064364, - 2799613094, - 177563576, - 3816845996, - 2260545263, - 1762247977, - 813927305, - 1600576735, - 4255962064, - 3232760698, - 3660429806, - 3032546722, - 3601740374, - 663047635, - 646877164, - 2644152833, - 630077139, - 2145878936, - 3760786565, - 1735737836, - 4196190622, - 1288024806, - 1921979698, - 634937374, - 3101833447, - 3892904919, - 150124419, - 926575338, - 2845669496, - 2420994230, - 2119212750, - 1455782682, - 2122665863, - 3539485070, - 1684509551, - 1959389894, - 3445300591, - 4132010887, - 930755252, - 1830380457, - 1377637528, - 3403285983, - 2996376727, - 2426416578, - 4063727084, - 1379340252, - 598667026, - 564398082, - 769733185, - 2570525906, - 3467765259, - 455406981, - 3255378023, - 4020627347, - 2675088096, - 3296899588, - 395218623, - 2201082849, - 339297548, - 763633934, - 2485012902, - 1156065243, - 4266953566, - 44098934, - 3591300926, - 130337509, - 2075623034, - 204781213, - 365478046, - 2744287406, - 1065652665, - 3180151087, - 3670598507, - 500576694, - 1848254516, - 3986592, - 4018383973, - 1403759502, - 1333159229, - 3566149122, - 819317230, - 1542875097, - 3160595936, - 1881347740, - 1331719334, - 1039873582, - 3624327675, - 2004760938, - 1075947850, - 79486559, - 2427723098, - 3999317562, - 977070934, - 243107390, - 320753945, - 2923336225, - 1841865787, - 939433053, - 2756625174, - 3935358270, - 1895162772, - 1313785558, - 628991023, - 3424211990, - 467279017, - 3139354893, - 4193810070, - 1846713890, - 1470590728, - 3160681735, - 2766123398, - 3056450432, - 2928737434, - 514223989, - 4110547023, - 3220183281, - 2173047628, - 837419850, - 1689233466, - 3560401668, - 127325075, - 2408660962, - 258113288, - 332495442, - 964734020, - 541877136, - 3109009053, - 2995994515, - 2799631337, - 897666926, - 695007500, - 4041425702, - 3874653535, - 2842906806, - 357211018, - 3532475832, - 1226894473, - 1876848220, - 2920485716, - 4215825101, - 2713656044, - 2198608968, - 1286722573, - 2900522320, - 3569523454, - 3060212347, - 365030423, - 2071619981, - 1955343956, - 3797673074, - 1738609195, - 2638194270, - 2278408610, - 4275883805, - 3443795861, - 4047855216, - 3056934245, - 1440271440, - 238770076, - 1474264368, - 740886046, - 2747770434, - 3464289926, - 1932010771, - 2671764528, - 1672936838, - 2549189431, - 4278963879, - 3960684718, - 3214080546, - 1484784018, - 1512330960, - 1321215246, - 653814469, - 3044844744, - 2671969200, - 2964352251, - 1180654867, - 3736388012, - 270953561, - 4028121231, - 1303705062, - 2191349058, - 205695366, - 3960028016, - 4142275218, - 1949083943, - 4238415170, - 3455341192, - 2531753546, - 1945912352, - 2863978417, - 2947103371, - 879846695, - 1718078654, - 2311017728, - 201671179, - 588433963, - 1035591847, - 2290866304, - 2009136106, - 3784994267, - 2814288349, - 3478478513, - 449418782, - 959539324, - 4262300364, - 648167133, - 3952721757, - 1394175809, - 4129836536, - 758894314, - 192620782, - 1280712870, - 2050377544, - 55431510, - 1783980093, - 2158384959, - 2845994791, - 2018589609, - 1284324564, - 3236618307, - 2900155294, - 1268382263, - 3223986989, - 3281293666, - 1007297268, - 928385264, - 503272757, - 179901965, - 3634610805, - 2883407508, - 286591750, - 2907653504, - 2522952981, - 3801950920, - 1083935732, - 2765645808, - 4013759132, - 3956360088, - 2580189729, - 495089319, - 1297715505, - 4270261490, - 2526378394, - 1439118261, - 2064901359, - 1860637300, - 1357945869, - 1686728374, - 460786227, - 1385164582, - 1164733430, - 1457570071, - 3133639809, - 1117904665, - 2620934711, - 3344547747, - 331483234, - 16979488, - 2665774231, - 1152630253, - 3940228626, - 2081420908, - 4135766794, - 3617732811, - 2706978215, - 666930579, - 3021468938, - 3650350954, - 1093621884, - 2788800560, - 438396857, - 583008840, - 1324518757, - 3545586142, - 4144082235, - 2523457334, - 2580575436, - 598960519, - 1112099388, - 840978163, - 3138280194, - 564041890, - 2662009846, - 89890343, - 1624465171, - 3484361294, - 3840728658, - 1686920419, - 1380176568, - 1523440363, - 832201755, - 662821086, - 491620119, - 1147627405, - 3570670355, - 1003369261, - 555519010, - 2380360835, - 107402151, - 773942316, - 1277470327, - 2530129300, - 3376097402, - 506273794, - 3597522676, - 3378375701, - 2651107866, - 3456047816, - 1017933872, - 756693165, - 674610286, - 3982716100, - 1780621307, - 536359721, - 3177404745, - 1971220769, - 25364863, - 77921623, - 1531567022, - 1472602943, - 271037543, - 2995588461, - 4010399436, - 1479322172, - 1980775502, - 1058443660, - 3139831879, - 1595853809, - 2654258878, - 2353033318, - 2277252409, - 2829441959, - 3009308985, - 869141948, - 1410727124, - 1906065778, - 183807852, - 4212255834, - 2200299414, - 1750206604, - 608830388, - 2296923209, - 1583236951, - 385554828, - 1412599917, - 3081151828, - 174035810, - 850118308, - 3779145541, - 549514174, - 3302310423, - 1542955338, - 2783427848, - 734949644, - 166498604, - 1449523488, - 3522733743, - 1122948718, - 3845312418, - 2428143448, - 79399781, - 287738506, - 3362293610, - 1140986065, - 2473126821, - 4128444499, - 1273622102, - 667097260, - 2256278288, - 1686670237, - 3152518679, - 1423504158, - 4177922279, - 2179415486, - 4131102902, - 705012468, - 1109703278, - 3942346456, - 2279758735, - 3425901051, - 1383453480, - 3301272501, - 2238200671, - 4199038216, - 3573409477, - 2668451017, - 792023224, - 597047766, - 1636441016, - 1227757601, - 1451821644, - 148702660, - 654135201, - 575362148, - 3247081215, - 4042923913, - 2016309769, - 2465559710, - 1040400471, - 1968308237, - 3067545862, - 1747771037, - 361282737, - 1190767944, - 137201287, - 1930788640, - 1547194138, - 25583744, - 3906022525, - 3280130079, - 3627319043, - 231753543, - 868911705, - 2994795805, - 808461904, - 3768519566, - 4128495110, - 2361442535, - 1044773102, - 977814748, - 3723880490, - 2006383081, - 410822015, - 1280292942, - 2201674421, - 3851130950, - 61886329, - 2464310892, - 2770238637, - 4097369642, - 1877066158, - 3169333672, - 391956586, - 639106249, - 3723686665, - 3788128369, - 94768555, - 750091676, - 4222613734, - 3598856825, - 628732602, - 3912375909, - 3550484097, - 2856460953, - 1395458313, - 1803971086, - 1306614441, - 1980448472, - 3963987969, - 431033512, - 1712725832, - 523323810, - 3149195103, - 2234101458, - 285844475, - 1854666218, - 2924383469, - 882592280, - 882424728, - 3090746060, - 1368363372, - 3585771662, - 2906203418, - 2898846915, - 1684108428, - 2788520992, - 232253202, - 691422113, - 3056692920, - 227821027, - 950696784, - 1743114385, - 875328322, - 1982288821, - 1411667961, - 1990316343, - 3564888913, - 3871955814, - 4268777227, - 2700429276, - 4203316686, - 1272037964, - 518057085, - 2031490714, - 2279300770, - 335791012, - 2026221528, - 2101731004, - 962463566, - 685097884, - 1481520111, - 4121370390, - 1656262455, - 4186103443, - 3239437992, - 2320585615, - 811619470, - 1493124550, - 1360628950, - 1280145257, - 223011966, - 3206625337, - 434797967, - 2524593277, - 2153022053, - 1420127981, - 3733902081, - 1170406960, - 4169661862, - 2841558370, - 4101291578, - 2780595226, - 3047257025, - 581356298, - 2893659285, + 737108555, + 573120264, + 87094948, + 3005608675, + 2324184216, + 319752, + 2992299204, + 1346659142, + 2924955227, + 62838652, + 2170406339, + 2505515853, + 3735550869, + 3806209418, + 3398063706, + 4084618633, + 1378498890, + 3623321554, + 1059847789, + 656736229, + 1833632106, + 2992399026, + 3804747323, + 3613930740, + 364610273, + 974428937, + 1309336020, + 1575179400, + 589362844, + 2939539790, + 839258206, + 66853753, + 1800855227, + 989131152, + 1213040852, + 991279746, + 1644643515, + 4139169515, + 3747969839, + 2280084634, + 3433754596, + 3069250504, + 2150388570, + 504933757, + 1756199986, + 1163653499, + 1561342153, + 957420314, + 1499889692, + 1738785578, + 1142339007, + 98655099, + 1222420364, + 3251658993, + 1828673135, + 2669757144, + 1663890459, + 4213198321, + 1901515874, + 2006237347, + 3566990354, + 432866862, + 1264698268, + 3101388351, + 2703842874, + 2049244849, + 3628984102, + 1832165856, + 4205264573, + 4014240846, + 969864724, + 703342057, + 2882946839, + 2360807044, + 2781536917, + 3050041806, + 685806501, + 1311138766, + 3060249472, + 1002364005, + 1773186238, + 850997478, + 3999181081, + 3970312594, + 1035395332, + 4109867787, + 3639678762, + 4268164700, + 3408604689, + 3354725212, + 1327178085, + 3339196965, + 3402432735, + 3411255555, + 527910672, + 3283055942, + 3194268924, + 1184094770, + 3791630210, + 3499230446, + 2572662905, + 2946226106, + 2416566649, + 440429588, + 3966221517, + 4121517494, + 4232402970, + 634559400, + 175875277, + 3055100599, + 1446238388, + 2098346512, + 602461448, + 1444886686, + 435403534, + 1988702899, + 1905524156, + 2737701128, + 2042619919, + 2832605421, + 810205602, + 2822943762, + 4273478799, + 2336636954, + 1116549017, + 876235489, + 4220014603, + 4176943364, + 976927936, + 584017238, + 3546447076, + 4242171725, + 2638608623, + 1952394720, + 2917757434, + 3707210969, + 2461337397, + 233635473, + 1707193053, + 2607604092, + 4268905758, + 3870066962, + 3191750755, + 2860161737, + 346202715, + 1644345551, + 2250124663, + 944391560, + 3255524836, + 892954434, + 1808714457, + 1390002352, + 587678782, + 2218828887, + 3374471366, + 1141500883, + 1838733130, + 2966644186, + 880245682, + 2087597865, + 293704405, + 978320239, + 3978037542, + 2180809270, + 248819961, + 1637697582, + 2355942918, + 1795956975, + 3772518855, + 3881755583, + 4269727345, + 2875576313, + 3127537672, + 4034453517, + 2203270681, + 34570491, + 2396105419, + 571104187, + 475073460, + 4159175137, + 1027140163, + 373649584, + 1416965554, + 504987109, + 592068387, + 2921450725, + 3935163186, + 1454349431, + 656342459, + 754900459, + 1182580336, + 1128670844, + 89676664, + 2402432219, + 2014451563, + 3489468472, + 4013501579, + 1653974771, + 2887167301, + 3893150600, + 1533169117, + 1164736693, + 1780892176, + 4014216449, + 1358147845, + 2337429967, + 1741844172, + 4102090138, + 2748631209, + 493502043, + 1850086250, + 1960883872, + 3308646141, + 38467784, + 3028939423, + 917717418, + 2742104058, + 1723815379, + 2119841643, + 3876374702, + 1705086583, + 2881525174, + 1570309641, + 4020838264, + 4042003293, + 3183612606, + 1061776862, + 464840164, + 2286632499, + 1917636894, + 24591981, + 1176332355, + 477226058, + 2125512623, + 2725072343, + 4100958044, + 724903740, + 2328117464, + 763126065, + 2374124328, + 2956326137, + 1671131080, + 3720376937, + 2502605792, + 4144105457, + 657115522, + 799433225, + 4278237010, + 769817022, + 3428656894, + 3593147896, + 1412960961, + 2453315677, + 3669869228, + 1496696915, + 2426769372, + 1026625350, + 3651924346, + 2279303876, + 2686506580, + 1087789622, + 601636611, + 3613706592, + 1825740680, + 2450074821, + 421625699, + 1992538677, + 895723231, + 1259255836, + 3722659869, + 4013418804, + 1562558432, + 1632139212, + 2991629804, + 2273247903, + 599051877, + 1669649063, + 568846736, + 1494068278, + 2739996334, + 2779113475, + 779098991, + 3619089275, + 3385785805, + 1519618923, + 953641830, + 1721296176, + 4044107017, + 3004078576, + 3009551622, + 2517659688, + 46896626, + 2278016032, + 647406949, + 3288514804, + 431565978, + 2590570630, + 1584893212, + 2225661949, + 260418195, + 3321929609, + 119911565, + 1690776057, + 4150474181, + 3566955015, + 549546116, + 3176774939, + 4174765387, + 834562627, + 15793015, + 1553903215, + 3210900532, + 1589989195, + 3760850106, + 1094719853, + 3518056814, + 178402176, + 826054892, + 3928025325, + 2810483442, + 2685635719, + 2372946055, + 1313388345, + 3488829378, + 2825312486, + 2681967209, + 2805496687, + 4084983479, + 2657934675, + 2021592261, + 2915120964, + 2962530999, + 1722337754, + 1280032320, + 2548289207, + 171512011, + 415022427, + 1189000213, + 932422093, + 3216733954, + 341391488, + 3047858398, + 1651917920, + 2277957377, + 490984170, + 4236650703, + 304171047, + 65598342, + 3558705824, + 1971557057, + 171398218, + 2394745305, + 310403219, + 2891826990, + 1724246437, + 2016263887, + 3028194785, + 1651520363, + 3098360454, + 3908082777, + 1842511466, + 2816161498, + 3849091878, + 2742832506, + 790092579, + 1390496180, + 816088911, + 3429482310, + 461830464, + 3199835821, + 3686386171, + 3979458464, + 1170862475, + 1979591335, + 3166629007, + 2643421390, + 893272993, + 1872015762, + 217186195, + 2396243305, + 2114500200, + 2929432711, + 3286323068, + 172230453, + 3745091820, + 2433348878, + 2437657984, + 280270882, + 28997424, + 1196313517, + 275582832, + 3333984474, + 4164495324, + 1044000827, + 333220470, + 1650095998, + 2490214838, + 1724270264, + 2827910589, + 504243733, + 1584872504, + 3188418969, + 1245166858, + 3263494381, + 3798399298, + 1988345107, + 2727316038, + 1196129687, + 431024789, + 1545774310, + 4139702133, + 374409287, + 3588824958, + 1492345984, + 932072650, + 3424993429, + 2422754404, + 998601603, + 2521224744, + 1072875366, + 1159425352, + 737029028, + 3650336119, + 1303107111, + 2039781305, + 2856489005, + 3623638022, + 3845037417, + 2946816859, + 3927059867, + 1845338879, + 1231510456, + 2933439197, + 683918509, + 872778238, + 2604776394, + 1981900672, + 3635907931, + 1550896897, + 3629184454, + 1206118482, + 3648149660, + 727434637, + 1602639706, + 1780556354, + 3850244601, + 1323335145, + 1108496724, + 1157470066, + 2772928286, + 3452416360, + 718494283, + 3881102540, + 215401713, + 3798263293, + 1615013299, + 4035375869, + 900559177, + 1568113629, + 749008363, + 2897102696, + 1614058690, + 1758876743, + 3653676479, + 163972143, + 882695148, + 59167410, + 1834379429, + 2322546254, + 2980393749, + 1490232888, + 4041737518, + 3568989300, + 699988777, + 971275523, + 1742513168, + 1682423722, + 3878685617, + 4216770148, + 226208976, + 3348458984, + 2196695581, + 521500075, + 4280698809, + 1357611692, + 3289541944, + 3393910508, + 2287883867, + 4031431671, + 2828012837, + 3416437082, + 121667469, + 920735008, + 2196578457, + 2948310595, + 248379986, + 3891608780, + 2234400859, + 1770949513, + 252911083, + 152768029, + 992191102, + 4250800067, + 1104665699, + 1620460093, + 910886352, + 988589625, + 2109982648, + 2954961142, + 2885572231, + 3172493990, + 3560837180, + 2608909238, + 716888467, + 2465398031, + 1517335541, + 3736024875, + 2771259734, + 2061806930, + 1417775846, + 2999572746, + 29999118, + 4177180703, + 2514305831, + 1440587054, + 3165606523, + 2277946720, + 3147468940, + 2251725137, + 2992871787, + 2476340220, + 1126230228, + 39175466, + 3398671701, + 1736606747, + 228199468, + 2156353423, + 26073222, + 3799395537, + 2325692358, + 3791842130, + 902520759, + 2617319521, + 4149280006, + 1592411495, + 1938317575, + 240139625, + 768338243, + 2082924328, + 530812492, + 3998049487, + 2081467963, + 2314488062, + 2586281274, + 678618139, + 2528282219, + 451421596, + 1097511818, + 1917811814, + 1394821044, + 3613783700, + 4020287361, + 2271581691, + 2092137038, + 2084276573, + 2554427621, + 1800484896, + 3233181946, + 3031706270, + 2720746361, + 2758588582, + 2813951384, + 3907403646, + 1207599723, + 2169948018, + 2378158561, + 4117306294, + 2977420039, + 2226429449, + 2243095779, + 890007526, + 3283153635, + 2811967341, + 872014202, + 3556990983, + 2961403522, + 2229661463, + 2904431918, + 3855472042, + 1371651191, + 2933911262, + 2739638053, + 2908258621, + 1882535341, + 2431747649, + 3494440172, + 3560078137, + 2160705095, + 44081405, + 3748889044, + 4092449056, + 1623244961, + 2338635871, + 2572708265, + 2954676594, + 444146959, + 3344052658, + 3517469095, + 1471233634, + 650354978, + 3633282465, + 4125039868, + 2705400496, + 1313620777, + 3082416343, + 3978062866, + 279638962, + 854836177, + 4037337117, + 3090453354, + 4193697247, + 4062362367, + 1846808419, + 2578093188, + 4049164079, + 2846163337, + 1582371295, + 2264731859, + 366032561, + 590114328, + 3999681430, + 2376085027, + 820850429, + 1018267803, + 369940709, + 3531233380, + 4268864832, + 3497986401, + 2341486357, + 4227911848, + 2181113339, + 1355479103, + 2749160760, + 3246985864, + 3341529046, + 2073181275, + 699313972, + 1199359859, + 1884703612, + 1550999065, + 1482176127, + 1300010606, + 999931853, + 2273329829, + 2676099800, + 3108976254, + 1024613547, + 1270967140, + 2078640189, + 2774447783, + 3819528387, + 2718802776, + 494397489, + 2530165884, + 1204456300, + 123347485, + 1750412103, + 2496052421, + 4139143040, + 2882254844, + 85720878, + 2519613703, + 4102714416, + 1945156495, + 586502570, + 2827709311, + 2671446563, + 3080614608, + 584388285, + 1498919414, + 2296929430, + 3086107814, + 2976189249, + 735158768, + 4238519970, + 4215975174, + 254924387, + 3680593236, + 1793969570, + 210479508, + 265149553, + 453474953, + 3916600507, + 2504430248, + 115272834, + 603683663, + 1058652314, + 3016477165, + 3630690632, + 3940171529, + 235273778, + 2312000774, + 1769144387, + 1983369553, + 1210402000, + 774429487, + 2735389413, + 3451516891, + 2697681229, + 2873966006, + 107771804, + 340153939, + 3902757442, + 3595538616, + 1710449016, + 789110577, + 2226992933, + 3853511017, + 2412690409, + 3867806169, + 2133599213, + 118636114, + 1464073972, + 1533404840, + 829450643, + 1864196139, + 2173100386, + 2241884425, + 2351157300, + 947820371, + 3437489752, + 3975263458, + 1471809790, + 1798150877, + 1305861627, + 2932005037, + 3352365474, + 4068857820, + 3126210300, + 1856052833, + 390543189, + 207370691, + 2605083237, + 148692270, + 3652608008, + 2309777453, + 1201795645, + 331100896, + 999928387, + 1977239552, + 1611841428, + 725679874, + 2725432334, + 1962919893, + 3833271859, + 1197493858, + 3887581865, + 2346763934, + 2707146224, + 2277292571, + 358692342, + 2638816152, + 1205487530, + 4238210792, + 3610245511, + 4128009815, + 2554570464, + 1067956231, + 3837039847, + 1107712299, + 2083151043, + 3841744038, + 4169811646, + 1076138229, + 2352889024, + 3282930991, + 2323101572, + 443842410, + 2540039265, + 2422063057, + 1730525440, + 2762219367, + 3148841031, + 3874209690, + 196601470, + 4074234366, + 4062274287, + 1880180537, + 3875358440, + 4013145794, + 547311877, + 2450684744, + 2461043617, + 4171289868, + 1640139002, + 1282371576, + 17590777, + 1087296487, + 469601967, + 3623122171, + 747793919, + 3896204021, + 3999952199, + 4190926154, + 2519459746, + 2168164364, + 557626499, + 880135521, + 3187688348, + 3813281233, + 574556772, + 3153433975, + 2430581239, + 2807013463, + 152835053, + 2135828569, + 502818227, + 1130118406, + 4202838184, + 1789641155, + 1467085090, + 396223212, + 597493833, + 1736613074, + 1197732669, + 836437235, + 3465854602, + 3700168849, + 91762668, + 2391202199, + 295023772, + 2581861168, + 449024863, + 3001822008, + 2466418859, + 2872346581, + 300481756, + 572637216, + 1484271727, + 726078538, + 4039960021, + 666631435, + 1023898425, + 1853351689, + 3948710781, + 439645173, + 979350290, + 2222952048, + 2589438790, + 1937329424, + 1501831104, + 2316802096, + 372631871, + 702808934, + 3578596410, + 2126623697, + 2458752873, + 591974811, + 2339297533, + 1288430980, + 3134899151, + 1829570753, + 1748985415, + 1532824239, + 1262166008, + 1620842274, + 3834158663, + 3207937746, + 2620793416, + 4217291911, + 3277388802, + 425428707, + 2751160861, + 56937926, + 2669958716, + 184488539, + 29417705, + 2042580058, + 565192017, + 4291650546, + 3961586745, + 1918052406, + 2110155085, + 4266271446, + 1220892816, + 2242469526, + 3290204496, + 724667456, + 3770454200, + 2387813112, + 480452013, + 2567603148, + 2949949748, + 2282276873, + 1267200800, + 953654241, + 4034685286, + 1216035486, + 1909479248, + 1058998695, + 1366599302, + 1253836245, + 1360163199, + 2167363205, + 3193726728, + 1179755699, + 3433333324, + 773380278, + 3567753543, + 1576466747, + 3739894906, + 2045959137, + 3999190680, + 3100414662, + 2926965568, + 3258699563, + 383895028, + 3934726771, + 2488205539, + 1498263962, + 1161227595, + 3127776129, + 2220619616, + 406109855, + 2833378305, + 2052513733, + 1280065442, + 2747083532, + 1440776684, + 363124108, + 2717590350, + 2092049959, + 4211537714, + 2081321078, + 3920316659, + 2554903346, + 4234188053, + 1395865806, + 3656836449, + 935515907, + 3869038122, + 4070759855, + 3991092056, + 2976518209, + 2127251981, + 1715179253, + 3202801445, + 3025431524, + 928909732, + 1546620411, + 3318207862, + 1054357877, + 1212288326, + 3277649459, + 3553252523, + 3936269754, + 3001222024, + 3103022724, + 4170067211, + 1626772333, + 3277583907, + 1160016186, + 4044133363, + 4131372893, + 66760346, + 3630089661, + 1635899318, + 502492159, + 1312728643, + 2800543556, + 4218566159, + 3255613795, + 1595941231, + 3058111342, + 4042640625, + 3127660496, + 1422193316, + 600918153, + 2420093541, + 4236433913, + 747974793, + 2886017733, + 3114878973, + 167932007, + 1327836626, + 3104741261, + 2684527988, + 1613037884, + 1092139115, + 2037389673, + 3866448137, + 3288595806, + 4179522897, + 171851130, + 3390747365, + 1957846152, + 23954653, + 1558940179, + 3034700802, + 3415480675, + 31874107, + 1522583033, + 2856359933, + 3377785544, + 1500505274, + 2357411113, + 3800478840, + 4101319025, + 1803104170, + 3217189826, + 1959035126, + 1183090892, + 3885183796, + 1832623989, + 1205759151, + 2056117867, + 1299363529, + 972369997, + 2099975224, + 4217066105, + 4257347982, + 418611127, + 1655512064, + 2417558741, + 2909371361, + 2656106392, + 2715763472, + 2079161065, + 911449416, + 1919205968, + 1318085028, + 2274121787, + 3022121722, + 1086658118, + 2320667573, + 838833723, + 1260983194, + 3660810197, + 3113371451, + 1356064106, + 3093057876, + 4073346282, + 1315756290, + 686757694, + 3121357719, + 1236500657, + 3765722367, + 2652649807, + 3709236450, + 3540803671, + 3817916623, + 3883188154, + 3953988674, + 543859362, + 781311176, + 2452456546, + 2916550919, + 2684750393, + 892435031, + 2949028512, + 717754350, + 1888475134, + 1299905926, + 3511116554, + 126850209, + 1270745581, + 2783791198, + 986368957, + 608139700, + 91067185, + 1164090844, + 457021028, + 3861335889, + 822290784, + 1786969511, + 4114107570, + 1303132490, + 518716447, + 3816897191, + 1577553935, + 2339924426, + 2891084386, + 4111619994, + 3322948726, + 1539415771, + 1548519284, + 3926129658, + 696176241, + 925185443, + 395063024, + 3381587861, + 3306889501, + 899581690, + 449788396, + 1019594884, + 1913865568, + 203764067, + 1755407593, + 61297309, + 675631419, + 527690614, + 1096593451, + 2112239024, + 787715592, + 571860377, + 2568655287, + 1903106055, + 2426624361, + 1489747504, + 2080869805, + 1003708983, + 3656976288, + 3137952481, + 3129839572, + 2424355815, + 1454318868, + 3784378849, + 2943475396, + 2000379869, + 1143833357, + 774235817, + 4066300079, + 98194188, + 1878191325, + 2867373079, + 522170061, + 2685739620, + 4256716494, + 3325187436, + 2235760871, + 1640310328, + 3318246182, + 3423908379, + 951516887, + 2362245930, + 3314963258, + 4023177272, + 381459850, + 3542113495, + 569408244, + 1295185758, + 3607258633, + 1292661995, + 247757262, + 987131377, + 2552584433, + 2636622563, + 1860546126, + 2494312104, + 2782351106, + 2896368627, + 838382265, + 2007822996, + 238508510, + 2524339510, + 2363414943, + 2914138158, + 3628020370, + 956855911, + 2261081178, + 2228097184, + 4177271361, + 4158766807, + 3572796998, + 1430343621, + 3441921836, + 3454495340, + 1182316640, + 2269278400, + 1077135942, + 2953651520, + 526971265, + 2859895554, + 3358886756, + 4174772506, + 1567842048, + 251118047, + 670301875, + 3825963269, + 3042555661, + 1426858086, + 1471961734, + 217889854, + 3702626510, + 2455552038, + 3555365170, + 2593708739, + 786674739, + 402322731, + 1874981466, + 3407237793, + 4114519593, + 351189285, + 3161005695, + 150308256, + 1879067278, + 134237737, + 2879585549, + 762142446, + 735835338, + 1401753161, + 398664319, + 14875738, + 4243747121, + 936349225, + 2941560714, + 1819832274, + 3360941134, + 2101168578, + 3516605805, + 3182955662, + 233125110, + 97945021, + 4099904791, + 2261675238, + 547900065, + 2128456845, + 2732575407, + 87231818, + 3385975885, + 3482964768, + 3121124737, + 1597590281, + 2958060624, + 2312160881, + 1250748680, + 3020167489, + 3371053523, + 3126787642, + 4053203302, + 2924348066, + 979929803, + 2756455485, + 148006385, + 3383905496, + 600443214, + 2403008879, + 2978733434, + 928489238, + 1780947111, + 210481815, + 323488152, + 1615004970, + 1406587727, + 3950773954, + 394274021, + 3894535387, + 919963745, + 3631959336, + 3527523352, + 1657473583, + 386182404, + 2937059348, + 1321489067, + 3741745380, + 3920311001, + 3696070674, + 2261738927, + 1952926598, + 225802352, + 1195348793, + 2965761572, + 2056518565, + 396407707, + 956877089, + 1875726068, + 3097739063, + 4101905117, + 2699871314, + 1413749722, + 1109515447, + 13463033, + 3880381157, + 2916419220, + 328116099, + 226106256, + 2081329974, + 1535096967, + 2564774037, + 261153761, + 3399688211, + 3761551851, + 1004728389, + 2532161167, + 3255250111, + 2428018476, + 3469426426, + 3004436419, + 1739930715, + 3599610188, + 1267828678, + 4098765782, + 2386215322, + 1505123955, + 2142089942, + 2321182885, + 2881932232, + 2615077048, + 1415862298, + 1168026560, + 3645446401, + 3372126008, + 938799975, + 1710103591, + 255086481, + 3674651363, + 124794896, + 3199066464, + 3366934050, + 2992416958, + 3415524697, + 2126893295, + 704178165, + 2185287388, + 682500980, + 3868817740, + 3396196302, + 3965823334, + 3045211807, + 1440582176, + 4124975671, + 3663042810, + 958722436, + 3582803021, + 698410230, + 1326584074, + 883957731, + 4041682128, + 1483491260, + 2209582341, + 482929097, + 3263992214, + 1281004468, + 2617265431, + 2142447986, + 1819676214, + 1008729704, + 4034823002, + 3809141622, + 2709813499, + 67866755, + 1557696009, + 3761367685, + 3374392494, + 346551963, + 1703846372, + 3218328769, + 3001103508, + 3412946123, + 2399821969, + 2694597508, + 3997488086, + 1218196649, + 3414355725, + 2436806638, + 2017963302, + 725408467, + 1615692762, + 1087814070, + 2697424268, + 1458392307, + 24065418, + 1070411203, + 447202759, + 1571053280, + 112625852, + 118146825, + 2474166728, + 2842438824, + 3534055240, + 67689936, + 1515927843, + 2734103185, + 1751644317, + 3909275718, + 3384879981, + 3666017685, + 1692475383, + 4217449517, + 3963510183, + 2609960485, + 1773019814, + 1740638252, + 3079688140, + 825059426, + 2525582297, + 809173441, + 2448899296, + 2217736664, + 2277520857, + 1914225008, + 829145121, + 2188695792, + 16465742, + 3434610973, + 3259469775, + 1023650339, + 2687217475, + 761380669, + 2737740196, + 1279609606, + 917421633, + 4101602486, + 3805311923, + 88690545, + 3188616082, + 1894076385, + 4293155841, + 761188286, + 1347314807, + 2426965009, + 1196224374, + 2756209099, + 3055959255, + 689707129, + 499604794, + 2899737322, + 1270153923, + 3031332479, + 3602089178, + 3363204485, + 2438482165, + 3926141486, + 673670644, + 1197517567, + 2178506707, + 1165071042, + 3459297809, + 2491136507, + 2100111521, + 2499581023, + 3129850739, + 1561898514, + 4222189406, + 2858594918, + 2452644410, + 564650798, + 4241715299, + 3050183909, + 3429249068, + 1744088671, + 3505491853, + 1210719691, + 899473278, + 220101611, + 2927579964, + 2257482725, + 3626306077, + 2467319847, + 2553372816, + 2478778046, + 1823007905, + 365664344, + 3933134777, + 801172828, + 1868036978, + 378019368, + 1035773650, + 3525003654, + 1873010695, + 2342038593, + 3993115866, + 3075704661, + 3990883821, + 2838094908, + 2098740796, + 305999190, + 831588069, + 1355628761, + 4022023876, + 4287347946, + 1442429310, + 2559972280, + 3460099719, + 3553454909, + 885235211, + 3728279456, + 1983042414, + 1429545107, + 913342074, + 2367269946, + 1544672427, + 2388114621, + 3250341136, + 818693794, + 2072485992, + 4142497203, + 1958958705, + 1612361647, + 2706445757, + 978172029, + 2084253783, + 958314814, + 2592481395, + 2043038090, + 2170464724, + 4221314193, + 887093185, + 3453655040, + 1854155177, + 63867732, + 116312482, + 135403788, + 1091665654, + 3512840947, + 323239949, + 2474737557, + 3832061314, + 1311071688, + 1638570741, + 2974975909, + 1478237281, + 2326274497, + 914336119, + 1169484600, + 4012288036, + 2942417708, + 360693824, + 4286096434, + 1425575220, + 1127870526, + 1619231897, + 2603112464, + 4222012880, + 833564205, + 330381030, + 1779793273, + 2025688072, + 2561250786, + 3393389446, + 1048169422, + 2471305982, + 1174749267, + 446098644, + 2474898015, + 2883114103, + 3833127265, + 2492943240, + 1613051065, + 811168351, + 2431387592, + 3553946496, + 1570264757, + 3123044128, + 3901492273, + 3235168200, + 3470112962, + 1881735717, + 1685107892, + 3987639951, + 3586110141, + 963626636, + 1969775836, + 2759373600, + 646389840, + 1541048645, + 179753691, + 1559193946, + 2631429949, + 2264097280, + 526413497, + 3415678458, + 1512725238, + 787218368, + 75508886, + 346272759, + 2089974768, + 2322990097, + 3668388454, + 270007575, + 1454966129, + 366506163, + 4011835854, + 4282907282, + 962899273, + 7954019, + 1885674844, + 4122477537, + 478979543, + 1470752809, + 5233523, + 621787210, + 3389803657, + 651426757, + 1422549826, + 960418344, + 1888196471, + 3380956526, + 3068560, + 4113639706, + 560028850, + 2491692895, + 3993049086, + 1300605126, + 3918766647, + 2841666778, + 3817375325, + 1686792767, + 3106757528, + 1982375808, + 3615367889, + 827914225, + 476813472, + 3891456415, + 3621439826, + 1963144840, + 1794052909, + 3430537419, + 2467825792, + 2395936437, + 2598867983, + 877982422, + 882309284, + 3944952111, + 2433750316, + 2918248889, + 2553151804, + 213845383, + 3583080445, + 2818841807, + 2117778602, + 281749195, + 1684124279, + 2678034413, + 452324545, + 152633369, + 2970659613, + 3596194213, + 724922175, + 1015624567, + 1851498328, + 267948342, + 918220480, + 2682009085, + 2313014320, + 4120956200, + 2957427807, + 3284133824, + 1597303683, + 1838259385, + 4039263714, + 3952562277, + 1113742182, + 1035117187, + 1538807521, + 3415876774, + 4185266542, + 2260658259, + 3320051947, + 1491398650, + 2368326610, + 3518122566, + 557159581, + 188220615, + 728450260, + 2669937336, + 3944084884, + 146185315, + 3753049735, + 654749065, + 2548701113, + 1492790116, + 885159483, + 2032180759, + 185541046, + 1408338067, + 4177556950, + 2799355663, + 1962137406, + 4060195736, + 3886027932, + 3062049265, + 3640202694, + 2215380590, + 2851749425, + 1604187793, + 3333853774, + 3308495579, + 3884856006, + 1330134388, + 3860627664, + 1487207059, + 972927298, + 3338038673, + 1450672124, + 3540760205, + 2266667172, + 3100933967, + 1873295127, + 326309391, + 924887023, + 862801932, + 3215289951, + 4164073943, + 3139818041, + 1910022355, + 1288279782, + 2990058987, + 3800085915, + 3739259590, + 1659970116, + 2420358414, + 178844699, + 824545649, + 3630376836, + 2877871703, + 2543016366, + 3154096157, + 2495265967, + 4180559142, + 2935731242, + 2765594458, + 1610187728, + 3518700973, + 4142784388, + 3054890257, + 112345695, + 1324268237, + 2409064596, + 32964419, + 1335035797, + 4270370529, + 1861362004, + 1723022158, + 1009151966, + 2162047253, + 1267993927, + 278717415, + 1324613808, + 3896145118, + 934799564, + 1513616365, + 1207592856, + 1971754625, + 397023271, + 3722562558, + 3449169197, + 2410481985, + 3280773496, + 615291257, + 206998944, + 4265620922, + 891352091, + 4046806648, + 1116027336, + 3524593173, + 4187321513, + 1961121719, + 4073733653, + 1090056272, + 2485658844, + 4204201451, + 3276672977, + 3761441900, + 508898036, + 1506802461, + 1781099483, + 653494998, + 850676728, + 1805005708, + 3141555714, + 676908616, + 1803517561, + 2611079690, + 1564681537, + 2825767241, + 3682457009, + 73543606, + 3773697376, + 1874869524, + 4288118598, + 2264388150, + 716261825, + 4213906204, + 2330637356, + 2636008765, + 327609318, + 3611718506, + 3237500905, + 2461606840, + 1218773813, + 3381243572, + 3683127130, + 180739807, + 3540860515, + 4210302675, + 4255660657, + 1101708307, + 2275520481, + 2956221685, + 705091830, + 128285068, + 348025209, + 3015879921, + 4294433759, + 2283013793, + 2872091588, + 1995514850, + 3898335823, + 369231982, + 3134065362, + 3785352404, + 3449195584, + 2349342137, + 946546100, + 1813497103, + 171256456, + 3632156796, + 612524446, + 269302131, + 1879637754, + 3974863602, + 1839164449, + 1519188277, + 749291251, + 3859073721, + 1920085984, + 348344985, + 832069359, + 2612864018, + 1066316340, + 2939432977, + 4062582173, + 1487983536, + 117681242, + 2292585590, + 2035812137, + 1057146523, + 2115797096, + 583239024, + 2308649916, + 255596793, + 843085891, + 105840563, + 2542246503, + 2300356633, + 1637936515, + 494605290, + 862961480, + 778282504, + 28971816, + 2211284221, + 273242514, + 3381041357, + 510867058, + 873890068, + 1888519872, + 1168926461, + 2785290802, + 1178329493, + 475402122, + 3152982843, + 3322435113, + 1126330708, + 1966599169, + 1984447471, + 733013236, + 3917577382, + 2262567675, + 3843711100, + 2191985493, + 3822513492, + 1099306418, + 1803887515, + 1454209275, + 609003386, + 3839737247, + 4019677129, + 3252288451, + 776485021, + 1531519277, + 1455211795, + 952129317, + 2759034567, + 364205294, + 1770711679, + 951845029, + 1215290232, + 4084089547, + 477940998, + 2264074531, + 2015479635, + 1289454692, + 2969428007, + 2895626359, + 3569496660, + 3568383256, + 3342545842, + 2708719218, + 1492005920, + 3420172846, + 2826721186, + 2628372394, + 1684037284, + 1139606406, + 3929018219, + 3098455869, + 186296310, + 1811168198, + 2284941034, + 3742025101, + 2429699982, + 1801512024, + 1165053109, + 2641259095, + 3658146308, + 1645470390, + 1217120066, + 1920510542, + 3516800845, + 3305472341, + 2054592093, + 4063578303, + 593666528, + 1076195390, + 2860686210, + 1087373205, + 1281209564, + 1433086376, + 58552465, + 4012745557, + 474610731, + 709960686, + 3960616774, + 2635967446, + 3050780876, + 3121903592, + 685939867, + 2781278400, + 3520536900, + 523160453, + 3543296515, + 1588391686, + 3903034558, + 824621603, + 124080421, + 930236708, + 3233189336, + 2197305297, + 699789278, + 3696830090, + 3011553748, + 2829726279, + 3622839999, + 2127420509, + 1200826805, + 100174713, + 3419024509, + 2816514300, + 1529054625, + 1829765005, + 3421549360, + 3237053584, + 2766856978, + 3391000331, + 900303702, + 739008691, + 124496113, + 1723628204, + 1633988229, + 602847456, + 2350559856, + 1561895308, + 98628902, + 869557330, + 3174432066, + 2685076404, + 2908904092, + 1161633365, + 190273286, + 3540362108, + 2126448642, + 2297854466, + 1342031848, + 2305317990, + 3685516727, + 2322878621, + 355614720, + 1785502749, + 3636545796, + 1548295162, + 1645576759, + 782791005, + 4179603884, + 4163928905, + 2661881345, + 1234070267, + 880831527, + 2356023630, + 2377661464, + 2125832946, + 2377521966, + 3591637375, + 928622768, + 2253675115, + 3153308341, + 2383862608, + 794868797, + 966417200, + 1813968139, + 2982461070, + 2409845430, + 2387490724, + 1122654938, + 3175441988, + 2000993508, + 725670473, + 1192129836, + 1132129933, + 1745208162, + 2391341273, + 3041728991, + 2159426694, + 1302004153, + 1617459281, + 1911768086, + 476777418, + 3180606725, + 1248616446, + 3928566627, + 1850108933, + 3502869487, + 2739220127, + 2952410123, + 4210146885, + 2238360895, + 1038610899, + 1605495391, + 4163727687, + 233525252, + 1687242525, + 3676168920, + 740965553, + 3346780986, + 3363598650, + 1069649446, + 3663459004, + 2771448071, + 1018963665, + 831487982, + 4144016786, + 3264560972, + 751076880, + 639736770, + 861511670, + 1059871644, + 175859428, + 811543155, + 3661361687, + 194965554, + 3582278913, + 632916614, + 3739461297, + 864289661, + 3820973170, + 1913974820, + 1657081413, + 657192907, + 1101022978, + 2874327429, + 1168278243, + 3093754585, + 4205829824, + 1749005243, + 1052060186, + 743611683, + 3533429605, + 3867604057, + 4203833199, + 323903790, + 1070185570, + 395653107, + 3703661508, + 2737722035, + 2635756263, + 169890463, + 194909808, + 2509036698, + 4002461363, + 581789973, + 2801365535, + 2184894219, + 1495813169, + 958922007, + 4188590790, + 3526773826, + 4244824089, + 3687154830, + 1726700197, + 3992371159, + 2086690385, + 1106859069, + 3103616282, + 3429869370, + 861527093, + 396196102, + 432620014, + 2829280408, + 2784614814, + 1343210837, + 2412999835, + 3104538707, + 2805969243, + 1481524250, + 1809948219, + 1304964300, + 981655007, + 3054769051, + 3099781082, + 3529798370, + 3794355980, + 1653832065, + 1800861757, + 3845574058, + 867500650, + 1733599534, + 3264188323, + 3837798837, + 212764980, + 3263781425, + 1843586324, + 2798258539, + 179736724, + 1333619822, + 3465220984, + 2098927894, + 773089947, + 2534516942, + 3976028878, + 4218099490, + 2102132114, + 349958189, + 1275818393, + 3643660228, + 2044148718, + 4033014384, + 1571915573, + 278661485, + 4202881949, + 1091713987, + 3043118481, + 1942531069, + 3983613657, + 1773331977, + 3847568359, + 2204551983, + 661684931, + 1789474454, + 218465261, + 4066014294, + 4043422423, + 466067049, + 4285235622, + 1362471664, + 1459910132, + 2048495158, + 2292895914, + 2287214437, + 2467719748, + 452202156, + 561332748, + 1506465621, + 2716724241, + 1625862767, + 2978760383, + 1749644317, + 1660623523, + 3390843993, + 2774383582, + 1943768754, + 2872116393, + 4291881277, + 56892379, + 2020945175, + 3541739239, + 804365917, + 141617883, + 3021369990, + 3736298833, + 2118840627, + 1246547881, + 3997734402, + 3479588, + 1671443376, + 2847570571, + 2438226161, + 2772857070, + 1966757198, + 337494051, + 1781021874, + 4045922966, + 2602228964, + 4199435024, + 348116848, + 2288411052, + 243501427, + 856776002, + 2043385511, + 2807031963, + 1099293548, + 1506043619, + 100599585, + 1753555771, + 530518529, + 206163883, + 3815848697, + 1874846525, + 2040312227, + 3957908857, + 2051469949, + 1046873080, + 3853268260, + 1120770605, + 608359293, + 3650155591, + 562008172, + 3379898956, + 2057937362, + 2829495357, + 1352423526, + 1424167296, + 487002856, + 3206903986, + 4037813223, + 2054021717, + 3918180231, + 1314532163, + 2332954872, + 2755650138, + 22869043, + 2221675580, + 529422910, + 2216813466, + 28460201, + 1186371818, + 419139445, + 3666901419, + 2293040468, + 1227484887, + 238501075, + 2556841376, + 1617308786, + 803025289, + 861238768, + 119514312, + 3229174038, + 1987111994, + 2865057527, + 1112900389, + 1407928914, + 1900474907, + 2768906667, + 3671178293, + 3970256630, + 3057462864, + 480340537, + 1515289975, + 1272730583, + 1804060020, + 1444028832, + 447627976, + 3993520629, + 3303255750, + 1533216531, + 3530272527, + 3547749472, + 4008018778, + 2909571866, + 753947854, + 544209932, + 2373393162, + 3710608854, + 2422318251, + 862834359, + 2977678911, + 1561615427, + 877293881, + 3376143920, + 431650045, + 643816339, + 4012200815, + 1243530155, + 2522196718, + 1308061623, + 2327649264, + 3364635855, + 987491498, + 2296524911, + 3998836593, + 3061738534, + 2301058033, + 2451877603, + 2318043274, + 3528951793, + 3624140584, + 77896342, + 2242427134, + 2592857591, + 1554274925, + 3689357834, + 474505684, + 3228566541, + 3637164110, + 242197990, + 337516052, + 422317823, + 2725263266, + 2476332546, + 2254156029, + 3281599156, + 2527297858, + 326609632, + 3597550592, + 3066376122, + 1629799745, + 3578675349, + 3368771250, + 2480119783, + 4096332533, + 2242369595, + 733301455, + 2336079316, + 401665690, + 46265480, + 4106097908, + 2010267248, + 3626587366, + 3530359543, + 322636085, + 852851913, + 4032337712, + 3773787592, + 1065333430, + 3308839737, + 2275765127, + 3599013942, + 580370230, + 769904780, + 1990798195, + 2195415552, + 2713394338, + 702265677, + 754248604, + 3753592087, + 3297910234, + 27447246, + 638607799, + 4153235869, + 1541837801, + 2444317208, + 3696997878, + 1960328011, + 3469063502, + 2741101620, + 2197375396, + 1675881722, + 990815728, + 1461055066, + 3412711799, + 1722005240, + 2413609834, + 2173530661, + 1683043560, + 3885063133, + 2809478292, + 207231844, + 2040851824, + 2913636733, + 2705415808, + 3377000646, + 3996186626, + 1807884787, + 1374228766, + 4191831542, + 2351813132, + 32879916, + 898623610, + 3536814974, + 2238130347, + 31776117, + 1714926049, + 4280395812, + 320992705, + 69054337, + 1328560419, + 3710506584, + 2326583570, + 2637876272, + 3013094845, + 1875933783, + 3109302544, + 4250049923, + 2071860899, + 1604167499, + 2504576385, + 2885110562, + 314140352, + 2835907583, + 4021924226, + 881595270, + 2508450784, + 3042598478, + 3577228434, + 3221797408, + 316176396, + 1612879824, + 2047075088, + 2160797087, + 1776889770, + 3403420230, + 3485662087, + 1375535046, + 451062310, + 3443564006, + 3242854578, + 3361300078, + 1240080510, + 2832104199, + 649885434, + 852039189, + 753656711, + 1814387528, + 3500678562, + 4246459989, + 1019193418, + 4168436993, + 271266281, + 3571554978, + 1794098209, + 3630587115, + 1893193965, + 543676788, + 2922819559, + 3605835573, + 4259354778, + 697495082, + 1418050187, + 358767184, + 3641238679, + 2240236105, + 1193640778, + 2532558347, + 3162712868, + 1154541615, + 2951418274, + 4248463355, + 540429095, + 1271556009, + 2466175076, + 3967140254, + 746486819, + 1926230260, + 2313857224, + 1746480898, + 4049770909, + 276819784, + 1300410536, + 858057327, + 4159855163, + 2007958879, + 1458631148, + 3011696832, + 1237842543, + 269825505, + 2070571985, + 1056523606, + 4118799219, + 2272898603, + 1511813917, + 220139972, + 2402554502, + 2119219401, + 652198081, + 3132014042, + 867028711, + 1529211816, + 3427380038, + 1851848786, + 419142597, + 3171492001, + 3520737828, + 3875333506, + 3010227708, + 3268216355, + 1001804877, + 2186578415, + 1048133131, + 999941217, + 816741556, + 3534387029, + 3855162991, + 4196200640, + 3207822838, + 3833859924, + 135757799, + 3391657427, + 763170998, + 2287109732, + 3871343145, + 877732077, + 764395498, + 439471363, + 3796001969, + 2793528090, + 2392351968, + 2035365081, + 1223193458, + 4129707004, + 3036778746, + 343996306, + 4160658460, + 1654591170, + 4248047717, + 2252070241, + 2779121823, + 1437154049, + 2593929828, + 3336273084, + 3924543208, + 3310087848, + 3715870086, + 1649871748, + 273759327, + 319291090, + 4213854871, + 723208282, + 1736008660, + 3429416963, + 2166018137, + 1451128291, + 196521843, + 3064637941, + 1055394238, + 1316527820, + 2618766156, + 4023720415, + 4028106971, + 1813235990, + 4202998853, + 1142002389, + 2577236153, + 4071117011, + 902556538, + 437864022, + 3085657619, + 669842242, + 1795096590, + 2911344652, + 2170792476, + 2234546410, + 2690995736, + 2676358666, + 709149872, + 1012312835, + 3849027174, + 1466015079, + 3679555422, + 2136425377, + 3068280810, + 1604393662, + 1271239231, + 2165911186, + 3212576463, + 4119568026, + 4212440679, + 3509698526, + 433243957, + 1198689147, + 3803012400, + 3831485844, + 696582301, + 1273056179, + 4267629155, + 1017357350, + 1413334485, + 3076505094, + 3340334434, + 2884945761, + 2343498117, + 186633774, + 2376863096, + 548323533, + 1358195395, + 2975710649, + 2701493912, + 371993306, + 3071386336, + 2940701037, + 3459878128, + 3873529256, + 891054754, + 2767893439, + 3096804779, + 453580741, + 2803054992, + 1428970409, + 2310757180, + 1807480129, + 4142520797, + 2418197716, + 660457502, + 3379726431, + 1918748116, + 3380544702, + 805590231, + 417915578, + 2592658819, + 2991229946, + 4189616633, + 2580956133, + 2225901214, + 606702091, + 1686420087, + 3555297427, + 1503163443, + 1822325030, + 1325627115, + 467095795, + 1450795971, + 2379131607, + 4097768472, + 1897967181, + 2230833081, + 1655003464, + 1528706897, + 2311482568, + 3254169329, + 618321328, + 1129751074, + 2163467132, + 1131242463, + 3580752608, + 344260241, + 1562907308, + 2963068138, + 1505018570, + 2318526875, + 3552091470, + 1636935766, + 2382887452, + 4073024474, + 604206621, + 179337479, + 3321588186, + 384384739, + 2216525114, + 770124894, + 1445246463, + 3736321370, + 344573128, + 462212912, + 4052963730, + 3468035994, + 1085346298, + 2883315666, + 3361670350, + 1709506045, + 3514733, + 4133931686, + 50927446, + 475373380, + 2445475413, + 4162896517, + 234388294, + 3571053108, + 3171699073, + 3597597337, + 623509519, + 3253962225, + 1905698502, + 3262720480, + 1391758219, + 1196498245, + 516427565, + 3207779034, + 1214752298, + 4007349199, + 2647594719, + 1411353601, + 1208595544, + 2101685420, + 1149330914, + 963947673, + 4131359905, + 2690099782, + 3413659698, + 3204312655, + 2445693667, + 2260843769, + 3167366044, + 3653061182, + 3254204063, + 239819032, + 2699859801, + 4223884495, + 1146977715, + 991186866, + 2364443597, + 1316158377, + 2418505509, + 1820234124, + 3287888121, + 1018316261, + 1868021418, + 663786718, + 848938412, + 3244248903, + 1012591784, + 3103336135, + 3575307906, + 1659916419, + 1131078680, + 1987856150, + 1724042665, + 899856967, + 1915782030, + 1627955035, + 2992643426, + 2104408555, + 1524318430, + 984348728, + 159697786, + 34614695, + 3645806633, + 1627676718, + 3109228397, + 1370554227, + 2040434413, + 1553910854, + 1026540519, + 3867928541, + 431000378, + 152448102, + 691960446, + 4289891462, + 1244496583, + 1377202367, + 3895899763, + 2171093596, + 1561993048, + 2252110856, + 1445096275, + 754104914, + 3619386013, + 4050441408, + 1185348608, + 2627412558, + 1407362219, + 1298067971, + 1430755491, + 3844479958, + 3618517063, + 59736333, + 552100241, + 1115491247, + 3654244323, + 2173460454, + 87368716, + 15996722, + 2475381712, + 340016628, + 2175403774, + 4287126805, + 3678850362, + 1521285220, + 3352739985, + 431171765, + 1917217057, + 4121275138, + 2395517077, + 2907776744, + 2660073721, + 3305497794, + 432211328, + 1044661704, + 4197390325, + 2989717690, + 3219938192, + 1660173294, + 1875513745, + 3160138005, + 1114180134, + 1900942360, + 2570014175, + 24250501, + 1793405072, + 3135775169, + 3691054430, + 1788206026, + 3020995948, + 2777266403, + 205746690, + 3201465935, + 3063789329, + 3389233410, + 271265738, + 2424812718, + 98503342, + 78210333, + 292284601, + 484041675, + 1787870872, + 3590556634, + 909930248, + 3100227719, + 3184061262, + 2849510925, + 4245099917, + 4114171861, + 912316607, + 317027237, + 2009246520, + 2384701172, + 4122715055, + 3875346821, + 942300935, + 2733181483, + 3989143815, + 3592896214, + 3414269931, + 1576595481, + 1232805837, + 1325884912, + 3728880291, + 1830083462, + 2629986805, + 2504078240, + 3144670860, + 791765627, + 3973341693, + 727510159, + 4124368071, + 3483950657, + 1873797261, + 2232106957, + 3290136205, + 1671952930, + 2602619280, + 4279386246, + 3213227038, + 1133211672, + 1346699906, + 2482375288, + 3120611106, + 1382570898, + 1392782588, + 3601732170, + 3556657800, + 950094543, + 309672191, + 967236115, + 1920432393, + 4223184000, + 52721445, + 673995032, + 2699927011, + 709861207, + 2067789564, + 1883200727, + 1801477377, + 4141002563, + 3228364903, + 1983198379, + 857706319, + 2332825094, + 4099244351, + 2432098958, + 2290443233, + 2718865090, + 2363532293, + 353871650, + 796248650, + 3974305095, + 3668153133, + 3010220832, + 2959066316, + 3208768685, + 2548031639, + 3959972189, + 3891484042, + 1395441109, + 1327188241, + 2212970407, + 104935438, + 3907210646, + 3979836746, + 1561382645, + 3948002651, + 539174810, + 3413985121, + 1973453103, + 3266894086, + 3042040005, + 3032792813, + 2180991655, + 4030410499, + 3197502884, + 2835948042, + 516998917, + 1663960508, + 2267681469, + 3353519293, + 3822351979, + 3257728779, + 3696655887, + 3335054029, + 198379262, + 1696584968, + 3772977703, + 3065480572, + 2650933534, + 1785757303, + 3072962733, + 4076518900, + 148543891, + 1352493895, + 3427072075, + 188342077, + 3894678911, + 4088737680, + 3372313329, + 3898295191, + 3876976435, + 4127834013, + 420249470, + 482409181, + 3461257073, + 3269303429, + 2096686276, + 690023596, + 3839650956, + 3364817895, + 2369252384, + 2103265158, + 2910720374, + 3109060776, + 1467810067, + 3251904311, + 2354897940, + 2142098261, + 2204140324, + 1742026677, + 348325741, + 2641698273, + 877361566, + 3661595773, + 2821896112, + 2676446591, + 2486102839, + 3130861267, + 2322539433, + 4064710252, + 643945936, + 789074907, + 3220302039, + 2585312592, + 2766177987, + 2144322198, + 564971498, + 1673384970, + 2687000509, + 1521458051, + 1145728523, + 1322176350, + 1723255898, + 2145650481, + 629297689, + 384473232, + 218873646, + 2716275769, + 2903058056, + 140212078, + 2845868511, + 3150674635, + 3645483116, + 137186321, + 955484150, + 2630986764, + 2911774324, + 1245825692, + 2768219144, + 3021370348, + 457212529, + 2193682131, + 2336342678, + 2681588174, + 2026845025, + 1842827026, + 2441577248, + 4065238959, + 4059718007, + 1630822091, + 3375028981, + 1697093919, + 2055417118, + 4109915474, + 3942456752, + 2683612969, + 1774765738, + 3082184909, + 4100697805, + 3298111531, + 850022799, + 2526040893, + 3499006206, + 785798041, + 3015464164, + 2431506236, + 183695714, + 2978011997, + 2439793212, + 1056650917, + 1850519963, + 191087883, + 3382518127, + 119623718, + 1080030509, + 2228599771, + 2615684106, + 1654047798, + 965690995, + 3349645982, + 3575792079, + 2805409564, + 4276231386, + 3400998431, + 3994695720, + 1518430861, + 2194813284, + 3438408690, + 2398095293, + 668507220, + 1514840737, + 2281009195, + 659163477, + 2373796088, + 338144200, + 1268347172, + 1713458620, + 151107799, + 256716722, + 2859653718, + 3405980310, + 486546081, + 1584119621, + 2597514927, + 1468507228, + 2000577689, + 1843808090, + 1988265760, + 1026376315, + 3277345649, + 2678166457, + 696164656, + 3030809659, + 3302361730, + 2422323541, + 936466355, + 985571418, + 1928548593, + 827494664, + 1670498663, + 3418529320, + 1163435614, + 3716546792, + 1735276486, + 3909999896, + 3682056941, + 1420416169, + 1172222024, + 1189979017, + 2180173754, + 1337511313, + 1981310101, + 2745057810, + 2311566500, + 863237296, + 1156374126, + 3158497033, + 3209643569, + 4280019289, + 632432068, + 473685730, + 481475380, + 1791620970, + 3733485341, + 183631927, + 1152014053, + 210005715, + 1546343589, + 2672416322, + 842247535, + 3931493103, + 46628651, + 3955907624, + 3226700527, + 109756030, + 2697267591, + 71378383, + 3654160192, + 1323909946, + 3041013607, + 2102236267, + 3264224103, + 2497052641, + 1482332704, + 2755593445, + 1647613771, + 1079841192, + 3898622670, + 382553417, + 1070663557, + 3453507130, + 3222582748, + 2338624890, + 874037507, + 3363659634, + 4081838729, + 2035791326, + 914705770, + 2252036763, + 348342117, + 2273729525, + 1998981970, + 1550771202, + 1989761642, + 496643065, + 269017536, + 3396188794, + 2632336696, + 946109964, + 3418015393, + 3346831171, + 2438544107, + 591279942, + 4114795049, + 2370717683, + 4095897144, + 576788602, + 3634120391, + 2919133028, + 245561782, + 957213623, + 1292236947, + 2491904575, + 2815239204, + 3923024835, + 1695656764, + 4105132141, + 2586670760, + 485134347, + 1054405079, + 2674237414, + 1776216329, + 155456772, + 700137083, + 1084646940, + 1539957421, + 1554266478, + 2879174963, ]; static final String privateKeyFCM = String.fromCharCodes(List.generate( @@ -9186,459 +9238,459 @@ final class _Env { ).map((int i) => _envieddataprivateKeyFCM[i] ^ _enviedkeyprivateKeyFCM[i])); static const List _enviedkeywhatsapp = [ - 555254121, - 4188721280, - 745417648, - 2803577779, - 3104867147, - 2861690538, - 3675431350, - 1291120506, - 3668297321, - 3376793205, - 1117176395, - 3410872890, - 1087837847, - 3317635769, - 3385394441, - 3856558482, - 2790603320, - 2387254523, - 4222490378, - 565477559, - 412481054, - 3199941114, - 1764505069, - 1996334992, - 392981006, - 3919680919, - 2753572325, - 2251550757, - 3548889268, - 2192245405, - 3453425563, - 122508172, - 3492200764, - 1224437128, - 586228526, - 1793780286, - 1492174069, - 387471847, - 1282676302, - 2759411746, - 1754041572, - 361167318, - 3577983514, - 1659704614, - 1101887569, - 134792981, - 1581861051, - 694664404, - 3841153652, - 1475266914, - 3029123569, - 747276957, - 3103432987, - 1152450079, - 2841064054, - 470671631, - 3411436900, - 2051507689, - 1987277850, - 3357993243, - 3887821740, - 3244417555, - 3122626712, - 2015616068, - 10664694, - 3324148137, - 639332058, - 3306292502, - 11853857, - 3478109212, - 3513280616, - 3853741786, - 1121079978, - 2567902204, - 4090914091, - 677412110, - 2087725657, - 1819108326, - 1215523225, - 2366098735, - 3851804231, - 3824632385, - 1326868064, - 1407593641, - 572977625, - 4288671527, - 685301579, - 1902237678, - 1475575961, - 1234794249, - 3644390846, - 2582308443, - 1918398825, - 2026545962, - 2470425164, - 3210376974, - 1108374148, - 2675461922, - 117736420, - 2397832087, - 1027300560, - 378786987, - 1576917791, - 1293479082, - 4231737175, - 1785897938, - 2847852429, - 4138678453, - 2749734837, - 2542323023, - 1885209464, - 2150749690, - 2346269310, - 1171600739, - 585783857, - 2077386236, - 1804209856, - 1118027173, - 3732874242, - 2511482191, - 2490279661, - 3606548579, - 1098950686, - 246663097, - 2986473019, - 3947904043, - 4185548589, - 3181920521, - 4290975224, - 1896499238, - 13247482, - 196080371, - 1940951038, - 3097006872, - 2415222352, - 1027598499, - 3512981536, - 2034939881, - 4092240710, - 1656898975, - 2823288579, - 4197807536, - 3463882390, - 2930372263, - 2592747701, - 4261121117, - 2128620475, - 457918112, - 1243701320, - 1037917135, - 1861017402, - 4179207341, - 2076185125, - 4022578689, - 3683393973, - 3662949846, - 1942454488, - 1351743150, - 465418090, - 4008478054, - 3024305351, - 2574818390, - 2950017157, - 135643593, - 2663205661, - 1383324334, - 2845899941, - 1076100781, - 1660712668, - 2975239571, - 2817368884, - 3485104061, - 3569292041, - 125637638, - 1086924503, - 1634138192, - 2350268722, - 3242204608, - 3696775972, - 261715275, - 1635069374, - 2290763419, - 2551321717, - 2983236533, - 3793936494, - 819568675, - 42482353, - 1476561092, - 2166943314, - 1052859918, - 2420528700, - 3670202938, - 102718215, - 2013683530, - 1646598686, - 3280490750, - 484099859, - 2616564662, - 2155219303, - 3661746089, - 4240451933, - 1364727265, - 2296705608, - 1239215012, - 3323096561, - 686233980, - 2208576473, - 2307608011, - 1398713291, - 3502039502, - 227344407, - 297811850, - 858228905, - 565623375, - 3928302601, - 999687416, - 2804138389, - 595730760, - 2013818944, - 3958459328, - 3772722439, - 1495738316, - 1847063251, - 3843291424, - 995611087, + 1793842969, + 2979695104, + 552073010, + 1668071036, + 2757896425, + 1581344975, + 773472335, + 1616631832, + 1449651370, + 3414828039, + 2843499424, + 1830468926, + 2891653828, + 3079700325, + 3527078668, + 2229291198, + 3562135513, + 2772163578, + 1858670456, + 51193159, + 449790980, + 1229902759, + 2139978907, + 258398912, + 3223809443, + 2298512949, + 1635102805, + 3375712085, + 3168807237, + 594649961, + 3289374766, + 3867368905, + 4202143482, + 3071505162, + 1927721702, + 695516413, + 1432465318, + 1225239294, + 67878624, + 4169846636, + 2356401047, + 3353573547, + 321745033, + 513583934, + 171655095, + 2930408540, + 1767025116, + 576247158, + 2220394527, + 2600470306, + 4029672093, + 3556356676, + 1603293260, + 2460012237, + 4197750517, + 393292666, + 953620913, + 716484490, + 2637385041, + 2159698738, + 3179430737, + 1643947214, + 1866881695, + 2503016748, + 3043773092, + 3422328671, + 1684653533, + 1465686760, + 3307419590, + 3572767836, + 1229702234, + 1539144660, + 527945081, + 345164705, + 2389645242, + 2117534473, + 3075657522, + 887980157, + 2982380784, + 3676587774, + 3254679643, + 1819174876, + 129637013, + 2014788662, + 3817149673, + 1867026413, + 811305888, + 595125993, + 3652772980, + 142336218, + 3531097276, + 4006246751, + 3967370500, + 1663706737, + 83146681, + 2166354582, + 2916933061, + 526508897, + 2735525085, + 2815591717, + 2412035693, + 1054886648, + 2328553487, + 2003705192, + 1950345465, + 876893635, + 3899344687, + 3060093431, + 423395087, + 2725935342, + 238247821, + 2043197861, + 1936616979, + 1620213925, + 1853941934, + 2186640340, + 2594762996, + 3505366877, + 3243768794, + 1775071644, + 2432111367, + 819868695, + 2831363539, + 165891404, + 1751389448, + 3731402399, + 1818537722, + 375129131, + 3398266519, + 3528740996, + 663040447, + 354719114, + 71447354, + 557283994, + 2373369852, + 543223698, + 2460580232, + 3894281735, + 1095167230, + 3660744843, + 288606202, + 4224966146, + 4092236737, + 780041457, + 3364381616, + 2292637065, + 3599245883, + 2342754819, + 3473897504, + 1806695205, + 464477110, + 2397293484, + 3258478611, + 526361096, + 1450699111, + 158117824, + 2476522858, + 1061211419, + 2247614670, + 1817304775, + 4258311242, + 1498410948, + 4024258313, + 3376363360, + 1439306411, + 351407984, + 2170321866, + 2143937637, + 91317167, + 2655130680, + 2601485600, + 2614545932, + 405810379, + 1655554511, + 1229412828, + 565809995, + 2893216575, + 2582393985, + 1830463464, + 1831450456, + 4009201662, + 720932633, + 120908142, + 3730597739, + 3769457771, + 3623692340, + 1779289477, + 781678819, + 3219259097, + 586773655, + 70367488, + 2690381339, + 1965848783, + 693898669, + 1623622987, + 3021785898, + 696377969, + 785678098, + 1949522814, + 905984237, + 1708448043, + 136642637, + 1423588436, + 2427508648, + 4058424892, + 2897520513, + 3301054351, + 3690610146, + 3916605147, + 1566674996, + 2313600931, + 3440099349, + 3658534190, + 3084120730, + 2032429252, + 3236671555, + 2739413625, + 1793844070, + 1517468365, + 92152554, + 2416308598, + 3196847680, + 458994295, + 4083969608, + 3463544947, ]; static const List _envieddatawhatsapp = [ - 555254060, - 4188721345, - 745417713, - 2803577852, - 3104867135, - 2861690568, - 3675431404, - 1291120440, - 3668297274, - 3376793120, - 1117176320, - 3410872845, - 1087837859, - 3317635835, - 3385394502, - 3856558568, - 2790603375, - 2387254466, - 4222490483, - 565477589, - 412481065, - 3199941070, - 1764505000, - 1996335095, - 392981071, - 3919680999, - 2753572276, - 2251550844, - 3548889280, - 2192245460, - 3453425571, - 122508212, - 3492200786, - 1224437201, - 586228570, - 1793780347, - 1492174028, - 387471757, - 1282676255, - 2759411787, - 1754041565, - 361167239, - 3577983604, - 1659704682, - 1101887510, - 134793061, - 1581861068, - 694664423, - 3841153586, - 1475266867, - 3029123457, - 747277054, - 3103433006, - 1152450171, - 2841063950, - 470671686, - 3411436808, - 2051507629, - 1987277949, - 3357993293, - 3887821798, - 3244417641, - 3122626811, - 2015616009, - 10664591, - 3324148190, - 639331999, - 3306292564, - 11853904, - 3478109266, - 3513280561, - 3853741756, - 1121079961, - 2567902095, - 4090914067, - 677412222, - 2087725618, - 1819108237, - 1215523247, - 2366098764, - 3851804189, - 3824632323, - 1326868053, - 1407593720, - 572977641, - 4288671571, - 685301536, - 1902237605, - 1475576044, - 1234794330, - 3644390897, - 2582308353, - 1918398763, - 2026546009, - 2470425091, - 3210377080, - 1108374217, - 2675462008, - 117736357, - 2397832100, - 1027300484, - 378787016, - 1576917867, - 1293479106, - 4231737191, - 1785897883, - 2847852513, - 4138678519, - 2749734909, - 2542322972, - 1885209369, - 2150749623, - 2346269224, - 1171600663, - 585783890, - 2077386158, - 1804209818, - 1118027238, - 3732874353, - 2511482158, - 2490279609, - 3606548520, - 1098950736, - 246663146, - 2986473070, - 3947904091, - 4185548619, - 3181920581, - 4290975146, - 1896499297, - 13247400, - 196080273, - 1940950990, - 3097006954, - 2415222328, - 1027598575, - 3512981573, - 2034939795, - 4092240648, - 1656899033, - 2823288687, - 4197807580, - 3463882470, - 2930372350, - 2592747767, - 4261121082, - 2128620502, - 457918158, - 1243701294, - 1037917101, - 1861017426, - 4179207416, - 2076185156, - 4022578811, - 3683394022, - 3662949772, - 1942454426, - 1351743223, - 465418034, - 4008477954, - 3024305333, - 2574818402, - 2950017205, - 135643559, - 2663205744, - 1383324384, - 2845899921, - 1076100860, - 1660712601, - 2975239668, - 2817368899, - 3485104088, - 3569292098, - 125637684, - 1086924466, - 1634138145, - 2350268779, - 3242204561, - 3696776010, - 261715231, - 1635069418, - 2290763477, - 2551321600, - 2983236551, - 3793936407, - 819568759, - 42482430, - 1476561085, - 2166943248, - 1052860005, - 2420528759, - 3670202976, - 102718277, - 2013683579, - 1646598739, - 3280490662, - 484099934, - 2616564673, - 2155219281, - 3661746172, - 4240451946, - 1364727216, - 2296705574, - 1239215088, - 3323096483, - 686233901, - 2208576413, - 2307607987, - 1398713219, - 3502039468, - 227344450, - 297811932, - 858228933, - 565623358, - 3928302702, - 999687345, - 2804138439, - 595730716, - 2013818930, - 3958459304, - 3772722534, - 1495738275, - 1847063228, - 3843291514, - 995611019, + 1793843036, + 2979695169, + 552073075, + 1668070963, + 2757896349, + 1581344941, + 773472277, + 1616631898, + 1449651449, + 3414828114, + 2843499499, + 1830468873, + 2891653872, + 3079700263, + 3527078723, + 2229291204, + 3562135438, + 2772163523, + 1858670337, + 51193125, + 449791027, + 1229902739, + 2139978974, + 258398887, + 3223809506, + 2298512965, + 1635102724, + 3375712012, + 3168807217, + 594649888, + 3289374742, + 3867368945, + 4202143380, + 3071505235, + 1927721618, + 695516344, + 1432465311, + 1225239188, + 67878577, + 4169846533, + 2356401070, + 3353573626, + 321745127, + 513583986, + 171655152, + 2930408492, + 1767025067, + 576247109, + 2220394585, + 2600470387, + 4029672173, + 3556356647, + 1603293305, + 2460012201, + 4197750413, + 393292595, + 953620957, + 716484558, + 2637385014, + 2159698788, + 3179430683, + 1643947188, + 1866881788, + 2503016801, + 3043773149, + 3422328616, + 1684653464, + 1465686698, + 3307419575, + 3572767762, + 1229702147, + 1539144626, + 527945034, + 345164754, + 2389645186, + 2117534585, + 3075657561, + 887980054, + 2982380742, + 3676587677, + 3254679553, + 1819174814, + 129637024, + 2014788711, + 3817149657, + 1867026329, + 811305931, + 595125922, + 3652772865, + 142336137, + 3531097331, + 4006246661, + 3967370566, + 1663706626, + 83146742, + 2166354656, + 2916933000, + 526508859, + 2735525020, + 2815591702, + 2412035641, + 1054886555, + 2328553595, + 2003705088, + 1950345417, + 876893578, + 3899344707, + 3060093365, + 423395143, + 2725935293, + 238247916, + 2043197928, + 1936617029, + 1620213969, + 1853941965, + 2186640262, + 2594762926, + 3505366814, + 3243768745, + 1775071741, + 2432111443, + 819868764, + 2831363485, + 165891359, + 1751389533, + 3731402479, + 1818537628, + 375129191, + 3398266565, + 3528741059, + 663040493, + 354719208, + 71447306, + 557284072, + 2373369748, + 543223774, + 2460580333, + 3894281853, + 1095167152, + 3660744909, + 288606102, + 4224966254, + 4092236721, + 780041384, + 3364381682, + 2292637166, + 3599245910, + 2342754925, + 3473897542, + 1806695239, + 464477150, + 2397293561, + 3258478706, + 526361202, + 1450699060, + 158117786, + 2476522792, + 1061211458, + 2247614614, + 1817304739, + 4258311224, + 1498410992, + 4024258361, + 3376363278, + 1439306438, + 351407934, + 2170321918, + 2143937588, + 91317226, + 2655130719, + 2601485655, + 2614546025, + 405810304, + 1655554557, + 1229412793, + 565809978, + 2893216614, + 2582394064, + 1830463366, + 1831450380, + 4009201578, + 720932695, + 120908059, + 3730597657, + 3769457682, + 3623692384, + 1779289546, + 781678746, + 3219259035, + 586773756, + 70367563, + 2690381377, + 1965848717, + 693898652, + 1623622918, + 3021785970, + 696377916, + 785678181, + 1949522760, + 905984184, + 1708448028, + 136642588, + 1423588410, + 2427508732, + 4058424942, + 2897520592, + 3301054411, + 3690610074, + 3916605075, + 1566675030, + 2313601014, + 3440099395, + 3658534210, + 3084120811, + 2032429219, + 3236671498, + 2739413547, + 1793844018, + 1517468351, + 92152450, + 2416308503, + 3196847663, + 458994200, + 4083969554, + 3463544887, ]; static final String whatsapp = String.fromCharCodes(List.generate( @@ -9648,41 +9700,41 @@ final class _Env { ).map((int i) => _envieddatawhatsapp[i] ^ _enviedkeywhatsapp[i])); static const List _enviedkeywhatappID = [ - 4188866749, - 678188097, - 2008741969, - 380425988, - 3183007050, - 4279495160, - 2507697384, - 647673227, - 4237378775, - 3931371873, - 3823992893, - 2946738335, - 3280086668, - 8480459, - 2197709307, - 193447799, + 1819412129, + 3327493801, + 2092517253, + 2395283877, + 3893198638, + 3503604887, + 1154553732, + 1288357486, + 4243965497, + 1722242509, + 3181122895, + 2902152004, + 1711462864, + 3071899946, + 3429761792, + 3309611997, ]; static const List _envieddatawhatappID = [ - 4188866702, - 678188151, - 2008741992, - 380426045, - 3183007097, - 4279495105, - 2507697375, - 647673272, - 4237378785, - 3931371859, - 3823992837, - 2946738350, - 3280086717, - 8480499, - 2197709260, - 193447758, + 1819412114, + 3327493791, + 2092517308, + 2395283868, + 3893198621, + 3503604910, + 1154553779, + 1288357469, + 4243965455, + 1722242559, + 3181122935, + 2902152053, + 1711462881, + 3071899922, + 3429761847, + 3309612004, ]; static final String whatappID = String.fromCharCodes(List.generate( @@ -9692,65 +9744,65 @@ final class _Env { ).map((int i) => _envieddatawhatappID[i] ^ _enviedkeywhatappID[i])); static const List _enviedkeyserverPHP = [ - 683198691, - 396122372, - 2840956483, - 2243152679, - 1552464148, - 206976303, - 1777124343, - 1875223900, - 3492606243, - 1058660578, - 563604003, - 946184401, - 3424945744, - 1323300526, - 984513741, - 4284767442, - 1705155980, - 2445978811, - 2508542581, - 119861111, - 3566744522, - 4060181971, - 2181020186, - 1052432986, - 3727587332, - 3665960913, - 1347976012, - 100871963, + 233376009, + 1566551619, + 331136896, + 1216815661, + 3348545035, + 1628229582, + 1995657241, + 2181999862, + 1951700888, + 2914520558, + 2161104576, + 1501169137, + 1375149634, + 3266906497, + 3787386150, + 816242737, + 3926386164, + 3389223109, + 3748498346, + 4247380979, + 3039263969, + 2069342385, + 2132327120, + 4123561875, + 653197231, + 4002794145, + 1466155994, + 3755037342, ]; static const List _envieddataserverPHP = [ - 683198603, - 396122480, - 2840956471, - 2243152727, - 1552464231, - 206976277, - 1777124312, - 1875223923, - 3492606274, - 1058660498, - 563604042, - 946184447, - 3424945699, - 1323300555, - 984513707, - 4284767415, - 1705156094, - 2445978773, - 2508542489, - 119861022, - 3566744508, - 4060181942, - 2181020213, - 1052432937, - 3727587425, - 3665960887, - 1347975977, - 100872041, + 233376097, + 1566551607, + 331137012, + 1216815709, + 3348545144, + 1628229620, + 1995657270, + 2181999833, + 1951700985, + 2914520478, + 2161104553, + 1501169119, + 1375149617, + 3266906596, + 3787386176, + 816242772, + 3926386054, + 3389223147, + 3748498374, + 4247380890, + 3039263895, + 2069342420, + 2132327167, + 4123561952, + 653197258, + 4002794183, + 1466155967, + 3755037420, ]; static final String serverPHP = String.fromCharCodes(List.generate( @@ -9760,77 +9812,77 @@ final class _Env { ).map((int i) => _envieddataserverPHP[i] ^ _enviedkeyserverPHP[i])); static const List _enviedkeyseferAlexandriaServer = [ - 777098526, - 2295458934, - 3856738711, - 3028116992, - 4018202180, - 1474266899, - 1504557721, - 2788214240, - 3787399633, - 3822408313, - 2096733102, - 737244616, - 1099783898, - 957995830, - 3136395870, - 3718836107, - 1269553512, - 3827181609, - 1942808029, - 3136381147, - 196554910, - 2355285660, - 1655009687, - 2872667143, - 4290293196, - 1698247010, - 681303230, - 926797869, - 3061646875, - 2186698870, - 2270299060, - 2006403978, - 4052551794, - 4015068615, + 1086921407, + 33749971, + 1299323737, + 1867562283, + 2725745879, + 215058798, + 298712080, + 3434842082, + 85476533, + 2515542448, + 1597505511, + 1850904501, + 2067434882, + 4078997699, + 1544783480, + 2940658160, + 612752526, + 4086642355, + 804329563, + 842643547, + 3180693037, + 3045223902, + 1106223810, + 4136910478, + 1430798941, + 1839108451, + 502158413, + 657946649, + 3921194686, + 3774568523, + 3078739367, + 4204284264, + 521028757, + 765962122, ]; static const List _envieddataseferAlexandriaServer = [ - 777098614, - 2295458818, - 3856738787, - 3028117104, - 4018202167, - 1474266921, - 1504557750, - 2788214223, - 3787399586, - 3822408220, - 2096733128, - 737244589, - 1099783848, - 957995863, - 3136395826, - 3718836206, - 1269553424, - 3827181640, - 1942807987, - 3136381119, - 196554988, - 2355285749, - 1655009782, - 2872667177, - 4290293183, - 1698246923, - 681303242, - 926797896, - 3061646900, - 2186698757, - 2270299089, - 2006404076, - 4052551703, - 4015068597, + 1086921431, + 33749927, + 1299323693, + 1867562331, + 2725745828, + 215058772, + 298712127, + 3434842061, + 85476550, + 2515542485, + 1597505409, + 1850904528, + 2067434992, + 4078997666, + 1544783380, + 2940658069, + 612752630, + 4086642386, + 804329525, + 842643519, + 3180693087, + 3045223863, + 1106223779, + 4136910496, + 1430798894, + 1839108362, + 502158393, + 657946748, + 3921194641, + 3774568504, + 3078739394, + 4204284174, + 521028848, + 765962232, ]; static final String seferAlexandriaServer = String.fromCharCodes( @@ -9843,61 +9895,61 @@ final class _Env { _enviedkeyseferAlexandriaServer[i])); static const List _enviedkeyseferPaymentServer = [ - 3522101890, - 544611754, - 4172284197, - 2205045791, - 805418425, - 3336663425, - 1696137225, - 2287282326, - 1703684157, - 975326313, - 4201702034, - 483659529, - 3553201333, - 437828291, - 961247885, - 1875369998, - 2254291399, - 1640994940, - 1928487109, - 64915969, - 2849993940, - 694335810, - 2453826680, - 1559429352, - 498639580, - 3228414626, + 768732214, + 1782044716, + 1242343195, + 599532122, + 1181653385, + 1616222116, + 706631781, + 1926324764, + 3590100961, + 718385720, + 373115292, + 1953572398, + 2795340879, + 1698493261, + 583152396, + 1890182344, + 3772704194, + 556817110, + 334161123, + 3268311950, + 2706703664, + 1610555282, + 4096377317, + 1315160758, + 3046746327, + 732560256, ]; static const List _envieddataseferPaymentServer = [ - 3522101994, - 544611806, - 4172284241, - 2205045871, - 805418442, - 3336663483, - 1696137254, - 2287282361, - 1703684174, - 975326220, - 4201702132, - 483659628, - 3553201351, - 437828275, - 961247994, - 1875370016, - 2254291380, - 1640994836, - 1928487082, - 64916081, - 2849993979, - 694335793, - 2453826589, - 1559429262, - 498639545, - 3228414672, + 768732254, + 1782044760, + 1242343279, + 599532074, + 1181653498, + 1616222110, + 706631754, + 1926324787, + 3590100882, + 718385757, + 373115386, + 1953572427, + 2795340861, + 1698493245, + 583152507, + 1890182374, + 3772704177, + 556817086, + 334161036, + 3268312062, + 2706703647, + 1610555361, + 4096377216, + 1315160784, + 3046746290, + 732560370, ]; static final String seferPaymentServer = String.fromCharCodes( @@ -9909,95 +9961,95 @@ final class _Env { _envieddataseferPaymentServer[i] ^ _enviedkeyseferPaymentServer[i])); static const List _enviedkeyseferCairoServer = [ - 733055157, - 3468660386, - 2904676004, - 3709513720, - 1458227720, - 3411384379, - 3186541743, - 1947133733, - 2748705999, - 2529081813, - 218410016, - 868760039, - 453804303, - 2523330827, - 1136545683, - 3529805815, - 3861278078, - 1210493920, - 2516320017, - 3578498193, - 2802528636, - 3046123215, - 4285982485, - 527477616, - 2463153547, - 1076626714, - 4073027959, - 890604962, - 807974062, - 776000332, - 2720589555, - 1940534848, - 2703777911, - 2667589826, - 493515961, - 2411236160, - 2257803183, - 1376780492, - 651550411, - 570620491, - 4065911934, - 3916533642, - 406794847, + 3073257740, + 1302008952, + 542297899, + 3748129686, + 2723833722, + 1975173002, + 3149390824, + 289782306, + 1064768129, + 644127797, + 3248108054, + 2638358548, + 2870995283, + 313981222, + 2138442133, + 886639710, + 2411621102, + 3452465477, + 1581948073, + 3299869757, + 449605680, + 1270795421, + 2638220430, + 2269838457, + 3151657341, + 2621627433, + 1390113920, + 1637966510, + 2477090572, + 3818419085, + 315504448, + 3361813050, + 919653993, + 1820260643, + 3891002182, + 661845594, + 4060691614, + 3878676975, + 2321487167, + 2938001642, + 2827739125, + 3249564106, + 4091313571, ]; static const List _envieddataseferCairoServer = [ - 733055197, - 3468660438, - 2904676048, - 3709513608, - 1458227835, - 3411384321, - 3186541696, - 1947133706, - 2748705980, - 2529081776, - 218410066, - 868759953, - 453804394, - 2523330937, - 1136545725, - 3529805700, - 3861277979, - 1210493830, - 2516320116, - 3578498275, - 2802528594, - 3046123171, - 4285982588, - 527477510, - 2463153646, - 1076626741, - 4073027844, - 890604999, - 807974088, - 776000297, - 2720589441, - 1940534894, - 2703777812, - 2667589806, - 493515984, - 2411236131, - 2257803204, - 1376780515, - 651550392, - 570620462, - 4065911832, - 3916533743, - 406794797, + 3073257828, + 1302008844, + 542297951, + 3748129766, + 2723833609, + 1975173040, + 3149390791, + 289782285, + 1064768242, + 644127824, + 3248108132, + 2638358626, + 2870995254, + 313981268, + 2138442171, + 886639661, + 2411621003, + 3452465443, + 1581948108, + 3299869775, + 449605662, + 1270795505, + 2638220519, + 2269838351, + 3151657240, + 2621627398, + 1390114035, + 1637966539, + 2477090666, + 3818419176, + 315504434, + 3361813012, + 919653898, + 1820260687, + 3891002159, + 661845561, + 4060691701, + 3878676928, + 2321487180, + 2938001551, + 2827739027, + 3249564079, + 4091313617, ]; static final String seferCairoServer = String.fromCharCodes( @@ -10009,69 +10061,69 @@ final class _Env { _envieddataseferCairoServer[i] ^ _enviedkeyseferCairoServer[i])); static const List _enviedkeyseferGizaServer = [ - 3640101665, - 141146702, - 1491797225, - 2618585470, - 4059526511, - 1620771416, - 2253283281, - 3788492475, - 265942450, - 279804782, - 2354373902, - 1337006113, - 614708242, - 3662018677, - 2410827713, - 1543571995, - 2626410121, - 2739500365, - 3247016277, - 166434283, - 2289920147, - 3648661813, - 315692129, - 63376917, - 3571498421, - 1558606750, - 302110857, - 3683752874, - 969759664, - 313145108, + 1183664105, + 3712616981, + 850615188, + 586186022, + 1049538427, + 3791291947, + 588468066, + 3410202723, + 1944492552, + 3626804165, + 2355509289, + 2704756690, + 4227380775, + 1907132442, + 3442221577, + 3841071374, + 1429277940, + 1082657021, + 2357495824, + 2341268371, + 2553773200, + 3545366828, + 1047264255, + 3882435335, + 942455229, + 431809903, + 523643076, + 2261709373, + 1661193779, + 2467584001, ]; static const List _envieddataseferGizaServer = [ - 3640101705, - 141146682, - 1491797149, - 2618585358, - 4059526428, - 1620771426, - 2253283326, - 3788492436, - 265942485, - 279804679, - 2354374004, - 1337006144, - 614708321, - 3662018576, - 2410827687, - 1543572094, - 2626410235, - 2739500387, - 3247016250, - 166434181, - 2289920255, - 3648661852, - 315692047, - 63377008, - 3571498394, - 1558606829, - 302110956, - 3683752908, - 969759701, - 313145190, + 1183664001, + 3712617057, + 850615264, + 586186070, + 1049538312, + 3791291921, + 588468045, + 3410202700, + 1944492655, + 3626804140, + 2355509331, + 2704756659, + 4227380820, + 1907132543, + 3442221679, + 3841071467, + 1429277830, + 1082656979, + 2357495935, + 2341268477, + 2553773308, + 3545366853, + 1047264145, + 3882435426, + 942455186, + 431809820, + 523643041, + 2261709403, + 1661193814, + 2467584115, ]; static final String seferGizaServer = String.fromCharCodes(List.generate( @@ -10082,125 +10134,125 @@ final class _Env { (int i) => _envieddataseferGizaServer[i] ^ _enviedkeyseferGizaServer[i])); static const List _enviedkeychatGPTkeySeferNew = [ - 597436208, - 2124888815, - 32521759, - 1810148519, - 3148389286, - 4125832287, - 4099869359, - 4086556922, - 360994254, - 2893856974, - 4050729841, - 993270609, - 1966355142, - 2871232714, - 1777930048, - 530388216, - 1783313569, - 895432248, - 2708554348, - 876230186, - 2869074688, - 3548066727, - 2981072881, - 568563017, - 3529699400, - 4001658201, - 636316275, - 4236660952, - 4194150813, - 76857757, - 1297188248, - 547066962, - 2522546265, - 2985372136, - 457974096, - 901606114, - 3390163279, - 3562114326, - 2738471379, - 641106086, - 332669738, - 983669433, - 3216560901, - 2176979400, - 1019068627, - 4171289438, - 1809578978, - 2473458902, - 1966357574, - 115904049, - 3187724751, - 505082045, - 4027445220, - 3458067413, - 4088851010, - 119370929, - 2064830273, - 3017119880, + 1297435154, + 654002855, + 1779588987, + 3282634969, + 1301979722, + 3975701436, + 345655782, + 1349749531, + 2404583887, + 560991681, + 2596680516, + 3215978169, + 3301508178, + 4286201656, + 3253646576, + 3886158780, + 769086640, + 1779746901, + 2506465089, + 3783440253, + 2144878225, + 2858950572, + 1934026004, + 260097273, + 1105373916, + 478771000, + 4287369645, + 2142027115, + 2208328988, + 528496807, + 3345892157, + 1804654518, + 1109564889, + 72701215, + 3200042259, + 4023225626, + 3333814692, + 2936481284, + 3795649336, + 148882206, + 3353419022, + 2427744117, + 162711774, + 3297309729, + 921780895, + 3729383667, + 1940116294, + 1360112056, + 503923734, + 3258551381, + 124050768, + 3991470922, + 2579994026, + 2638204174, + 2030014935, + 6272770, + 2070747, + 883719464, ]; static const List _envieddatachatGPTkeySeferNew = [ - 597436234, - 2124888712, - 32521778, - 1810148605, - 3148389266, - 4125832240, - 4099869422, - 4086556848, - 360994221, - 2893856911, - 4050729763, - 993270558, - 1966355105, - 2871232644, - 1777930008, - 530388114, - 1783313606, - 895432266, - 2708554281, - 876230243, - 2869074773, - 3548066719, - 2981072791, - 568562946, - 3529699339, - 4001658208, - 636316203, - 4236660906, - 4194150885, - 76857850, - 1297188301, - 547066903, - 2522546285, - 2985372089, - 457974052, - 901606032, - 3390163261, - 3562114426, - 2738471330, - 641106071, - 332669779, - 983669456, - 3216561008, - 2176979376, - 1019068643, - 4171289396, - 1809578926, - 2473458917, - 1966357538, - 115904120, - 3187724699, - 505082094, - 4027445180, - 3458067367, - 4088850970, - 119370973, - 2064830211, - 3017119972, + 1297435240, + 654002880, + 1779588950, + 3282634883, + 1301979774, + 3975701459, + 345655719, + 1349749585, + 2404583852, + 560991616, + 2596680470, + 3215978230, + 3301508149, + 4286201718, + 3253646504, + 3886158806, + 769086679, + 1779746855, + 2506465028, + 3783440180, + 2144878276, + 2858950548, + 1934026098, + 260097202, + 1105373855, + 478770945, + 4287369717, + 2142027033, + 2208329060, + 528496832, + 3345892200, + 1804654579, + 1109564909, + 72701262, + 3200042343, + 4023225704, + 3333814742, + 2936481384, + 3795649353, + 148882223, + 3353419127, + 2427744028, + 162711723, + 3297309785, + 921780911, + 3729383577, + 1940116234, + 1360112011, + 503923826, + 3258551324, + 124050692, + 3991470873, + 2579994098, + 2638204284, + 2030014863, + 6272878, + 2070681, + 883719492, ]; static final String chatGPTkeySeferNew = String.fromCharCodes( @@ -10212,103 +10264,103 @@ final class _Env { _envieddatachatGPTkeySeferNew[i] ^ _enviedkeychatGPTkeySeferNew[i])); static const List _enviedkeycohere = [ - 3635823946, - 861596595, - 2069450017, - 3404297001, - 2534187298, - 1103928142, - 1893394193, - 2009801174, - 632731729, - 3789914275, - 2583879276, - 88227544, - 3429966631, - 276874415, - 1499024654, - 1701164958, - 516455235, - 2597687471, - 2987683253, - 923613789, - 1898329436, - 3857679242, - 303167704, - 1602982479, - 2042800170, - 532826120, - 764858399, - 3133423253, - 1287873974, - 3817895908, - 253927550, - 536025286, - 3431979326, - 1588980731, - 2849388577, - 3090779862, - 1028451513, - 1834611272, - 3042457590, - 912547620, - 1678750329, - 2308462392, - 1134859751, - 655714778, - 1806966726, - 571942867, - 1971205485, + 2846263346, + 1209375899, + 921926163, + 861122420, + 1267353074, + 4127489306, + 3504270502, + 1400187864, + 1514023688, + 3654050103, + 3259743895, + 1546430706, + 841299856, + 3213593265, + 812906699, + 1442134310, + 3055617311, + 3592492504, + 4056319548, + 1650694833, + 2637716127, + 2817352558, + 3452259327, + 605039471, + 3673440630, + 333790363, + 4178513786, + 4023020203, + 743093901, + 389307320, + 242941519, + 892355416, + 3775091845, + 842900567, + 4048999057, + 2269053376, + 796096779, + 1301480278, + 721688597, + 3713590308, + 1827778179, + 875487106, + 3600909625, + 483721521, + 4165893280, + 2379156339, + 3710511826, ]; static const List _envieddatacohere = [ - 3635823883, - 861596614, - 2069450061, - 3404297054, - 2534187334, - 1103928182, - 1893394280, - 2009801187, - 632731650, - 3789914355, - 2583879227, - 88227511, - 3429966676, - 276874399, - 1499024742, - 1701165012, - 516455211, - 2597687491, - 2987683314, - 923613805, - 1898329384, - 3857679333, - 303167629, - 1602982441, - 2042800146, - 532826223, - 764858448, - 3133423357, - 1287874019, - 3817895857, - 253927436, - 536025270, - 3431979352, - 1588980686, - 2849388656, - 3090779876, - 1028451565, - 1834611224, - 3042457499, - 912547698, - 1678750270, - 2308462432, - 1134859669, - 655714690, - 1806966698, - 571942801, - 1971205377, + 2846263411, + 1209375982, + 921926271, + 861122307, + 1267352982, + 4127489314, + 3504270559, + 1400187885, + 1514023771, + 3654050151, + 3259743936, + 1546430621, + 841299939, + 3213593217, + 812906659, + 1442134380, + 3055617399, + 3592492468, + 4056319611, + 1650694785, + 2637716203, + 2817352449, + 3452259242, + 605039369, + 3673440590, + 333790460, + 4178513717, + 4023020227, + 743093976, + 389307373, + 242941501, + 892355368, + 3775091939, + 842900578, + 4048999104, + 2269053426, + 796096863, + 1301480198, + 721688696, + 3713590386, + 1827778244, + 875487194, + 3600909643, + 483721577, + 4165893324, + 2379156273, + 3710511806, ]; static final String cohere = String.fromCharCodes(List.generate( @@ -10318,239 +10370,239 @@ final class _Env { ).map((int i) => _envieddatacohere[i] ^ _enviedkeycohere[i])); static const List _enviedkeyclaudeAiAPI = [ - 3852955226, - 430719169, - 4113693467, - 1961452278, - 1110757587, - 577979717, - 1741037990, - 2841137536, - 627798224, - 1552621442, - 3748888921, - 3109940223, - 4159652952, - 1643598813, - 3516667706, - 1132796314, - 617628323, - 1851734960, - 1154920151, - 1556598574, - 3856834469, - 2921127236, - 2082367282, - 1350731743, - 4196489418, - 4129493401, - 3235213558, - 262554086, - 286162882, - 989650362, - 3073493470, - 1741658997, - 3249337042, - 3936965745, - 2237400342, - 3331254776, - 3046821316, - 871114308, - 887565919, - 3948068862, - 2823092920, - 1748999114, - 2074892062, - 1546496564, - 52651019, - 1054179079, - 1549332604, - 9553877, - 3817710764, - 1249813027, - 3519843740, - 1304009357, - 1758775723, - 1638756620, - 1942356282, - 204790592, - 565389884, - 3657552393, - 3300011894, - 608162469, - 1440210333, - 3515387634, - 1684772061, - 464355729, - 1529938374, - 964653820, - 2533478915, - 831979391, - 3974788917, - 83930902, - 894183238, - 1038576503, - 412774024, - 2245519399, - 365031527, - 1724512079, - 1355065911, - 245714479, - 1158867250, - 1719056460, - 3159242856, - 1341758995, - 2416336323, - 2943757024, - 4134718255, - 1726498773, - 4278789041, - 3668479174, - 1923696029, - 1884643450, - 2141799451, - 2796152655, - 569733993, - 700253612, - 4233896830, - 2533201755, - 3447604678, - 1554117696, - 1934029007, - 529275782, - 3249470164, - 3403218156, - 3311098917, - 190629808, - 1987867866, - 2132894743, - 825749904, - 770953446, - 3205467300, - 1679453820, - 3460610790, - 3940621809, - 274551308, - 462492557, - 2366923647, + 4131489666, + 2165259452, + 2845346099, + 2981133697, + 3704954378, + 1507193410, + 196445514, + 3410652725, + 141352172, + 1811972728, + 705512459, + 1831801987, + 2341365198, + 3369088150, + 1786951065, + 1097883633, + 757379414, + 560635189, + 1329131469, + 803104093, + 1402632910, + 1034441769, + 283917562, + 4207662176, + 3243702378, + 3726190199, + 2822663170, + 4020696522, + 1150887032, + 3074483755, + 1047896673, + 291144645, + 3091318844, + 3763132207, + 934238455, + 592501991, + 4220721937, + 567304901, + 535349385, + 702442603, + 1457973911, + 1333997339, + 2654549676, + 1871547490, + 1982972942, + 265118810, + 4028087444, + 786609233, + 3946375097, + 1734781531, + 4222345314, + 2239839030, + 312083840, + 2522689386, + 548755348, + 1300402719, + 1180221657, + 476380623, + 2522336599, + 3697540394, + 506425126, + 3238151482, + 2176910194, + 477649508, + 3905994510, + 2486576092, + 2026065083, + 3763234771, + 2910279619, + 3056970464, + 1512338710, + 2544532521, + 498897564, + 3641536473, + 1944631323, + 2475511856, + 1257279720, + 1178807909, + 2682455016, + 3035387467, + 658134552, + 1023291979, + 2783382201, + 2363134543, + 904714733, + 103852103, + 2420089577, + 4145163296, + 4001366076, + 121112603, + 3437690877, + 1002286287, + 308250192, + 353426924, + 2650989615, + 1483631504, + 1946989618, + 3918308885, + 3367602157, + 3670219410, + 2538339801, + 1788491585, + 3854086315, + 2898573027, + 1982648414, + 847163354, + 3787243296, + 3993991952, + 2955160710, + 725876103, + 734759720, + 2317250640, + 2182600452, + 4154762703, + 2888719858, ]; static const List _envieddataclaudeAiAPI = [ - 3852955168, - 430719142, - 4113693494, - 1961452167, - 1110757553, - 577979686, - 1741037963, - 2841137649, - 627798182, - 1552621549, - 3748888938, - 3109940166, - 4159652916, - 1643598832, - 3516667714, - 1132796365, - 617628396, - 1851734984, - 1154920094, - 1556598633, - 3856834514, - 2921127187, - 2082367334, - 1350731664, - 4196489392, - 4129493466, - 3235213488, - 262554020, - 286162860, - 989650419, - 3073493383, - 1741658918, - 3249336985, - 3936965690, - 2237400446, - 3331254686, - 3046821309, - 871114302, - 887565824, - 3948068789, - 2823092974, - 1748999051, - 2074892136, - 1546496582, - 52651075, - 1054179114, - 1549332554, - 9553802, - 3817710744, - 1249813113, - 3519843801, - 1304009415, - 1758775783, - 1638756666, - 1942356226, - 204790535, - 565389923, - 3657552472, - 3300011828, - 608162541, - 1440210351, - 3515387588, - 1684772018, - 464355828, - 1529938322, - 964653747, - 2533478990, - 831979314, - 3974788954, - 83930951, - 894183219, - 1038576400, - 412774065, - 2245519468, - 365031442, - 1724512000, - 1355065949, - 245714501, - 1158867321, - 1719056415, - 3159242808, - 1341759052, - 2416336258, - 2943757012, - 4134718332, - 1726498790, - 4278789090, - 3668479123, - 1923696089, - 1884643350, - 2141799545, - 2796152631, - 569733947, - 700253589, - 4233896730, - 2533201710, - 3447604624, - 1554117690, - 1934028960, - 529275863, - 3249470201, - 3403218081, - 3311098958, - 190629864, - 1987867781, - 2132894786, - 825749953, - 770953399, - 3205467381, - 1679453732, - 3460610708, - 3940621737, - 274551392, - 462492623, - 2366923539, + 4131489784, + 2165259483, + 2845346078, + 2981133808, + 3704954472, + 1507193377, + 196445543, + 3410652740, + 141352090, + 1811972631, + 705512504, + 1831802042, + 2341365154, + 3369088187, + 1786951137, + 1097883558, + 757379353, + 560635213, + 1329131396, + 803104026, + 1402632889, + 1034441854, + 283917486, + 4207662127, + 3243702288, + 3726190132, + 2822663236, + 4020696456, + 1150886934, + 3074483810, + 1047896632, + 291144598, + 3091318903, + 3763132260, + 934238367, + 592501889, + 4220722024, + 567304895, + 535349462, + 702442528, + 1457973953, + 1333997402, + 2654549722, + 1871547408, + 1982972998, + 265118839, + 4028087458, + 786609166, + 3946375053, + 1734781441, + 4222345255, + 2239839100, + 312083916, + 2522689372, + 548755372, + 1300402776, + 1180221574, + 476380574, + 2522336533, + 3697540450, + 506425108, + 3238151436, + 2176910109, + 477649409, + 3905994586, + 2486576019, + 2026065142, + 3763234718, + 2910279596, + 3056970417, + 1512338787, + 2544532558, + 498897573, + 3641536402, + 1944631406, + 2475511935, + 1257279618, + 1178807823, + 2682454947, + 3035387416, + 658134600, + 1023291924, + 2783382264, + 2363134587, + 904714686, + 103852148, + 2420089530, + 4145163381, + 4001366136, + 121112695, + 3437690783, + 1002286263, + 308250114, + 353426901, + 2650989643, + 1483631589, + 1946989668, + 3918308975, + 3367602050, + 3670219459, + 2538339828, + 1788491532, + 3854086336, + 2898572987, + 1982648321, + 847163279, + 3787243377, + 3993992001, + 2955160791, + 725876191, + 734759770, + 2317250568, + 2182600552, + 4154762637, + 2888719774, ]; static final String claudeAiAPI = String.fromCharCodes(List.generate( @@ -10560,183 +10612,183 @@ final class _Env { ).map((int i) => _envieddataclaudeAiAPI[i] ^ _enviedkeyclaudeAiAPI[i])); static const List _enviedkeypayPalClientId = [ - 997834874, - 281552995, - 2767426000, - 266619823, - 3015792712, - 154440337, - 2890718833, - 2247105439, - 2133262146, - 2269442158, - 1433717456, - 4012802595, - 535785920, - 2892332154, - 2379031744, - 3375829136, - 691537249, - 4268784806, - 640061197, - 3208227965, - 3228255122, - 3547171494, - 2461104956, - 3288156357, - 71672957, - 3473665839, - 3012719666, - 2455306594, - 244538946, - 3059162977, - 1092099066, - 621261930, - 1173658984, - 3148919748, - 190110475, - 1313761017, - 1485776280, - 606450616, - 76063291, - 1546139014, - 1810281636, - 505470699, - 4246252128, - 1823230002, - 3684620276, - 2078913951, - 2368137722, - 1666854616, - 536834806, - 2689837239, - 847928113, - 1503093084, - 2422114312, - 896906764, - 383080677, - 373290228, - 1687600483, - 2865536830, - 3298789693, - 1699014504, - 3998306260, - 3364704172, - 2935213387, - 2507478767, - 2801457879, - 3508001179, - 1473911802, - 249310250, - 1276886973, - 3433130104, - 2504788187, - 4253848730, - 2028692627, - 1101238498, - 275553610, - 844489383, - 1636647552, - 1151375227, - 544093094, - 3441976246, - 2949506316, - 215607467, - 1057309550, - 2244312664, - 2555254779, - 2014440217, - 1188532673, + 3421699884, + 2705657941, + 487022891, + 3984248249, + 2328904681, + 3885822742, + 3420930535, + 3264555084, + 732736906, + 213767513, + 3094507499, + 2980624808, + 91218360, + 1727574095, + 2532614855, + 1378550900, + 597992186, + 3740308450, + 89891106, + 1998860893, + 754237010, + 7377079, + 1848663582, + 1594098541, + 2710966637, + 1962166415, + 792185201, + 1240811118, + 2544473063, + 2414153168, + 3431248430, + 3888830653, + 4225193163, + 1123136414, + 3985085840, + 2687175171, + 4203868975, + 3526848237, + 1543571245, + 1196935314, + 2496614288, + 2116953668, + 115720969, + 1879493505, + 3754501167, + 3006098519, + 3716336685, + 874718366, + 1006590153, + 3827373254, + 4076660377, + 2997934424, + 1447267292, + 1449991732, + 431000800, + 4216414536, + 1855856651, + 3876864333, + 1522129099, + 3453112731, + 3378256048, + 3928705733, + 2201768161, + 3793455754, + 3675489758, + 4176286142, + 1613231063, + 1911375162, + 2121092415, + 562556003, + 1088200541, + 2523683948, + 77184514, + 1608558091, + 3887542762, + 3569332801, + 1875853468, + 1625541807, + 3018562711, + 1945231113, + 4081662892, + 1159821612, + 3455547693, + 3931528180, + 1868551342, + 2259042253, + 2202260091, ]; static const List _envieddatapayPalClientId = [ - 997834795, - 281552930, - 2767425948, - 266619862, - 3015792677, - 154440445, - 2890718743, - 2247105489, - 2133262091, - 2269442139, - 1433717380, - 4012802649, - 535785908, - 2892332110, - 2379031731, - 3375829181, - 691537176, - 4268784853, - 640061282, - 3208227847, - 3228255140, - 3547171536, - 2461105016, - 3288156401, - 71672866, - 3473665857, - 3012719683, - 2455306554, - 244538994, - 3059162930, - 1092098991, - 621261854, - 1173658883, - 3148919687, - 190110548, - 1313760904, - 1485776321, - 606450670, - 76063254, - 1546139091, - 1810281667, - 505470592, - 4246252117, - 1823230037, - 3684620181, - 2078914002, - 2368137637, - 1666854624, - 536834732, - 2689837210, - 847928154, - 1503093051, - 2422114364, - 896906816, - 383080656, - 373290183, - 1687600392, - 2865536774, - 3298789736, - 1699014429, - 3998306220, - 3364704243, - 2935213439, - 2507478661, - 2801457810, - 3508001228, - 1473911714, - 249310318, - 1276886998, - 3433130038, - 2504788139, - 4253848770, - 2028692692, - 1101238449, - 275553565, - 844489463, - 1636647664, - 1151375154, - 544093148, - 3441976306, - 2949506378, - 215607539, - 1057309468, - 2244312576, - 2555254679, - 2014440283, - 1188532653, + 3421699965, + 2705657876, + 487022951, + 3984248256, + 2328904580, + 3885822842, + 3420930433, + 3264555010, + 732736963, + 213767532, + 3094507455, + 2980624850, + 91218380, + 1727574139, + 2532614836, + 1378550873, + 597992067, + 3740308369, + 89891149, + 1998860839, + 754237028, + 7377089, + 1848663642, + 1594098521, + 2710966578, + 1962166497, + 792185088, + 1240811062, + 2544473047, + 2414153091, + 3431248507, + 3888830665, + 4225193120, + 1123136477, + 3985085903, + 2687175282, + 4203869046, + 3526848187, + 1543571200, + 1196935367, + 2496614391, + 2116953647, + 115721020, + 1879493606, + 3754501198, + 3006098458, + 3716336754, + 874718374, + 1006590099, + 3827373291, + 4076660466, + 2997934399, + 1447267304, + 1449991800, + 431000789, + 4216414587, + 1855856736, + 3876864373, + 1522129054, + 3453112814, + 3378256072, + 3928705690, + 2201768149, + 3793455840, + 3675489691, + 4176286185, + 1613230991, + 1911375230, + 2121092436, + 562555949, + 1088200493, + 2523683892, + 77184581, + 1608558168, + 3887542717, + 3569332753, + 1875853548, + 1625541862, + 3018562797, + 1945231181, + 4081662954, + 1159821684, + 3455547743, + 3931528108, + 1868551362, + 2259042191, + 2202259991, ]; static final String payPalClientId = String.fromCharCodes(List.generate( @@ -10746,181 +10798,181 @@ final class _Env { ).map((int i) => _envieddatapayPalClientId[i] ^ _enviedkeypayPalClientId[i])); static const List _enviedkeypayPalSecret = [ - 3840837981, - 1895731794, - 3956749487, - 773276304, - 1223949368, - 801801713, - 2274870853, - 4104576968, - 2433592028, - 2030161055, - 586697622, - 4108911202, - 1716135163, - 3557791382, - 1187479060, - 2114807091, - 2437053544, - 3249982922, - 391091391, - 1546839781, - 3534833266, - 2358960971, - 1840191563, - 460427347, - 2580201434, - 3958224467, - 1930797294, - 2910353453, - 1845334130, - 3315456500, - 1986629013, - 4140387121, - 2965844763, - 2773792790, - 2707901068, - 2503609515, - 2651934147, - 3281474175, - 4102248307, - 598645046, - 1036930279, - 3595390182, - 1979089971, - 3055806367, - 227725179, - 2626396756, - 285956927, - 2555352272, - 989923710, - 1457752399, - 3316764737, - 3446304892, - 3899866402, - 228693789, - 2460422087, - 929288179, - 3904878251, - 2952479342, - 4026062789, - 2498273713, - 786005007, - 4151172141, - 2752685200, - 1685328534, - 4022388596, - 3521500186, - 1554892324, - 1663347969, - 3050808497, - 3579848770, - 686498464, - 261260146, - 741342799, - 2078466464, - 1221450834, - 3292731657, - 3697451142, - 1122216440, - 2467235906, - 2578447818, - 2148344434, - 3574674558, - 3033176532, - 116644204, - 403677822, - 3081730446, + 121165755, + 1630078286, + 1737211075, + 1637386669, + 13716191, + 2950471662, + 1051079565, + 3965657676, + 3320742932, + 3083677180, + 968800573, + 3405798028, + 1331351023, + 2565991939, + 3869177361, + 3216086204, + 4066736060, + 2430655662, + 57150375, + 269987922, + 2544126626, + 4215543828, + 4097892174, + 1738593356, + 2703465053, + 2607827280, + 1109206618, + 2866562579, + 4260359871, + 4021869541, + 2474246835, + 3668453945, + 3402147556, + 2248569444, + 1789853542, + 2823798342, + 2481759251, + 1043821477, + 173776381, + 478654565, + 991387389, + 2287369832, + 1921798374, + 213626855, + 2559535110, + 1272072583, + 3254143429, + 5161082, + 1973907271, + 2565613093, + 3783797477, + 96054033, + 174619207, + 4261596093, + 1699128524, + 2685126863, + 3649927403, + 3726540925, + 3663952131, + 1316273443, + 368786469, + 80602253, + 3444046054, + 3479861766, + 2144548527, + 3163025384, + 2962797859, + 3577493416, + 1141138401, + 239839525, + 744127193, + 2164093100, + 2039878416, + 508090314, + 2382175382, + 4194983077, + 3898019067, + 1410604459, + 3257668586, + 4222177847, + 3752615140, + 644983055, + 382830146, + 3630979793, + 3152539121, + 3962793586, ]; static const List _envieddatapayPalSecret = [ - 3840837911, - 1895731728, - 3956749550, - 773276369, - 1223949390, - 801801600, - 2274870799, - 4104576921, - 2433591963, - 2030161098, - 586697701, - 4108911145, - 1716135103, - 3557791398, - 1187479118, - 2114807129, - 2437053440, - 3249982974, - 391091444, - 1546839695, - 3534833175, - 2358960936, - 1840191537, - 460427307, - 2580201404, - 3958224401, - 1930797224, - 2910353493, - 1845334111, - 3315456455, - 1986629037, - 4140387170, - 2965844863, - 2773792890, - 2707901166, - 2503609570, - 2651934096, - 3281474122, - 4102248261, - 598645088, - 1036930229, - 3595390123, - 1979089931, - 3055806417, - 227725119, - 2626396722, - 285956954, - 2555352294, - 989923603, - 1457752357, - 3316764684, - 3446304793, - 3899866488, - 228693847, - 2460422063, - 929288125, - 3904878311, - 2952479268, - 4026062752, - 2498273754, - 786005050, - 4151172213, - 2752685303, - 1685328583, - 4022388535, - 3521500267, - 1554892399, - 1663348034, - 3050808569, - 3579848758, - 686498546, - 261260052, - 741342841, - 2078466541, - 1221450808, - 3292731739, - 3697451263, - 1122216405, - 2467235876, - 2578447858, - 2148344362, - 3574674444, - 3033176460, - 116644096, - 403677756, - 3081730530, + 121165809, + 1630078220, + 1737211010, + 1637386732, + 13716137, + 2950471583, + 1051079623, + 3965657629, + 3320742995, + 3083677097, + 968800590, + 3405798087, + 1331350955, + 2565991987, + 3869177419, + 3216086230, + 4066736084, + 2430655642, + 57150444, + 269987896, + 2544126663, + 4215543927, + 4097892148, + 1738593332, + 2703465019, + 2607827218, + 1109206556, + 2866562667, + 4260359826, + 4021869526, + 2474246795, + 3668453994, + 3402147456, + 2248569352, + 1789853444, + 2823798287, + 2481759296, + 1043821456, + 173776331, + 478654515, + 991387311, + 2287369765, + 1921798366, + 213626793, + 2559535170, + 1272072673, + 3254143392, + 5161036, + 1973907242, + 2565613135, + 3783797416, + 96054132, + 174619165, + 4261596151, + 1699128484, + 2685126785, + 3649927335, + 3726540855, + 3663952230, + 1316273480, + 368786448, + 80602325, + 3444045953, + 3479861847, + 2144548588, + 3163025305, + 2962797928, + 3577493483, + 1141138345, + 239839569, + 744127115, + 2164093130, + 2039878438, + 508090247, + 2382175484, + 4194983159, + 3898018946, + 1410604422, + 3257668492, + 4222177807, + 3752615100, + 644983165, + 382830106, + 3630979773, + 3152539059, + 3962793502, ]; static final String payPalSecret = String.fromCharCodes(List.generate( @@ -10930,101 +10982,101 @@ final class _Env { ).map((int i) => _envieddatapayPalSecret[i] ^ _enviedkeypayPalSecret[i])); static const List _enviedkeygeminiApi = [ - 3787185043, - 1557662251, - 3723717340, - 618550436, - 1237381643, - 1504887173, - 3700212808, - 520885352, - 860663586, - 4266298222, - 2391106009, - 1744916887, - 1059491357, - 3538964230, - 2465719000, - 2579218637, - 2024893497, - 925724869, - 2850370839, - 3726331542, - 3453380290, - 1895080699, - 1442833702, - 2594977928, - 1858346715, - 827033387, - 1124811811, - 1844993767, - 2533264798, - 748186199, - 3998714162, - 3833116283, - 11568981, - 2092781213, - 2646700993, - 3246398908, - 129990019, - 23875955, - 3065115717, - 1175630140, - 823788012, - 101839521, - 1693761774, - 3343978122, - 480309163, - 786448282, + 223111900, + 3327322925, + 1904098812, + 2602619825, + 3339605079, + 526054989, + 278313337, + 2869630502, + 1721997030, + 2715276728, + 3145406489, + 2682533619, + 1183004989, + 3727499938, + 3853073384, + 3612204326, + 3745106684, + 3578513899, + 2789755954, + 3069137050, + 4109517740, + 895537005, + 904901295, + 4036534410, + 638996261, + 179318343, + 1320184843, + 500675349, + 1616703134, + 426210751, + 4079331271, + 189396896, + 192631094, + 3640333089, + 1107408930, + 2083209537, + 2718309932, + 3006793381, + 1118157039, + 3396017793, + 3841677072, + 1240956711, + 1709853059, + 800759106, + 1266123344, + 1443079759, ]; static const List _envieddatageminiApi = [ - 3787185090, - 1557662308, - 3723717297, - 618550485, - 1237381713, - 1504887286, - 3700212761, - 520885297, - 860663631, - 4266298206, - 2391106017, - 1744916961, - 1059491441, - 3538964297, - 2465718953, - 2579218599, - 2024893552, - 925724914, - 2850370940, - 3726331642, - 3453380244, - 1895080625, - 1442833728, - 2594978046, - 1858346635, - 827033375, - 1124811892, - 1844993701, - 2533264856, - 748186130, - 3998714205, - 3833116190, - 11568952, - 2092781303, - 2646700966, - 3246398917, - 129990064, - 23875914, - 3065115763, - 1175630165, - 823787956, - 101839571, - 1693761718, - 3343978214, - 480309225, - 786448374, + 223111821, + 3327322978, + 1904098705, + 2602619840, + 3339605005, + 526054974, + 278313256, + 2869630591, + 1721996939, + 2715276680, + 3145406497, + 2682533509, + 1183005009, + 3727500013, + 3853073305, + 3612204364, + 3745106613, + 3578513884, + 2789755993, + 3069137142, + 4109517818, + 895536935, + 904901321, + 4036534524, + 638996341, + 179318387, + 1320184924, + 500675415, + 1616703192, + 426210810, + 4079331240, + 189396933, + 192631131, + 3640333131, + 1107408965, + 2083209528, + 2718309919, + 3006793372, + 1118157017, + 3396017896, + 3841677128, + 1240956757, + 1709853147, + 800759086, + 1266123282, + 1443079715, ]; static final String geminiApi = String.fromCharCodes(List.generate( @@ -11034,101 +11086,101 @@ final class _Env { ).map((int i) => _envieddatageminiApi[i] ^ _enviedkeygeminiApi[i])); static const List _enviedkeygeminiApiMasa = [ - 1316241847, - 806168889, - 1191499318, - 51677703, - 1406065355, - 3819234803, - 1447376431, - 862574057, - 3823710346, - 723192901, - 278556419, - 1291838823, - 3805763478, - 406196088, - 2838917534, - 913988584, - 2537308623, - 2050007390, - 2076206697, - 3441205227, - 1216246565, - 4152853348, - 4133860374, - 3642109029, - 744354816, - 2908181350, - 3523349827, - 2219393061, - 1951175023, - 3715520644, - 1818786834, - 1603147343, - 1249725482, - 2002023698, - 1444817958, - 255466199, - 3481016950, - 1144100482, - 152227265, - 2359624778, - 24928847, - 3243498478, - 3525334118, - 3128481986, - 1329276445, - 4118935327, + 2146824880, + 3907550243, + 2903161886, + 3785672320, + 461321014, + 2732161292, + 4101278503, + 4188348806, + 3097765060, + 2840107809, + 4074499765, + 1377687999, + 2466413864, + 4131866855, + 2085971762, + 4291528158, + 586406621, + 1172253824, + 4129699771, + 4001684368, + 13304699, + 1388693678, + 2478131258, + 1930071347, + 3722746620, + 3939759101, + 1802140304, + 3906288734, + 520770620, + 3777786566, + 1532556456, + 2718322361, + 517308172, + 3937157671, + 3195294693, + 1852072784, + 2465473003, + 1057364077, + 1530550642, + 1157768896, + 838941114, + 716159291, + 3129977605, + 2454090027, + 656020204, + 3015116062, ]; static const List _envieddatageminiApiMasa = [ - 1316241894, - 806168950, - 1191499355, - 51677814, - 1406065297, - 3819234688, - 1447376510, - 862573984, - 3823710458, - 723192865, - 278556494, - 1291838803, - 3805763540, - 406196010, - 2838917613, - 913988515, - 2537308578, - 2050007359, - 2076206637, - 3441205153, - 1216246634, - 4152853300, - 4133860385, - 3642108929, - 744354906, - 2908181270, - 3523349878, - 2219393032, - 1951174924, - 3715520690, - 1818786908, - 1603147288, - 1249725516, - 2002023793, - 1444817998, - 255466208, - 3481016870, - 1144100547, - 152227245, - 2359624731, - 24928791, - 3243498396, - 3525334078, - 3128481966, - 1329276511, - 4118935411, + 2146824929, + 3907550316, + 2903161971, + 3785672433, + 461321068, + 2732161407, + 4101278582, + 4188348879, + 3097765044, + 2840107845, + 4074499832, + 1377687947, + 2466413930, + 4131866805, + 2085971777, + 4291528085, + 586406576, + 1172253921, + 4129699839, + 4001684442, + 13304628, + 1388693758, + 2478131213, + 1930071383, + 3722746534, + 3939758989, + 1802140325, + 3906288755, + 520770655, + 3777786608, + 1532556518, + 2718322414, + 517308266, + 3937157700, + 3195294605, + 1852072807, + 2465472955, + 1057364012, + 1530550558, + 1157768849, + 838941154, + 716159305, + 3129977693, + 2454090055, + 656020142, + 3015116146, ]; static final String geminiApiMasa = String.fromCharCodes(List.generate( @@ -11138,87 +11190,87 @@ final class _Env { ).map((int i) => _envieddatageminiApiMasa[i] ^ _enviedkeygeminiApiMasa[i])); static const List _enviedkeyagoraAppId = [ - 2019699686, - 376633958, - 4050649850, - 1674818373, - 3075233672, - 2544364676, - 3899580825, - 796370016, - 1970020000, - 1681017059, - 2739343106, - 2126346831, - 1603253219, - 1276417541, - 929760041, - 1500120122, - 3774937561, - 916732004, - 1552136188, - 3717448878, - 1887432041, - 3620907115, - 1271661613, - 1495931673, - 3305971629, - 4027333802, - 4200936816, - 327389371, - 1103619112, - 479898116, - 869500565, - 652311020, - 3562399583, - 1293331925, - 3868946341, - 1550918941, - 2644615047, - 1997956656, - 1759107946, + 982909115, + 4032014746, + 2667496976, + 1244373814, + 2169549490, + 2513268815, + 2508161066, + 4262625227, + 1093894722, + 1763747356, + 1770864288, + 1378934887, + 3910975307, + 286333664, + 1412833318, + 736382532, + 2647048045, + 2968933242, + 4134348585, + 2526996351, + 4261988531, + 2485258326, + 677404645, + 1947318732, + 2195371670, + 1967723766, + 2804742620, + 2852574734, + 1194486788, + 467783494, + 1174851848, + 2550687044, + 3607336842, + 3890566513, + 3072184807, + 1966246901, + 3746002505, + 414459976, + 1203014288, ]; static const List _envieddataagoraAppId = [ - 2019699665, - 376633943, - 4050649794, - 1674818429, - 3075233720, - 2544364770, - 3899580843, - 796369930, - 1970019990, - 1681017040, - 2739343156, - 2126346784, - 1603253206, - 1276417589, - 929760016, - 1500120144, - 3774937579, - 916731984, - 1552136069, - 3717448859, - 1887432027, - 3620907090, - 1271661593, - 1495931693, - 3305971605, - 4027333786, - 4200936713, - 327389320, - 1103619096, - 479898225, - 869500589, - 652311000, - 3562399591, - 1293331853, - 3868946391, - 1550918981, - 2644615147, - 1997956722, - 1759107846, + 982909068, + 4032014763, + 2667497000, + 1244373774, + 2169549442, + 2513268777, + 2508161048, + 4262625185, + 1093894772, + 1763747375, + 1770864278, + 1378934792, + 3910975358, + 286333648, + 1412833311, + 736382510, + 2647048031, + 2968933198, + 4134348624, + 2526996298, + 4261988481, + 2485258351, + 677404625, + 1947318776, + 2195371694, + 1967723718, + 2804742565, + 2852574781, + 1194486836, + 467783475, + 1174851888, + 2550687088, + 3607336882, + 3890566441, + 3072184725, + 1966246829, + 3746002469, + 414459914, + 1203014396, ]; static final String agoraAppId = String.fromCharCodes(List.generate( @@ -11228,89 +11280,89 @@ final class _Env { ).map((int i) => _envieddataagoraAppId[i] ^ _enviedkeyagoraAppId[i])); static const List _enviedkeyagoraAppCertificate = [ - 1528289819, - 2316060945, - 3036829741, - 1161993814, - 2902668811, - 4023511643, - 983550336, - 245039030, - 1957268645, - 1075796304, - 1014097974, - 2061268076, - 3785212916, - 3287882390, - 2560769916, - 4064839649, - 723607194, - 698604728, - 345505446, - 3052562914, - 3776326233, - 4167868437, - 1307666337, - 3968292498, - 4047593656, - 198722555, - 659764909, - 3103885520, - 507184881, - 1123319428, - 403966393, - 2748006159, - 1421309764, - 2955527235, - 2175633573, - 1569283290, - 3686227639, - 1477138376, - 1216092165, - 2557203675, + 148296787, + 1030269029, + 1441602575, + 3812053442, + 1950278356, + 3671561267, + 1434625225, + 1827943176, + 765538776, + 3510473977, + 3534647847, + 3991651439, + 1730649378, + 2192235652, + 1497868681, + 4222456294, + 1419635174, + 3078558415, + 1343057880, + 3963467963, + 4239606087, + 2705073477, + 4069796052, + 2033453495, + 2041090376, + 230773555, + 394941453, + 2603169682, + 1284221495, + 2992890744, + 124758038, + 467387007, + 341677396, + 4166361420, + 1940683495, + 748215012, + 2783096969, + 3303498089, + 742275820, + 1621720979, ]; static const List _envieddataagoraAppCertificate = [ - 1528289905, - 2316060960, - 3036829722, - 1161993767, - 2902668850, - 4023511663, - 983550388, - 245039043, - 1957268625, - 1075796329, - 1014097925, - 2061268053, - 3785212868, - 3287882492, - 2560769812, - 4064839568, - 723607213, - 698604685, - 345505438, - 3052562839, - 3776326248, - 4167868451, - 1307666325, - 3968292523, - 4047593612, - 198722511, - 659764885, - 3103885473, - 507184835, - 1123319549, - 403966351, - 2748006263, - 1421309730, - 2955527222, - 2175633661, - 1569283240, - 3686227695, - 1477138340, - 1216092231, - 2557203639, + 148296761, + 1030269012, + 1441602616, + 3812053427, + 1950278381, + 3671561223, + 1434625277, + 1827943293, + 765538796, + 3510473920, + 3534647828, + 3991651414, + 1730649362, + 2192235758, + 1497868769, + 4222456215, + 1419635153, + 3078558458, + 1343057888, + 3963467982, + 4239606134, + 2705073523, + 4069796064, + 2033453454, + 2041090428, + 230773511, + 394941493, + 2603169763, + 1284221445, + 2992890625, + 124758048, + 467386887, + 341677362, + 4166361401, + 1940683455, + 748214934, + 2783097041, + 3303497989, + 742275758, + 1621721087, ]; static final String agoraAppCertificate = String.fromCharCodes( @@ -11323,183 +11375,183 @@ final class _Env { _enviedkeyagoraAppCertificate[i])); static const List _enviedkeypayPalClientIdLive = [ - 107288903, - 614831988, - 4040203068, - 3429813848, - 2733003396, - 1944067015, - 313620708, - 2907250323, - 4156285444, - 1765625596, - 2333542423, - 2673848825, - 3728317843, - 3937331972, - 2043356018, - 2127530402, - 2365174097, - 3622282836, - 2449610594, - 398527199, - 2496990901, - 1826979069, - 4293418382, - 2343119501, - 571723893, - 1927600948, - 681507091, - 3869067631, - 736731673, - 4119545971, - 3103273988, - 2974981323, - 1744717925, - 1335271974, - 905115469, - 2426843935, - 2722519600, - 2505995027, - 2943718317, - 143928897, - 815831633, - 2625758284, - 872593736, - 3938610904, - 2700371075, - 550901434, - 3360129398, - 2940034157, - 4217961747, - 3689074472, - 2812814729, - 3286359511, - 1327814558, - 1204299014, - 3467178291, - 3812471686, - 4166990066, - 2620138626, - 1496655607, - 3683705371, - 945841269, - 2520190238, - 1089994132, - 1501936373, - 746711033, - 3664884270, - 2396631108, - 1213866685, - 3823033783, - 3271625688, - 2957916826, - 454165747, - 1927292124, - 2775221852, - 1753305050, - 336498757, - 478006032, - 898627055, - 463342438, - 3972155246, - 994640330, - 2371382182, - 4010409701, - 2869506426, - 3432304513, - 1374552182, - 826988723, + 3552726285, + 2580431135, + 2141467714, + 1977667948, + 1697503721, + 1397758048, + 3646243724, + 3886040870, + 4282098554, + 1516286681, + 3899403517, + 959529468, + 3036846974, + 2315036963, + 3713426433, + 2890887741, + 2531903124, + 721530673, + 4108100855, + 1158560523, + 4215626327, + 4086707267, + 239381149, + 4105735368, + 1927091653, + 192987965, + 2662456065, + 3161952659, + 3814724116, + 1538481867, + 6275129, + 2666158292, + 52303665, + 3064532886, + 2887207556, + 3853394648, + 518755327, + 1643163885, + 882952186, + 2614573476, + 3823537516, + 2867017412, + 1374159785, + 3975971167, + 1231003132, + 423235819, + 2836549127, + 2037589140, + 600989228, + 2723944530, + 996747902, + 2686676354, + 3314504667, + 3381757186, + 1613617052, + 539196595, + 3246335736, + 592746814, + 2067366515, + 1033116353, + 2873721425, + 2123513883, + 3897157020, + 4198928116, + 3497306144, + 1869438875, + 3921661566, + 1971604268, + 452087330, + 652709085, + 530077752, + 1788224811, + 1599395528, + 3396125369, + 1044589359, + 1172057857, + 910407299, + 2777323186, + 2371455886, + 2555785932, + 2693487469, + 1986233264, + 3587400517, + 2796334831, + 1253728048, + 1779876709, + 3229508354, ]; static const List _envieddatapayPalClientIdLive = [ - 107288854, - 614831918, - 4040203130, - 3429813811, - 2733003502, - 1944066950, - 313620619, - 2907250377, - 4156285538, - 1765625531, - 2333542499, - 2673848727, - 3728317940, - 3937332042, - 2043355905, - 2127530439, - 2365174051, - 3622282808, - 2449610510, - 398527209, - 2496990919, - 1826979022, - 4293418477, - 2343119566, - 571723840, - 1927600898, - 681507147, - 3869067523, - 736731688, - 4119545856, - 3103274066, - 2974981255, - 1744717876, - 1335272013, - 905115427, - 2426843946, - 2722519636, - 2505995102, - 2943718351, - 143928888, - 815831604, - 2625758254, - 872593696, - 3938610850, - 2700371145, - 550901475, - 3360129347, - 2940034132, - 4217961814, - 3689074553, - 2812814778, - 3286359487, - 1327814628, - 1204299057, - 3467178346, - 3812471806, - 4166989971, - 2620138695, - 1496655494, - 3683705438, - 945841201, - 2520190279, - 1089994180, - 1501936289, - 746710956, - 3664884328, - 2396631079, - 1213866732, - 3823033824, - 3271625641, - 2957916908, - 454165654, - 1927292044, - 2775221821, - 1753304971, - 336498800, - 478006085, - 898626981, - 463342380, - 3972155192, - 994640280, - 2371382270, - 4010409623, - 2869506338, - 3432304621, - 1374552116, - 826988767, + 3552726364, + 2580431173, + 2141467652, + 1977667847, + 1697503619, + 1397757985, + 3646243811, + 3886040956, + 4282098460, + 1516286622, + 3899403401, + 959529362, + 3036846873, + 2315037037, + 3713426546, + 2890887768, + 2531903206, + 721530717, + 4108100763, + 1158560573, + 4215626277, + 4086707312, + 239381246, + 4105735307, + 1927091696, + 192987915, + 2662456153, + 3161952767, + 3814724133, + 1538481848, + 6275183, + 2666158232, + 52303712, + 3064532989, + 2887207658, + 3853394669, + 518755227, + 1643163808, + 882952088, + 2614573533, + 3823537417, + 2867017382, + 1374159809, + 3975971109, + 1231003062, + 423235762, + 2836549170, + 2037589165, + 600989289, + 2723944451, + 996747853, + 2686676458, + 3314504609, + 3381757237, + 1613617093, + 539196619, + 3246335641, + 592746875, + 2067366402, + 1033116292, + 2873721365, + 2123513922, + 3897157068, + 4198928032, + 3497306229, + 1869438941, + 3921661469, + 1971604349, + 452087413, + 652709036, + 530077774, + 1788224846, + 1599395480, + 3396125400, + 1044589438, + 1172057908, + 910407382, + 2777323256, + 2371455940, + 2555785882, + 2693487423, + 1986233320, + 3587400503, + 2796334775, + 1253728092, + 1779876647, + 3229508462, ]; static final String payPalClientIdLive = String.fromCharCodes( @@ -11511,185 +11563,185 @@ final class _Env { _envieddatapayPalClientIdLive[i] ^ _enviedkeypayPalClientIdLive[i])); static const List _enviedkeypayPalSecretLive = [ - 3715797394, - 13595186, - 1811845277, - 1975576648, - 1674286617, - 2486122697, - 2722295925, - 1242699192, - 3055697009, - 2731288194, - 2023331546, - 2766643557, - 2673510140, - 722576818, - 1373336899, - 1598569098, - 2950186657, - 1123377351, - 3542991205, - 2678530989, - 948979102, - 1819431758, - 3462069332, - 2425034422, - 1177212423, - 1446806414, - 3279340256, - 2033886693, - 670008862, - 3004348450, - 2991122571, - 267202256, - 1208680965, - 3340015669, - 3195017798, - 373603782, - 605272967, - 3278686716, - 2642654776, - 2566416664, - 1465492952, - 2117912535, - 2528345700, - 2026271744, - 3494198039, - 1125523446, - 3113099656, - 1985030467, - 379008588, - 3203991942, - 3315825560, - 2451452556, - 601895611, - 156441566, - 45870619, - 3722590977, - 451500706, - 602019891, - 1212960682, - 2102791444, - 3114303414, - 4274743594, - 1498911818, - 1015892184, - 3294886464, - 2388954152, - 3163683525, - 2835310316, - 4279130683, - 1740296793, - 549044240, - 2650487988, - 2828101736, - 761733028, - 775599179, - 283242824, - 2251976201, - 1635334402, - 2236436860, - 698062887, - 946897587, - 2248652964, - 1830552274, - 3357584199, - 1716609179, - 3980698088, - 3995404758, - 745119542, + 2030481687, + 2374296424, + 1786325201, + 3827900864, + 2011755744, + 1576804989, + 4106065234, + 151360359, + 2017536624, + 700557338, + 675070335, + 3432919210, + 3698582474, + 1171857885, + 512505249, + 4025333002, + 2024742898, + 2116895516, + 547549038, + 295363405, + 2326440743, + 4074596481, + 1625411968, + 1651924972, + 2662701471, + 1280423674, + 2296129374, + 496548526, + 366509611, + 2740563886, + 2612163806, + 427394664, + 2491424604, + 2951614831, + 168838064, + 54111290, + 1090769287, + 3530866617, + 35882260, + 18199976, + 3463767436, + 2943476326, + 500035527, + 1571743413, + 992732431, + 799490452, + 2823646577, + 40216469, + 2940170304, + 184954509, + 4282949234, + 2772598102, + 558625554, + 1849671575, + 894050496, + 36582234, + 161552723, + 2659773181, + 3663862072, + 2018359548, + 587051423, + 916894767, + 4207278312, + 3355701774, + 2070950420, + 531568126, + 2134881064, + 885934849, + 3934990500, + 993122391, + 3529432859, + 1535952155, + 85660285, + 973589799, + 916107842, + 2705808325, + 3987642436, + 1307329773, + 1434021525, + 248291006, + 3625191388, + 2496189146, + 526077057, + 1211805651, + 979820799, + 4115901212, + 1029148217, + 3290241584, ]; static const List _envieddatapayPalSecretLive = [ - 3715797464, - 13595235, - 1811845337, - 1975576585, - 1674286669, - 2486122680, - 2722295838, - 1242699219, - 3055696927, - 2731288262, - 2023331516, - 2766643468, - 2673510074, - 722576834, - 1373336838, - 1598569163, - 2950186735, - 1123377393, - 3542991189, - 2678531046, - 948979164, - 1819431802, - 3462069284, - 2425034481, - 1177212535, - 1446806474, - 3279340161, - 2033886639, - 670008948, - 3004348507, - 2991122682, - 267202194, - 1208681028, - 3340015697, - 3195017855, - 373603756, - 605273087, - 3278686641, - 2642654842, - 2566416712, - 1465492904, - 2117912493, - 2528345651, - 2026271829, - 3494198054, - 1125523366, - 3113099705, - 1985030440, - 379008639, - 3203992014, - 3315825577, - 2451452646, - 601895649, - 156441526, - 45870666, - 3722591083, - 451500748, - 602019844, - 1212960665, - 2102791505, - 3114303486, - 4274743641, - 1498911745, - 1015892105, - 3294886446, - 2388954185, - 3163683570, - 2835310296, - 4279130731, - 1740296801, - 549044320, - 2650487949, - 2828101712, - 761733068, - 775599148, - 283242759, - 2251976295, - 1635334479, - 2236436765, - 698062960, - 946897635, - 2248653043, - 1830552202, - 3357584181, - 1716609219, - 3980697988, - 3995404692, - 745119578, + 2030481757, + 2374296377, + 1786325141, + 3827900801, + 2011755700, + 1576804876, + 4106065209, + 151360268, + 2017536542, + 700557406, + 675070233, + 3432919235, + 3698582412, + 1171857837, + 512505316, + 4025333067, + 2024742844, + 2116895530, + 547549022, + 295363334, + 2326440805, + 4074596533, + 1625412080, + 1651924907, + 2662701551, + 1280423614, + 2296129343, + 496548580, + 366509633, + 2740563927, + 2612163759, + 427394602, + 2491424541, + 2951614731, + 168838025, + 54111312, + 1090769407, + 3530866676, + 35882326, + 18200056, + 3463767548, + 2943476252, + 500035472, + 1571743456, + 992732478, + 799490500, + 2823646528, + 40216574, + 2940170355, + 184954565, + 4282949187, + 2772598076, + 558625608, + 1849671679, + 894050449, + 36582192, + 161552701, + 2659773130, + 3663862027, + 2018359481, + 587051479, + 916894812, + 4207278243, + 3355701855, + 2070950522, + 531568031, + 2134881055, + 885934901, + 3934990580, + 993122415, + 3529432939, + 1535952162, + 85660229, + 973589839, + 916107813, + 2705808266, + 3987642410, + 1307329696, + 1434021620, + 248291049, + 3625191308, + 2496189069, + 526077145, + 1211805601, + 979820711, + 4115901296, + 1029148283, + 3290241628, ]; static final String payPalSecretLive = String.fromCharCodes( @@ -11701,35 +11753,35 @@ final class _Env { _envieddatapayPalSecretLive[i] ^ _enviedkeypayPalSecretLive[i])); static const List _enviedkeyintegrationIdPayMob = [ - 1023019496, - 4122385119, - 1790448847, - 3644666409, - 2170343825, - 3995799472, - 4167074341, - 1922043263, - 3461870588, - 4140576939, - 2830041480, - 444674077, - 3653113277, + 3654573150, + 1726293679, + 2947676486, + 2157023955, + 377315424, + 3751620473, + 123442183, + 781919614, + 3351785447, + 1189637498, + 2610557485, + 2489492130, + 75344293, ]; static const List _envieddataintegrationIdPayMob = [ - 1023019480, - 4122385133, - 1790448892, - 3644666398, - 2170343847, - 3995799427, - 4167074325, - 1922043175, - 3461870478, - 4140577011, - 2830041572, - 444674143, - 3653113297, + 3654573166, + 1726293661, + 2947676533, + 2157023972, + 377315414, + 3751620426, + 123442231, + 781919526, + 3351785365, + 1189637410, + 2610557505, + 2489492192, + 75344329, ]; static final String integrationIdPayMob = String.fromCharCodes( @@ -11742,53 +11794,53 @@ final class _Env { _enviedkeyintegrationIdPayMob[i])); static const List _enviedkeypasswordPayMob = [ - 1825963607, - 905676138, - 1070336210, - 2536777443, - 3675564367, - 1917362113, - 2511258638, - 2921284084, - 1301017440, - 1944947059, - 2667579344, - 3781209778, - 3526918605, - 1399795408, - 3007097263, - 3800056763, - 3044225463, - 3694711411, - 2476633687, - 340573483, - 3837729217, - 4122759077, + 455586774, + 1319198849, + 2688367329, + 4285093273, + 3991230385, + 1888169663, + 3458283361, + 2949993930, + 485515189, + 3920514897, + 624344622, + 1942465452, + 650310738, + 4021059774, + 1090786964, + 2184434844, + 981635995, + 2342210780, + 3867561568, + 1742253967, + 2920680318, + 2330572772, ]; static const List _envieddatapasswordPayMob = [ - 1825963568, - 905676074, - 1070336188, - 2536777352, - 3675564299, - 1917362163, - 2511258669, - 2921284045, - 1301017433, - 1944946968, - 2667579377, - 3781209818, - 3526918537, - 1399795343, - 3007097217, - 3800056780, - 3044225519, - 3694711297, - 2476633615, - 340573511, - 3837729155, - 4122759113, + 455586737, + 1319198913, + 2688367247, + 4285093362, + 3991230453, + 1888169613, + 3458283330, + 2949993971, + 485515148, + 3920514874, + 624344591, + 1942465476, + 650310678, + 4021059809, + 1090787002, + 2184434923, + 981636035, + 2342210734, + 3867561528, + 1742254051, + 2920680252, + 2330572680, ]; static final String passwordPayMob = String.fromCharCodes(List.generate( @@ -11798,43 +11850,43 @@ final class _Env { ).map((int i) => _envieddatapasswordPayMob[i] ^ _enviedkeypasswordPayMob[i])); static const List _enviedkeyusernamePayMob = [ - 2876965738, - 81042004, - 293044104, - 3720460680, - 643958048, - 2209013504, - 3222196834, - 375917936, - 584396499, - 1156804580, - 4134130420, - 2922830491, - 3948382302, - 1130319269, - 1136613337, - 78508040, - 1727752269, + 735226781, + 3232807860, + 604641465, + 2603658497, + 831960714, + 2644715423, + 3108564553, + 888477117, + 3400875144, + 817901851, + 484913884, + 3270397590, + 3527485519, + 1372702805, + 1936333875, + 3970994750, + 3167947641, ]; static const List _envieddatausernamePayMob = [ - 2876965721, - 81042019, - 293044155, - 3720460729, - 643958041, - 2209013553, - 3222196818, - 375917892, - 584396515, - 1156804561, - 4134130374, - 2922830531, - 3948382252, - 1130319357, - 1136613301, - 78508106, - 1727752225, + 735226798, + 3232807811, + 604641418, + 2603658544, + 831960755, + 2644715438, + 3108564601, + 888477065, + 3400875192, + 817901870, + 484913902, + 3270397646, + 3527485501, + 1372702733, + 1936333919, + 3970994812, + 3167947541, ]; static final String usernamePayMob = String.fromCharCodes(List.generate( @@ -11844,581 +11896,581 @@ final class _Env { ).map((int i) => _envieddatausernamePayMob[i] ^ _enviedkeyusernamePayMob[i])); static const List _enviedkeypayMobApikey = [ - 3723728976, - 1215273011, - 2537750835, - 981846707, - 3977135782, - 3681490610, - 1228462757, - 2079892405, - 1553209437, - 2448610911, - 1483838675, - 1132604360, - 514538942, - 1729345632, - 2615717471, - 3546136470, - 320346145, - 3514047911, - 1843900385, - 4073969954, - 1828839473, - 2479679211, - 141721018, - 2559273716, - 2519753738, - 837173102, - 3944305488, - 32079691, - 1988859166, - 3809996002, - 933944853, - 2289368807, - 3581065518, - 2617089793, - 1656097533, - 178378183, - 2236798028, - 2938255398, - 3787465052, - 517548274, - 708989928, - 3331542298, - 886924162, - 1054494104, - 428454061, - 2138864509, - 496272129, - 1729120366, - 1629150846, - 184084375, - 523887970, - 787659071, - 585970057, - 539654779, - 26558004, - 2809642425, - 3887661410, - 1184905850, - 1437529595, - 1714261348, - 17540952, - 2894323789, - 3674662785, - 150387577, - 4040505075, - 3421531640, - 3458816877, - 3557562675, - 864348476, - 314231525, - 781881456, - 1709304382, - 2079806005, - 3636077558, - 1409645701, - 1490054014, - 2602267586, - 3073077407, - 595278017, - 1458740552, - 3312667220, - 3737899192, - 3644337595, - 2215912114, - 2730632424, - 118865405, - 3164486739, - 3029095305, - 3105059154, - 2444382485, - 3773831469, - 1651053517, - 1617439627, - 2016585909, - 3836831762, - 3768359466, - 1306439081, - 1613381726, - 4036148432, - 107458312, - 633179919, - 3429992719, - 342260541, - 797958410, - 470676489, - 1556134852, - 3253038442, - 1681559519, - 1719036991, - 2927123706, - 4041567803, - 2770300904, - 507728342, - 1354500766, - 4161337975, - 267349411, - 2929149504, - 3424605044, - 940025595, - 4176010310, - 2221874986, - 4201237647, - 1957618012, - 4157462150, - 2612655562, - 2156592319, - 553690508, - 1233244492, - 1758566142, - 2438285546, - 750132774, - 2965116999, - 1706837081, - 371489482, - 4255297277, - 357935544, - 257001277, - 727315748, - 1072956100, - 3673643075, - 4046357691, - 2590616896, - 3029558822, - 1258781994, - 2946288183, - 4106148844, - 3983280014, - 1257484436, - 521217398, - 510217891, - 3678579703, - 2579395111, - 3058867647, - 1591160643, - 1336022256, - 3756240001, - 2269344839, - 3820739941, - 3731643610, - 3116716956, - 592533009, - 1384879267, - 1473648556, - 1563338571, - 814009976, - 738309834, - 3138586025, - 613789208, - 1000424327, - 3694513761, - 2651868552, - 603248463, - 812972874, - 3802261336, - 2427722155, - 2218164920, - 62226858, - 3947076966, - 518310543, - 2260624468, - 3344197974, - 2726134405, - 4241741029, - 269060307, - 937520099, - 2707798714, - 1443816319, - 804754070, - 2663710699, - 2606736712, - 995983709, - 2004734002, - 1326300625, - 4184947415, - 395740392, - 2744393776, - 3275005318, - 4115289855, - 3991826424, - 871724699, - 1589754939, - 2680165488, - 810508888, - 3259101210, - 3760246748, - 1653275617, - 3080603367, - 2368619942, - 2101381205, - 201600194, - 1805266905, - 2685354893, - 506296234, - 3387051920, - 1078356343, - 3530313303, - 2680100010, - 414840099, - 41724007, - 3835898143, - 164563809, - 2066693932, - 2329076678, - 573113097, - 2183392390, - 3052429791, - 2002499056, - 2831591796, - 2489650398, - 2292408225, - 1725212627, - 746356394, - 1370647524, - 3303027571, - 3610039829, - 1450691336, - 340757343, - 3698039224, - 1489470948, - 1878489264, - 523962765, - 353348611, - 2378456544, - 168806997, - 2127420503, - 3359047823, - 968399298, - 1639034167, - 3574380211, - 4103219631, - 2002561195, - 942517816, - 2833571096, - 2804425799, - 1534049452, - 1179310633, - 2338195182, - 1178363811, - 1259859759, - 1409031267, - 3941879681, - 3005022296, - 1328199769, - 2561309544, - 1033477592, - 3111997709, - 3133858369, - 3268275763, - 1176667050, - 3145730901, - 474368167, - 2049385393, - 3696764070, - 4100858960, - 2333448519, - 1208143135, - 1196617488, - 3335483625, - 716485021, - 3553964254, - 4291118501, - 3944262376, - 2652511113, - 2694033267, - 720135440, - 1998247443, + 2288554765, + 99021556, + 1379082864, + 3641224902, + 1617390932, + 2147021960, + 785487333, + 858280014, + 737909779, + 929875170, + 3972756086, + 485612469, + 3421108523, + 4010096243, + 64260136, + 1894613888, + 3787149752, + 3344674437, + 854275289, + 1976573742, + 2270494605, + 239810333, + 4170960803, + 2350926209, + 2788073045, + 2842168659, + 1187478396, + 2291877331, + 1451515120, + 976186188, + 3288466792, + 2918391322, + 1054032172, + 3631612848, + 2570562905, + 1507096279, + 1568957329, + 2861347782, + 2126215707, + 1271642600, + 3009410419, + 178493041, + 620874867, + 3711808171, + 2493969056, + 4030909934, + 1350497437, + 2734123054, + 768645482, + 3549580818, + 2941994991, + 3126483035, + 1934726425, + 909758111, + 1492783858, + 1103493827, + 2098224472, + 2944369037, + 4029371986, + 3788572137, + 3141935863, + 4131572112, + 3331115354, + 980222396, + 1315356134, + 3818998721, + 2816648721, + 2034937471, + 160324387, + 1976609508, + 1213246212, + 1910474542, + 1177398683, + 2157129451, + 2431024978, + 606165381, + 4097525413, + 3260187395, + 2682525837, + 2234868792, + 1122049514, + 3115849585, + 3433788576, + 3945226751, + 3872653808, + 3588345399, + 44330722, + 3148245917, + 501421260, + 4135023008, + 3359995159, + 1721403393, + 1310284016, + 1575584382, + 4020185764, + 3164585227, + 904832103, + 3737745846, + 1721936888, + 1964930153, + 2309824574, + 4018644885, + 2347934267, + 3302578110, + 148693602, + 2777360975, + 1179923342, + 582459283, + 2605165049, + 1508802989, + 1150742329, + 3442074447, + 2136994736, + 3137392863, + 84173647, + 2773779105, + 4039649431, + 3467094362, + 914576556, + 3420997411, + 262365489, + 424245432, + 1933033876, + 715206461, + 2128227907, + 3528523880, + 655515621, + 942302124, + 3947702053, + 2534699992, + 2830377873, + 1623889930, + 2002636873, + 4272113400, + 394708502, + 23811932, + 490809059, + 3334395671, + 3319809835, + 1013090730, + 443348053, + 1816356813, + 72725651, + 1150267119, + 492520233, + 911614955, + 2617323322, + 2438344147, + 2359404232, + 2278077740, + 2491802776, + 1706761179, + 1996337518, + 3564926735, + 4022679790, + 1311184514, + 1952451092, + 2883315381, + 1343101584, + 723275509, + 1951539390, + 1149312437, + 1112938651, + 4047981700, + 1669035893, + 2390525571, + 3757106778, + 2239198993, + 3383702978, + 908696099, + 3709077244, + 3560935101, + 1459778206, + 1056915818, + 64064107, + 3277119886, + 1792052535, + 2575453249, + 3968966925, + 1299377180, + 2745550106, + 2496848151, + 1376586936, + 1018852387, + 1880066071, + 586356832, + 2156328563, + 1846774569, + 2440121465, + 2323298114, + 4200981759, + 447629554, + 4081049949, + 3555810496, + 1854698230, + 2749732169, + 1294011321, + 2879684, + 2628839113, + 1745369115, + 79000060, + 4119961120, + 2150275563, + 178890822, + 508194240, + 1032693264, + 1762091940, + 3058168058, + 2225041293, + 3411953063, + 256248766, + 2662256645, + 636293703, + 2826287380, + 2619048493, + 3171863243, + 4279962384, + 276212829, + 1984437294, + 3180368442, + 4150462732, + 1807107120, + 874527245, + 3886933849, + 2604832068, + 1845087947, + 191955219, + 1935696233, + 1839548663, + 3304755351, + 2780783422, + 2995577488, + 3479722691, + 2412828850, + 3983823882, + 760349881, + 3136216048, + 1313286025, + 820002687, + 4218634656, + 4156570742, + 2317198155, + 331974873, + 4082744982, + 2033334067, + 1253887459, + 3828824863, + 1509681618, + 2135130800, + 244223328, + 4243440203, + 4170315033, + 1753766115, + 1010156976, + 3376300731, + 1973546264, + 1387451528, + 582839595, + 2302013555, + 632179390, + 2067259020, + 1826567799, + 540364447, + 1459916657, + 1873122319, + 1903890961, + 2089439980, + 987427398, + 2405067238, + 4080331041, + 495170366, + 269747709, + 1562261480, + 2732132835, + 3369938925, + 1438711953, + 1349642243, + 1911877160, + 617763650, + 3972169256, + 2747361227, + 3254961475, + 2440869133, + 2728150260, + 1200952805, + 3323860211, ]; static const List _envieddatapayMobApikey = [ - 3723728925, - 1215273079, - 2537750849, - 981846772, - 3977135831, - 3681490681, - 1228462816, - 2079892450, - 1553209358, - 2448610926, - 1483838625, - 1132604318, - 514538959, - 1729345544, - 2615717429, - 3546136561, - 320346182, - 3514047983, - 1843900311, - 4073970023, - 1828839521, - 2479679151, - 141721036, - 2559273636, - 2519753824, - 837173028, - 3944305511, - 32079677, - 1988859204, - 3809995942, - 933944919, - 2289368738, - 3581065558, - 2617089907, - 1656097458, - 178378224, - 2236797983, - 2938255381, - 3787464990, - 517548215, - 708989866, - 3331542397, - 886924272, - 1054494196, - 428454091, - 2138864424, - 496272246, - 1729120314, - 1629150783, - 184084388, - 523887883, - 787659018, - 585970139, - 539654677, - 26558052, - 2809642380, - 3887661368, - 1184905748, - 1437529485, - 1714261259, - 17540884, - 2894323838, - 3674662860, - 150387531, - 4040504992, - 3421531585, - 3458816799, - 3557562742, - 864348542, - 314231426, - 781881346, - 1709304402, - 2079806075, - 3636077474, - 1409645793, - 1490053915, - 2602267578, - 3073077463, - 595278068, - 1458740536, - 3312667136, - 3737899240, - 3644337629, - 2215912069, - 2730632358, - 118865335, - 3164486689, - 3029095423, - 3105059115, - 2444382500, - 3773831519, - 1651053480, - 1617439697, - 2016585983, - 3836831844, - 3768359451, - 1306439165, - 1613381680, - 4036148455, - 107458418, - 633180009, - 3429992760, - 342260555, - 797958494, - 470676544, - 1556134784, - 3253038355, - 1681559464, - 1719037013, - 2927123634, - 4041567836, - 2770300889, - 507728277, - 1354500777, - 4161337915, - 267349446, - 2929149497, - 3424604999, - 940025539, - 4176010254, - 2221875070, - 4201237707, - 1957617957, - 4157462216, - 2612655499, - 2156592268, - 553690618, - 1233244539, - 1758566058, - 2438285498, - 750132800, - 2965116963, - 1706837025, - 371489408, - 4255297167, - 357935577, - 257001285, - 727315733, - 1072956086, - 3673643060, - 4046357739, - 2590616877, - 3029558902, - 1258782046, - 2946288250, - 4106148774, - 3983280119, - 1257484526, - 521217287, - 510217960, - 3678579634, - 2579395198, - 3058867685, - 1591160614, - 1336022167, - 3756240105, - 2269344822, - 3820739926, - 3731643543, - 3116717033, - 592533085, - 1384879350, - 1473648606, - 1563338509, - 814009904, - 738309881, - 3138586088, - 613789225, - 1000424390, - 3694513670, - 2651868608, - 603248428, - 812972802, - 3802261353, - 2427722142, - 2218164987, - 62226928, - 3947076959, - 518310618, - 2260624437, - 3344197900, - 2726134481, - 4241740969, - 269060252, - 937520027, - 2707798740, - 1443816200, - 804754086, - 2663710633, - 2606736668, - 995983673, - 2004734024, - 1326300569, - 4184947359, - 395740314, - 2744393842, - 3275005383, - 4115289741, - 3991826321, - 871724776, - 1589754977, - 2680165397, - 810508842, - 3259101263, - 3760246673, - 1653275572, - 3080603314, - 2368619996, - 2101381135, - 201600243, - 1805266843, - 2685354979, - 506296296, - 3387052021, - 1078356274, - 3530313278, - 2680100032, - 414840171, - 41723921, - 3835898193, - 164563723, - 2066694005, - 2329076618, - 573113191, - 2183392469, - 3052429806, - 2002498994, - 2831591713, - 2489650327, - 2292408290, - 1725212574, - 746356418, - 1370647479, - 3303027486, - 3610039877, - 1450691424, - 340757278, - 3698039177, - 1489470929, - 1878489305, - 523962859, - 353348683, - 2378456473, - 168806915, - 2127420454, - 3359047876, - 968399239, - 1639034234, - 3574380283, - 4103219704, - 2002561234, - 942517875, - 2833571156, - 2804425765, - 1534049493, - 1179310684, - 2338195111, - 1178363891, - 1259859801, - 1409031168, - 3941879753, - 3005022305, - 1328199692, - 2561309453, - 1033477524, - 3111997758, - 3133858359, - 3268275817, - 1176667091, - 3145730833, - 474368193, - 2049385356, - 3696764101, - 4100858918, - 2333448484, - 1208143175, - 1196617570, - 3335483569, - 716485105, - 3553964188, - 4291118537, - 3944262282, - 2652511211, - 2694033169, - 720135538, - 1998247537, + 2288554816, + 99021488, + 1379082754, + 3641224833, + 1617390885, + 2147022019, + 785487264, + 858279961, + 737909824, + 929875155, + 3972755972, + 485612515, + 3421108570, + 4010096155, + 64260162, + 1894613991, + 3787149791, + 3344674509, + 854275247, + 1976573803, + 2270494685, + 239810393, + 4170960853, + 2350926289, + 2788073023, + 2842168601, + 1187478347, + 2291877285, + 1451515050, + 976186120, + 3288466730, + 2918391391, + 1054032212, + 3631612866, + 2570562838, + 1507096288, + 1568957378, + 2861347829, + 2126215769, + 1271642541, + 3009410353, + 178492950, + 620874753, + 3711808199, + 2493969094, + 4030909883, + 1350497514, + 2734123130, + 768645419, + 3549580833, + 2941994886, + 3126483054, + 1934726475, + 909758193, + 1492783778, + 1103493878, + 2098224386, + 2944369123, + 4029371940, + 3788572038, + 3141935803, + 4131572131, + 3331115287, + 980222350, + 1315356085, + 3818998776, + 2816648803, + 2034937402, + 160324449, + 1976609411, + 1213246326, + 1910474562, + 1177398741, + 2157129407, + 2431024950, + 606165472, + 4097525469, + 3260187467, + 2682525880, + 2234868808, + 1122049470, + 3115849505, + 3433788614, + 3945226696, + 3872653758, + 3588345469, + 44330640, + 3148245995, + 501421237, + 4135022993, + 3359995237, + 1721403492, + 1310283946, + 1575584308, + 4020185810, + 3164585274, + 904832051, + 3737745880, + 1721936847, + 1964930067, + 2309824600, + 4018644898, + 2347934285, + 3302578154, + 148693547, + 2777360907, + 1179923447, + 582459364, + 2605164947, + 1508803045, + 1150742366, + 3442074494, + 2136994803, + 3137392872, + 84173571, + 2773779140, + 4039649518, + 3467094377, + 914576532, + 3420997483, + 262365541, + 424245500, + 1933033965, + 715206515, + 2128227842, + 3528523867, + 655515539, + 942302107, + 3947702129, + 2534699912, + 2830377975, + 1623890030, + 2002636849, + 4272113330, + 394708580, + 23811901, + 490808987, + 3334395686, + 3319809881, + 1013090781, + 443347973, + 1816356768, + 72725699, + 1150267035, + 492520292, + 911614881, + 2617323331, + 2438344105, + 2359404217, + 2278077799, + 2491802845, + 1706761090, + 1996337460, + 3564926826, + 4022679689, + 1311184618, + 1952451173, + 2883315334, + 1343101661, + 723275392, + 1951539442, + 1149312480, + 1112938729, + 4047981762, + 1669035837, + 2390525616, + 3757106715, + 2239199008, + 3383702915, + 908696132, + 3709077172, + 3560935134, + 1459778262, + 1056915803, + 64064094, + 3277119949, + 1792052589, + 2575453304, + 3968967000, + 1299377277, + 2745550144, + 2496848195, + 1376586996, + 1018852460, + 1880066159, + 586356750, + 2156328452, + 1846774553, + 2440121403, + 2323298070, + 4200981659, + 447629448, + 4081049877, + 3555810440, + 1854698116, + 2749732107, + 1294011384, + 2879670, + 2628839072, + 1745369192, + 78999974, + 4119961157, + 2150275481, + 178890771, + 508194189, + 1032693317, + 1762092017, + 3058167936, + 2225041367, + 3411953046, + 256248828, + 2662256747, + 636293637, + 2826287473, + 2619048552, + 3171863202, + 4279962490, + 276212757, + 1984437336, + 3180368500, + 4150462822, + 1807107177, + 874527297, + 3886933815, + 2604832023, + 1845087994, + 191955281, + 1935696188, + 1839548606, + 3304755412, + 2780783475, + 2995577592, + 3479722640, + 2412828895, + 3983823962, + 760349905, + 3136215985, + 1313286072, + 820002634, + 4218634697, + 4156570640, + 2317198083, + 331974816, + 4082745024, + 2033334082, + 1253887400, + 3828824922, + 1509681567, + 2135130872, + 244223287, + 4243440178, + 4170315090, + 1753766063, + 1010157010, + 3376300738, + 1973546349, + 1387451585, + 582839675, + 2302013445, + 632179421, + 2067259076, + 1826567758, + 540364490, + 1459916564, + 1873122371, + 1903890978, + 2089439898, + 987427356, + 2405067167, + 4080331109, + 495170392, + 269747648, + 1562261387, + 2732132757, + 3369938830, + 1438712009, + 1349642353, + 1911877232, + 617763630, + 3972169322, + 2747361191, + 3254961441, + 2440869231, + 2728150166, + 1200952711, + 3323860113, ]; static final String payMobApikey = String.fromCharCodes(List.generate( @@ -12428,35 +12480,35 @@ final class _Env { ).map((int i) => _envieddatapayMobApikey[i] ^ _enviedkeypayMobApikey[i])); static const List _enviedkeyintegrationIdPayMobWallet = [ - 2646734811, - 2154844139, - 2828971052, - 3779683199, - 4014801231, - 3436682711, - 1770056919, - 849610637, - 1865684828, - 4060009487, - 2414975444, - 1360312368, - 1809129449, + 1413137455, + 898254321, + 2177459705, + 3072645458, + 1820170071, + 2197507912, + 117696677, + 1351150926, + 3651392903, + 3946798712, + 928177752, + 1620501515, + 1162201864, ]; static const List _envieddataintegrationIdPayMobWallet = [ - 2646734827, - 2154844121, - 2828971035, - 3779683144, - 4014801272, - 3436682724, - 1770056942, - 849610709, - 1865684782, - 4060009559, - 2414975416, - 1360312434, - 1809129349, + 1413137439, + 898254275, + 2177459662, + 3072645477, + 1820170080, + 2197507963, + 117696668, + 1351150870, + 3651393013, + 3946798624, + 928177716, + 1620501577, + 1162201956, ]; static final String integrationIdPayMobWallet = String.fromCharCodes( @@ -12469,41 +12521,41 @@ final class _Env { _enviedkeyintegrationIdPayMobWallet[i])); static const List _enviedkeysmsPasswordEgypt = [ - 3678403062, - 921316358, - 2119469234, - 3964382448, - 4031965943, - 1490296274, - 3102354685, - 1093300832, - 2193426586, - 1957111558, - 3437137883, - 735899741, - 2272096733, - 4271566894, - 962616527, - 3529903167, + 182877642, + 162116053, + 3144150019, + 2192521632, + 3078726239, + 628617237, + 3598374899, + 1422188225, + 2405592561, + 2801136078, + 4004604538, + 1874426530, + 1875960650, + 3418924421, + 876935509, + 2604388168, ]; static const List _envieddatasmsPasswordEgypt = [ - 3678403004, - 921316399, - 2119469284, - 3964382360, - 4031965898, - 1490296227, - 3102354591, - 1093300815, - 2193426650, - 1957111627, - 3437137795, - 735899695, - 2272096645, - 4271566914, - 962616461, - 3529903187, + 182877568, + 162116092, + 3144150101, + 2192521672, + 3078726242, + 628617316, + 3598374801, + 1422188270, + 2405592497, + 2801136003, + 4004604450, + 1874426576, + 1875960594, + 3418924521, + 876935447, + 2604388132, ]; static final String smsPasswordEgypt = String.fromCharCodes( @@ -12515,73 +12567,73 @@ final class _Env { _envieddatasmsPasswordEgypt[i] ^ _enviedkeysmsPasswordEgypt[i])); static const List _enviedkeyocpApimSubscriptionKey = [ - 2297690335, - 3649618458, - 398213099, - 933915964, - 749138045, - 1684877112, - 3344408798, - 2283966076, - 1730733504, - 743522602, - 956536570, - 1934632208, - 1712741206, - 2980465744, - 3941158321, - 1323674449, - 3883397764, - 2019641366, - 4039619834, - 4064550257, - 2820037037, - 2632907625, - 1279187954, - 1662713325, - 3654026326, - 1322774740, - 2519883293, - 452513155, - 3940634576, - 4129411791, - 3724767203, - 3742765583, + 2414595069, + 881357453, + 2811886322, + 3795850197, + 1418919245, + 3119792422, + 186943801, + 265664303, + 1973937884, + 3434198924, + 3676058486, + 2705361094, + 3314588616, + 1182082916, + 2271931341, + 1919957345, + 1172116628, + 1231830017, + 862957600, + 3141659494, + 2386846607, + 3726068195, + 2750296861, + 2555568196, + 529987068, + 113644863, + 740301871, + 631670019, + 2211800778, + 1751909562, + 1566096200, + 3834424971, ]; static const List _envieddataocpApimSubscriptionKey = [ - 2297690351, - 3649618556, - 398213086, - 933915992, - 749137948, - 1684877147, - 3344408765, - 2283965983, - 1730733476, - 743522632, - 956536473, - 1934632309, - 1712741218, - 2980465761, - 3941158274, - 1323674464, - 3883397862, - 2019641383, - 4039619739, - 4064550212, - 2820037067, - 2632907600, - 1279187911, - 1662713311, - 3654026351, - 1322774765, - 2519883307, - 452513200, - 3940634592, - 4129411837, - 3724767110, - 3742765628, + 2414595021, + 881357547, + 2811886279, + 3795850161, + 1418919212, + 3119792453, + 186943834, + 265664332, + 1973937848, + 3434199022, + 3676058389, + 2705361059, + 3314588668, + 1182082901, + 2271931390, + 1919957328, + 1172116726, + 1231830064, + 862957633, + 3141659475, + 2386846697, + 3726068186, + 2750296872, + 2555568246, + 529987013, + 113644806, + 740301849, + 631670064, + 2211800826, + 1751909512, + 1566096173, + 3834425016, ]; static final String ocpApimSubscriptionKey = String.fromCharCodes( @@ -12594,135 +12646,135 @@ final class _Env { _enviedkeyocpApimSubscriptionKey[i])); static const List _enviedkeychatGPTkeySeferNew4 = [ - 802572751, - 3455552097, - 1705257458, - 2896833828, - 2309706243, - 1010237010, - 3953832472, - 134510532, - 4087900184, - 2305846182, - 4175727437, - 831393383, - 606424767, - 1375223856, - 269516484, - 3536795816, - 2479390417, - 3555027740, - 1456557372, - 3788329405, - 3398236498, - 3363394251, - 1427388948, - 2680660528, - 1201809982, - 4291984710, - 594391088, - 4105290667, - 1093192081, - 3491209749, - 3346793899, - 1533863406, - 2003005950, - 91682234, - 256259453, - 2006525759, - 2530236711, - 2538999939, - 3974804916, - 201344153, - 2944178723, - 2190617712, - 1293656315, - 587998579, - 1666457922, - 913934975, - 2009373988, - 1588919312, - 4021555044, - 2056212906, - 274360529, - 3344792330, - 2397957442, - 1316682032, - 2170155814, - 2599549348, - 3235621948, - 405711353, - 4198068261, - 3910053473, - 4090375649, - 2772908506, - 473463550, + 1076556633, + 2963087341, + 3996850880, + 736133229, + 2083391885, + 631860030, + 3191908704, + 3580038176, + 3669196509, + 3078267219, + 2170935048, + 3425289401, + 1826201013, + 1391964679, + 4050338086, + 2284609889, + 272223768, + 4034924380, + 771773434, + 691382098, + 3384763695, + 1210074658, + 3737542700, + 795874415, + 2520481719, + 2531161799, + 1532035674, + 3304479058, + 142476670, + 4254358635, + 1807727471, + 3356514599, + 931112425, + 1954700454, + 3091208618, + 3038959884, + 566640323, + 26573218, + 1717059450, + 2298525598, + 1517625648, + 4253189760, + 700894011, + 2924350747, + 2138406976, + 3025390544, + 1698946599, + 1379395357, + 118566879, + 231476294, + 1479980332, + 3169308695, + 490528272, + 725922310, + 3086397863, + 279991260, + 402151131, + 1754887422, + 982253443, + 3552655340, + 371865671, + 2689612609, + 3470419031, ]; static const List _envieddatachatGPTkeySeferNew4 = [ - 802572725, - 3455552006, - 1705257439, - 2896833874, - 2309706351, - 1010236987, - 3953832573, - 134510569, - 4087900202, - 2305846218, - 4175727484, - 831393341, - 606424787, - 1375223872, - 269516476, - 3536795841, - 2479390396, - 3555027792, - 1456557430, - 3788329355, - 3398236453, - 3363394202, - 1427389019, - 2680660550, - 1201810012, - 4291984676, - 594391044, - 4105290751, - 1093192191, - 3491209814, - 3346793874, - 1533863350, - 2003005836, - 91682242, - 256259354, - 2006525802, - 2530236770, - 2539000058, - 3974804962, - 201344200, - 2944178794, - 2190617605, - 1293656269, - 587998503, - 1666457867, - 913934907, - 2009373968, - 1588919393, - 4021554996, - 2056212894, - 274360471, - 3344792415, - 2397957399, - 1316682049, - 2170155849, - 2599549431, - 3235621897, - 405711265, - 4198068311, - 3910053433, - 4090375565, - 2772908440, - 473463442, + 1076556579, + 2963087242, + 3996850925, + 736133147, + 2083391969, + 631860055, + 3191908613, + 3580038157, + 3669196527, + 3078267199, + 2170935097, + 3425289443, + 1826201049, + 1391964791, + 4050338142, + 2284609800, + 272223861, + 4034924304, + 771773360, + 691382116, + 3384763736, + 1210074739, + 3737542755, + 795874329, + 2520481749, + 2531161765, + 1532035694, + 3304478982, + 142476560, + 4254358568, + 1807727446, + 3356514687, + 931112347, + 1954700510, + 3091208653, + 3038959961, + 566640262, + 26573275, + 1717059372, + 2298525647, + 1517625721, + 4253189877, + 700893965, + 2924350799, + 2138406921, + 3025390484, + 1698946579, + 1379395436, + 118566799, + 231476338, + 1479980394, + 3169308738, + 490528325, + 725922423, + 3086397896, + 279991183, + 402151150, + 1754887334, + 982253553, + 3552655284, + 371865643, + 2689612547, + 3470419003, ]; static final String chatGPTkeySeferNew4 = String.fromCharCodes( @@ -12735,239 +12787,239 @@ final class _Env { _enviedkeychatGPTkeySeferNew4[i])); static const List _enviedkeyanthropicAIkeySeferNew = [ - 3479477610, - 3615114939, - 2926186075, - 6402450, - 1720521752, - 2786945992, - 1949250059, - 1076450275, - 1960614830, - 422410822, - 2042117951, - 1763859933, - 887290267, - 2784522954, - 88897863, - 2904272465, - 2566518637, - 1107691241, - 116819064, - 1712377382, - 1370300190, - 2514707803, - 1447914071, - 1130961833, - 3332390200, - 3397827374, - 2702019946, - 2538719235, - 2847354880, - 1832754895, - 1529755313, - 278853170, - 1150884037, - 2220906650, - 3600398257, - 3368075810, - 2342897489, - 3321500580, - 1127027946, - 1786799104, - 3680142700, - 4102326166, - 2815073048, - 627862003, - 1494026009, - 761614290, - 968364060, - 3760814811, - 3470800998, - 1136249104, - 2646150624, - 3070860494, - 2324025548, - 1863809136, - 332144136, - 3020345651, - 3454335913, - 3470783424, - 1305240915, - 1238011524, - 396853952, - 2840551237, - 3815946499, - 1285924520, - 451967087, - 1944099229, - 1589520885, - 874144423, - 2887355459, - 2921016053, - 3092523971, - 1410235500, - 3825967860, - 1807167872, - 3900185276, - 2291156814, - 3505125241, - 4106300940, - 3776410205, - 1447297598, - 3617201120, - 1346934072, - 2906857762, - 3864401941, - 2242797352, - 1572067547, - 3070854766, - 2129770827, - 1359605379, - 2319096037, - 594103905, - 939252375, - 4009885263, - 702728526, - 511430928, - 4071864904, - 976492948, - 2116782594, - 1843060184, - 1312468833, - 2734078799, - 1381733066, - 2234756521, - 3476232750, - 1284784974, - 2097446067, - 1485905287, - 1319637782, - 3439330346, - 1827313912, - 1921241104, - 425186146, - 2122706123, - 3534703932, - 1511725898, + 3497607593, + 2340598064, + 1262607821, + 565891647, + 3746086673, + 4226120506, + 3533229263, + 1265467964, + 1805177012, + 375206222, + 1205414190, + 1589033804, + 2957731336, + 251111401, + 300352762, + 971190292, + 165378315, + 180421589, + 2498489434, + 271619944, + 4027613759, + 3152936729, + 4293000363, + 4047303899, + 721987091, + 1945831717, + 487668300, + 958684386, + 3048525290, + 583914267, + 3948826816, + 1147224384, + 11730391, + 3408113444, + 1165476622, + 1324843187, + 2904161174, + 1066334824, + 3472421579, + 3866691095, + 957207598, + 1359260716, + 898571805, + 1658525385, + 3476539724, + 1854197051, + 1927574239, + 371396213, + 2776052536, + 501553212, + 581863247, + 4188546243, + 2293407257, + 3405259633, + 463115780, + 3470969446, + 527942819, + 1211438252, + 1309032602, + 375510161, + 3051306551, + 1665084745, + 3666305438, + 345147658, + 2282310515, + 1286203917, + 2113155411, + 4282979471, + 394325385, + 3992158732, + 935801107, + 346276638, + 439947739, + 1487007136, + 1544596163, + 1932454069, + 3417583390, + 2827628785, + 1489482874, + 2583490175, + 2578164134, + 3994046976, + 2882095989, + 2893788550, + 3625013441, + 1394658830, + 2171262927, + 1731894667, + 1491221739, + 4066090668, + 210415079, + 1347650176, + 450661996, + 3143646300, + 3222623393, + 496573453, + 3636174320, + 2816243210, + 2023062957, + 2555119348, + 255887650, + 768360210, + 872971978, + 2262564598, + 3341469319, + 3284443495, + 3177589200, + 692016282, + 270380105, + 3637537557, + 1589396004, + 3575714188, + 3604479021, + 2982744586, + 1689906383, ]; static const List _envieddataanthropicAIkeySeferNew = [ - 3479477520, - 3615114972, - 2926186102, - 6402531, - 1720521850, - 2786945963, - 1949250086, - 1076450194, - 1960614872, - 422410793, - 2042117900, - 1763859940, - 887290294, - 2784522919, - 88897833, - 2904272485, - 2566518587, - 1107691149, - 116818997, - 1712377463, - 1370300203, - 2514707765, - 1447914018, - 1130961891, - 3332390237, - 3397827431, - 2702019891, - 2538719339, - 2847354957, - 1832754817, - 1529755269, - 278853218, - 1150883969, - 2220906691, - 3600398275, - 3368075797, - 2342897440, - 3321500619, - 1127027858, - 1786799155, - 3680142657, - 4102326242, - 2815073066, - 627861914, - 1494026024, - 761614238, - 968364148, - 3760814828, - 3470800903, - 1136249182, - 2646150580, - 3070860426, - 2324025514, - 1863809065, - 332144206, - 3020345630, - 3454335982, - 3470783398, - 1305240939, - 1238011635, - 396853928, - 2840551184, - 3815946569, - 1285924594, - 451967020, - 1944099310, - 1589520833, - 874144400, - 2887355398, - 2921015952, - 3092523942, - 1410235392, - 3825967807, - 1807167982, - 3900185220, - 2291156753, - 3505125164, - 4106301039, - 3776410160, - 1447297643, - 3617201069, - 1346934101, - 2906857803, - 3864401990, - 2242797412, - 1572067514, - 3070854664, - 2129770875, - 1359605462, - 2319095983, - 594103814, - 939252391, - 4009885195, - 702728504, - 511430981, - 4071864868, - 976492997, - 2116782704, - 1843060124, - 1312468757, - 2734078818, - 1381733117, - 2234756511, - 3476232813, - 1284784924, - 2097446081, - 1485905388, - 1319637831, - 3439330427, - 1827313824, - 1921241186, - 425186106, - 2122706087, - 3534703998, - 1511725862, + 3497607635, + 2340598103, + 1262607840, + 565891662, + 3746086771, + 4226120537, + 3533229282, + 1265467981, + 1805177026, + 375206177, + 1205414173, + 1589033845, + 2957731365, + 251111300, + 300352660, + 971190304, + 165378397, + 180421553, + 2498489367, + 271619897, + 4027613706, + 3152936823, + 4293000414, + 4047303825, + 721987190, + 1945831788, + 487668245, + 958684298, + 3048525223, + 583914325, + 3948826868, + 1147224336, + 11730323, + 3408113533, + 1165476732, + 1324843140, + 2904161255, + 1066334727, + 3472421555, + 3866691108, + 957207555, + 1359260760, + 898571823, + 1658525344, + 3476539773, + 1854197111, + 1927574199, + 371396162, + 2776052569, + 501553266, + 581863195, + 4188546183, + 2293407359, + 3405259560, + 463115842, + 3470969419, + 527942884, + 1211438282, + 1309032610, + 375510246, + 3051306591, + 1665084700, + 3666305492, + 345147728, + 2282310448, + 1286204030, + 2113155431, + 4282979512, + 394325452, + 3992158825, + 935801206, + 346276722, + 439947664, + 1487007182, + 1544596219, + 1932454122, + 3417583435, + 2827628690, + 1489482775, + 2583490090, + 2578164203, + 3994047085, + 2882095900, + 2893788629, + 3625013389, + 1394658927, + 2171262889, + 1731894715, + 1491221694, + 4066090726, + 210414976, + 1347650224, + 450661928, + 3143646250, + 3222623476, + 496573537, + 3636174241, + 2816243320, + 2023063017, + 2555119232, + 255887631, + 768360229, + 872972028, + 2262564533, + 3341469397, + 3284443413, + 3177589179, + 692016331, + 270380056, + 3637537613, + 1589396054, + 3575714260, + 3604479041, + 2982744648, + 1689906339, ]; static final String anthropicAIkeySeferNew = String.fromCharCodes( @@ -12980,135 +13032,135 @@ final class _Env { _enviedkeyanthropicAIkeySeferNew[i])); static const List _enviedkeyllama3Key = [ - 1524403914, - 4016335895, - 3328733910, - 1125877297, - 3368721306, - 3926748242, - 3491931708, - 341019699, - 2480376072, - 2751235699, - 1448204248, - 1513632729, - 2480786233, - 224517651, - 957870316, - 3000675001, - 752845128, - 4288755982, - 3544347193, - 884775220, - 2976075518, - 2100342595, - 2887489224, - 1427172134, - 441612982, - 827796164, - 2652257811, - 1684421300, - 3291916054, - 2015848698, - 2153940104, - 1457392611, - 2318310861, - 1714358246, - 2169232573, - 3417310162, - 750362000, - 3987913299, - 4005911663, - 2591195636, - 1762055178, - 2565744729, - 2598321412, - 3104576693, - 3891559890, - 2252847664, - 1620566338, - 1461415523, - 855782017, - 3262931230, - 271887747, - 1829864840, - 1982473630, - 4177959961, - 4266624199, - 1454536994, - 3091051386, - 775690869, - 702412996, - 567392957, - 2896939500, - 3672613451, - 1160680369, + 885088594, + 2029043020, + 471244066, + 106289035, + 4150241905, + 2162869705, + 2535617460, + 2791378646, + 3599865233, + 11829306, + 3723821367, + 897214443, + 2346921271, + 620796019, + 2157117439, + 1088999473, + 1355091641, + 3547099981, + 1805725306, + 3681386991, + 4237192823, + 2429376902, + 1329080405, + 2547249326, + 1586537703, + 2923317113, + 4289190607, + 2652587145, + 2323377003, + 2865396422, + 2052834529, + 3754568014, + 1627697854, + 779921213, + 3298031603, + 333058013, + 2244345759, + 3388336537, + 3040084026, + 69525403, + 2290723667, + 3368367523, + 2488957174, + 4035197742, + 1771564708, + 2654793947, + 2577738857, + 3927374704, + 476796961, + 1808037711, + 3139261084, + 1092266942, + 2441768177, + 2389431230, + 3749491302, + 4022985518, + 2208437853, + 3340787371, + 27458753, + 1215398584, + 865432840, + 31304311, + 57686919, ]; static const List _envieddatallama3Key = [ - 1524403873, - 4016335981, - 3328733873, - 1125877358, - 3368721391, - 3926748166, - 3491931748, - 341019722, - 2480376123, - 2751235606, - 1448204257, - 1513632669, - 2480786299, - 224517745, - 957870255, - 3000675048, - 752845177, - 4288756040, - 3544347223, - 884775289, - 2976075449, - 2100342574, - 2887489200, - 1427172223, - 441612993, - 827796112, - 2652257880, - 1684421325, - 3291916133, - 2015848578, - 2153940145, - 1457392566, - 2318310814, - 1714358231, - 2169232607, - 3417310119, - 750362082, - 3987913259, - 4005911589, - 2591195550, - 1762055230, - 2565744703, - 2598321474, - 3104576706, - 3891559837, - 2252847706, - 1620566311, - 1461415511, - 855782093, - 3262931268, - 271887809, - 1829864925, - 1982473688, - 4177960018, - 4266624141, - 1454537073, - 3091051339, - 775690797, - 702412982, - 567392997, - 2896939392, - 3672613385, - 1160680413, + 885088569, + 2029042998, + 471244101, + 106289108, + 4150241796, + 2162869661, + 2535617516, + 2791378607, + 3599865250, + 11829343, + 3723821326, + 897214383, + 2346921333, + 620795921, + 2157117372, + 1088999520, + 1355091592, + 3547099915, + 1805725204, + 3681386914, + 4237192752, + 2429377003, + 1329080365, + 2547249399, + 1586537616, + 2923317037, + 4289190532, + 2652587248, + 2323376920, + 2865396414, + 2052834520, + 3754567963, + 1627697901, + 779921164, + 3298031505, + 333057960, + 2244345837, + 3388336609, + 3040084080, + 69525489, + 2290723687, + 3368367557, + 2488957104, + 4035197785, + 1771564779, + 2654793905, + 2577738764, + 3927374660, + 476797037, + 1808037653, + 3139261150, + 1092266987, + 2441768119, + 2389431285, + 3749491244, + 4022985597, + 2208437868, + 3340787443, + 27458739, + 1215398624, + 865432932, + 31304245, + 57687019, ]; static final String llama3Key = String.fromCharCodes(List.generate( @@ -13118,279 +13170,279 @@ final class _Env { ).map((int i) => _envieddatallama3Key[i] ^ _enviedkeyllama3Key[i])); static const List _enviedkeypayMobOutClientSecrret = [ - 13176401, - 1122507747, - 2550614181, - 4129031275, - 2219365967, - 1462611905, - 1941340098, - 1759816881, - 2955037840, - 1273510599, - 2725433456, - 3074208166, - 2762019995, - 4094870899, - 44862872, - 721208383, - 2507538445, - 1948669598, - 2038307739, - 1736275186, - 3632152087, - 21442579, - 741465093, - 3137609721, - 643759967, - 2247721169, - 4265556592, - 2637223707, - 1028120422, - 3544313981, - 1301461906, - 3500687573, - 514946730, - 3929514636, - 3662917867, - 4052611929, - 3565810406, - 4005915278, - 1733999094, - 2912541592, - 663420002, - 4276033645, - 2218299383, - 4170398286, - 1628034950, - 623477384, - 1808383766, - 3680713648, - 792629376, - 3652564384, - 2117279425, - 2564624323, - 1438250101, - 3872129565, - 19870737, - 4248422601, - 3389272209, - 3244691822, - 3513543721, - 2091500602, - 757676080, - 544874164, - 4264469505, - 1120787768, - 2337225818, - 1736594798, - 2705784274, - 2807303043, - 3859840316, - 2340124214, - 3399302107, - 54643810, - 2429889865, - 380831726, - 292784498, - 2393592694, - 3074789079, - 3233166190, - 3846545585, - 3985087245, - 3960493460, - 3238315239, - 4262789684, - 543884463, - 1615910332, - 2739263954, - 4184533433, - 3587479168, - 1951285606, - 930493323, - 369924866, - 2178430858, - 1814143514, - 3390620787, - 1338388315, - 3706976738, - 252589992, - 1260717258, - 3093361364, - 106952576, - 2662865624, - 331733941, - 4099097598, - 2011393849, - 274431919, - 516325322, - 2749796064, - 1178586023, - 2651769916, - 3186876657, - 926314601, - 869182964, - 643130370, - 3877593502, - 4041585127, - 2265315739, - 2823052526, - 329448726, - 175499583, - 2177482906, - 2981337601, - 1595198663, - 11171067, - 1096530509, - 1930478023, - 494194738, - 4177575866, - 1376936391, - 4252806671, - 3672594743, - 1707427257, - 2943335833, - 2692193853, - 4280859770, - 205633561, + 4264988709, + 3646168072, + 3380432823, + 1202916749, + 188891197, + 2348055028, + 980374865, + 691847699, + 858619970, + 236163923, + 983512430, + 1173363436, + 2588752223, + 1850955507, + 2940315249, + 3012903707, + 3454704114, + 3679631406, + 1336038420, + 1861903658, + 1061219879, + 3511339279, + 465062838, + 1995684868, + 166723696, + 2714471717, + 2750986828, + 3271474652, + 453494562, + 3134765296, + 2961820378, + 3255418231, + 1527579838, + 1503229545, + 865486792, + 4016651235, + 1193085733, + 4013525992, + 3996077619, + 987541940, + 90574541, + 1343106639, + 4020388508, + 738850202, + 321279576, + 2278021266, + 964616123, + 848235473, + 2268364926, + 628132074, + 519294312, + 851646420, + 768312856, + 2658302388, + 1925598342, + 2547803291, + 3802816604, + 991707138, + 3036080356, + 1794174250, + 642074119, + 69309849, + 1079636780, + 3185344540, + 2412187710, + 4131118941, + 2720338736, + 1171166020, + 4284190285, + 4293720329, + 2949473096, + 4012259445, + 1771814354, + 4253311796, + 55319254, + 1295125115, + 3305444413, + 1795046677, + 799432192, + 453289034, + 1185735862, + 4229905307, + 3858769716, + 198473083, + 1396343935, + 2889162676, + 3788233503, + 1272897642, + 4072483666, + 4139541119, + 3224656612, + 2978560105, + 2199000949, + 3875281074, + 190782812, + 81611089, + 3335432250, + 696827626, + 312099149, + 4261642655, + 4052447067, + 3435334467, + 2730833303, + 112962881, + 3837714402, + 2324184634, + 3619344500, + 711843341, + 3625049384, + 1378545021, + 3368427889, + 2585099402, + 41176282, + 328886374, + 1501826592, + 3092199643, + 303692997, + 2178944930, + 2809314240, + 4202936697, + 2552084579, + 2128830007, + 2503255561, + 1271344259, + 4003981504, + 2891561291, + 2510780511, + 3887504346, + 2526998922, + 2771081782, + 3660656166, + 1610615192, + 2472001617, + 4213066156, + 3058810271, ]; static const List _envieddatapayMobOutClientSecrret = [ - 13176361, - 1122507674, - 2550614223, - 4129031169, - 2219365917, - 1462611885, - 1941340073, - 1759816912, - 2955037944, - 1273510541, - 2725433405, - 3074208150, - 2762020035, - 4094870800, - 44862891, - 721208327, - 2507538522, - 1948669684, - 2038307802, - 1736275074, - 3632152148, - 21442652, - 741465197, - 3137609665, - 643759933, - 2247721127, - 4265556503, - 2637223767, - 1028120415, - 3544313870, - 1301462014, - 3500687507, - 514946778, - 3929514690, - 3662917775, - 4052611860, - 3565810399, - 4005915351, - 1733998995, - 2912541659, - 663419927, - 4276033620, - 2218299318, - 4170398246, - 1628035018, - 623477497, - 1808383860, - 3680713695, - 792629451, - 3652564461, - 2117279377, - 2564624311, - 1438250008, - 3872129614, - 19870823, - 4248422570, - 3389272227, - 3244691744, - 3513543696, - 2091500661, - 757676036, - 544874176, - 4264469593, - 1120787776, - 2337225756, - 1736594722, - 2705784196, - 2807303089, - 3859840374, - 2340124279, - 3399302029, - 54643796, - 2429889850, - 380831642, - 292784432, - 2393592613, - 3074788995, - 3233166127, - 3846545654, - 3985087307, - 3960493523, - 3238315172, - 4262789730, - 543884506, - 1615910366, - 2739263893, - 4184533468, - 3587479222, - 1951285547, - 930493381, - 369924978, - 2178430953, - 1814143533, - 3390620734, - 1338388257, - 3706976680, - 252590022, - 1260717200, - 3093361383, - 106952659, - 2662865585, - 331733985, - 4099097544, - 2011393918, - 274431967, - 516325291, - 2749795990, - 1178586085, - 2651769939, - 3186876594, - 926314533, - 869182883, - 643130473, - 3877593547, - 4041585041, - 2265315789, - 2823052428, - 329448818, - 175499628, - 2177482974, - 2981337696, - 1595198602, - 11171019, - 1096530487, - 1930477967, - 494194756, - 4177575887, - 1376936325, - 4252806720, - 3672594799, - 1707427275, - 2943335873, - 2692193873, - 4280859704, - 205633653, + 4264988765, + 3646168177, + 3380432861, + 1202916839, + 188891247, + 2348054936, + 980374842, + 691847794, + 858619946, + 236163865, + 983512355, + 1173363420, + 2588752135, + 1850955408, + 2940315202, + 3012903715, + 3454704037, + 3679631428, + 1336038485, + 1861903706, + 1061219940, + 3511339328, + 465062878, + 1995684924, + 166723602, + 2714471763, + 2750986795, + 3271474576, + 453494555, + 3134765187, + 2961820342, + 3255418161, + 1527579854, + 1503229479, + 865486764, + 4016651182, + 1193085724, + 4013525937, + 3996077654, + 987542007, + 90574520, + 1343106678, + 4020388573, + 738850290, + 321279508, + 2278021347, + 964616153, + 848235454, + 2268364853, + 628132007, + 519294264, + 851646368, + 768312949, + 2658302439, + 1925598448, + 2547803384, + 3802816622, + 991707212, + 3036080349, + 1794174309, + 642074163, + 69309933, + 1079636852, + 3185344612, + 2412187768, + 4131118865, + 2720338790, + 1171166070, + 4284190215, + 4293720392, + 2949473054, + 4012259395, + 1771814305, + 4253311808, + 55319188, + 1295125032, + 3305444457, + 1795046740, + 799432263, + 453288972, + 1185735921, + 4229905368, + 3858769762, + 198472974, + 1396343837, + 2889162739, + 3788233594, + 1272897628, + 4072483615, + 4139541041, + 3224656532, + 2978560010, + 2199000898, + 3875281151, + 190782758, + 81611035, + 3335432276, + 696827568, + 312099198, + 4261642700, + 4052447026, + 3435334423, + 2730833313, + 112962822, + 3837714322, + 2324184667, + 3619344386, + 711843407, + 3625049415, + 1378544958, + 3368427837, + 2585099485, + 41176241, + 328886323, + 1501826646, + 3092199565, + 303692967, + 2178944966, + 2809314195, + 4202936637, + 2552084482, + 2128830074, + 2503255609, + 1271344377, + 4003981448, + 2891561277, + 2510780458, + 3887504280, + 2526998981, + 2771081838, + 3660656212, + 1610615232, + 2472001597, + 4213066222, + 3058810355, ]; static final String payMobOutClientSecrret = String.fromCharCodes( @@ -13403,103 +13455,103 @@ final class _Env { _enviedkeypayMobOutClientSecrret[i])); static const List _enviedkeypayMobOutClient_id = [ - 327038972, - 2053748888, - 159055517, - 3158201021, - 1773082477, - 2982433198, - 3595279081, - 1444408179, - 3005320279, - 2337037171, - 905521729, - 3813626302, - 2265358357, - 2581907113, - 3009895097, - 757090635, - 3844908867, - 3100275575, - 944630770, - 62820501, - 2961204056, - 2921002399, - 1957821640, - 3414644259, - 701309415, - 3702433620, - 4023397091, - 1247865302, - 4058249345, - 1554149704, - 4025406944, - 6878608, - 3679635295, - 938918975, - 4260308445, - 3038318530, - 51608918, - 880417115, - 1257126762, - 1357128467, - 3017344602, - 3579092440, - 1245103655, - 1624488475, - 2995230847, - 253593231, - 2276318607, + 1277710166, + 3570887466, + 3300596234, + 3946106165, + 2491202833, + 1455847098, + 3705885436, + 209105712, + 734539831, + 2504601961, + 3463065390, + 24500048, + 135958795, + 3182539427, + 2539508928, + 926247052, + 811539137, + 3915063505, + 1600374961, + 1779440534, + 1118002215, + 1881039676, + 2188534408, + 1229554472, + 3010114338, + 637363783, + 3231531923, + 3202961066, + 2261292633, + 4151812925, + 3752840036, + 4215950647, + 3121405040, + 2089005472, + 3542781189, + 208084763, + 3546830170, + 1060027583, + 1403716561, + 2333828858, + 4263593250, + 3919363206, + 1976159982, + 799681614, + 3137082410, + 2016555878, + 697118340, ]; static const List _envieddatapayMobOutClient_id = [ - 327038886, - 2053748904, - 159055528, - 3158201032, - 1773082393, - 2982433178, - 3595279057, - 1444408087, - 3005320193, - 2337037080, - 905521706, - 3813626349, - 2265358375, - 2581907150, - 3009895152, - 757090681, - 3844908857, - 3100275474, - 944630684, - 62820563, - 2961203998, - 2921002492, - 1957821571, - 3414644304, - 701309313, - 3702433552, - 4023397032, - 1247865264, - 4058249417, - 1554149641, - 4025406901, - 6878624, - 3679635208, - 938919034, - 4260308369, - 3038318515, - 51608861, - 880417058, - 1257126688, - 1357128483, - 3017344534, - 3579092352, - 1245103701, - 1624488515, - 2995230739, - 253593293, - 2276318691, + 1277710092, + 3570887450, + 3300596287, + 3946106176, + 2491202917, + 1455847054, + 3705885380, + 209105748, + 734539873, + 2504601858, + 3463065413, + 24499971, + 135958841, + 3182539460, + 2539508873, + 926247102, + 811539131, + 3915063476, + 1600375007, + 1779440592, + 1118002273, + 1881039711, + 2188534467, + 1229554523, + 3010114372, + 637363715, + 3231531992, + 3202961100, + 2261292561, + 4151812988, + 3752839985, + 4215950599, + 3121404967, + 2089005541, + 3542781257, + 208084842, + 3546830097, + 1060027590, + 1403716507, + 2333828810, + 4263593326, + 3919363294, + 1976159900, + 799681558, + 3137082438, + 2016555812, + 697118440, ]; static final String payMobOutClient_id = String.fromCharCodes( @@ -13511,73 +13563,73 @@ final class _Env { _envieddatapayMobOutClient_id[i] ^ _enviedkeypayMobOutClient_id[i])); static const List _enviedkeypayMobOutPassword = [ - 398834287, - 3997564542, - 3586412136, - 3086526520, - 810377028, - 3522344378, - 1046038100, - 484329860, - 1313397719, - 3524757724, - 940225902, - 239147936, - 3900210521, - 3267209955, - 4190622355, - 3516515869, - 687568730, - 3110084987, - 4126988933, - 3289406905, - 896952633, - 4165336360, - 1513625624, - 3719375082, - 2870370341, - 771894099, - 4269623820, - 154479110, - 1909156916, - 3751955600, - 753326041, - 1022152464, + 1706063984, + 1969680724, + 68062376, + 2896156483, + 1498432991, + 4275012347, + 965427005, + 3081980774, + 2457192874, + 3211472108, + 1543033645, + 425244421, + 1733608295, + 3092152787, + 3120368766, + 3841960491, + 2474388827, + 4269766308, + 3903459638, + 460952430, + 4193866642, + 708981423, + 2457676098, + 1415795025, + 459092326, + 1283158809, + 2410763725, + 1200198681, + 3508884257, + 707325897, + 174438679, + 2666306102, ]; static const List _envieddatapayMobOutPassword = [ - 398834219, - 3997564492, - 3586412050, - 3086526578, - 810376962, - 3522344386, - 1046038079, - 484329921, - 1313397748, - 3524757648, - 940225824, - 239147979, - 3900210538, - 3267209877, - 4190622441, - 3516515886, - 687568738, - 3110084865, - 4126988983, - 3289406941, - 896952672, - 4165336400, - 1513625704, - 3719375012, - 2870370371, - 771894020, - 4269623892, - 154479220, - 1909156972, - 3751955708, - 753325979, - 1022152572, + 1706063924, + 1969680742, + 68062418, + 2896156425, + 1498432921, + 4275012227, + 965427030, + 3081980707, + 2457192841, + 3211472032, + 1543033699, + 425244526, + 1733608276, + 3092152741, + 3120368644, + 3841960472, + 2474388835, + 4269766366, + 3903459588, + 460952330, + 4193866699, + 708981463, + 2457676082, + 1415794975, + 459092224, + 1283158862, + 2410763669, + 1200198763, + 3508884345, + 707325861, + 174438741, + 2666306138, ]; static final String payMobOutPassword = String.fromCharCodes( @@ -13589,57 +13641,57 @@ final class _Env { _envieddatapayMobOutPassword[i] ^ _enviedkeypayMobOutPassword[i])); static const List _enviedkeypayMobOutUserName = [ - 387236902, - 1339972311, - 3744800869, - 2692749756, - 3837758290, - 3739550311, - 1025810878, - 974822124, - 44724018, - 2325595335, - 663844633, - 2852099711, - 1246383812, - 1265441396, - 3412644723, - 2668800418, - 2572484001, - 3280172646, - 2060716578, - 4233659225, - 4220881131, - 1230282001, - 3572324418, - 2968243819, + 979111844, + 855161253, + 3547697110, + 3333900560, + 595342184, + 3063681166, + 3673923474, + 1052959906, + 2912271237, + 2658978493, + 4248499936, + 2174942116, + 182184572, + 737370897, + 2195848513, + 731565787, + 401446721, + 3124102037, + 1517816789, + 4166303242, + 3342050373, + 3196365210, + 3339925039, + 3455638556, ]; static const List _envieddatapayMobOutUserName = [ - 387236956, - 1339972285, - 3744800784, - 2692749782, - 3837758270, - 3739550264, - 1025810895, - 974822042, - 44724061, - 2325595288, - 663844735, - 2852099592, - 1246383791, - 1265441310, - 3412644629, - 2668800453, - 2572484043, - 3280172554, - 2060716666, - 4233659179, - 4220881075, - 1230282109, - 3572324352, - 2968243719, + 979111902, + 855161295, + 3547697059, + 3333900666, + 595342084, + 3063681233, + 3673923555, + 1052959956, + 2912271338, + 2658978530, + 4248499846, + 2174942163, + 182184471, + 737371003, + 2195848487, + 731565756, + 401446699, + 3124102137, + 1517816717, + 4166303352, + 3342050333, + 3196365302, + 3339925101, + 3455638640, ]; static final String payMobOutUserName = String.fromCharCodes( @@ -13650,9 +13702,9 @@ final class _Env { ).map((int i) => _envieddatapayMobOutUserName[i] ^ _enviedkeypayMobOutUserName[i])); - static const List _enviedkeyA = [3911842269]; + static const List _enviedkeyA = [4070300691]; - static const List _envieddataA = [3911842188]; + static const List _envieddataA = [4070300738]; static final String A = String.fromCharCodes(List.generate( _envieddataA.length, @@ -13660,9 +13712,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataA[i] ^ _enviedkeyA[i])); - static const List _enviedkeyB = [204777933]; + static const List _enviedkeyB = [1084207557]; - static const List _envieddataB = [204777877]; + static const List _envieddataB = [1084207517]; static final String B = String.fromCharCodes(List.generate( _envieddataB.length, @@ -13670,9 +13722,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataB[i] ^ _enviedkeyB[i])); - static const List _enviedkeyC = [3438475727]; + static const List _enviedkeyC = [3054985261]; - static const List _envieddataC = [3438475657]; + static const List _envieddataC = [3054985323]; static final String C = String.fromCharCodes(List.generate( _envieddataC.length, @@ -13680,9 +13732,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataC[i] ^ _enviedkeyC[i])); - static const List _enviedkeyD = [1063420025]; + static const List _enviedkeyD = [3115376077]; - static const List _envieddataD = [1063419936]; + static const List _envieddataD = [3115376020]; static final String D = String.fromCharCodes(List.generate( _envieddataD.length, @@ -13690,9 +13742,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataD[i] ^ _enviedkeyD[i])); - static const List _enviedkeyE = [2186558890]; + static const List _enviedkeyE = [6624674]; - static const List _envieddataE = [2186558944]; + static const List _envieddataE = [6624744]; static final String E = String.fromCharCodes(List.generate( _envieddataE.length, @@ -13700,9 +13752,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataE[i] ^ _enviedkeyE[i])); - static const List _enviedkeyF = [3559105393]; + static const List _enviedkeyF = [1354559357]; - static const List _envieddataF = [3559105316]; + static const List _envieddataF = [1354559272]; static final String F = String.fromCharCodes(List.generate( _envieddataF.length, @@ -13710,9 +13762,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataF[i] ^ _enviedkeyF[i])); - static const List _enviedkeyG = [3637531347]; + static const List _enviedkeyG = [3789449009]; - static const List _envieddataG = [3637531288]; + static const List _envieddataG = [3789449082]; static final String G = String.fromCharCodes(List.generate( _envieddataG.length, @@ -13720,9 +13772,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataG[i] ^ _enviedkeyG[i])); - static const List _enviedkeyH = [2920544855]; + static const List _enviedkeyH = [3797578577]; - static const List _envieddataH = [2920544768]; + static const List _envieddataH = [3797578502]; static final String H = String.fromCharCodes(List.generate( _envieddataH.length, @@ -13730,9 +13782,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataH[i] ^ _enviedkeyH[i])); - static const List _enviedkeyI = [1190029442]; + static const List _enviedkeyI = [2380101037]; - static const List _envieddataI = [1190029517]; + static const List _envieddataI = [2380101090]; static final String I = String.fromCharCodes(List.generate( _envieddataI.length, @@ -13740,9 +13792,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataI[i] ^ _enviedkeyI[i])); - static const List _enviedkeyJ = [3911290510]; + static const List _enviedkeyJ = [1110014504]; - static const List _envieddataJ = [3911290571]; + static const List _envieddataJ = [1110014573]; static final String J = String.fromCharCodes(List.generate( _envieddataJ.length, @@ -13750,9 +13802,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataJ[i] ^ _enviedkeyJ[i])); - static const List _enviedkeyK = [464738393]; + static const List _enviedkeyK = [4173176877]; - static const List _envieddataK = [464738334]; + static const List _envieddataK = [4173176938]; static final String K = String.fromCharCodes(List.generate( _envieddataK.length, @@ -13760,9 +13812,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataK[i] ^ _enviedkeyK[i])); - static const List _enviedkeyL = [4083912328]; + static const List _enviedkeyL = [1499334736]; - static const List _envieddataL = [4083912410]; + static const List _envieddataL = [1499334658]; static final String L = String.fromCharCodes(List.generate( _envieddataL.length, @@ -13770,9 +13822,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataL[i] ^ _enviedkeyL[i])); - static const List _enviedkeyM = [3402244108]; + static const List _enviedkeyM = [2674591645]; - static const List _envieddataM = [3402244162]; + static const List _envieddataM = [2674591699]; static final String M = String.fromCharCodes(List.generate( _envieddataM.length, @@ -13780,9 +13832,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataM[i] ^ _enviedkeyM[i])); - static const List _enviedkeyN = [720169090]; + static const List _enviedkeyN = [304791608]; - static const List _envieddataN = [720169152]; + static const List _envieddataN = [304791674]; static final String N = String.fromCharCodes(List.generate( _envieddataN.length, @@ -13790,9 +13842,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataN[i] ^ _enviedkeyN[i])); - static const List _enviedkeyO = [2517223126]; + static const List _enviedkeyO = [3693551577]; - static const List _envieddataO = [2517223071]; + static const List _envieddataO = [3693551504]; static final String O = String.fromCharCodes(List.generate( _envieddataO.length, @@ -13800,9 +13852,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataO[i] ^ _enviedkeyO[i])); - static const List _enviedkeyP = [1222738198]; + static const List _enviedkeyP = [4224688067]; - static const List _envieddataP = [1222738240]; + static const List _envieddataP = [4224688021]; static final String P = String.fromCharCodes(List.generate( _envieddataP.length, @@ -13810,9 +13862,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataP[i] ^ _enviedkeyP[i])); - static const List _enviedkeyQ = [2991195725]; + static const List _enviedkeyQ = [2827380783]; - static const List _envieddataQ = [2991195660]; + static const List _envieddataQ = [2827380846]; static final String Q = String.fromCharCodes(List.generate( _envieddataQ.length, @@ -13820,9 +13872,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataQ[i] ^ _enviedkeyQ[i])); - static const List _enviedkeyR = [3535582699]; + static const List _enviedkeyR = [582702531]; - static const List _envieddataR = [3535582631]; + static const List _envieddataR = [582702479]; static final String R = String.fromCharCodes(List.generate( _envieddataR.length, @@ -13830,9 +13882,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataR[i] ^ _enviedkeyR[i])); - static const List _enviedkeyS = [352719586]; + static const List _enviedkeyS = [3082986447]; - static const List _envieddataS = [352719544]; + static const List _envieddataS = [3082986389]; static final String S = String.fromCharCodes(List.generate( _envieddataS.length, @@ -13840,9 +13892,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataS[i] ^ _enviedkeyS[i])); - static const List _enviedkeyT = [1106674523]; + static const List _enviedkeyT = [1828852022]; - static const List _envieddataT = [1106674456]; + static const List _envieddataT = [1828852085]; static final String T = String.fromCharCodes(List.generate( _envieddataT.length, @@ -13850,9 +13902,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataT[i] ^ _enviedkeyT[i])); - static const List _enviedkeyU = [1683853780]; + static const List _enviedkeyU = [2605092056]; - static const List _envieddataU = [1683853724]; + static const List _envieddataU = [2605091984]; static final String U = String.fromCharCodes(List.generate( _envieddataU.length, @@ -13860,9 +13912,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataU[i] ^ _enviedkeyU[i])); - static const List _enviedkeyV = [1834640554]; + static const List _enviedkeyV = [566737383]; - static const List _envieddataV = [1834640634]; + static const List _envieddataV = [566737335]; static final String V = String.fromCharCodes(List.generate( _envieddataV.length, @@ -13870,9 +13922,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataV[i] ^ _enviedkeyV[i])); - static const List _enviedkeyW = [483684268]; + static const List _enviedkeyW = [2482454634]; - static const List _envieddataW = [483684344]; + static const List _envieddataW = [2482454590]; static final String W = String.fromCharCodes(List.generate( _envieddataW.length, @@ -13880,9 +13932,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataW[i] ^ _enviedkeyW[i])); - static const List _enviedkeyX = [3924796493]; + static const List _enviedkeyX = [2686680474]; - static const List _envieddataX = [3924796425]; + static const List _envieddataX = [2686680542]; static final String X = String.fromCharCodes(List.generate( _envieddataX.length, @@ -13890,9 +13942,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataX[i] ^ _enviedkeyX[i])); - static const List _enviedkeyY = [4166322123]; + static const List _enviedkeyY = [3902863251]; - static const List _envieddataY = [4166322072]; + static const List _envieddataY = [3902863296]; static final String Y = String.fromCharCodes(List.generate( _envieddataY.length, @@ -13900,9 +13952,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataY[i] ^ _enviedkeyY[i])); - static const List _enviedkeyZ = [1139093992]; + static const List _enviedkeyZ = [2832255177]; - static const List _envieddataZ = [1139093925]; + static const List _envieddataZ = [2832255108]; static final String Z = String.fromCharCodes(List.generate( _envieddataZ.length, @@ -13910,9 +13962,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataZ[i] ^ _enviedkeyZ[i])); - static const List _enviedkeya = [3481897462]; + static const List _enviedkeya = [3933644150]; - static const List _envieddataa = [3481897351]; + static const List _envieddataa = [3933644039]; static final String a = String.fromCharCodes(List.generate( _envieddataa.length, @@ -13920,9 +13972,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataa[i] ^ _enviedkeya[i])); - static const List _enviedkeyb = [1268478938]; + static const List _enviedkeyb = [884281895]; - static const List _envieddatab = [1268478882]; + static const List _envieddatab = [884281951]; static final String b = String.fromCharCodes(List.generate( _envieddatab.length, @@ -13930,9 +13982,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatab[i] ^ _enviedkeyb[i])); - static const List _enviedkeyc = [3644727481]; + static const List _enviedkeyc = [4285848867]; - static const List _envieddatac = [3644727519]; + static const List _envieddatac = [4285848901]; static final String c = String.fromCharCodes(List.generate( _envieddatac.length, @@ -13940,9 +13992,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatac[i] ^ _enviedkeyc[i])); - static const List _enviedkeyd = [1466384668]; + static const List _enviedkeyd = [325872292]; - static const List _envieddatad = [1466384741]; + static const List _envieddatad = [325872349]; static final String d = String.fromCharCodes(List.generate( _envieddatad.length, @@ -13950,9 +14002,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatad[i] ^ _enviedkeyd[i])); - static const List _enviedkeye = [1248573360]; + static const List _enviedkeye = [551888213]; - static const List _envieddatae = [1248573402]; + static const List _envieddatae = [551888191]; static final String e = String.fromCharCodes(List.generate( _envieddatae.length, @@ -13960,9 +14012,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatae[i] ^ _enviedkeye[i])); - static const List _enviedkeyf = [1859540562]; + static const List _enviedkeyf = [3390312645]; - static const List _envieddataf = [1859540519]; + static const List _envieddataf = [3390312624]; static final String f = String.fromCharCodes(List.generate( _envieddataf.length, @@ -13970,9 +14022,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataf[i] ^ _enviedkeyf[i])); - static const List _enviedkeyg = [2511798660]; + static const List _enviedkeyg = [1523644267]; - static const List _envieddatag = [2511798767]; + static const List _envieddatag = [1523644160]; static final String g = String.fromCharCodes(List.generate( _envieddatag.length, @@ -13980,9 +14032,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatag[i] ^ _enviedkeyg[i])); - static const List _enviedkeyh = [1956870998]; + static const List _enviedkeyh = [1027626612]; - static const List _envieddatah = [1956870945]; + static const List _envieddatah = [1027626499]; static final String h = String.fromCharCodes(List.generate( _envieddatah.length, @@ -13990,9 +14042,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatah[i] ^ _enviedkeyh[i])); - static const List _enviedkeyi = [351122717]; + static const List _enviedkeyi = [3972156524]; - static const List _envieddatai = [351122802]; + static const List _envieddatai = [3972156419]; static final String i = String.fromCharCodes(List.generate( _envieddatai.length, @@ -14000,9 +14052,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatai[i] ^ _enviedkeyi[i])); - static const List _enviedkeyj = [3379055425]; + static const List _enviedkeyj = [3652219750]; - static const List _envieddataj = [3379055396]; + static const List _envieddataj = [3652219651]; static final String j = String.fromCharCodes(List.generate( _envieddataj.length, @@ -14010,9 +14062,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataj[i] ^ _enviedkeyj[i])); - static const List _enviedkeyk = [2699445120]; + static const List _enviedkeyk = [1892242618]; - static const List _envieddatak = [2699445223]; + static const List _envieddatak = [1892242653]; static final String k = String.fromCharCodes(List.generate( _envieddatak.length, @@ -14020,9 +14072,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatak[i] ^ _enviedkeyk[i])); - static const List _enviedkeyl = [2274488249]; + static const List _enviedkeyl = [4139038360]; - static const List _envieddatal = [2274488267]; + static const List _envieddatal = [4139038442]; static final String l = String.fromCharCodes(List.generate( _envieddatal.length, @@ -14030,9 +14082,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatal[i] ^ _enviedkeyl[i])); - static const List _enviedkeym = [1658422244]; + static const List _enviedkeym = [1935902723]; - static const List _envieddatam = [1658422154]; + static const List _envieddatam = [1935902829]; static final String m = String.fromCharCodes(List.generate( _envieddatam.length, @@ -14040,9 +14092,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatam[i] ^ _enviedkeym[i])); - static const List _enviedkeyn = [3056223917]; + static const List _enviedkeyn = [454391326]; - static const List _envieddatan = [3056223951]; + static const List _envieddatan = [454391420]; static final String n = String.fromCharCodes(List.generate( _envieddatan.length, @@ -14050,9 +14102,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatan[i] ^ _enviedkeyn[i])); - static const List _enviedkeyo = [2246033411]; + static const List _enviedkeyo = [1549454828]; - static const List _envieddatao = [2246033514]; + static const List _envieddatao = [1549454725]; static final String o = String.fromCharCodes(List.generate( _envieddatao.length, @@ -14060,9 +14112,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatao[i] ^ _enviedkeyo[i])); - static const List _enviedkeyp = [3306093101]; + static const List _enviedkeyp = [3208483522]; - static const List _envieddatap = [3306093147]; + static const List _envieddatap = [3208483508]; static final String p = String.fromCharCodes(List.generate( _envieddatap.length, @@ -14070,9 +14122,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatap[i] ^ _enviedkeyp[i])); - static const List _enviedkeyq = [3137346991]; + static const List _enviedkeyq = [227736950]; - static const List _envieddataq = [3137347022]; + static const List _envieddataq = [227736855]; static final String q = String.fromCharCodes(List.generate( _envieddataq.length, @@ -14080,9 +14132,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataq[i] ^ _enviedkeyq[i])); - static const List _enviedkeyr = [1342518809]; + static const List _enviedkeyr = [3723456175]; - static const List _envieddatar = [1342518901]; + static const List _envieddatar = [3723456195]; static final String r = String.fromCharCodes(List.generate( _envieddatar.length, @@ -14090,9 +14142,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatar[i] ^ _enviedkeyr[i])); - static const List _enviedkeys = [2887862074]; + static const List _enviedkeys = [698669951]; - static const List _envieddatas = [2887862080]; + static const List _envieddatas = [698669829]; static final String s = String.fromCharCodes(List.generate( _envieddatas.length, @@ -14100,9 +14152,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatas[i] ^ _enviedkeys[i])); - static const List _enviedkeyt = [1030596278]; + static const List _enviedkeyt = [2925574026]; - static const List _envieddatat = [1030596309]; + static const List _envieddatat = [2925574121]; static final String t = String.fromCharCodes(List.generate( _envieddatat.length, @@ -14110,9 +14162,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatat[i] ^ _enviedkeyt[i])); - static const List _enviedkeyu = [468302753]; + static const List _enviedkeyu = [766142683]; - static const List _envieddatau = [468302793]; + static const List _envieddatau = [766142643]; static final String u = String.fromCharCodes(List.generate( _envieddatau.length, @@ -14120,9 +14172,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatau[i] ^ _enviedkeyu[i])); - static const List _enviedkeyv = [3585640967]; + static const List _enviedkeyv = [864666963]; - static const List _envieddatav = [3585641079]; + static const List _envieddatav = [864666915]; static final String v = String.fromCharCodes(List.generate( _envieddatav.length, @@ -14130,9 +14182,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatav[i] ^ _enviedkeyv[i])); - static const List _enviedkeyw = [3703232732]; + static const List _enviedkeyw = [2272854285]; - static const List _envieddataw = [3703232680]; + static const List _envieddataw = [2272854393]; static final String w = String.fromCharCodes(List.generate( _envieddataw.length, @@ -14140,9 +14192,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataw[i] ^ _enviedkeyw[i])); - static const List _enviedkeyx = [1950177350]; + static const List _enviedkeyx = [1538775448]; - static const List _envieddatax = [1950177314]; + static const List _envieddatax = [1538775548]; static final String x = String.fromCharCodes(List.generate( _envieddatax.length, @@ -14150,9 +14202,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatax[i] ^ _enviedkeyx[i])); - static const List _enviedkeyy = [2899781186]; + static const List _enviedkeyy = [1867877966]; - static const List _envieddatay = [2899781169]; + static const List _envieddatay = [1867877949]; static final String y = String.fromCharCodes(List.generate( _envieddatay.length, @@ -14160,9 +14212,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatay[i] ^ _enviedkeyy[i])); - static const List _enviedkeyz = [3270625401]; + static const List _enviedkeyz = [2379433934]; - static const List _envieddataz = [3270625300]; + static const List _envieddataz = [2379433891]; static final String z = String.fromCharCodes(List.generate( _envieddataz.length, @@ -14171,85 +14223,85 @@ final class _Env { ).map((int i) => _envieddataz[i] ^ _enviedkeyz[i])); static const List _enviedkeykeyOfApp = [ - 392841418, - 366491928, - 1366817667, - 63912041, - 599074453, - 2938709115, - 712918300, - 4180911322, - 2814901277, - 1685593736, - 1968983558, - 1757520643, - 2463035639, - 3248171541, - 230784289, - 1613323040, - 3777067670, - 4208479417, - 536126543, - 669298520, - 3563295891, - 3775363645, - 3155148224, - 83166054, - 824738199, - 2818306239, - 3708779069, - 4258323994, - 1407459181, - 3195770096, - 433853996, - 2233686333, - 2146567302, - 3504513036, - 4155338974, - 938799955, - 2964613304, - 2674146287, + 3703376563, + 1126704269, + 3589076024, + 2257760945, + 2714219593, + 66002768, + 2508345102, + 2625987895, + 1672280462, + 1959184026, + 4215276535, + 1001843470, + 4154811221, + 1947813524, + 4175333798, + 4264094942, + 2714313863, + 28573172, + 303569854, + 2907929024, + 1446736686, + 1355382816, + 1204633338, + 335451250, + 2458769150, + 1798378055, + 3766825897, + 3448538967, + 4175183517, + 1408526284, + 3775543911, + 912105030, + 1601117947, + 2057204534, + 1675599468, + 279594428, + 1171863592, + 1279296811, ]; static const List _envieddatakeyOfApp = [ - 392841384, - 366492025, - 1366817775, - 63911962, - 599074544, - 2938709005, - 712918364, - 4180911341, - 2814901291, - 1685593777, - 1968983600, - 1757520759, - 2463035542, - 3248171639, - 230784335, - 1613323073, - 3777067767, - 4208479427, - 536126506, - 669298475, - 3563295998, - 3775363672, - 3155148200, - 83165955, - 824738277, - 2818306266, - 3708779098, - 4258324064, - 1407459101, - 3195770006, - 433854022, - 2233686354, - 2146567390, - 3504513150, - 4155338886, - 938799905, - 2964613370, - 2674146205, + 3703376593, + 1126704364, + 3589076052, + 2257760962, + 2714219564, + 66002726, + 2508345166, + 2625987840, + 1672280504, + 1959184035, + 4215276481, + 1001843578, + 4154811188, + 1947813622, + 4175333832, + 4264094911, + 2714313958, + 28573070, + 303569883, + 2907929011, + 1446736707, + 1355382853, + 1204633234, + 335451159, + 2458769036, + 1798378018, + 3766825934, + 3448538925, + 4175183597, + 1408526250, + 3775543821, + 912105001, + 1601117859, + 2057204548, + 1675599412, + 279594446, + 1171863658, + 1279296857, ]; static final String keyOfApp = String.fromCharCodes(List.generate( diff --git a/lib/views/Rate/rating_driver_bottom.dart b/lib/views/Rate/rating_driver_bottom.dart new file mode 100644 index 0000000..5ff5a7a --- /dev/null +++ b/lib/views/Rate/rating_driver_bottom.dart @@ -0,0 +1,164 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_rating_bar/flutter_rating_bar.dart'; +import 'package:get/get.dart'; + +import '../../constant/colors.dart'; +import '../../constant/links.dart'; +import '../../constant/style.dart'; +import '../../controller/home/map_passenger_controller.dart'; +import '../../controller/rate/rate_conroller.dart'; +import '../widgets/elevated_btn.dart'; +import '../widgets/my_scafold.dart'; + +// ملاحظة: تم حذف جميع الأكواد المتعلقة بالسعر والإكرامية كما طُلِب. +// التركيز الآن على التقييم والملاحظات فقط. + +class RatingDriverBottomSheet extends StatelessWidget { + RatingDriverBottomSheet({super.key}); + final RateController controller = Get.put(RateController()); + + @override + Widget build(BuildContext context) { + // تم تبسيط استخدام MyScafolld لإزالة الـ Positioned واستخدام تصميم مركزي ونظيف. + return MyScafolld( + title: 'Rate Driver'.tr, + body: [ + Center( + child: Container( + width: Get.width * .85, + padding: const EdgeInsets.all(24), + // يفترض أن AppStyle.boxDecoration1 يوفر تصميمًا جميلاً مع حواف مدورة وظل. + decoration: AppStyle.boxDecoration1, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + // 1. قسم معلومات السائق والترحيب + CircleAvatar( + radius: 30, + backgroundImage: NetworkImage( + '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), + onBackgroundImageError: (exception, stackTrace) => const Icon( + Icons.person, + size: 30, + color: AppColor.blueColor), + ), + const SizedBox(height: 16), + + // رسالة ترحيب مركزة على تجربة الرحلة + Text( + '${'How was your trip with'.tr} ${controller.driverName}?', + style: AppStyle.title + .copyWith(fontSize: 20, fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + const SizedBox(height: 12), + + // نص إرشادي يؤكد على أهمية التقييم لتحسين الجودة + Text( + 'Your valuable feedback helps us improve our service quality.' + .tr, + style: AppStyle.title + .copyWith(color: Colors.grey.shade600, fontSize: 14), + textAlign: TextAlign.center, + ), + + const SizedBox(height: 32), + + // 2. شريط التقييم (النجمي) + Center( + child: RatingBar.builder( + initialRating: 0, + itemCount: 5, + itemSize: 50, // حجم كبير لجعله النقطة البؤرية + glow: true, + glowColor: Colors.amber.shade200, + itemPadding: const EdgeInsets.symmetric(horizontal: 4), + itemBuilder: (context, index) { + // استخدام أيقونات المشاعر مع أيقونة النجمة للحصول على مظهر أكثر جاذبية + switch (index) { + case 0: + return const Icon(Icons.sentiment_very_dissatisfied, + color: Colors.red); + case 1: + return const Icon(Icons.sentiment_dissatisfied, + color: Colors.redAccent); + case 2: + return const Icon(Icons.sentiment_neutral, + color: Colors.amber); + case 3: + return const Icon(Icons.sentiment_satisfied, + color: Colors.lightGreen); + case 4: + return const Icon(Icons.sentiment_very_satisfied, + color: Colors.green); + default: + return const Icon(Icons.star_rounded, + color: Colors.amber); + } + }, + onRatingUpdate: (rating) { + controller.selectRateItem(rating); + }, + ), + ), + + const SizedBox(height: 32), + + // 3. قسم التعليقات (الملاحظات) + SizedBox( + width: Get.width * .75, + child: TextFormField( + maxLines: 4, + minLines: 1, + keyboardType: TextInputType.multiline, + controller: controller.comment, + decoration: InputDecoration( + labelText: 'Leave a detailed comment (Optional)'.tr, + hintText: + 'Share your experience to help us improve...'.tr, + prefixIcon: + const Icon(Icons.rate_review, color: Colors.blueGrey), + suffixIcon: IconButton( + icon: const Icon(Icons.clear, color: AppColor.redColor), + onPressed: () { + controller.comment.clear(); + }, + ), + // تحسين شكل الحدود لتكون أكثر جمالية + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: + const BorderSide(color: Colors.blueGrey, width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide( + color: AppColor.greenColor, + width: 2), // لون جذاب عند التركيز + ), + ), + ), + ), + + const SizedBox(height: 32), + + // 4. زر الإرسال + MyElevatedButton( + title: 'Submit Rating'.tr, + onPressed: () { + controller.addRateToDriver(); + Get.find() + .getRideStatusFromStartApp(); + }) + ], + ), + ), + ), + ], + isleading: false, + ); + } +} diff --git a/lib/views/auth/otp_page.dart b/lib/views/auth/otp_page.dart index a31896f..2f856ca 100644 --- a/lib/views/auth/otp_page.dart +++ b/lib/views/auth/otp_page.dart @@ -310,6 +310,61 @@ class _PhoneNumberScreenState extends State { final _phoneController = TextEditingController(); final _formKey = GlobalKey(); bool _isLoading = false; + static String formatSyrianPhone(String phone) { + // Remove spaces, symbols, +, -, () + phone = phone.replaceAll(RegExp(r'[ \-\(\)\+]'), '').trim(); + + // Normalize 00963 → 963 + if (phone.startsWith('00963')) { + phone = phone.replaceFirst('00963', '963'); + } + + // Normalize 0963 → 963 + if (phone.startsWith('0963')) { + phone = phone.replaceFirst('0963', '963'); + } + + // NEW: Fix 96309xxxx → 9639xxxx + if (phone.startsWith('96309')) { + phone = '9639' + phone.substring(5); // remove the "0" after 963 + } + + // If starts with 9630 → correct to 9639 + if (phone.startsWith('9630')) { + phone = '9639' + phone.substring(4); + } + + // If already in correct format: 9639xxxxxxxx + if (phone.startsWith('9639') && phone.length == 12) { + return phone; + } + + // If starts with 963 but missing the 9 + if (phone.startsWith('963') && phone.length > 3) { + // Ensure it begins with 9639 + if (!phone.startsWith('9639')) { + phone = '9639' + phone.substring(3); + } + return phone; + } + + // If starts with 09xxxxxxxx → 9639xxxxxxxx + if (phone.startsWith('09')) { + return '963' + phone.substring(1); + } + + // If 9xxxxxxxx (9 digits) + if (phone.startsWith('9') && phone.length == 9) { + return '963' + phone; + } + + // If starts with incorrect 0xxxxxxx → assume Syrian and fix + if (phone.startsWith('0') && phone.length == 10) { + return '963' + phone.substring(1); + } + + return phone; + } void _submit() async { if (_formKey.currentState!.validate()) { @@ -318,7 +373,10 @@ class _PhoneNumberScreenState extends State { final rawPhone = _phoneController.text.trim().replaceFirst('+', ''); final success = await PhoneAuthHelper.sendOtp(rawPhone); if (success && mounted) { - Get.to(() => OtpVerificationScreen(phoneNumber: rawPhone)); + // Get.to(() => OtpVerificationScreen(phoneNumber: rawPhone)); + await PhoneAuthHelper.verifyOtp( + rawPhone, + ); // For testing purposes, auto-verify with a dummy OTP } if (mounted) setState(() => _isLoading = false); } @@ -349,6 +407,7 @@ class _PhoneNumberScreenState extends State { dropdownTextStyle: const TextStyle(color: Colors.black87), decoration: InputDecoration( labelText: 'Phone Number'.tr, + hintText: 'witout zero'.tr, labelStyle: TextStyle(color: Colors.white.withOpacity(0.7)), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), @@ -365,11 +424,14 @@ class _PhoneNumberScreenState extends State { }, validator: (phone) { if (phone == null || phone.number.isEmpty) { - return 'Please enter your phone number'; + return 'Please enter your phone number'.tr; + } + if (phone.number.startsWith('0')) { + return 'Please enter the number without the leading 0'.tr; } if (phone.completeNumber.length < 10) { // Example validation - return 'Phone number seems too short'; + return 'Phone number seems too short'.tr; } return null; }, @@ -419,7 +481,7 @@ class _OtpVerificationScreenState extends State { if (_formKey.currentState!.validate()) { setState(() => _isLoading = true); // PRODUCTION READY: Using the actual PhoneAuthHelper - await PhoneAuthHelper.verifyOtp(widget.phoneNumber, _otpController.text); + // await PhoneAuthHelper.verifyOtp(widget.phoneNumber, _otpController.text); if (mounted) setState(() => _isLoading = false); } } diff --git a/lib/views/home/HomePage/contact_us.dart b/lib/views/home/HomePage/contact_us.dart index 37cfe41..2c84b0b 100644 --- a/lib/views/home/HomePage/contact_us.dart +++ b/lib/views/home/HomePage/contact_us.dart @@ -37,7 +37,7 @@ class ContactUsPage extends StatelessWidget { IconButton( onPressed: () async { Get.put(TextToSpeechController()).speakText( - 'Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.' + 'Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.' .tr); }, icon: const Icon(Icons.headphones), @@ -45,7 +45,7 @@ class ContactUsPage extends StatelessWidget { Padding( padding: const EdgeInsets.all(8.0), child: Text( - 'Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.' + 'Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.' .tr, style: AppStyle.title, textAlign: TextAlign.center, @@ -62,7 +62,7 @@ class ContactUsPage extends StatelessWidget { child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - "You can contact us during working hours from 12:00 - 19:00." + "You can contact us during working hours from 10:00 - 16:00." .tr, style: AppStyle.title, textAlign: TextAlign.center, diff --git a/lib/views/home/map_page_passenger.dart b/lib/views/home/map_page_passenger.dart index fcc6f05..56afa04 100644 --- a/lib/views/home/map_page_passenger.dart +++ b/lib/views/home/map_page_passenger.dart @@ -43,6 +43,7 @@ class MapPagePassenger extends StatelessWidget { child: Stack( children: [ GoogleMapPassengerWidget(), + // OsmMapPassengerWidget(), leftMainMenuIcons(), // PaymobPackage(), const PickerIconOnMap(), @@ -88,33 +89,33 @@ class CancelRidePageShow extends StatelessWidget { @override Widget build(BuildContext context) { return GetBuilder( - builder: (controller) => - (controller.data.isNotEmpty && controller.statusRide != 'Begin') - // || - // controller.timeToPassengerFromDriverAfterApplied == 0 - ? Positioned( - right: box.read(BoxName.lang) != 'ar' ? 10 : null, - left: box.read(BoxName.lang) == 'ar' ? 10 : null, - top: Get.height * .013, - child: GestureDetector( - onTap: () { - controller.changeCancelRidePageShow(); - }, - child: Container( - decoration: BoxDecoration( - color: AppColor.redColor, - borderRadius: BorderRadius.circular(15)), - child: const Padding( - padding: EdgeInsets.all(3), - child: Icon( - Icons.clear, - size: 40, - color: AppColor.secondaryColor, - ), - ), + builder: (controller) => (controller.polyLines.isNotEmpty && + controller.statusRide != 'Begin') + // || + // controller.timeToPassengerFromDriverAfterApplied == 0 + ? Positioned( + right: box.read(BoxName.lang) != 'ar' ? 10 : null, + left: box.read(BoxName.lang) == 'ar' ? 10 : null, + top: Get.height * .013, + child: GestureDetector( + onTap: () { + controller.changeCancelRidePageShow(); + }, + child: Container( + decoration: BoxDecoration( + color: AppColor.redColor, + borderRadius: BorderRadius.circular(15)), + child: const Padding( + padding: EdgeInsets.all(3), + child: Icon( + Icons.clear, + size: 40, + color: AppColor.secondaryColor, ), - )) - : const SizedBox()); + ), + ), + )) + : const SizedBox()); } } diff --git a/lib/views/home/map_widget.dart/apply_order_widget.dart b/lib/views/home/map_widget.dart/apply_order_widget.dart index abbc63b..c8381db 100644 --- a/lib/views/home/map_widget.dart/apply_order_widget.dart +++ b/lib/views/home/map_widget.dart/apply_order_widget.dart @@ -1,286 +1,412 @@ import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; -import 'package:Intaleq/controller/firebase/firbase_messge.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; -import 'package:Intaleq/main.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; // لتنسيق الأرقام import '../../../constant/box_name.dart'; import '../../../controller/firebase/notification_service.dart'; import '../../../controller/functions/launch.dart'; +import '../../../main.dart'; import '../../widgets/my_textField.dart'; class ApplyOrderWidget extends StatelessWidget { - ApplyOrderWidget({super.key}); - final firebaseMessagesController = - Get.isRegistered() - ? Get.find() - : Get.put(FirebaseMessagesController()); + const ApplyOrderWidget({super.key}); + @override Widget build(BuildContext context) { - Color _parseColor(String colorHex) { + // دالة لتحويل كود اللون الهيكس إلى لون + Color parseColor(String colorHex) { if (colorHex.isEmpty) return Colors.grey; - String processedHex = colorHex.replaceFirst('#', '0xff').trim(); - return Color(int.parse(processedHex.startsWith('0xff') - ? processedHex - : '0xff$processedHex')); + try { + String processedHex = colorHex.replaceFirst('#', '').trim(); + if (processedHex.length == 6) processedHex = 'FF$processedHex'; + return Color(int.parse('0x$processedHex')); + } catch (e) { + return Colors.grey; + } } - return GetBuilder(builder: (controller) { - Get.put( - FirebaseMessagesController()); // Ensure FirebaseMessagesController is initialized - if (controller.statusRide == 'Apply' && !controller.isSearchingWindow) { - return Positioned( - bottom: 0, - left: 0, - right: 0, - child: Container( - decoration: BoxDecoration( - // More modern BoxDecoration - color: Theme.of(context).cardColor, - borderRadius: - const BorderRadius.vertical(top: Radius.circular(20)), - boxShadow: [BoxShadow(blurRadius: 10, color: Colors.black12)], - ), - padding: const EdgeInsets.all(16), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildPriceInfo(context, controller), - const SizedBox(height: 16), - _buildDriverInfoCard(context, controller, _parseColor), - ], - ), + return Obx(() { + final controller = Get.find(); + + final bool isVisible = + controller.currentRideState.value == RideState.driverApplied || + controller.currentRideState.value == RideState.driverArrived; + + return AnimatedPositioned( + duration: const Duration(milliseconds: 500), + curve: Curves.elasticOut, // تأثير حركي أجمل + bottom: isVisible ? 0 : -Get.height * 0.6, + left: 0, + right: 0, + child: Container( + // height: Get.height * 0.38, // زيادة الارتفاع قليلاً للتصميم الجديد + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: const BorderRadius.vertical(top: Radius.circular(30)), + boxShadow: [ + BoxShadow( + blurRadius: 20, + spreadRadius: 2, + color: Colors.black.withOpacity(0.15), + offset: const Offset(0, -2), + ) + ], ), - ); - } else { - return const SizedBox(); - } + padding: const EdgeInsets.fromLTRB(20, 10, 20, 20), + child: GetBuilder( + builder: (c) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + // مقبض صغير في الأعلى + Container( + width: 40, + height: 5, + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.3), + borderRadius: BorderRadius.circular(10), + ), + ), + const SizedBox(height: 15), + + // السعر والعنوان + _buildPriceHeader(context, c), + + const SizedBox(height: 15), + + // كرت المعلومات الرئيسي (سائق + سيارة) + _buildMainInfoCard(context, c, parseColor), + + const SizedBox(height: 15), + + // أزرار الاتصال + _buildContactButtonsRow(context, c), + + const SizedBox(height: 15), + + // شريط الوقت + c.currentRideState.value == RideState.driverArrived + ? const DriverArrivePassengerAndWaitMinute() + : const TimeDriverToPassenger(), + ], + ); + }, + ), + ), + ); }); } - Widget _buildPriceInfo( + // --------------------------------------------------------------------------- + // 1. قسم السعر (مع التنسيق الجديد) + // --------------------------------------------------------------------------- + Widget _buildPriceHeader( BuildContext context, MapPassengerController controller) { - return InkWell( - onTap: () { - String message; - if (box.read(BoxName.carType) == 'Speed' || - box.read(BoxName.carType) == 'Awfar Car' || - box.read(BoxName.carType) == 'Delivery') { - message = - 'This ride type does not allow changes to the destination or additional stops' - .tr; - } else { - message = - 'This ride type allows changes, but the price may increase'.tr; - } - Get.snackbar( - 'This price is'.tr + - ' ${controller.totalPassenger.toStringAsFixed(2)}'.tr, - message, - snackPosition: SnackPosition.BOTTOM, - duration: const Duration(seconds: 2), - backgroundColor: - AppColor.yellowColor.withOpacity(0.8), // More subtle background - ); - }, - child: Center( - child: Text.rich( - TextSpan( - children: [ - TextSpan( - text: '${'The driver accepted your order for'.tr} ', - style: AppStyle.title), - TextSpan( - text: controller.totalPassenger.toStringAsFixed(2), - style: AppStyle.title.copyWith( - fontWeight: FontWeight.bold, color: AppColor.redColor), + // تنسيق الرقم (مثلاً: 60,000) + final formatter = NumberFormat("#,###"); + String formattedPrice = formatter.format(controller.totalPassenger); + + return Column( + children: [ + Text( + 'Driver Accepted Request'.tr, + style: AppStyle.subtitle.copyWith(color: Colors.grey[600]), + ), + const SizedBox(height: 5), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + formattedPrice, + style: AppStyle.title.copyWith( + fontSize: 28, + fontWeight: FontWeight.w900, + color: AppColor.primaryColor, ), - TextSpan(text: ' ${'LE'.tr}', style: AppStyle.title), - ], + ), + const SizedBox(width: 5), + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text( + 'SYP'.tr, + style: AppStyle.subtitle.copyWith( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.grey[700], + ), + ), + ), + ], + ), + ], + ); + } + + // --------------------------------------------------------------------------- + // 2. كرت المعلومات الرئيسي (السائق + السيارة 3D) + // --------------------------------------------------------------------------- + Widget _buildMainInfoCard(BuildContext context, + MapPassengerController controller, Color Function(String) parseColor) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context).scaffoldBackgroundColor, // لون خلفية فاتح + borderRadius: BorderRadius.circular(20), + border: Border.all(color: Colors.grey.withOpacity(0.1)), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + // الجزء الأيسر: معلومات السائق + Expanded( + child: Row( + children: [ + // صورة السائق + Container( + padding: const EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(color: AppColor.primaryColor, width: 2), + ), + child: CircleAvatar( + radius: 26, + backgroundImage: NetworkImage( + '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), + onBackgroundImageError: (exception, stackTrace) => + const Icon(Icons.person, size: 26, color: Colors.grey), + ), + ), + const SizedBox(width: 12), + // الاسم والتقييم والسيارة نص + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + controller.driverName, + style: AppStyle.title.copyWith( + fontSize: 16, fontWeight: FontWeight.bold), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 4), + Row( + children: [ + const Icon(Icons.star, color: Colors.amber, size: 16), + const SizedBox(width: 4), + Text( + controller.driverRate, + style: const TextStyle( + fontWeight: FontWeight.bold, fontSize: 13), + ), + ], + ), + const SizedBox(height: 4), + Text( + '${controller.model} • ${controller.licensePlate}', + style: TextStyle(color: Colors.grey[600], fontSize: 12), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], + ), + ), + ], + ), + ), + + // الجزء الأيمن: أيقونة السيارة الـ 3D + _build3DCarIcon(controller, parseColor), + ], + ), + ); + } + + // --------------------------------------------------------------------------- + // 3. أيقونة السيارة الـ 3D (الدائرة والظلال والخلفية الذكية) + // --------------------------------------------------------------------------- + Widget _build3DCarIcon( + MapPassengerController controller, Color Function(String) parseColor) { + Color carColor = parseColor(controller.colorHex); + + // تحديد سطوع لون السيارة لتحديد لون الخلفية + // إذا كانت السيارة فاتحة (أكثر من 0.6)، الخلفية تكون غامقة، والعكس + bool isCarLight = carColor.computeLuminance() > 0.6; + + // ألوان الخلفية للدائرة + Color bgGradientStart = + isCarLight ? Colors.blueGrey.shade700 : Colors.grey.shade100; + Color bgGradientEnd = + isCarLight ? Colors.blueGrey.shade900 : Colors.grey.shade300; + Color borderColor = isCarLight ? Colors.blueGrey.shade600 : Colors.white; + + return Container( + width: 75, + height: 75, + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + shape: BoxShape.circle, + // تدرج لوني للخلفية لتبدو 3D + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [bgGradientStart, bgGradientEnd], + ), + border: Border.all(color: borderColor, width: 2), + // ظلال لرفع الدائرة عن السطح + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + blurRadius: 10, + offset: const Offset(4, 4), + ), + BoxShadow( + color: Colors.white.withOpacity(isCarLight ? 0.1 : 0.8), + blurRadius: 10, + offset: const Offset(-4, -4), + ), + ], + ), + child: Center( + child: ColorFiltered( + colorFilter: ColorFilter.mode(carColor, BlendMode.srcIn), + child: Image.asset( + box.read(BoxName.carType) == 'Scooter' || + box.read(BoxName.carType) == 'Pink Bike' + ? 'assets/images/moto.png' + : 'assets/images/car3.png', + fit: BoxFit.contain, ), - textAlign: TextAlign.center, ), ), ); } - Widget _buildDriverInfoCard(BuildContext context, - MapPassengerController controller, Color Function(String) parseColor) { - return Container( - decoration: BoxDecoration( - color: Theme.of(context).canvasColor, - borderRadius: BorderRadius.circular(10), - border: Border.all(color: Colors.grey.shade200), + // --------------------------------------------------------------------------- + // 4. أزرار الاتصال (بتصميم جديد) + // --------------------------------------------------------------------------- + Widget _buildContactButtonsRow( + BuildContext context, MapPassengerController controller) { + return Row( + children: [ + Expanded( + child: _buildActionButton( + label: 'Message'.tr, + icon: Icons.chat_bubble_outline_rounded, + color: AppColor.blueColor, + onTap: () => _showContactOptionsDialog(context, controller), + ), + ), + const SizedBox(width: 15), + Expanded( + child: _buildActionButton( + label: 'Call'.tr, + icon: Icons.phone_rounded, + color: AppColor.greenColor, + onTap: () { + HapticFeedback.heavyImpact(); + makePhoneCall(controller.driverPhone); + }, + ), + ), + ], + ); + } + + Widget _buildActionButton({ + required String label, + required IconData icon, + required Color color, + required VoidCallback onTap, + }) { + return ElevatedButton( + onPressed: onTap, + style: ElevatedButton.styleFrom( + backgroundColor: color.withOpacity(0.1), + foregroundColor: color, + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 12), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), ), - child: Column( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(box.read(BoxName.carType.toString()), - style: - AppStyle.title.copyWith(fontWeight: FontWeight.w500)), - Row( - children: [ - _buildCarDetails(context, controller), - const SizedBox(width: 10), - _buildCarImage(controller, parseColor), - ], - ), - ], - ), - ), - const Divider(height: 1, thickness: 1, color: Colors.grey), - Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - _buildDriverAvatarAndInfo(controller), - _buildContactButtons(context, controller), - ], - ), - ), - Padding( - padding: - const EdgeInsets.only(left: 12.0, right: 12.0, bottom: 12.0), - child: controller.isDriverArrivePassenger - ? const DriverArrivePassengerAndWaitMinute() - : const TimeDriverToPassenger(), + Icon(icon, size: 20), + const SizedBox(width: 8), + Text( + label, + style: const TextStyle(fontWeight: FontWeight.bold), ), ], ), ); } - Widget _buildCarDetails( - BuildContext context, MapPassengerController controller) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(controller.model.toString(), style: AppStyle.title), - Text(controller.licensePlate.toString(), - style: Theme.of(context).textTheme.bodyMedium), - Text(controller.carColor.toString(), - style: Theme.of(context).textTheme.bodyMedium), - ], - ); - } - - Widget _buildCarImage( - MapPassengerController controller, Color Function(String) parseColor) { - return ColorFiltered( - colorFilter: - ColorFilter.mode(parseColor(controller.colorHex), BlendMode.srcIn), - child: Image.asset( - box.read(BoxName.carType) == 'Scooter' || - box.read(BoxName.carType) == 'Pink Bike' - ? 'assets/images/moto.png' - : 'assets/images/car3.png', - height: 60, - ), - ); - } - - Widget _buildDriverAvatarAndInfo(MapPassengerController controller) { - return Row( - children: [ - CircleAvatar( - radius: 30, - backgroundImage: NetworkImage( - '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), - onBackgroundImageError: (exception, stackTrace) => - const Icon(Icons.person, size: 30, color: AppColor.blueColor), - ), - const SizedBox(width: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(controller.driverName, - style: AppStyle.title.copyWith(fontWeight: FontWeight.w500)), - Text('⭐ ${controller.driverRate}', - style: const TextStyle(fontSize: 16, color: Colors.grey)), - ], - ), - ], - ); - } - - Widget _buildContactButtons( - BuildContext context, MapPassengerController controller) { - return Row( - children: [ - IconButton( - onPressed: () => _showContactOptionsDialog(context, controller), - icon: const Icon(Icons.message, color: AppColor.blueColor, size: 28), - ), - IconButton( - onPressed: () { - HapticFeedback.heavyImpact(); - makePhoneCall(controller.driverPhone); - }, - icon: const Icon(Icons.call, color: AppColor.greenColor, size: 28), - ), - ], - ); - } - + // --- النوافذ المنبثقة للرسائل (نفس المنطق القديم) --- void _showContactOptionsDialog( BuildContext context, MapPassengerController controller) { - Get.defaultDialog( - title: 'Contact Options'.tr, - content: SizedBox( - width: 300, - height: Get.height * .4, - child: ListView( - // shrinkWrap: true, + Get.bottomSheet( + Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: const BorderRadius.vertical(top: Radius.circular(20)), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ + Text('Quick Message'.tr, style: AppStyle.title), + const SizedBox(height: 15), ..._buildPredefinedMessages(controller), - const SizedBox(height: 8), + const Divider(height: 30), _buildCustomMessageInput(controller, context), + SizedBox( + height: MediaQuery.of(context).viewInsets.bottom), // للكيبورد ], ), ), + isScrollControlled: true, ); } List _buildPredefinedMessages(MapPassengerController controller) { const messages = [ 'Hello, I\'m at the agreed-upon location', - 'My location is correct. You can search for me using the navigation app', 'I\'m waiting for you', "How much longer will you be?", ]; return messages .map((message) => Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: ElevatedButton( - onPressed: () { - // firebaseMessagesController.sendNotificationToDriverMAP( - // 'message From passenger', - // message.tr, - // controller.driverToken.toString(), - // [], - // 'ding', - // ); - NotificationService.sendNotification( - target: controller.driverToken.toString(), - title: 'message From passenger', - body: message.tr, // Make sure to translate the message - isTopic: false, // Important: this is a token - tone: 'ding', - driverList: [], - ); + padding: const EdgeInsets.only(bottom: 10.0), + child: InkWell( + onTap: () { + _sendMessage(controller, message.tr); Get.back(); }, - child: Text(message.tr), + child: Container( + padding: + const EdgeInsets.symmetric(vertical: 12, horizontal: 15), + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + ), + child: Row( + children: [ + const Icon(Icons.quickreply_rounded, + size: 18, color: Colors.grey), + const SizedBox(width: 10), + Expanded( + child: Text(message.tr, style: AppStyle.subtitle)), + ], + ), + ), ), )) .toList(); @@ -291,45 +417,59 @@ class ApplyOrderWidget extends StatelessWidget { return Row( children: [ Expanded( - child: Form( - key: controller.messagesFormKey, - child: MyTextForm( - controller: controller.messageToDriver, - label: 'Send a custom message'.tr, - hint: 'Type your message'.tr, - type: TextInputType.text, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.1), + borderRadius: BorderRadius.circular(25), + ), + child: Form( + key: controller.messagesFormKey, + child: TextFormField( + controller: controller.messageToDriver, + decoration: InputDecoration( + hintText: 'Type your message...'.tr, + border: InputBorder.none, + ), + ), ), ), ), - IconButton( - onPressed: () { - if (controller.messagesFormKey.currentState!.validate()) { - // firebaseMessagesController.sendNotificationToDriverMAP( - // 'message From passenger', - // controller.messageToDriver.text, - // controller.driverToken, - // [], - // 'ding', - // ); - NotificationService.sendNotification( - target: controller.driverToken.toString(), - title: 'message From passenger', - body: controller.messageToDriver.text, - isTopic: false, // Important: this is a token - tone: 'ding', - driverList: [], - ); - controller.messageToDriver.clear(); - Get.back(); - } - }, - icon: const Icon(Icons.send), + const SizedBox(width: 10), + CircleAvatar( + backgroundColor: AppColor.primaryColor, + child: IconButton( + onPressed: () { + if (controller.messagesFormKey.currentState!.validate()) { + _sendMessage(controller, controller.messageToDriver.text); + controller.messageToDriver.clear(); + Get.back(); + } + }, + icon: const Icon(Icons.send_rounded, color: Colors.white, size: 20), + ), ), ], ); } + + void _sendMessage(MapPassengerController controller, String text) { + NotificationService.sendNotification( + category: 'message From passenger', + target: controller.driverToken.toString(), + title: 'Message From passenger'.tr, + body: text, + isTopic: false, + tone: 'ding', + driverList: [], + ); + } } +// ----------------------------------------------------------------------------- +// مؤشرات الانتظار والوقت (نفس المنطق مع تحسين بسيط في التصميم) +// ----------------------------------------------------------------------------- + class DriverArrivePassengerAndWaitMinute extends StatelessWidget { const DriverArrivePassengerAndWaitMinute({Key? key}) : super(key: key); @@ -338,35 +478,31 @@ class DriverArrivePassengerAndWaitMinute extends StatelessWidget { return GetBuilder(builder: (controller) { return Column( children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Driver is waiting'.tr, + style: const TextStyle(fontWeight: FontWeight.bold)), + Text( + controller.stringRemainingTimeDriverWaitPassenger5Minute, + style: const TextStyle( + fontWeight: FontWeight.bold, color: AppColor.redColor), + ), + ], + ), + const SizedBox(height: 6), ClipRRect( - borderRadius: BorderRadius.circular(15), + borderRadius: BorderRadius.circular(10), child: LinearProgressIndicator( - backgroundColor: AppColor.accentColor.withOpacity(0.3), + backgroundColor: Colors.grey[200], color: controller.remainingTimeDriverWaitPassenger5Minute < 60 ? AppColor.redColor : AppColor.greenColor, - minHeight: 20, + minHeight: 8, value: controller.progressTimerDriverWaitPassenger5Minute.toDouble(), ), ), - const SizedBox(height: 4), - Center( - child: Text.rich( - TextSpan( - children: [ - TextSpan( - text: '${'Driver is waiting at pickup.'.tr} ', - style: AppStyle.subtitle), - TextSpan( - text: controller - .stringRemainingTimeDriverWaitPassenger5Minute, - style: AppStyle.title), - ], - ), - textAlign: TextAlign.center, - ), - ), ], ); }); @@ -379,47 +515,37 @@ class TimeDriverToPassenger extends StatelessWidget { @override Widget build(BuildContext context) { return GetBuilder(builder: (controller) { - return controller.isDriverInPassengerWay == false || - controller.timeToPassengerFromDriverAfterApplied > 0 - ? Column( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(15), - child: LinearProgressIndicator( - backgroundColor: AppColor.accentColor.withOpacity(0.3), - color: controller - .remainingTimeToPassengerFromDriverAfterApplied < - 60 - ? AppColor.redColor - : AppColor.greenColor, - minHeight: 20, - value: controller - .progressTimerToPassengerFromDriverAfterApplied - .toDouble() - .clamp(0.0, 1.0), - ), - ), - const SizedBox(height: 4), - Center( - child: Text.rich( - TextSpan( - children: [ - TextSpan( - text: '${'Driver is on the way'.tr} ', - style: AppStyle.subtitle, - ), - TextSpan( - text: controller.stringRemainingTimeToPassenger, - style: AppStyle.title, - ), - ], - ), - textAlign: TextAlign.center, - ), - ), - ], - ) - : const SizedBox(); + if (controller.timeToPassengerFromDriverAfterApplied <= 0) { + return const SizedBox(); + } + return Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Driver arriving in'.tr, + style: const TextStyle(fontWeight: FontWeight.bold)), + Text( + controller.stringRemainingTimeToPassenger, + style: const TextStyle( + fontWeight: FontWeight.bold, color: AppColor.primaryColor), + ), + ], + ), + const SizedBox(height: 6), + ClipRRect( + borderRadius: BorderRadius.circular(10), + child: LinearProgressIndicator( + backgroundColor: Colors.grey[200], + color: AppColor.primaryColor, + minHeight: 8, + value: controller.progressTimerToPassengerFromDriverAfterApplied + .toDouble() + .clamp(0.0, 1.0), + ), + ), + ], + ); }); } } diff --git a/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart b/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart index 4ec0403..f51c7c4 100644 --- a/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart +++ b/lib/views/home/map_widget.dart/buttom_sheet_map_show.dart @@ -515,7 +515,7 @@ class Details extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Text( - '${'Distance is'.tr} ${controller.data[0]['distance']['text']}', + '${'Distance is'.tr} ${controller.distance.toStringAsFixed(2)} KM', style: AppStyle.title, ), Text( diff --git a/lib/views/home/map_widget.dart/car_details_widget_to_go.dart b/lib/views/home/map_widget.dart/car_details_widget_to_go.dart index 349cf75..bc5bf95 100644 --- a/lib/views/home/map_widget.dart/car_details_widget_to_go.dart +++ b/lib/views/home/map_widget.dart/car_details_widget_to_go.dart @@ -7,6 +7,7 @@ import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/profile/passenger_profile_page.dart'; import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:Intaleq/views/widgets/my_textField.dart'; +import 'package:intl/intl.dart'; import 'dart:ui'; import '../../../constant/info.dart'; @@ -79,9 +80,7 @@ class CarDetailsTypeToChoose extends StatelessWidget { return GetBuilder(builder: (controller) { _prepareCarTypes(controller); - if (!(controller.data.isNotEmpty && - controller.isBottomSheetShown && - controller.rideConfirm == false)) { + if (!(controller.isBottomSheetShown) && controller.rideConfirm == false) { return const SizedBox.shrink(); } // Added a BackdropFilter for a modern glassmorphism effect @@ -351,7 +350,7 @@ class CarDetailsTypeToChoose extends StatelessWidget { color: AppColor.primaryColor, size: 16), const SizedBox(width: 4), Text( - '${controller.distance} ${'KM'.tr}', + '${controller.distance.toStringAsFixed(1)} ${'KM'.tr}', style: AppStyle.subtitle.copyWith( color: AppColor.primaryColor, fontWeight: FontWeight.w600, @@ -418,30 +417,54 @@ class CarDetailsTypeToChoose extends StatelessWidget { // --- LOGIC METHODS (UNCHANGED) --- + // 1. قم بإضافة هذا السطر في أعلى الملف + String _getPassengerPriceText( CarType carType, MapPassengerController mapPassengerController) { + // الخطوة 1: احصل على السعر كـ double أولاً + double rawPrice; switch (carType.carType) { case 'Comfort': - return mapPassengerController.totalPassengerComfort.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerComfort; + break; case 'Speed': - return mapPassengerController.totalPassengerSpeed.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerSpeed; + break; case 'Electric': - return mapPassengerController.totalPassengerElectric.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerElectric; + break; case 'Awfar Car': - return mapPassengerController.totalPassengerBalash.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerBalash; + break; case 'Scooter': - return mapPassengerController.totalPassengerScooter.toStringAsFixed(1); + case 'Pink Bike': // دمج الحالات المتشابهة + rawPrice = mapPassengerController.totalPassengerScooter; + break; case 'Van': - return mapPassengerController.totalPassengerVan.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerVan; + break; case 'Lady': - return mapPassengerController.totalPassengerLady.toStringAsFixed(1); - case 'Pink Bike': - return mapPassengerController.totalPassengerScooter.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerLady; + break; case 'Rayeh Gai': - return mapPassengerController.totalPassengerRayehGai.toStringAsFixed(1); + rawPrice = mapPassengerController.totalPassengerRayehGai; + break; default: - return '...'; + return '...'; // إذا كان نوع السيارة غير معروف } + + // الخطوة 2: قم بإزالة الكسور العشرية + // .round() ستحول 65000.00 إلى 65000 + final int roundedPrice = rawPrice.round(); + + // الخطوة 3: أنشئ "مُنسّق" ليضيف فواصل الآلاف + // NumberFormat.decimalPattern() يستخدم إعدادات اللغة الافتراضية للجهاز + // لوضع الفاصلة (,) أو النقطة (.) حسب الدولة + final formatter = NumberFormat.decimalPattern(); + + // الخطوة 4: قم بتنسيق الرقم الصحيح + // سيحول 65000 إلى "65,000" + return formatter.format(roundedPrice); } void _showCarDetailsDialog( diff --git a/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart b/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart index 3575fda..9dffefc 100644 --- a/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart +++ b/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart @@ -137,9 +137,9 @@ class CashConfirmPageShown extends StatelessWidget { onPressed: () { // --- نفس منطقك القديم بالضبط --- controller.changeCashConfirmPageShown(); - controller.isSearchingWindow = true; - controller.confirmRideForAllDriverAvailable(); - controller.update(); + // controller.isSearchingWindow = true; + controller.startSearchingForDriver(); + // controller.update(); }, ); } diff --git a/lib/views/home/map_widget.dart/form_search_places_destenation.dart b/lib/views/home/map_widget.dart/form_search_places_destenation.dart index 4c558d4..7d3b92f 100644 --- a/lib/views/home/map_widget.dart/form_search_places_destenation.dart +++ b/lib/views/home/map_widget.dart/form_search_places_destenation.dart @@ -168,8 +168,8 @@ class _SearchFieldState extends State<_SearchField> { icon: Icon(Icons.location_on_outlined, color: AppColor.accentColor, size: 30), tooltip: widget.controller.isAnotherOreder - ? 'Pick destination on map' - : 'Pick on map', + ? 'Pick destination on map'.tr + : 'Pick on map'.tr, ), ], ), diff --git a/lib/views/home/map_widget.dart/google_map_passenger_widget.dart b/lib/views/home/map_widget.dart/google_map_passenger_widget.dart index 52e93a5..fc0b5fa 100644 --- a/lib/views/home/map_widget.dart/google_map_passenger_widget.dart +++ b/lib/views/home/map_widget.dart/google_map_passenger_widget.dart @@ -7,8 +7,8 @@ import 'package:Intaleq/controller/home/points_for_rider_controller.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; -import '../../../controller/functions/location_controller.dart'; -import '../../../controller/home/device_tier.dart'; +// import '../../../controller/functions/location_controller.dart'; // Un-comment if needed +// import '../../../controller/home/device_tier.dart'; // Removed to rely on Controller logic import '../../../controller/home/map_passenger_controller.dart'; import '../../widgets/mycircular.dart'; import '../../widgets/mydialoug.dart'; @@ -17,7 +17,6 @@ class GoogleMapPassengerWidget extends StatelessWidget { GoogleMapPassengerWidget({super.key}); final WayPointController wayPointController = Get.put(WayPointController()); - final LocationController locationController = Get.find(); @override Widget build(BuildContext context) { @@ -32,24 +31,26 @@ class GoogleMapPassengerWidget extends StatelessWidget { child: GoogleMap( onMapCreated: controller.onMapCreated, - // ✅ حدود الكاميرا كما هي + // ✅ Camera Bounds cameraTargetBounds: CameraTargetBounds(controller.boundsdata), - // ✅ Zoom أهدأ للأجهزة الضعيفة + // ✅ Performance: Smoother zoom limits for low-end devices minMaxZoomPreference: controller.lowPerf ? const MinMaxZoomPreference(6, 17) : const MinMaxZoomPreference(6, 18), - onLongPress: (argument) { + // ✅ Destination Selection on Long Press + onLongPress: (LatLng argument) { MyDialog().getDialog('Are you want to go to this site'.tr, '', () async { controller.clearPolyline(); + // Ensure we have car data available before routing if (controller.dataCarsLocationByPassenger != null) { await controller.getDirectionMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${argument.latitude},${argument.longitude}', ); - Get.back(); + Get.back(); // Close Dialog await controller.bottomSheet(); controller.showBottomSheet1(); } else { @@ -59,52 +60,21 @@ class GoogleMapPassengerWidget extends StatelessWidget { .tr, '', colorText: AppColor.redColor, - duration: const Duration(seconds: 11), - instantInit: true, - snackPosition: SnackPosition.TOP, + duration: const Duration(seconds: 5), + backgroundColor: AppColor.secondaryColor, + icon: const Icon(Icons.error, color: AppColor.redColor), titleText: Text('Error'.tr, style: const TextStyle(color: AppColor.redColor)), messageText: Text( 'We Are Sorry That we dont have cars in your Location!' .tr, style: AppStyle.title), - icon: const Icon(Icons.error), - shouldIconPulse: true, - maxWidth: double.infinity, - margin: const EdgeInsets.all(16), - padding: const EdgeInsets.all(16), - borderRadius: 8, - borderColor: AppColor.redColor, - borderWidth: 2, - backgroundColor: AppColor.secondaryColor, - leftBarIndicatorColor: AppColor.redColor, - boxShadows: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - blurRadius: 4, - spreadRadius: 2, - offset: const Offset(0, 4), - ), - ], - backgroundGradient: const LinearGradient( - colors: [AppColor.redColor, AppColor.accentColor], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), - isDismissible: true, - showProgressIndicator: false, - dismissDirection: DismissDirection.up, - snackStyle: SnackStyle.GROUNDED, - forwardAnimationCurve: Curves.easeInToLinear, - reverseAnimationCurve: Curves.easeInOut, - animationDuration: const Duration(milliseconds: 4000), - barBlur: 8, - overlayColor: AppColor.primaryColor.withOpacity(0.5), ); } }); }, + // ✅ Hide UI elements on tap onTap: (argument) { controller.hidePlaces(); }, @@ -114,71 +84,66 @@ class GoogleMapPassengerWidget extends StatelessWidget { zoom: controller.lowPerf ? 14.5 : 15, ), - // ✅ ماركرز (احرص أن الأيقونات محجّمة ومخزّنة Cache في الكنترولر) + // ✅ Markers markers: controller.markers.toSet(), - // ✅ بوليغونز كما هي + // ✅ Polygons (e.g., University/Country borders) polygons: controller.polygons, - // ✅ Polyline مُبسّطة للأجهزة الضعيفة (الكنترولر يجهّز مجموعة مبسطة عند lowPerf) + // ✅ Polylines: Switch to lighter version if lowPerf is detected polylines: controller.lowPerf - ? controller.polyLinesLight - .toSet() // <- استخدم مجموعة خفيفة + ? controller.polyLinesLight.toSet() : controller.polyLines.toSet(), - // ✅ دوائر خفيفة على الأجهزة الضعيفة - // circles: { - // Circle( - // circleId: const CircleId('circle_id'), - // center: controller.passengerLocation, - // radius: controller.lowPerf ? 80 : 100, - // fillColor: - // Colors.blue.withOpacity(controller.lowPerf ? 0.2 : 0.3), - // strokeColor: Colors.blue, - // strokeWidth: controller.lowPerf ? 1 : 2, - // ), - // }, - - // ✅ الوضع الخفيف: liteMode + تعطيل الطبقات المكلفة + خريطة Normal + // ✅ Map Type: Switch to Normal map on low-end devices to save RAM mapType: controller.lowPerf ? MapType.normal : (controller.mapType ? MapType.satellite - : MapType.terrain), + : MapType + .normal), // Changed terrain default to normal for better performance + // ✅ UI Settings for Performance myLocationButtonEnabled: false, - - // ⚠️ liteMode (Android فقط): فعّله على الأجهزة الضعيفة - // liteModeEnabled: controller.lowPerf, - liteModeEnabled: Platform.isAndroid ? isLowEnd() : false, - trafficEnabled: controller.mapTrafficON && !isLowEnd(), - buildingsEnabled: !isLowEnd(), - // ✅ تقليل الكلفة الرسومية - mapToolbarEnabled: false, - rotateGesturesEnabled: isLowEnd() ? false : true, - tiltGesturesEnabled: false, // تعطيل الميلان لتقليل الحمل + tiltGesturesEnabled: + false, // Disable tilt to save GPU resources - // ✅ Throttle لحركة الكاميرا على الأجهزة الضعيفة - onCameraMove: (position) { + // Lite Mode (Static image) only on very low-end Androids if needed, + // but usually handled by lowPerf logic in mapType/Traffic + liteModeEnabled: Platform.isAndroid && controller.lowPerf, + + trafficEnabled: controller.mapTrafficON && !controller.lowPerf, + buildingsEnabled: !controller.lowPerf, + rotateGesturesEnabled: + !controller.lowPerf, // Disable rotation on low-end + + // ✅ Camera Movement Logic + onCameraMove: (CameraPosition position) { + // 1. Always update current view target (for pickers) + controller.newMyLocation = position.target; + + // 2. Handle Drag-to-Select for specific states + if (controller.startLocationFromMap == true) { + controller.newStartPointLocation = position.target; + } else if (controller.passengerStartLocationFromMap == true) { + controller.newStartPointLocation = position.target; + } + + // 3. Handle Waypoints Dragging + int waypointsLength = + Get.find().wayPoints.length; + if (waypointsLength > 0 && + controller.wayPointIndex >= 0 && + controller.wayPointIndex < + controller.placesCoordinate.length) { + controller.placesCoordinate[controller.wayPointIndex] = + '${position.target.latitude},${position.target.longitude}'; + } + + // 4. Throttle heavy calculations (Reverse Geocoding / API calls) if (controller.lowPerf) { controller.onCameraMoveThrottled(position); - } else { - // منطقك الحالي - int waypointsLength = - Get.find().wayPoints.length; - int index = controller.wayPointIndex; - if (waypointsLength > 0) { - controller.placesCoordinate[index] = - '${position.target.latitude},${position.target.longitude}'; - } - if (controller.startLocationFromMap == true) { - controller.newStartPointLocation = position.target; - } else if (controller.passengerStartLocationFromMap == - true) { - controller.newStartPointLocation = position.target; - } - controller.newMyLocation = position.target; } }, diff --git a/lib/views/home/map_widget.dart/left_main_menu_icons.dart b/lib/views/home/map_widget.dart/left_main_menu_icons.dart index f49503f..8fff07f 100644 --- a/lib/views/home/map_widget.dart/left_main_menu_icons.dart +++ b/lib/views/home/map_widget.dart/left_main_menu_icons.dart @@ -76,11 +76,11 @@ GetBuilder leftMainMenuIcons() { tooltip: 'VIP Waiting Page', onPressed: () => Get.to(() => VipWaittingPage()), ), - _buildMapActionButton( - icon: Octicons.ellipsis, - tooltip: 'test', - onPressed: () => Get.to(() => TestPage()), - ), + // _buildMapActionButton( + // icon: Octicons.ellipsis, + // tooltip: 'test', + // onPressed: () => Get.to(() => TestPage()), + // ), ], ), ), @@ -129,18 +129,22 @@ class TestPage extends StatelessWidget { body: Center( child: TextButton( onPressed: () async { - var token = (box.read(BoxName.tokenFCM).toString()); - Log.print( - 'box.read(BoxName.tokenFCM).toString(): ${box.read(BoxName.tokenFCM).toString()}'); - // 'e-EE5Z5Fn0x5s6EYbtgT6f:APA91bHBTxkbdljuvDF0iPhso58r7fCwGh-WcYh3CYfUJEShUKFcQf496Xc5E6LHqRFKfOQBxYrWSdLO8d9gLbL-IdgyDuZ7jNUjzvrcV_YmagDtgz7-UNw'; - // 'fdN1o8akwURHj47wvShC4T:APA91bFm-mFfFjdCbHsDReN0MzPE1hiaHKtPJnzayMec6LiInjzk6YCX41SeF0T1FE7Z6d4Hjy1AkZhLIeebSgX4RrodzwSwZSH0kboTQEfqkrjrk4xw9aM'; - NotificationService.sendNotification( - target: token, - title: 'Hi ,I will go now'.tr, - body: 'A passenger is waiting for you.', - isTopic: false, // Important: this is a token - tone: 'ding', - ); + // var token = (box.read(BoxName.tokenFCM).toString()); + // Log.print( + // 'box.read(BoxName.tokenFCM).toString(): ${box.read(BoxName.tokenFCM).toString()}'); + // // 'e-EE5Z5Fn0x5s6EYbtgT6f:APA91bHBTxkbdljuvDF0iPhso58r7fCwGh-WcYh3CYfUJEShUKFcQf496Xc5E6LHqRFKfOQBxYrWSdLO8d9gLbL-IdgyDuZ7jNUjzvrcV_YmagDtgz7-UNw'; + // // 'fdN1o8akwURHj47wvShC4T:APA91bFm-mFfFjdCbHsDReN0MzPE1hiaHKtPJnzayMec6LiInjzk6YCX41SeF0T1FE7Z6d4Hjy1AkZhLIeebSgX4RrodzwSwZSH0kboTQEfqkrjrk4xw9aM'; + // NotificationService.sendNotification( + // target: + // 'eznj5vRWRnqwKNtKJBaYNg:APA91bHhJ2DJ1KQa3KRx6wQtX8BkFHq6I_-dXGxT16p6pnV5AwI0bWOeiTJOI35VfTBaK4YSCKmAB4SsRnpARK0MTJ96xtpPmwAKfkvsZFga8OoGMeb3PmA', + // title: 'Order', + // body: 'endNameAddress', + // isTopic: false, + // tone: 'tone1', + // category: 'Order', // استخدام الفئة الثابتة + // driverList: []); + // RideState.driverApplied; + // Get.find().Ride }, child: Text( "Text Button", diff --git a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart index 693b411..2995344 100644 --- a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart +++ b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart @@ -480,7 +480,7 @@ class MainBottomMenuMap extends StatelessWidget { controller.placeDestinationController.clear(); - controller.showBottomSheet1(); + // controller.showBottomSheet1(); controller.changeMainBottomMenuMap(); }, diff --git a/lib/views/home/map_widget.dart/ride_begin_passenger.dart b/lib/views/home/map_widget.dart/ride_begin_passenger.dart index 23a02d9..9ee2649 100644 --- a/lib/views/home/map_widget.dart/ride_begin_passenger.dart +++ b/lib/views/home/map_widget.dart/ride_begin_passenger.dart @@ -1,3 +1,288 @@ +// import 'package:flutter/material.dart'; +// import 'package:flutter_font_icons/flutter_font_icons.dart'; +// import 'package:get/get.dart'; +// import 'package:Intaleq/constant/box_name.dart'; +// import 'package:Intaleq/controller/profile/profile_controller.dart'; +// import 'package:Intaleq/main.dart'; +// import 'package:Intaleq/views/home/profile/complaint_page.dart'; + +// import '../../../constant/colors.dart'; +// import '../../../constant/links.dart'; +// import '../../../constant/style.dart'; +// import '../../../controller/functions/audio_record1.dart'; +// import '../../../controller/functions/launch.dart'; +// import '../../../controller/functions/toast.dart'; +// import '../../../controller/home/map_passenger_controller.dart'; + +// // --- الويدجت الرئيسية بالتصميم الجديد --- +// class RideBeginPassenger extends StatelessWidget { +// const RideBeginPassenger({super.key}); + +// @override +// Widget build(BuildContext context) { +// // --- نفس منطق استدعاء الكنترولرز --- +// final ProfileController profileController = Get.put(ProfileController()); +// final AudioRecorderController audioController = +// Get.put(AudioRecorderController()); + +// return GetBuilder(builder: (controller) { +// // --- نفس شرط الإظهار الخاص بك --- +// if (controller.statusRide != 'Begin') { +// return const SizedBox.shrink(); +// } + +// return Positioned( +// left: 0, +// right: 0, +// bottom: 0, +// child: Container( +// decoration: BoxDecoration( +// color: AppColor.secondaryColor, +// borderRadius: const BorderRadius.only( +// topLeft: Radius.circular(24), +// topRight: Radius.circular(24), +// ), +// boxShadow: [ +// BoxShadow( +// color: Colors.black.withOpacity(0.2), +// blurRadius: 20, +// offset: const Offset(0, -5), +// ), +// ], +// ), +// child: Padding( +// padding: const EdgeInsets.fromLTRB(16, 12, 16, 16), +// child: Column( +// mainAxisSize: MainAxisSize.min, +// children: [ +// // مقبض السحب (Handle) +// Container( +// width: 40, +// height: 5, +// decoration: BoxDecoration( +// color: AppColor.writeColor.withOpacity(0.3), +// borderRadius: BorderRadius.circular(12), +// ), +// ), +// const SizedBox(height: 12), + +// // --- 1. قسم معلومات السائق --- +// _buildDriverInfo(controller), +// const Divider(height: 24, thickness: 0.5), + +// // --- 2. قسم تقدم الرحلة --- +// _buildTripProgress(controller), +// const SizedBox(height: 16), + +// // --- 3. قسم الإجراءات والأمان --- +// _buildActionButtons( +// context, controller, profileController, audioController), +// ], +// ), +// ), +// ), +// ); +// }); +// } + +// // --- ويدجت مساعدة لعرض معلومات السائق بشكل منظم --- +// Widget _buildDriverInfo(MapPassengerController controller) { +// return Row( +// children: [ +// CircleAvatar( +// radius: 28, +// backgroundImage: NetworkImage( +// '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), +// ), +// const SizedBox(width: 12), +// Expanded( +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Text(controller.driverName, +// style: AppStyle.title.copyWith(fontWeight: FontWeight.bold)), +// const SizedBox(height: 2), +// Text( +// '${controller.make} ${controller.model} • ${box.read(BoxName.carType)}', +// style: AppStyle.subtitle +// .copyWith(color: AppColor.writeColor.withOpacity(0.7)), +// ), +// ], +// ), +// ), +// const SizedBox(width: 12), +// Column( +// crossAxisAlignment: CrossAxisAlignment.end, +// children: [ +// Container( +// padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), +// decoration: BoxDecoration( +// color: AppColor.writeColor.withOpacity(0.1), +// borderRadius: BorderRadius.circular(6), +// ), +// child: Text( +// controller.licensePlate, +// style: AppStyle.subtitle +// .copyWith(fontWeight: FontWeight.bold, letterSpacing: 1.5), +// ), +// ), +// const SizedBox(height: 4), +// Row( +// children: [ +// Text(controller.driverRate, +// style: AppStyle.subtitle +// .copyWith(fontWeight: FontWeight.bold)), +// const SizedBox(width: 2), +// const Icon(Icons.star_rounded, +// color: AppColor.yellowColor, size: 16), +// ], +// ), +// ], +// ) +// ], +// ); +// } + +// // --- ويدجت مساعدة لعرض شريط التقدم --- +// Widget _buildTripProgress(MapPassengerController controller) { +// return Column( +// children: [ +// Row( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// children: [ +// Text('Time to Destination'.tr, style: AppStyle.subtitle), +// Text(controller.stringRemainingTimeRideBegin, +// style: AppStyle.subtitle.copyWith( +// fontWeight: FontWeight.bold, color: AppColor.primaryColor)), +// ], +// ), +// const SizedBox(height: 8), +// ClipRRect( +// borderRadius: BorderRadius.circular(10), +// child: LinearProgressIndicator( +// backgroundColor: AppColor.primaryColor.withOpacity(0.2), +// color: controller.remainingTimeTimerRideBegin < 60 +// ? AppColor.redColor +// : AppColor.greenColor, +// minHeight: 10, +// value: controller.progressTimerRideBegin.toDouble(), +// ), +// ), +// ], +// ); +// } + +// // --- ويدجت مساعدة لعرض أزرار الإجراءات --- +// Widget _buildActionButtons( +// BuildContext context, +// MapPassengerController controller, +// ProfileController profileController, +// AudioRecorderController audioController) { +// return Row( +// mainAxisAlignment: MainAxisAlignment.spaceAround, +// children: [ +// _buildActionButton( +// icon: Icons.sos_rounded, +// label: 'SOS'.tr, +// color: AppColor.redColor, +// onTap: () async { +// // --- نفس منطقك القديم --- +// if (box.read(BoxName.sosPhonePassenger) == null) { +// await profileController.updatField( +// 'sosPhone', TextInputType.phone); +// box.write(BoxName.sosPhonePassenger, +// profileController.prfoileData['sosPhone']); +// } else { +// makePhoneCall('112'); +// } +// }), +// _buildActionButton( +// icon: FontAwesome.whatsapp, +// label: 'WhatsApp'.tr, +// color: AppColor.greenColor, +// onTap: () async { +// // --- نفس منطقك القديم --- +// if (box.read(BoxName.sosPhonePassenger) == null || +// box.read(BoxName.sosPhonePassenger) == 'sos') { +// await profileController.updatField( +// 'sosPhone', TextInputType.phone); +// box.write(BoxName.sosPhonePassenger, +// profileController.prfoileData['sosPhone']); +// } else { +// final phoneNumber = +// box.read(BoxName.sosPhonePassenger).toString(); + +// final phone = controller.formatSyrianPhoneNumber(phoneNumber); +// controller.sendWhatsapp(phone); // +// } +// }), +// _buildActionButton( +// icon: Icons.share_location_outlined, // أيقونة جديدة ومناسبة +// label: 'Share'.tr, // اسم جديد وواضح +// color: AppColor.blueColor, +// onTap: () async { +// // نفس الوظيفة السابقة التي كانت تحت اسم "Video Call" +// await controller.getTokenForParent(); +// }), +// _buildActionButton( +// icon: audioController.isRecording +// ? Icons.mic_off_rounded +// : Icons.mic_none_rounded, +// label: audioController.isRecording ? 'Stop'.tr : 'Record'.tr, +// color: AppColor.primaryColor, +// onTap: () async { +// // --- نفس منطقك القديم --- +// if (audioController.isRecording == false) { +// await audioController.startRecording(); +// Toast.show(context, 'Start Record'.tr, AppColor.greenColor); +// } else { +// await audioController.stopRecording(); +// Toast.show(context, 'Record saved'.tr, AppColor.greenColor); +// } +// }, +// ), +// _buildActionButton( +// icon: Icons.note_add_outlined, +// label: 'Complaint'.tr, +// color: AppColor.yellowColor, +// onTap: () { +// // --- نفس منطقك القديم --- +// Get.to(() => ComplaintPage(), transition: Transition.downToUp); +// }), +// ], +// ); +// } + +// // --- ويدجت مساعدة لبناء زر إجراء فردي --- +// Widget _buildActionButton( +// {required IconData icon, +// required String label, +// required Color color, +// required VoidCallback onTap}) { +// return InkWell( +// onTap: onTap, +// borderRadius: BorderRadius.circular(12), +// child: Padding( +// padding: const EdgeInsets.all(4.0), +// child: Column( +// mainAxisSize: MainAxisSize.min, +// children: [ +// Container( +// padding: const EdgeInsets.all(12), +// decoration: BoxDecoration( +// color: color.withOpacity(0.1), +// shape: BoxShape.circle, +// ), +// child: Icon(icon, color: color, size: 26), +// ), +// const SizedBox(height: 6), +// Text(label, style: AppStyle.subtitle.copyWith(fontSize: 12)), +// ], +// ), +// ), +// ); +// } +// } import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; @@ -5,6 +290,7 @@ import 'package:Intaleq/constant/box_name.dart'; import 'package:Intaleq/controller/profile/profile_controller.dart'; import 'package:Intaleq/main.dart'; import 'package:Intaleq/views/home/profile/complaint_page.dart'; +import 'package:intl/intl.dart'; import '../../../constant/colors.dart'; import '../../../constant/links.dart'; @@ -14,67 +300,80 @@ import '../../../controller/functions/launch.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; -// --- الويدجت الرئيسية بالتصميم الجديد --- class RideBeginPassenger extends StatelessWidget { const RideBeginPassenger({super.key}); @override Widget build(BuildContext context) { - // --- نفس منطق استدعاء الكنترولرز --- final ProfileController profileController = Get.put(ProfileController()); final AudioRecorderController audioController = Get.put(AudioRecorderController()); - return GetBuilder(builder: (controller) { - // --- نفس شرط الإظهار الخاص بك --- - if (controller.statusRide != 'Begin') { - return const SizedBox.shrink(); - } + return Obx(() { + final controller = Get.find(); - return Positioned( + // شرط الإظهار: تظهر فقط عندما تكون الرحلة جارية + final bool isVisible = + controller.currentRideState.value == RideState.inProgress && + controller.isStartAppHasRide == false; + ; + + return AnimatedPositioned( + duration: const Duration(milliseconds: 500), + curve: Curves.easeOutBack, // حركة أكثر سلاسة + bottom: isVisible ? 0 : -Get.height * 0.6, left: 0, right: 0, - bottom: 0, child: Container( decoration: BoxDecoration( - color: AppColor.secondaryColor, + color: Colors.white, // خلفية بيضاء لنظافة التصميم borderRadius: const BorderRadius.only( - topLeft: Radius.circular(24), - topRight: Radius.circular(24), + topLeft: Radius.circular(30), + topRight: Radius.circular(30), ), boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.2), - blurRadius: 20, + color: Colors.black.withOpacity(0.15), + blurRadius: 25, + spreadRadius: 5, offset: const Offset(0, -5), ), ], ), child: Padding( - padding: const EdgeInsets.fromLTRB(16, 12, 16, 16), + padding: const EdgeInsets.fromLTRB(20, 12, 20, 20), child: Column( mainAxisSize: MainAxisSize.min, children: [ - // مقبض السحب (Handle) + // مقبض السحب Container( - width: 40, + width: 50, height: 5, decoration: BoxDecoration( - color: AppColor.writeColor.withOpacity(0.3), - borderRadius: BorderRadius.circular(12), + color: Colors.grey[300], + borderRadius: BorderRadius.circular(10), ), ), - const SizedBox(height: 12), + const SizedBox(height: 20), - // --- 1. قسم معلومات السائق --- - _buildDriverInfo(controller), - const Divider(height: 24, thickness: 0.5), + // الصف العلوي: معلومات السائق + السعر المثبت + _buildDriverAndPriceSection(controller), - // --- 2. قسم تقدم الرحلة --- + const SizedBox(height: 20), + + // الصف الأوسط: لوحة السيارة الواقعية + نوع السيارة + _buildCarInfoSection(controller), + + const SizedBox(height: 20), + + // شريط التقدم والوقت _buildTripProgress(controller), - const SizedBox(height: 16), - // --- 3. قسم الإجراءات والأمان --- + const SizedBox(height: 20), + const Divider(thickness: 1, color: Color(0xFFEEEEEE)), + const SizedBox(height: 10), + + // الأزرار _buildActionButtons( context, controller, profileController, audioController), ], @@ -85,86 +384,227 @@ class RideBeginPassenger extends StatelessWidget { }); } - // --- ويدجت مساعدة لعرض معلومات السائق بشكل منظم --- - Widget _buildDriverInfo(MapPassengerController controller) { + // ويدجت معلومات السائق والسعر + Widget _buildDriverAndPriceSection(MapPassengerController controller) { return Row( children: [ - CircleAvatar( - radius: 28, - backgroundImage: NetworkImage( - '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), + // صورة السائق + Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + border: Border.all(color: AppColor.primaryColor, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 10, + offset: const Offset(0, 5), + ), + ], + ), + child: CircleAvatar( + radius: 30, + backgroundImage: NetworkImage( + '${AppLink.server}/portrate_captain_image/${controller.driverId}.jpg'), + ), ), - const SizedBox(width: 12), + const SizedBox(width: 15), + + // الاسم والتقييم Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(controller.driverName, - style: AppStyle.title.copyWith(fontWeight: FontWeight.bold)), - const SizedBox(height: 2), Text( - '${controller.make} ${controller.model} • ${box.read(BoxName.carType)}', - style: AppStyle.subtitle - .copyWith(color: AppColor.writeColor.withOpacity(0.7)), + controller.driverName, + style: AppStyle.title.copyWith( + fontWeight: FontWeight.w800, + fontSize: 18, + color: Colors.black87, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 4), + Row( + children: [ + const Icon(Icons.star_rounded, + color: AppColor.yellowColor, size: 18), + const SizedBox(width: 4), + Text( + controller.driverRate, + style: AppStyle.subtitle.copyWith( + fontWeight: FontWeight.bold, color: Colors.grey[600]), + ), + ], ), ], ), ), - const SizedBox(width: 12), - Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Container( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - decoration: BoxDecoration( - color: AppColor.writeColor.withOpacity(0.1), - borderRadius: BorderRadius.circular(6), + + // السعر المثبت (تصميم كارد للسعر) + Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + decoration: BoxDecoration( + color: AppColor.primaryColor.withOpacity(0.1), + borderRadius: BorderRadius.circular(12), + border: Border.all(color: AppColor.primaryColor.withOpacity(0.2)), + ), + child: Column( + children: [ + Text('Total'.tr, + style: TextStyle(fontSize: 10, color: Colors.grey[600])), + Text( + '${NumberFormat('#,###').format(controller.totalPassenger)} 💰', + style: const TextStyle( + fontFamily: 'Roboto', + fontWeight: FontWeight.w900, + fontSize: 18, + color: AppColor.primaryColor, + ), ), - child: Text( - controller.licensePlate, - style: AppStyle.subtitle - .copyWith(fontWeight: FontWeight.bold, letterSpacing: 1.5), - ), - ), - const SizedBox(height: 4), - Row( - children: [ - Text(controller.driverRate, - style: AppStyle.subtitle - .copyWith(fontWeight: FontWeight.bold)), - const SizedBox(width: 2), - const Icon(Icons.star_rounded, - color: AppColor.yellowColor, size: 16), - ], - ), - ], - ) + ], + ), + ), ], ); } - // --- ويدجت مساعدة لعرض شريط التقدم --- + // ويدجت معلومات السيارة ولوحة الأرقام + Widget _buildCarInfoSection(MapPassengerController controller) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: const Color(0xFFF9F9F9), + borderRadius: BorderRadius.circular(16), + border: Border.all(color: Colors.grey[200]!), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + // نوع السيارة وموديلها + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '${controller.make} ${controller.model}', + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: Colors.black87), + ), + const SizedBox(height: 4), + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + color: Colors.grey[300], + borderRadius: BorderRadius.circular(4), + ), + child: Text( + box.read(BoxName.carType) == 'Speed' + ? 'Fixed Price' + .tr // سيظهر "سعر ثابت" (تأكد من إضافتها لملف الترجمة) + : box.read(BoxName.carType) ?? 'Car', + style: const TextStyle(fontSize: 12, color: Colors.black54), + ), + ), + ], + ), + + // ------------------------------------------- + // تصميم لوحة السيارة الواقعي (Realistic Plate) + // ------------------------------------------- + Container( + padding: const EdgeInsets.symmetric(horizontal: 2, vertical: 2), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(6), + border: Border.all(color: Colors.black, width: 2), // إطار أسود + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 4, + offset: const Offset(2, 2)), + ], + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + // الشريط الأزرق الجانبي (مثل اللوحات الدولية) + Container( + width: 15, + height: 35, // ارتفاع اللوحة + decoration: const BoxDecoration( + color: Color(0xFF003399), // أزرق غامق + borderRadius: BorderRadius.only( + topLeft: Radius.circular(2), + bottomLeft: Radius.circular(2), + ), + ), + child: const Center( + child: Text( + "SY", // رمز الدولة (مثال) + style: TextStyle( + color: Colors.white, + fontSize: 8, + fontWeight: FontWeight.bold), + ), + ), + ), + const SizedBox(width: 8), + // رقم اللوحة + Text( + controller.licensePlate, // رقم اللوحة من الكونترولر + style: const TextStyle( + fontSize: 20, + fontWeight: FontWeight.w900, + letterSpacing: 2.0, // تباعد الأحرف لتبدو كأرقام محفورة + fontFamily: 'monospace', // خط ثابت العرض ليشبه اللوحات + color: Colors.black, + ), + ), + const SizedBox(width: 8), + ], + ), + ), + ], + ), + ); + } + Widget _buildTripProgress(MapPassengerController controller) { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('Time to Destination'.tr, style: AppStyle.subtitle), - Text(controller.stringRemainingTimeRideBegin, - style: AppStyle.subtitle.copyWith( - fontWeight: FontWeight.bold, color: AppColor.primaryColor)), + Row( + children: [ + const Icon(Icons.access_time_filled, + size: 16, color: Colors.grey), + const SizedBox(width: 5), + Text('Arriving in'.tr, + style: TextStyle(color: Colors.grey[600], fontSize: 13)), + ], + ), + Text( + controller.stringRemainingTimeRideBegin, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: AppColor.primaryColor, + ), + ), ], ), - const SizedBox(height: 8), + const SizedBox(height: 10), ClipRRect( borderRadius: BorderRadius.circular(10), child: LinearProgressIndicator( - backgroundColor: AppColor.primaryColor.withOpacity(0.2), + backgroundColor: Colors.grey[200], color: controller.remainingTimeTimerRideBegin < 60 ? AppColor.redColor - : AppColor.greenColor, - minHeight: 10, + : AppColor.primaryColor, + minHeight: 8, value: controller.progressTimerRideBegin.toDouble(), ), ), @@ -172,21 +612,21 @@ class RideBeginPassenger extends StatelessWidget { ); } - // --- ويدجت مساعدة لعرض أزرار الإجراءات --- Widget _buildActionButtons( BuildContext context, MapPassengerController controller, ProfileController profileController, AudioRecorderController audioController) { return Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ + // زر SOS بتصميم تحذيري _buildActionButton( icon: Icons.sos_rounded, - label: 'SOS'.tr, - color: AppColor.redColor, + label: 'SOS', + iconColor: Colors.white, + bgColor: AppColor.redColor, onTap: () async { - // --- نفس منطقك القديم --- if (box.read(BoxName.sosPhonePassenger) == null) { await profileController.updatField( 'sosPhone', TextInputType.phone); @@ -196,12 +636,14 @@ class RideBeginPassenger extends StatelessWidget { makePhoneCall('112'); } }), + + // زر واتساب _buildActionButton( icon: FontAwesome.whatsapp, - label: 'WhatsApp'.tr, - color: AppColor.greenColor, + label: 'WhatsApp', + iconColor: Colors.white, + bgColor: const Color(0xFF25D366), onTap: () async { - // --- نفس منطقك القديم --- if (box.read(BoxName.sosPhonePassenger) == null || box.read(BoxName.sosPhonePassenger) == 'sos') { await profileController.updatField( @@ -211,75 +653,105 @@ class RideBeginPassenger extends StatelessWidget { } else { final phoneNumber = box.read(BoxName.sosPhonePassenger).toString(); - final phone = controller.formatSyrianPhoneNumber(phoneNumber); - controller.sendWhatsapp(phone); // + controller.sendWhatsapp(phone); } }), + + // زر المشاركة _buildActionButton( - icon: Icons.share_location_outlined, // أيقونة جديدة ومناسبة - label: 'Share'.tr, // اسم جديد وواضح - color: AppColor.blueColor, + icon: Icons.share_location_rounded, + label: 'Share', + iconColor: AppColor.primaryColor, + bgColor: AppColor.primaryColor.withOpacity(0.1), onTap: () async { - // نفس الوظيفة السابقة التي كانت تحت اسم "Video Call" - await controller.getTokenForParent(); + await controller.shareTripWithFamily(); }), - _buildActionButton( - icon: audioController.isRecording - ? Icons.mic_off_rounded - : Icons.mic_none_rounded, - label: audioController.isRecording ? 'Stop'.tr : 'Record'.tr, - color: AppColor.primaryColor, - onTap: () async { - // --- نفس منطقك القديم --- - if (audioController.isRecording == false) { - await audioController.startRecording(); - Toast.show(context, 'Start Record'.tr, AppColor.greenColor); - } else { - await audioController.stopRecording(); - Toast.show(context, 'Record saved'.tr, AppColor.greenColor); - } + + // زر التسجيل + GetBuilder( + init: audioController, + builder: (audioCtx) { + return _buildActionButton( + icon: audioCtx.isRecording ? Icons.stop : Icons.mic, + label: audioCtx.isRecording ? 'Stop' : 'Record', + iconColor: + audioCtx.isRecording ? Colors.white : AppColor.primaryColor, + bgColor: audioCtx.isRecording + ? AppColor.redColor + : AppColor.primaryColor.withOpacity(0.1), + isRecordingAnimation: audioCtx.isRecording, + onTap: () async { + if (audioCtx.isRecording == false) { + await audioCtx.startRecording(); + Toast.show(context, 'Start Record'.tr, AppColor.greenColor); + } else { + await audioCtx.stopRecording(); + Toast.show(context, 'Record saved'.tr, AppColor.greenColor); + } + }, + ); }, ), + + // زر الشكوى _buildActionButton( - icon: Icons.note_add_outlined, - label: 'Complaint'.tr, - color: AppColor.yellowColor, + icon: Icons.report_gmailerrorred_rounded, + label: 'Report'.tr, + iconColor: Colors.grey[700]!, + bgColor: Colors.grey[200]!, onTap: () { - // --- نفس منطقك القديم --- Get.to(() => ComplaintPage(), transition: Transition.downToUp); }), ], ); } - // --- ويدجت مساعدة لبناء زر إجراء فردي --- - Widget _buildActionButton( - {required IconData icon, - required String label, - required Color color, - required VoidCallback onTap}) { - return InkWell( - onTap: onTap, - borderRadius: BorderRadius.circular(12), - child: Padding( - padding: const EdgeInsets.all(4.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: color.withOpacity(0.1), - shape: BoxShape.circle, - ), - child: Icon(icon, color: color, size: 26), + Widget _buildActionButton({ + required IconData icon, + required String label, + required Color iconColor, + required Color bgColor, + required VoidCallback onTap, + bool isRecordingAnimation = false, + }) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(15), + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + width: 50, + height: 50, + decoration: BoxDecoration( + color: bgColor, + borderRadius: BorderRadius.circular(15), + border: isRecordingAnimation + ? Border.all(color: AppColor.redColor, width: 2) + : null, + boxShadow: [ + BoxShadow( + color: bgColor.withOpacity(0.3), + blurRadius: 8, + offset: const Offset(0, 3), + ), + ], ), - const SizedBox(height: 6), - Text(label, style: AppStyle.subtitle.copyWith(fontSize: 12)), - ], + child: Icon(icon, color: iconColor, size: 24), + ), ), - ), + const SizedBox(height: 6), + Text( + label.tr, + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Colors.black54, + ), + ), + ], ); } } diff --git a/lib/views/home/map_widget.dart/ride_from_start_app.dart b/lib/views/home/map_widget.dart/ride_from_start_app.dart index 73af9dc..a98619c 100644 --- a/lib/views/home/map_widget.dart/ride_from_start_app.dart +++ b/lib/views/home/map_widget.dart/ride_from_start_app.dart @@ -1,9 +1,12 @@ +import 'package:Intaleq/controller/functions/launch.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; +// ... استيراد ملفاتك الأخرى ... import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; +import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/profile/profile_controller.dart'; @@ -14,161 +17,299 @@ class RideFromStartApp extends StatelessWidget { @override Widget build(BuildContext context) { - ProfileController profileController = Get.put(ProfileController()); - return GetBuilder(builder: (controller) { - return (controller.statusRideFromStart - // || controller.statusRide == 'Begin' - ) - ? Positioned( - left: 10, - right: 10, - bottom: 4, - child: Container( - decoration: AppStyle.boxDecoration1, - height: Get.height * .3, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - width: Get.width * .15, - decoration: AppStyle.boxDecoration1, - child: Column( - children: [ - Text( - '⏱️', - style: AppStyle.title, - ), - Text( - box.read(BoxName.arrivalTime), - style: AppStyle.title, - ), - ], - ), - ), - Container( - width: Get.width * .15, - decoration: AppStyle.boxDecoration1, - child: Column( - children: [ - Text( - '📍', - style: AppStyle.title, - ), - Text( - controller.rideStatusFromStartApp['data'] - ['distance'] - .toString(), - style: AppStyle.title, - ), - ], - ), - ), - Container( - width: Get.width * .15, - decoration: AppStyle.boxDecoration1, - child: Column( - children: [ - Text( - '💵 ', - style: AppStyle.title, - ), - Text( - controller.rideStatusFromStartApp['data'] - ['price'], - style: AppStyle.title, - ), - ], - ), - ), - ], + final profileController = Get.put(ProfileController()); + final MapPassengerController controller = + Get.find(); + + return Obx(() { + final bool isRideActive = + controller.currentRideState.value == RideState.inProgress && + controller.isStartAppHasRide == true; + + if (!isRideActive) return const SizedBox(); + + // قراءة البيانات + final rideData = controller.rideStatusFromStartApp['data'] ?? {}; + final driverId = rideData['driver_id']; + final driverName = rideData['driverName'] ?? 'Captain'.tr; + final driverRate = controller.driverRate; + final carType = rideData['carType'] ?? 'Car'.tr; + final carModel = controller.model ?? ''; + final arrivalTime = box.read(BoxName.arrivalTime) ?? '--:--'; + + // تحديد البيانات للعرض + final displayTime = controller.stringRemainingTimeRideBegin.isNotEmpty + ? controller.stringRemainingTimeRideBegin + : arrivalTime; + final displayDistance = rideData['distance']?.toStringAsFixed(1) ?? 'N/A'; + final displayPrice = rideData['price']?.toString() ?? 'N/A'; + + return Positioned( + left: 0, + right: 0, + bottom: 0, // ملتصق بالأسفل تماماً + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15), + decoration: const BoxDecoration( + color: Colors.white, // خلفية بيضاء نظيفة + borderRadius: BorderRadius.only( + topLeft: Radius.circular(25), + topRight: Radius.circular(25), + ), + boxShadow: [ + BoxShadow( + color: Colors.black12, + blurRadius: 15.0, + spreadRadius: 5.0, + offset: Offset(0, -5), + ), + ], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // 1. مقبض صغير للدلالة على السحب (تصميم جمالي) + Center( + child: Container( + width: 40, + height: 4, + margin: const EdgeInsets.only(bottom: 15), + decoration: BoxDecoration( + color: Colors.grey[300], + borderRadius: BorderRadius.circular(10), + ), + ), + ), + + // 2. حالة الرحلة + معلومات السائق + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // صورة السائق + Container( + padding: const EdgeInsets.all(2), + decoration: BoxDecoration( + shape: BoxShape.circle, + border: + Border.all(color: AppColor.primaryColor, width: 2), ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, + child: CircleAvatar( + radius: 28, + backgroundImage: NetworkImage( + '${AppLink.server}/portrate_captain_image/$driverId.jpg'), + ), + ), + const SizedBox(width: 12), + + // الاسم والسيارة + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - CircleAvatar( - radius: 30, - backgroundImage: NetworkImage( - // '', - // ), - 'https://ride.mobile-app.store/portrate_captain_image/${controller.rideStatusFromStartApp['data']['driver_id']}.jpg'), - ), Text( - '${controller.rideStatusFromStartApp['data']['driverName']}', - style: AppStyle.title, + driverName, + style: AppStyle.title.copyWith( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black87, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, ), - Column( + const SizedBox(height: 4), + Row( children: [ + Icon(Icons.star, + color: AppColor.yellowColor, size: 16), + const SizedBox(width: 4), Text( - '${controller.rideStatusFromStartApp['data']['rateDriver']} 📈', - style: AppStyle.title, + driverRate, + style: AppStyle.title.copyWith( + fontSize: 13, fontWeight: FontWeight.bold), ), + const SizedBox(width: 8), + Container(width: 1, height: 12, color: Colors.grey), + const SizedBox(width: 8), Text( - '${controller.rideStatusFromStartApp['data']['carType']}', - style: AppStyle.title, + "$carType - $carModel", + style: AppStyle.title.copyWith( + fontSize: 13, color: Colors.grey[600]), ), ], ), ], ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - IconButton( - onPressed: () async { - if (box.read(BoxName.sosPhonePassenger) == null) { - { - await profileController.updatField( - 'sosPhone', TextInputType.phone); - box.write(BoxName.sosPhonePassenger, - profileController.prfoileData['sosPhone']); - } - } else { - controller - .sendSMS(box.read(BoxName.sosPhonePassenger)); - } - }, - icon: const Icon( - Icons.sos_rounded, - color: AppColor.redColor, - ), - ), - IconButton( - onPressed: () async { - if (box.read(BoxName.sosPhonePassenger) == null || - box.read(BoxName.sosPhonePassenger) == 'sos') { - { - await profileController.updatField( - 'sosPhone', TextInputType.phone); - box.write(BoxName.sosPhonePassenger, - profileController.prfoileData['sosPhone']); - } - } else { - String phoneNumber = box - .read(BoxName.sosPhonePassenger) - .toString(); - // phoneNumber = phoneNumber.replaceAll('0', ''); - var phone = - // '+${box.read(BoxName.countryCode)}${box.read(BoxName.sosPhonePassenger)}'; - '${box.read(BoxName.sosPhonePassenger)}'; - controller.sendWhatsapp(phone); - } - }, - icon: const Icon( - FontAwesome.whatsapp, - color: AppColor.greenColor, - ), - ), - ], - ) + ), + + // حالة الرحلة (نص ملون) + _buildStatusBadge(controller.currentRideState.value), + ], + ), + + const SizedBox(height: 20), + + // 3. شريط المعلومات (وقت، مسافة، سعر) + Container( + padding: + const EdgeInsets.symmetric(vertical: 12, horizontal: 10), + decoration: BoxDecoration( + color: AppColor.grayColor + .withOpacity(0.1), // خلفية رمادية خفيفة جداً + borderRadius: BorderRadius.circular(15), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _buildInfoColumn( + Icons.access_time_filled, displayTime, "Time".tr), + _buildVerticalDivider(), + _buildInfoColumn(Icons.location_on, "$displayDistance KM", + "Distance".tr), + _buildVerticalDivider(), + _buildInfoColumn( + Icons.attach_money, "$displayPrice SYP", "Price".tr), ], ), ), - ) - : const SizedBox(); + + const SizedBox(height: 20), + + // 4. أزرار التحكم (SOS & Share) + Row( + children: [ + // زر المشاركة (يأخذ مساحة أكبر) + Expanded( + flex: 2, + child: ElevatedButton.icon( + onPressed: () => _checkAndCall( + controller.sendWhatsapp, profileController), + icon: + const Icon(FontAwesome.whatsapp, color: Colors.white), + label: Text("Share Trip".tr, + style: const TextStyle(color: Colors.white)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.greenColor, + padding: const EdgeInsets.symmetric(vertical: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + elevation: 0, + ), + ), + ), + const SizedBox(width: 10), + // زر الاستغاثة SOS + Expanded( + flex: 1, + child: ElevatedButton.icon( + onPressed: () => + makePhoneCall(box.read(BoxName.sosPhonePassenger)), + icon: const Icon(Icons.sos, color: Colors.white), + label: Text("SOS".tr, + style: const TextStyle(color: Colors.white)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.redColor, + padding: const EdgeInsets.symmetric(vertical: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + elevation: 0, + ), + ), + ), + ], + ), + ], + ), + ), + ); }); } + + // ------------------------- Widgets Helper Methods ------------------------- + + Widget _buildStatusBadge(RideState status) { + String text; + Color color; + + if (status == RideState.inProgress) { + text = 'On Trip'.tr; + color = AppColor.primaryColor; + } else if (status == RideState.driverArrived) { + text = 'Arrived'.tr; + color = AppColor.greenColor; + } else { + text = 'Coming'.tr; + color = AppColor.yellowColor; + } + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), + decoration: BoxDecoration( + color: color.withOpacity(0.1), + borderRadius: BorderRadius.circular(8), + border: Border.all(color: color.withOpacity(0.5)), + ), + child: Text( + text, + style: TextStyle( + color: color, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ); + } + + Widget _buildInfoColumn(IconData icon, String value, String label) { + return Column( + children: [ + Icon(icon, + color: AppColor.secondaryColor, + size: 22), // افترضت أن السكندري لون داكن، أو استخدم Primary + const SizedBox(height: 4), + Text( + value, + style: const TextStyle( + fontWeight: FontWeight.w800, + fontSize: 15, + color: Colors.black87, + ), + ), + Text( + label, + style: TextStyle( + fontSize: 11, + color: Colors.grey[600], + ), + ), + ], + ); + } + + Widget _buildVerticalDivider() { + return Container( + height: 30, + width: 1, + color: Colors.grey[300], + ); + } + + // دالة المساعدة للمنطق (بقيت كما هي ولكن تم تمرير البروفايل كونترولر) + Future _checkAndCall( + Function(String) action, ProfileController profileController) async { + String? sosPhone = box.read(BoxName.sosPhonePassenger); + if (sosPhone == null || sosPhone == 'sos') { + await profileController.updatField('sosPhone', TextInputType.phone); + sosPhone = profileController.prfoileData['sosPhone']; + } + + if (sosPhone != null && sosPhone != 'sos') { + action(sosPhone); + } else { + Get.snackbar('Warning'.tr, 'Please set a valid SOS phone number.'.tr, + backgroundColor: AppColor.redColor, colorText: Colors.white); + } + } } diff --git a/lib/views/home/map_widget.dart/searching_captain_window.dart b/lib/views/home/map_widget.dart/searching_captain_window.dart index c123623..e16dfca 100644 --- a/lib/views/home/map_widget.dart/searching_captain_window.dart +++ b/lib/views/home/map_widget.dart/searching_captain_window.dart @@ -1,11 +1,8 @@ -import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/colors.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/map_passenger_controller.dart'; -import 'package:Intaleq/views/widgets/elevated_btn.dart'; -import 'package:Intaleq/views/widgets/my_textField.dart'; // --- الويدجت الرئيسية بالتصميم الجديد --- class SearchingCaptainWindow extends StatefulWidget { @@ -36,62 +33,68 @@ class _SearchingCaptainWindowState extends State @override Widget build(BuildContext context) { - return GetBuilder( - builder: (controller) { - return AnimatedPositioned( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - bottom: controller.isSearchingWindow ? 0 : -Get.height * 0.4, - left: 0, - right: 0, - child: Container( - padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), - decoration: BoxDecoration( - color: AppColor.secondaryColor, - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(24), - topRight: Radius.circular(24), - ), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - blurRadius: 20, - offset: const Offset(0, -5), - ), - ], - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // --- 1. أنيميشن الرادار --- - _buildRadarAnimation(controller), - const SizedBox(height: 20), + // [تعديل 1] نستخدم Obx للاستماع إلى التغييرات في حالة الرحلة + return Obx(() { + // ابحث عن الكنترولر مرة واحدة + final controller = Get.find(); - // --- 2. زر الإلغاء --- - SizedBox( - width: double.infinity, - child: OutlinedButton( - onPressed: () { - // --- نفس منطقك للإلغاء --- - controller.cancelRide(); - }, - style: OutlinedButton.styleFrom( - foregroundColor: AppColor.writeColor, - side: BorderSide( - color: AppColor.writeColor.withOpacity(0.3)), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12)), - padding: const EdgeInsets.symmetric(vertical: 12), - ), - child: Text('Cancel Search'.tr), - ), - ), - ], + // [تعديل 2] شرط الإظهار يعتمد الآن على حالة الرحلة مباشرة + final bool isVisible = + controller.currentRideState.value == RideState.searching; + + return AnimatedPositioned( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + bottom: isVisible ? 0 : -Get.height * 0.45, // زيادة الارتفاع قليلاً + left: 0, + right: 0, + child: Container( + padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), + decoration: BoxDecoration( + color: AppColor.secondaryColor, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(24), + topRight: Radius.circular(24), ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + blurRadius: 20, + offset: const Offset(0, -5), + ), + ], ), - ); - }, - ); + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // --- 1. أنيميشن الرادار --- + _buildRadarAnimation(controller), + const SizedBox(height: 20), + + // --- 2. زر الإلغاء --- + SizedBox( + width: double.infinity, + child: OutlinedButton( + onPressed: () { + // [تعديل 3] استدعاء دالة الإلغاء الموحدة + controller.cancelRide(); + }, + style: OutlinedButton.styleFrom( + foregroundColor: AppColor.writeColor, + side: + BorderSide(color: AppColor.writeColor.withOpacity(0.3)), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + padding: const EdgeInsets.symmetric(vertical: 12), + ), + child: Text('Cancel Search'.tr), + ), + ), + ], + ), + ), + ); + }); } // --- ويدجت بناء أنيميشن الرادار --- @@ -101,7 +104,7 @@ class _SearchingCaptainWindowState extends State child: Stack( alignment: Alignment.center, children: [ - // --- دوائر الرادار المتحركة --- + // --- دوائر الرادار المتحركة (تبقى كما هي) --- ...List.generate(3, (index) { return FadeTransition( opacity: Tween(begin: 1.0, end: 0.0).animate( @@ -134,6 +137,7 @@ class _SearchingCaptainWindowState extends State mainAxisAlignment: MainAxisAlignment.center, children: [ Text( + // [تعديل 4] النص يأتي مباشرة من الكنترولر controller.driversStatusForSearchWindow, style: AppStyle.headTitle.copyWith(fontSize: 20), textAlign: TextAlign.center, @@ -146,8 +150,32 @@ class _SearchingCaptainWindowState extends State textAlign: TextAlign.center, ), const SizedBox(height: 16), - // --- استدعاء نفس دالة المؤقت الخاصة بك --- - buildTimerForIncrease(controller), + + // --- [!! تعديل جوهري !!] --- + // لم نعد بحاجة لـ buildTimerForIncrease + // المؤقت الرئيسي في الكنترولر هو من يقرر متى يعرض الحوار + // وهذا الجزء من الواجهة أصبح "غبياً" (لا يحتوي على منطق) + // الكنترولر سيستدعي _showIncreaseFeeDialog مباشرة + SizedBox( + height: 40, + width: 40, + child: Stack( + fit: StackFit.expand, + children: [ + CircularProgressIndicator( + strokeWidth: 3, + color: AppColor.primaryColor, + backgroundColor: AppColor.primaryColor.withOpacity(0.2), + ), + Center( + child: Icon( + Icons.search, + color: AppColor.writeColor.withOpacity(0.8), + ), + ), + ], + ), + ), ], ), ], @@ -156,128 +184,285 @@ class _SearchingCaptainWindowState extends State } } -// --- نفس دالة المؤقت الخاصة بك مع تعديلات شكلية بسيطة --- -Widget buildTimerForIncrease(MapPassengerController mapPassengerController) { - return StreamBuilder( - stream: Stream.periodic(const Duration(seconds: 1)) - .map((_) => ++mapPassengerController.currentTimeSearchingCaptainWindow), - initialData: 0, - builder: (context, snapshot) { - if (snapshot.hasData && snapshot.data! > 30) { - // --- عرض زر زيادة الأجرة بنفس منطقك القديم --- - return TextButton( - onPressed: () => - _showIncreaseFeeDialog(context, mapPassengerController), - child: Text( - "No one accepted? Try increasing the fare.".tr, - style: AppStyle.title.copyWith( - color: AppColor.primaryColor, - decoration: TextDecoration.underline), - textAlign: TextAlign.center, - ), - ); - } +// --- [!! تعديل جوهري !!] --- +// تم حذف دالة `buildTimerForIncrease` بالكامل. +// تم حذف دالة `_showIncreaseFeeDialog` من هذا الملف. +// لماذا؟ لأن الكنترولر الآن هو المسؤول الوحيد عن إظهار الحوار. +// دالة `_showIncreaseFeeDialog` موجودة بالفعل داخل `map_passenger_controller.dart` +// وسيتم استدعاؤها من `_handleRideState` عند انتهاء مهلة الـ 90 ثانية. - final double progress = (snapshot.data ?? 0).toDouble() / 30.0; +// // --- الويدجت الرئيسية بالتصميم الجديد --- +// class SearchingCaptainWindow extends StatefulWidget { +// const SearchingCaptainWindow({super.key}); - return SizedBox( - height: 40, - width: 40, - child: Stack( - fit: StackFit.expand, - children: [ - CircularProgressIndicator( - value: progress, - strokeWidth: 3, - color: AppColor.primaryColor, - backgroundColor: AppColor.primaryColor.withOpacity(0.2), - ), - Center( - child: Text( - '${snapshot.data ?? 0}', - style: AppStyle.title.copyWith( - color: AppColor.writeColor, fontWeight: FontWeight.bold), - ), - ), - ], - ), - ); - }, - ); -} +// @override +// State createState() => _SearchingCaptainWindowState(); +// } -// --- دالة لعرض نافذة زيادة الأجرة (مأخوذة من منطقك القديم) --- -void _showIncreaseFeeDialog( - BuildContext context, MapPassengerController mapPassengerController) { - Get.defaultDialog( - barrierDismissible: false, - title: "Increase Your Trip Fee (Optional)".tr, - titleStyle: AppStyle.title, - content: Column( - children: [ - Text( - "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers." - .tr, - style: AppStyle.subtitle, - textAlign: TextAlign.center, - ), - const SizedBox(height: 16), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - IconButton( - onPressed: () { - mapPassengerController.increasFeeFromPassenger.text = - (mapPassengerController.totalPassenger + 3) - .toStringAsFixed(1); - mapPassengerController.update(); - }, - icon: const Icon(Icons.add_circle, - size: 40, color: AppColor.greenColor), - ), - SizedBox( - width: 100, - child: Form( - key: mapPassengerController.increaseFeeFormKey, - child: MyTextForm( - controller: mapPassengerController.increasFeeFromPassenger, - label: - mapPassengerController.totalPassenger.toStringAsFixed(2), - hint: - mapPassengerController.totalPassenger.toStringAsFixed(2), - type: TextInputType.number, - ), - ), - ), - IconButton( - onPressed: () { - mapPassengerController.increasFeeFromPassenger.text = - (mapPassengerController.totalPassenger - 3) - .toStringAsFixed(1); - mapPassengerController.update(); - }, - icon: const Icon(Icons.remove_circle, - size: 40, color: AppColor.redColor), - ), - ], - ), - ], - ), - actions: [ - TextButton( - child: Text("No, thanks".tr, - style: const TextStyle(color: AppColor.redColor)), - onPressed: () { - Get.back(); - mapPassengerController.cancelRide(); - }, - ), - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: AppColor.greenColor), - child: Text("Increase Fee".tr), - onPressed: () => - mapPassengerController.increaseFeeByPassengerAndReOrder(), - ), - ], - ); -} +// class _SearchingCaptainWindowState extends State +// with SingleTickerProviderStateMixin { +// late AnimationController _animationController; + +// @override +// void initState() { +// super.initState(); +// _animationController = AnimationController( +// vsync: this, +// duration: const Duration(seconds: 2), +// )..repeat(); +// } + +// @override +// void dispose() { +// _animationController.dispose(); +// super.dispose(); +// } + +// @override +// Widget build(BuildContext context) { +// return GetBuilder( +// builder: (controller) { +// return AnimatedPositioned( +// duration: const Duration(milliseconds: 300), +// curve: Curves.easeInOut, +// bottom: controller.isSearchingWindow ? 0 : -Get.height * 0.4, +// left: 0, +// right: 0, +// child: Container( +// padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), +// decoration: BoxDecoration( +// color: AppColor.secondaryColor, +// borderRadius: const BorderRadius.only( +// topLeft: Radius.circular(24), +// topRight: Radius.circular(24), +// ), +// boxShadow: [ +// BoxShadow( +// color: Colors.black.withOpacity(0.2), +// blurRadius: 20, +// offset: const Offset(0, -5), +// ), +// ], +// ), +// child: Column( +// mainAxisSize: MainAxisSize.min, +// children: [ +// // --- 1. أنيميشن الرادار --- +// _buildRadarAnimation(controller), +// const SizedBox(height: 20), + +// // --- 2. زر الإلغاء --- +// SizedBox( +// width: double.infinity, +// child: OutlinedButton( +// onPressed: () { +// // --- نفس منطقك للإلغاء --- +// controller.changeCancelRidePageShow(); +// }, +// style: OutlinedButton.styleFrom( +// foregroundColor: AppColor.writeColor, +// side: BorderSide( +// color: AppColor.writeColor.withOpacity(0.3)), +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.circular(12)), +// padding: const EdgeInsets.symmetric(vertical: 12), +// ), +// child: Text('Cancel Search'.tr), +// ), +// ), +// ], +// ), +// ), +// ); +// }, +// ); +// } + +// // --- ويدجت بناء أنيميشن الرادار --- +// Widget _buildRadarAnimation(MapPassengerController controller) { +// return SizedBox( +// height: 180, // ارتفاع ثابت لمنطقة الأنيميشن +// child: Stack( +// alignment: Alignment.center, +// children: [ +// // --- دوائر الرادار المتحركة --- +// ...List.generate(3, (index) { +// return FadeTransition( +// opacity: Tween(begin: 1.0, end: 0.0).animate( +// CurvedAnimation( +// parent: _animationController, +// curve: Interval((index) / 3, 1.0, curve: Curves.easeInOut), +// ), +// ), +// child: ScaleTransition( +// scale: Tween(begin: 0.3, end: 1.0).animate( +// CurvedAnimation( +// parent: _animationController, +// curve: Interval((index) / 3, 1.0, curve: Curves.easeInOut), +// ), +// ), +// child: Container( +// decoration: BoxDecoration( +// shape: BoxShape.circle, +// border: Border.all( +// color: AppColor.primaryColor.withOpacity(0.7), +// width: 2, +// ), +// ), +// ), +// ), +// ); +// }), +// // --- المحتوى في المنتصف --- +// Column( +// mainAxisAlignment: MainAxisAlignment.center, +// children: [ +// Text( +// controller.driversStatusForSearchWindow, +// style: AppStyle.headTitle.copyWith(fontSize: 20), +// textAlign: TextAlign.center, +// ), +// const SizedBox(height: 8), +// Text( +// 'Searching for the nearest captain...'.tr, +// style: AppStyle.subtitle +// .copyWith(color: AppColor.writeColor.withOpacity(0.7)), +// textAlign: TextAlign.center, +// ), +// const SizedBox(height: 16), +// // --- استدعاء نفس دالة المؤقت الخاصة بك --- +// buildTimerForIncrease(controller), +// ], +// ), +// ], +// ), +// ); +// } +// } + +// // --- نفس دالة المؤقت الخاصة بك مع تعديلات شكلية بسيطة --- +// Widget buildTimerForIncrease(MapPassengerController mapPassengerController) { +// return StreamBuilder( +// stream: Stream.periodic(const Duration(seconds: 1)) +// .map((_) => ++mapPassengerController.currentTimeSearchingCaptainWindow), +// initialData: 0, +// builder: (context, snapshot) { +// if (snapshot.hasData && snapshot.data! > 45) { +// // --- عرض زر زيادة الأجرة بنفس منطقك القديم --- +// return TextButton( +// onPressed: () => +// _showIncreaseFeeDialog(context, mapPassengerController), +// child: Text( +// "No one accepted? Try increasing the fare.".tr, +// style: AppStyle.title.copyWith( +// color: AppColor.primaryColor, +// decoration: TextDecoration.underline), +// textAlign: TextAlign.center, +// ), +// ); +// } + +// final double progress = (snapshot.data ?? 0).toDouble() / 30.0; + +// return SizedBox( +// height: 40, +// width: 40, +// child: Stack( +// fit: StackFit.expand, +// children: [ +// CircularProgressIndicator( +// value: progress, +// strokeWidth: 3, +// color: AppColor.primaryColor, +// backgroundColor: AppColor.primaryColor.withOpacity(0.2), +// ), +// Center( +// child: Text( +// '${snapshot.data ?? 0}', +// style: AppStyle.title.copyWith( +// color: AppColor.writeColor, fontWeight: FontWeight.bold), +// ), +// ), +// ], +// ), +// ); +// }, +// ); +// } + +// // --- دالة لعرض نافذة زيادة الأجرة (مأخوذة من منطقك القديم) --- +// void _showIncreaseFeeDialog( +// BuildContext context, MapPassengerController mapPassengerController) { +// Get.defaultDialog( +// barrierDismissible: false, +// title: "Increase Your Trip Fee (Optional)".tr, +// titleStyle: AppStyle.title, +// content: Column( +// children: [ +// Text( +// "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers." +// .tr, +// style: AppStyle.subtitle, +// textAlign: TextAlign.center, +// ), +// const SizedBox(height: 16), +// Row( +// mainAxisAlignment: MainAxisAlignment.center, +// children: [ +// IconButton( +// onPressed: () { +// mapPassengerController.increasFeeFromPassenger.text = +// (mapPassengerController.totalPassenger + 3) +// .toStringAsFixed(1); +// mapPassengerController.update(); +// }, +// icon: const Icon(Icons.add_circle, +// size: 40, color: AppColor.greenColor), +// ), +// SizedBox( +// width: 100, +// child: Form( +// key: mapPassengerController.increaseFeeFormKey, +// child: MyTextForm( +// controller: mapPassengerController.increasFeeFromPassenger, +// label: +// mapPassengerController.totalPassenger.toStringAsFixed(2), +// hint: +// mapPassengerController.totalPassenger.toStringAsFixed(2), +// type: TextInputType.number, +// ), +// ), +// ), +// IconButton( +// onPressed: () { +// mapPassengerController.increasFeeFromPassenger.text = +// (mapPassengerController.totalPassenger - 3) +// .toStringAsFixed(1); +// mapPassengerController.update(); +// }, +// icon: const Icon(Icons.remove_circle, +// size: 40, color: AppColor.redColor), +// ), +// ], +// ), +// ], +// ), +// actions: [ +// TextButton( +// child: Text("No, thanks".tr, +// style: const TextStyle(color: AppColor.redColor)), +// onPressed: () { +// Get.back(); +// // mapPassengerController.cancelRide(); +// mapPassengerController.changeCancelRidePageShow(); +// }, +// ), +// ElevatedButton( +// style: ElevatedButton.styleFrom(backgroundColor: AppColor.greenColor), +// child: Text("Increase Fee".tr), +// onPressed: () => +// mapPassengerController.increaseFeeByPassengerAndReOrder(), +// ), +// ], +// ); +// } diff --git a/lib/views/home/map_widget.dart/vip_begin.dart b/lib/views/home/map_widget.dart/vip_begin.dart index 862fbcb..c1f0f3f 100644 --- a/lib/views/home/map_widget.dart/vip_begin.dart +++ b/lib/views/home/map_widget.dart/vip_begin.dart @@ -237,7 +237,7 @@ class VipRideBeginPassenger extends StatelessWidget { width: Get.width * .15, child: IconButton( onPressed: () async { - await controller.getTokenForParent(); + await controller.shareTripWithFamily(); }, icon: const Icon( AntDesign.Safety, diff --git a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart index 01a67f8..a87f5f5 100644 --- a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart +++ b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart @@ -447,64 +447,37 @@ void showPaymentOptions(BuildContext context, PaymentController controller) { )), GestureDetector( onTap: () async { - Get.back(); - Get.defaultDialog( - barrierDismissible: false, - title: 'Insert Wallet phone number'.tr, - content: Form( - key: controller.formKey, - child: MyTextForm( - controller: controller.walletphoneController, - label: 'Insert Wallet phone number'.tr, - hint: '963941234567', - type: TextInputType.phone)), - confirm: MyElevatedButton( - title: 'OK'.tr, - onPressed: () async { - Get.back(); - if (controller.formKey.currentState!.validate()) { - box.write(BoxName.phoneWallet, - controller.walletphoneController.text); - // await payWithSyriaTelWallet( - // context, pricePoint.toString(), 'SYP'); - bool isAuthSupported = - await LocalAuthentication().isDeviceSupported(); - if (isAuthSupported) { - bool didAuthenticate = - await LocalAuthentication().authenticate( - localizedReason: - 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', - ); - if (!didAuthenticate) { - if (Get.isDialogOpen ?? false) Get.back(); - print( - "❌ User did not authenticate with biometrics"); - return; - } - } - Get.to(() => PaymentScreenSmsProvider( - amount: controller.selectedAmount!.toDouble())); - } - })); + // التحقق بالبصمة قبل أي شيء + bool isAuthSupported = + await LocalAuthentication().isDeviceSupported(); + + if (isAuthSupported) { + bool didAuthenticate = await LocalAuthentication().authenticate( + localizedReason: 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', + ); + + if (!didAuthenticate) { + print("❌ User did not authenticate with biometrics"); + return; + } + } + + // الانتقال مباشرة لإنشاء الفاتورة بعد النجاح بالبصمة + Get.to(() => PaymentScreenSmsProvider( + amount: double.parse(controller.selectedAmount.toString()))); }, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Pay by Sham Cash'.tr, - style: AppStyle.title, - ), - const SizedBox(width: 10), - Image.asset( - 'assets/images/shamCash.png', - width: 70, - height: 70, - fit: BoxFit.fill, - ), - ], - ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Pay by Sham Cash'.tr), + const SizedBox(width: 10), + Image.asset( + 'assets/images/shamCash.png', + width: 70, + height: 70, + fit: BoxFit.fill, + ), + ], )), ], cancelButton: CupertinoActionSheetAction( diff --git a/lib/views/home/my_wallet/payment_screen_sham.dart b/lib/views/home/my_wallet/payment_screen_sham.dart index 24d02bd..552f804 100644 --- a/lib/views/home/my_wallet/payment_screen_sham.dart +++ b/lib/views/home/my_wallet/payment_screen_sham.dart @@ -1,71 +1,56 @@ import 'dart:async'; - -import 'package:Intaleq/views/widgets/mydialoug.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; -import 'package:get/get_core/src/get_main.dart'; import 'package:intl/intl.dart'; - import '../../../constant/box_name.dart'; import '../../../constant/links.dart'; import '../../../controller/functions/crud.dart'; import '../../../main.dart'; +// خدمة الدفع للراكب (تم تحديث المسارات) class PaymentService { - final String _baseUrl = "${AppLink.seferPaymentServer}/sms_webhook"; + // المسار الجديد لمجلد الركاب + final String _baseUrl = "${AppLink.paymentServer}/ride/shamcash/passenger"; - Future createInvoice({ - required String userPhone, - required double amount, - }) async { - final url = "$_baseUrl/create_invoice_passenger.php"; + Future createInvoice({required double amount}) async { + final url = "$_baseUrl/create_invoice.php"; try { final response = await CRUD().postWallet( link: url, payload: { - 'user_phone': userPhone.toString(), - 'passengerID': box.read(BoxName.passengerID), + 'passengerID': box.read(BoxName.passengerID), // استخدام passengerID 'amount': amount.toString(), }, - ).timeout(const Duration(seconds: 15)); // إضافة مهلة للطلب + ).timeout(const Duration(seconds: 15)); if (response != 'failure') { - final data = (response); + final data = response; if (data['status'] == 'success' && data['invoice_number'] != null) { - debugPrint( - "تم إنشاء الفاتورة بنجاح. الرقم: ${data['invoice_number']}"); return data['invoice_number'].toString(); - } else { - debugPrint("فشل في إنشاء الفاتورة من السيرفر: ${data['message']}"); - return null; } - } else { - debugPrint("خطأ في السيرفر عند إنشاء الفاتورة: ${response.statusCode}"); - return null; } + return null; } catch (e) { - debugPrint("حدث استثناء عند إنشاء الفاتورة: $e"); + debugPrint("Create Invoice Error: $e"); return null; } } - /// دالة للتحقق من حالة فاتورة واحدة Future checkInvoiceStatus(String invoiceNumber) async { - final url = "$_baseUrl/check_invoice_status_passenger.php"; + final url = "$_baseUrl/check_status.php"; try { final response = await CRUD().postWallet(link: url, payload: { 'invoice_number': invoiceNumber, - }).timeout(const Duration(seconds: 10)); // مهلة للشبكة + }).timeout(const Duration(seconds: 10)); if (response != 'failure') { - final data = (response); + final data = response; return data['status'] == 'success' && data['invoice_status'] == 'completed'; } return false; } catch (e) { - debugPrint("خطأ أثناء التحقق من الفاتورة: $e"); return false; } } @@ -83,14 +68,14 @@ class PaymentScreenSmsProvider extends StatefulWidget { final double amount; final String providerName; final String providerLogo; - final String paymentPhoneNumber; + final String qrImagePath; const PaymentScreenSmsProvider({ super.key, required this.amount, this.providerName = 'شام كاش', this.providerLogo = 'assets/images/shamCash.png', - this.paymentPhoneNumber = '963942542053', + this.qrImagePath = 'assets/images/shamcashsend.png', }); @override @@ -103,7 +88,6 @@ class _PaymentScreenSmsProviderState extends State { Timer? _pollingTimer; PaymentStatus _status = PaymentStatus.creatingInvoice; String? _invoiceNumber; - final String phone = box.read(BoxName.phoneWallet); @override void initState() { @@ -113,17 +97,14 @@ class _PaymentScreenSmsProviderState extends State { @override void dispose() { - _pollingTimer?.cancel(); // مهم جداً: إلغاء المؤقت عند الخروج من الشاشة + _pollingTimer?.cancel(); super.dispose(); } void _createAndPollInvoice() async { setState(() => _status = PaymentStatus.creatingInvoice); - - final invoiceNumber = await _paymentService.createInvoice( - userPhone: phone, - amount: widget.amount, - ); + final invoiceNumber = + await _paymentService.createInvoice(amount: widget.amount); if (invoiceNumber != null && mounted) { setState(() { @@ -137,7 +118,7 @@ class _PaymentScreenSmsProviderState extends State { } void _startPolling(String invoiceNumber) { - const timeoutDuration = Duration(minutes: 3); + const timeoutDuration = Duration(minutes: 5); var elapsed = Duration.zero; _pollingTimer = Timer.periodic(const Duration(seconds: 5), (timer) async { @@ -147,72 +128,55 @@ class _PaymentScreenSmsProviderState extends State { if (mounted) setState(() => _status = PaymentStatus.paymentTimeout); return; } - - debugPrint("Polling... Checking invoice status for: $invoiceNumber"); final isCompleted = await _paymentService.checkInvoiceStatus(invoiceNumber); if (isCompleted && mounted) { timer.cancel(); setState(() => _status = PaymentStatus.paymentSuccess); - // TODO: تحديث رصيد المستخدم أو تنفيذ الإجراءات اللازمة - MyDialog().getDialog( - 'Payment Successful!'.tr, - ''.tr, - () { - Get.back(); - Get.back(); - }, - ); } }); } - /// دالة جديدة لمعالجة محاولة الرجوع للخلف - void _onPopInvoked(bool didPop) async { - // إذا كان الرجوع قد تم بالفعل (مثلاً من خلال Navigator.pop)، لا تفعل شيئاً - if (didPop) return; - - // إذا كان المستخدم ينتظر الدفع، أظهر له حوار التأكيد + Future _onPopInvoked() async { if (_status == PaymentStatus.waitingForPayment) { final shouldPop = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('هل أنت متأكد؟'), - content: const Text('إذا خرجت الآن، سيتم إلغاء عملية الدفع الحالية.'), + title: const Text('إلغاء العملية؟', textAlign: TextAlign.right), + content: const Text('الخروج الآن سيؤدي لإلغاء متابعة عملية الدفع.', + textAlign: TextAlign.right), actions: [ TextButton( - onPressed: () => Navigator.of(context).pop(false), - child: const Text('البقاء'), - ), + onPressed: () => Navigator.of(context).pop(false), + child: const Text('البقاء')), TextButton( - onPressed: () => Navigator.of(context).pop(true), - child: const Text('الخروج'), - ), + onPressed: () => Navigator.of(context).pop(true), + child: const Text('خروج', style: TextStyle(color: Colors.red))), ], ), ); - - // إذا وافق المستخدم على الخروج، قم بإغلاق الشاشة - if (shouldPop ?? false) { - Navigator.of(context).pop(); - } + return shouldPop ?? false; } + return true; } @override Widget build(BuildContext context) { - // استخدام PopScope بدلاً من WillPopScope - return PopScope( - // منع الرجوع التلقائي فقط في حالة انتظار الدفع - canPop: _status != PaymentStatus.waitingForPayment, - // استدعاء دالة التحقق عند محاولة الرجوع - onPopInvoked: _onPopInvoked, + return WillPopScope( + onWillPop: _onPopInvoked, child: Scaffold( - appBar: AppBar(title: Text("الدفع عبر ${widget.providerName}")), - body: Padding( - padding: const EdgeInsets.all(16.0), - child: Center( - child: _buildContentByStatus(), + backgroundColor: Colors.grey[50], + appBar: AppBar( + title: Text("دفع عبر ${widget.providerName}"), + centerTitle: true, + elevation: 0, + backgroundColor: Colors.white, + foregroundColor: Colors.black, + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Center(child: _buildContentByStatus()), ), ), ), @@ -227,7 +191,7 @@ class _PaymentScreenSmsProviderState extends State { children: [ CircularProgressIndicator(), SizedBox(height: 20), - Text("جاري إنشاء فاتورة الدفع...", style: TextStyle(fontSize: 16)), + Text("جاري إنشاء رقم البيان...", style: TextStyle(fontSize: 16)), ], ); case PaymentStatus.waitingForPayment: @@ -242,94 +206,162 @@ class _PaymentScreenSmsProviderState extends State { Widget _buildWaitingForPaymentUI() { final currencyFormat = NumberFormat.decimalPattern('ar_SY'); - final invoiceText = _invoiceNumber ?? '------'; + final invoiceText = _invoiceNumber ?? '---'; return SingleChildScrollView( + physics: const BouncingScrollPhysics(), child: Column( + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Image.asset(widget.providerLogo, width: 96), - const SizedBox(height: 16), - Text("تعليمات الدفع", style: Theme.of(context).textTheme.titleLarge), - const SizedBox(height: 12), - Card( - elevation: 1.5, - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - child: Padding( - padding: const EdgeInsets.all(16), + // 1. المبلغ + Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(vertical: 25, horizontal: 15), + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [Colors.blue.shade800, Colors.blue.shade600]), + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.blue.withOpacity(0.25), + blurRadius: 15, + offset: const Offset(0, 8)) + ], + ), + child: Column( + children: [ + const Text("المبلغ المطلوب", + style: TextStyle(color: Colors.white70, fontSize: 14)), + const SizedBox(height: 8), + Text("${currencyFormat.format(widget.amount)} ل.س", + style: const TextStyle( + color: Colors.white, + fontSize: 32, + fontWeight: FontWeight.bold)), + ], + ), + ), + const SizedBox(height: 30), + + // 2. التعليمات والنسخ (للراكب) + Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: Colors.grey.shade200), + boxShadow: [ + BoxShadow( + color: Colors.grey.shade100, + blurRadius: 10, + offset: const Offset(0, 4)) + ], + ), + child: Column( + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.orange.shade50, shape: BoxShape.circle), + child: Icon(Icons.priority_high_rounded, + color: Colors.orange.shade800, size: 20), + ), + const SizedBox(width: 12), + const Expanded( + child: Text( + "انسخ الرقم أدناه وضعه في خانة (الملاحظات) عند الدفع.", + style: TextStyle( + fontSize: 14, fontWeight: FontWeight.w600)), + ), + ], + ), + const SizedBox(height: 20), + InkWell( + onTap: () { + Clipboard.setData(ClipboardData(text: invoiceText)); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: const Text("تم نسخ رقم البيان ✅", + textAlign: TextAlign.center), + backgroundColor: Colors.green.shade600)); + }, + borderRadius: BorderRadius.circular(12), + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 15, vertical: 12), + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: Colors.blue.shade200, width: 1.5)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text("رقم البيان (Invoice ID)", + style: TextStyle( + fontSize: 12, color: Colors.grey)), + Text(invoiceText, + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + letterSpacing: 1.5)), + ], + ), + const Icon(Icons.copy_rounded, + color: Colors.blue, size: 24), + ], + ), + ), + ), + ], + ), + ), + const SizedBox(height: 30), + + // 3. QR Code + const Text("امسح الرمز للدفع", + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), + const SizedBox(height: 15), + GestureDetector( + onTap: () { + showDialog( + context: context, + builder: (ctx) => Dialog( + backgroundColor: Colors.transparent, + child: InteractiveViewer( + child: Image.asset(widget.qrImagePath)))); + }, + child: Container( + padding: const EdgeInsets.all(15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: Colors.grey.shade300)), child: Column( children: [ - _StepTile(number: 1, text: "افتح تطبيق محفظتك الإلكترونية."), - _StepTile(number: 2, text: "اختر خدمة تحويل الأموال."), - _StepTile( - number: 3, - text: - "أدخل المبلغ المطلوب: ${currencyFormat.format(widget.amount)} ل.س"), - _StepTile(number: 4, text: "حوّل إلى الرقم التالي:"), - // --- التعديل هنا --- - ListTile( - contentPadding: EdgeInsets.zero, - title: Text( - widget.paymentPhoneNumber, - style: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - letterSpacing: 1.2), - ), - trailing: OutlinedButton.icon( - onPressed: () async { - await Clipboard.setData( - ClipboardData(text: widget.paymentPhoneNumber)); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text("تم نسخ رقم الهاتف"))); - } - }, - icon: const Icon(Icons.copy, size: 18), - label: const Text("نسخ"), - ), - ), - // --- نهاية التعديل --- + Image.asset(widget.qrImagePath, + width: 180, + height: 180, + fit: BoxFit.contain, + errorBuilder: (c, o, s) => const Icon(Icons.qr_code_2, + size: 100, color: Colors.grey)), const SizedBox(height: 8), - _StepTile( - number: 5, - text: "هام: انسخ رقم القسيمة والصقه في خانة \"البيان\"."), - ListTile( - contentPadding: EdgeInsets.zero, - title: Text(invoiceText, - style: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - letterSpacing: 1.5)), - trailing: OutlinedButton.icon( - onPressed: _invoiceNumber == null - ? null - : () async { - await Clipboard.setData( - ClipboardData(text: invoiceText)); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text("تم نسخ رقم القسيمة"))); - } - }, - icon: const Icon(Icons.copy, size: 18), - label: const Text("نسخ"), - ), - ), + const Text("اضغط للتكبير", + style: TextStyle(fontSize: 10, color: Colors.grey)), ], ), ), ), + const SizedBox(height: 40), + const LinearProgressIndicator(backgroundColor: Colors.white), + const SizedBox(height: 10), + const Text("ننتظر إشعار الدفع تلقائياً...", + style: TextStyle(color: Colors.grey, fontSize: 12)), const SizedBox(height: 20), - const LinearProgressIndicator(minHeight: 2), - const SizedBox(height: 12), - Text("بانتظار تأكيد الدفع...", - style: TextStyle(color: Colors.grey.shade700)), - const SizedBox(height: 4), - const Text("هذه الشاشة ستتحدث تلقائيًا", - style: TextStyle(color: Colors.grey)), ], ), ); @@ -339,14 +371,21 @@ class _PaymentScreenSmsProviderState extends State { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const Icon(Icons.check_circle, color: Colors.green, size: 80), + const Icon(Icons.verified_rounded, color: Colors.green, size: 100), const SizedBox(height: 20), const Text("تم الدفع بنجاح!", - style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), - const SizedBox(height: 20), - ElevatedButton( - onPressed: () => Navigator.of(context).pop(), - child: const Text("العودة"), + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)), + const SizedBox(height: 40), + SizedBox( + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.green, + foregroundColor: Colors.white, + padding: const EdgeInsets.symmetric(vertical: 16)), + onPressed: () => Navigator.of(context).pop(), + child: const Text("متابعة", style: TextStyle(fontSize: 18)), + ), ), ], ); @@ -356,47 +395,35 @@ class _PaymentScreenSmsProviderState extends State { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const Icon(Icons.error, color: Colors.red, size: 80), + Icon(Icons.error_outline_rounded, color: Colors.red.shade400, size: 80), const SizedBox(height: 20), Text( - _status == PaymentStatus.paymentTimeout - ? "انتهى الوقت المحدد للدفع" - : "حدث خطأ ما", - style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold), - textAlign: TextAlign.center, - ), - const SizedBox(height: 8), - const Text("يرجى المحاولة مرة أخرى.", style: TextStyle(fontSize: 16)), - const SizedBox(height: 20), - ElevatedButton( - onPressed: _createAndPollInvoice, - child: const Text("المحاولة مرة أخرى"), + _status == PaymentStatus.paymentTimeout + ? "انتهى الوقت" + : "لم يتم التحقق", + style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), + const SizedBox(height: 15), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 30), + child: Text("لم يصلنا إشعار الدفع.", + textAlign: TextAlign.center, + style: TextStyle(color: Colors.grey))), + const SizedBox(height: 40), + SizedBox( + width: double.infinity, + child: ElevatedButton.icon( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric(vertical: 15)), + onPressed: _createAndPollInvoice, + icon: const Icon(Icons.refresh), + label: const Text("حاول مرة أخرى"), + ), ), + const SizedBox(height: 15), + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text("إلغاء", style: TextStyle(color: Colors.grey))) ], ); } } - -// ويدجت مساعد لعرض خطوات التعليمات بشكل أنيق -class _StepTile extends StatelessWidget { - final int number; - final String text; - const _StepTile({required this.number, required this.text}); - - @override - Widget build(BuildContext context) { - return ListTile( - contentPadding: EdgeInsets.zero, - leading: CircleAvatar( - radius: 12, - backgroundColor: Theme.of(context).primaryColor, - child: Text("$number", - style: const TextStyle( - fontSize: 12, - color: Colors.white, - fontWeight: FontWeight.bold)), - ), - title: Text(text), - ); - } -} diff --git a/pubspec.yaml b/pubspec.yaml index 6121a5e..845238a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -78,6 +78,8 @@ dependencies: internet_connection_checker: ^3.0.1 connectivity_plus: ^6.1.5 app_links: ^6.4.1 + # flutter_map: ^8.2.2 + # latlong2: ^0.9.1 # home_widget: ^0.7.0+1 dev_dependencies: