expo-notifications 0.31.1 → 0.31.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/notifications/service/NotificationsService.kt +12 -12
  4. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoHandlingDelegate.kt +2 -0
  5. package/expo-module.config.json +1 -7
  6. package/ios/EXNotifications/Notifications/Categories/CategoriesModule.swift +3 -5
  7. package/ios/EXNotifications/Notifications/NotificationCenterManager.swift +1 -1
  8. package/package.json +4 -4
  9. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1-sources.jar +0 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1-sources.jar.md5 +0 -1
  11. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1-sources.jar.sha1 +0 -1
  12. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1-sources.jar.sha256 +0 -1
  13. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1-sources.jar.sha512 +0 -1
  14. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.aar +0 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.aar.md5 +0 -1
  16. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.aar.sha1 +0 -1
  17. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.aar.sha256 +0 -1
  18. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.aar.sha512 +0 -1
  19. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.module +0 -156
  20. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.module.md5 +0 -1
  21. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.module.sha1 +0 -1
  22. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.module.sha256 +0 -1
  23. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.module.sha512 +0 -1
  24. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.pom +0 -90
  25. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.pom.md5 +0 -1
  26. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.pom.sha1 +0 -1
  27. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.pom.sha256 +0 -1
  28. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/0.31.1/expo.modules.notifications-0.31.1.pom.sha512 +0 -1
  29. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/maven-metadata.xml +0 -13
  30. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/maven-metadata.xml.md5 +0 -1
  31. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/maven-metadata.xml.sha1 +0 -1
  32. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/maven-metadata.xml.sha256 +0 -1
  33. package/local-maven-repo/host/exp/exponent/expo.modules.notifications/maven-metadata.xml.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,10 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 0.31.2 — 2025-05-08
14
+
15
+ _This version does not introduce any user-facing changes._
16
+
13
17
  ## 0.31.1 — 2025-04-30
14
18
 
15
19
  _This version does not introduce any user-facing changes._
@@ -5,13 +5,13 @@ plugins {
5
5
  }
6
6
 
7
7
  group = 'host.exp.exponent'
8
- version = '0.31.1'
8
+ version = '0.31.2'
9
9
 
10
10
  android {
11
11
  namespace "expo.modules.notifications"
12
12
  defaultConfig {
13
13
  versionCode 21
14
- versionName '0.31.1'
14
+ versionName '0.31.2'
15
15
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
16
16
  }
17
17
 
@@ -679,8 +679,8 @@ open class NotificationsService : BroadcastReceiver() {
679
679
  )
680
680
 
681
681
  open fun onGetAllPresentedNotifications(context: Context, intent: Intent) =
682
- Bundle().also {
683
- it.putParcelableArrayList(
682
+ Bundle().apply {
683
+ putParcelableArrayList(
684
684
  NOTIFICATIONS_KEY,
685
685
  ArrayList(
686
686
  getPresentationDelegate(context).getAllPresentedNotifications()
@@ -718,8 +718,8 @@ open class NotificationsService : BroadcastReceiver() {
718
718
  //region Category handling
719
719
 
720
720
  open fun onGetCategories(context: Context, intent: Intent) =
721
- Bundle().also {
722
- it.putParcelableArrayList(
721
+ Bundle().apply {
722
+ putParcelableArrayList(
723
723
  NOTIFICATION_CATEGORIES_KEY,
724
724
  ArrayList(
725
725
  getCategoriesDelegate(context).getCategories()
@@ -728,8 +728,8 @@ open class NotificationsService : BroadcastReceiver() {
728
728
  }
729
729
 
730
730
  open fun onSetCategory(context: Context, intent: Intent) =
731
- Bundle().also {
732
- it.putParcelable(
731
+ Bundle().apply {
732
+ putParcelable(
733
733
  NOTIFICATION_CATEGORY_KEY,
734
734
  getCategoriesDelegate(context).setCategory(
735
735
  intent.getParcelableExtra(NOTIFICATION_CATEGORY_KEY)!!
@@ -738,8 +738,8 @@ open class NotificationsService : BroadcastReceiver() {
738
738
  }
739
739
 
740
740
  open fun onDeleteCategory(context: Context, intent: Intent) =
741
- Bundle().also {
742
- it.putBoolean(
741
+ Bundle().apply {
742
+ putBoolean(
743
743
  SUCCEEDED_KEY,
744
744
  getCategoriesDelegate(context).deleteCategory(
745
745
  intent.extras?.getString(IDENTIFIER_KEY)!!
@@ -751,8 +751,8 @@ open class NotificationsService : BroadcastReceiver() {
751
751
  //region Scheduling notifications
752
752
 
753
753
  open fun onGetAllScheduledNotifications(context: Context, intent: Intent) =
754
- Bundle().also {
755
- it.putParcelableArrayList(
754
+ Bundle().apply {
755
+ putParcelableArrayList(
756
756
  NOTIFICATION_REQUESTS_KEY,
757
757
  ArrayList(
758
758
  getSchedulingDelegate(context).getAllScheduledNotifications()
@@ -761,8 +761,8 @@ open class NotificationsService : BroadcastReceiver() {
761
761
  }
762
762
 
763
763
  open fun onGetScheduledNotification(context: Context, intent: Intent) =
764
- Bundle().also {
765
- it.putParcelable(
764
+ Bundle().apply {
765
+ putParcelable(
766
766
  NOTIFICATION_REQUEST_KEY,
767
767
  getSchedulingDelegate(context).getScheduledNotification(
768
768
  intent.extras?.getString(IDENTIFIER_KEY)!!
@@ -124,6 +124,8 @@ class ExpoHandlingDelegate(protected val context: Context) : HandlingDelegate {
124
124
  } else if (notification.shouldPresent()) {
125
125
  // only data-only notifications reach this point and we present them if they fall into the documented exception:
126
126
  // https://docs.expo.dev/push-notifications/what-you-need-to-know/#headless-background-notifications
127
+ // this call can not be triggered by expo push service, only when using FCM directly.
128
+ // We keep this because we used to document this as a valid use case.
127
129
  NotificationsService.present(context, notification)
128
130
  }
129
131
  }
@@ -29,12 +29,6 @@
29
29
  "expo.modules.notifications.notifications.scheduling.NotificationScheduler",
30
30
  "expo.modules.notifications.serverregistration.ServerRegistrationModule",
31
31
  "expo.modules.notifications.tokens.PushTokenModule"
32
- ],
33
- "publication": {
34
- "groupId": "host.exp.exponent",
35
- "artifactId": "expo.modules.notifications",
36
- "version": "0.31.1",
37
- "repository": "local-maven-repo"
38
- }
32
+ ]
39
33
  }
40
34
  }
@@ -30,13 +30,11 @@ open class CategoriesModule: Module {
30
30
  let categoryRecord = CategoryRecord(identifier, actions: actions, options: options)
31
31
  let newNotificationCategory = categoryRecord.toUNNotificationCategory()
32
32
  let oldCategories = await UNUserNotificationCenter.current().notificationCategories()
33
- let newCategories = Set(
34
- oldCategories
33
+ let newCategories = oldCategories
35
34
  .filter { oldCategory in
36
35
  return oldCategory.identifier != newNotificationCategory.identifier
37
36
  }
38
37
  .union([newNotificationCategory])
39
- )
40
38
  UNUserNotificationCenter.current().setNotificationCategories(newCategories)
41
39
  return CategoryRecord(newNotificationCategory)
42
40
  }
@@ -47,9 +45,9 @@ open class CategoriesModule: Module {
47
45
  return oldCategory.identifier == identifier
48
46
  }
49
47
  if didDelete {
50
- let newCategories = Set(oldCategories.filter { oldCategory in
48
+ let newCategories = oldCategories.filter { oldCategory in
51
49
  return oldCategory.identifier != identifier
52
- })
50
+ }
53
51
  UNUserNotificationCenter.current().setNotificationCategories(newCategories)
54
52
  }
55
53
  return didDelete
@@ -52,7 +52,7 @@ public class NotificationCenterManager: NSObject,
52
52
  NSLog(
53
53
  "[expo-notifications] NotificationCenterManager encountered already present delegate of " +
54
54
  "UNUserNotificationCenter. NotificationCenterManager will not overwrite the value not to break other " +
55
- "features of your app. In return, expo-notifications may not work properly. To fix this problem either " +
55
+ "features of your app. In return, expo-notifications may not work properly. To fix this problem either " +
56
56
  "remove setting of the second delegate, or set the delegate to an instance of NotificationCenterManager " +
57
57
  "manually afterwards."
58
58
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-notifications",
3
- "version": "0.31.1",
3
+ "version": "0.31.2",
4
4
  "description": "Provides an API to fetch push notification tokens and to present, schedule, receive, and respond to notifications.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -48,10 +48,10 @@
48
48
  "assert": "^2.0.0",
49
49
  "badgin": "^1.1.5",
50
50
  "expo-application": "~6.1.4",
51
- "expo-constants": "~17.1.4"
51
+ "expo-constants": "~17.1.6"
52
52
  },
53
53
  "devDependencies": {
54
- "expo-module-scripts": "^4.1.6",
54
+ "expo-module-scripts": "^4.1.7",
55
55
  "memfs": "^3.2.0"
56
56
  },
57
57
  "peerDependencies": {
@@ -59,5 +59,5 @@
59
59
  "react": "*",
60
60
  "react-native": "*"
61
61
  },
62
- "gitHead": "84355076bc31a356aa3d23257f387f221885f53d"
62
+ "gitHead": "49c9d53cf0a9fc8179d1c8f5268beadd141f70ca"
63
63
  }
@@ -1 +0,0 @@
1
- c025165651c595088ed4caf14c37e475a573774a65fe3a4ac00426efa8f241ab
@@ -1 +0,0 @@
1
- fa1238b48d02574d49ce1d350cd2798799108c9cebf2d0c31b1935aa5df1a5bb0aeda971929615e6ac80337262610fc35a17c98698ed9297ee0c877895d624ea
@@ -1 +0,0 @@
1
- 23a9be6663f1b507bea568cef65e01b7bf357f7cf7903fe562ad557d54501f4b
@@ -1 +0,0 @@
1
- 615ff8e2a6ec1796aa71c2a84c0fa512ebde4d0747454179743afd17f13f079c5d6fa38623556a1a5f4f8f3bacb78f7d48da2e5fd9852a66098701f772802c18
@@ -1,156 +0,0 @@
1
- {
2
- "formatVersion": "1.1",
3
- "component": {
4
- "group": "host.exp.exponent",
5
- "module": "expo.modules.notifications",
6
- "version": "0.31.1",
7
- "attributes": {
8
- "org.gradle.status": "release"
9
- }
10
- },
11
- "createdBy": {
12
- "gradle": {
13
- "version": "8.13"
14
- }
15
- },
16
- "variants": [
17
- {
18
- "name": "releaseVariantReleaseApiPublication",
19
- "attributes": {
20
- "org.gradle.category": "library",
21
- "org.gradle.dependency.bundling": "external",
22
- "org.gradle.libraryelements": "aar",
23
- "org.gradle.usage": "java-api"
24
- },
25
- "files": [
26
- {
27
- "name": "expo.modules.notifications-0.31.1.aar",
28
- "url": "expo.modules.notifications-0.31.1.aar",
29
- "size": 384834,
30
- "sha512": "615ff8e2a6ec1796aa71c2a84c0fa512ebde4d0747454179743afd17f13f079c5d6fa38623556a1a5f4f8f3bacb78f7d48da2e5fd9852a66098701f772802c18",
31
- "sha256": "23a9be6663f1b507bea568cef65e01b7bf357f7cf7903fe562ad557d54501f4b",
32
- "sha1": "5676c7b003206808674304465cfd69c3e1a519b6",
33
- "md5": "5c2a94f4f0a6d8180e989e79827fa52b"
34
- }
35
- ]
36
- },
37
- {
38
- "name": "releaseVariantReleaseRuntimePublication",
39
- "attributes": {
40
- "org.gradle.category": "library",
41
- "org.gradle.dependency.bundling": "external",
42
- "org.gradle.libraryelements": "aar",
43
- "org.gradle.usage": "java-runtime"
44
- },
45
- "dependencies": [
46
- {
47
- "group": "org.jetbrains.kotlin",
48
- "module": "kotlin-parcelize-runtime",
49
- "version": {
50
- "requires": "2.0.21"
51
- }
52
- },
53
- {
54
- "group": "org.jetbrains.kotlin",
55
- "module": "kotlin-stdlib-jdk7",
56
- "version": {
57
- "requires": "2.0.21"
58
- }
59
- },
60
- {
61
- "group": "androidx.core",
62
- "module": "core",
63
- "version": {
64
- "requires": "1.6.0"
65
- }
66
- },
67
- {
68
- "group": "androidx.lifecycle",
69
- "module": "lifecycle-runtime",
70
- "version": {
71
- "requires": "2.2.0"
72
- }
73
- },
74
- {
75
- "group": "androidx.lifecycle",
76
- "module": "lifecycle-process",
77
- "version": {
78
- "requires": "2.2.0"
79
- }
80
- },
81
- {
82
- "group": "androidx.lifecycle",
83
- "module": "lifecycle-common-java8",
84
- "version": {
85
- "requires": "2.2.0"
86
- }
87
- },
88
- {
89
- "group": "org.jetbrains.kotlinx",
90
- "module": "kotlinx-coroutines-android",
91
- "version": {
92
- "requires": "1.7.3"
93
- }
94
- },
95
- {
96
- "group": "com.google.firebase",
97
- "module": "firebase-messaging",
98
- "version": {
99
- "requires": "24.0.1"
100
- }
101
- },
102
- {
103
- "group": "me.leolin",
104
- "module": "ShortcutBadger",
105
- "version": {
106
- "requires": "1.1.22"
107
- },
108
- "excludes": [
109
- {
110
- "group": "*",
111
- "module": "*"
112
- }
113
- ],
114
- "thirdPartyCompatibility": {
115
- "artifactSelector": {
116
- "name": "ShortcutBadger",
117
- "type": "aar",
118
- "extension": "aar"
119
- }
120
- }
121
- }
122
- ],
123
- "files": [
124
- {
125
- "name": "expo.modules.notifications-0.31.1.aar",
126
- "url": "expo.modules.notifications-0.31.1.aar",
127
- "size": 384834,
128
- "sha512": "615ff8e2a6ec1796aa71c2a84c0fa512ebde4d0747454179743afd17f13f079c5d6fa38623556a1a5f4f8f3bacb78f7d48da2e5fd9852a66098701f772802c18",
129
- "sha256": "23a9be6663f1b507bea568cef65e01b7bf357f7cf7903fe562ad557d54501f4b",
130
- "sha1": "5676c7b003206808674304465cfd69c3e1a519b6",
131
- "md5": "5c2a94f4f0a6d8180e989e79827fa52b"
132
- }
133
- ]
134
- },
135
- {
136
- "name": "releaseVariantReleaseSourcePublication",
137
- "attributes": {
138
- "org.gradle.category": "documentation",
139
- "org.gradle.dependency.bundling": "external",
140
- "org.gradle.docstype": "sources",
141
- "org.gradle.usage": "java-runtime"
142
- },
143
- "files": [
144
- {
145
- "name": "expo.modules.notifications-0.31.1-sources.jar",
146
- "url": "expo.modules.notifications-0.31.1-sources.jar",
147
- "size": 99335,
148
- "sha512": "fa1238b48d02574d49ce1d350cd2798799108c9cebf2d0c31b1935aa5df1a5bb0aeda971929615e6ac80337262610fc35a17c98698ed9297ee0c877895d624ea",
149
- "sha256": "c025165651c595088ed4caf14c37e475a573774a65fe3a4ac00426efa8f241ab",
150
- "sha1": "7bf0d3fa2df89a4ab7bd6896781ef76c3354f678",
151
- "md5": "f903db2d952ca23cb0bc9f01a8cd60a9"
152
- }
153
- ]
154
- }
155
- ]
156
- }
@@ -1 +0,0 @@
1
- 9e269bb96bffb329f45ff9e5fb4c97b7c325636d26aa0f130ece03f3cb3b6ca2
@@ -1 +0,0 @@
1
- 74ec3e3e4fa15d75b8e354d9d35a1dfa425f417fedbdd392de6f98ac8bd3c682797074e57e4264787cb6bd574c5b2ef60a507825f66b785037874a28b58f2432
@@ -1,90 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4
- <!-- This module was also published with a richer model, Gradle metadata, -->
5
- <!-- which should be used instead. Do not delete the following line which -->
6
- <!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
7
- <!-- that they should prefer consuming it instead. -->
8
- <!-- do_not_remove: published-with-gradle-metadata -->
9
- <modelVersion>4.0.0</modelVersion>
10
- <groupId>host.exp.exponent</groupId>
11
- <artifactId>expo.modules.notifications</artifactId>
12
- <version>0.31.1</version>
13
- <packaging>aar</packaging>
14
- <name>expo.modules.notifications</name>
15
- <url>https://github.com/expo/expo</url>
16
- <licenses>
17
- <license>
18
- <name>MIT License</name>
19
- <url>https://github.com/expo/expo/blob/main/LICENSE</url>
20
- </license>
21
- </licenses>
22
- <scm>
23
- <connection>https://github.com/expo/expo.git</connection>
24
- <developerConnection>https://github.com/expo/expo.git</developerConnection>
25
- <url>https://github.com/expo/expo</url>
26
- </scm>
27
- <dependencies>
28
- <dependency>
29
- <groupId>org.jetbrains.kotlin</groupId>
30
- <artifactId>kotlin-parcelize-runtime</artifactId>
31
- <version>2.0.21</version>
32
- <scope>runtime</scope>
33
- </dependency>
34
- <dependency>
35
- <groupId>org.jetbrains.kotlin</groupId>
36
- <artifactId>kotlin-stdlib-jdk7</artifactId>
37
- <version>2.0.21</version>
38
- <scope>runtime</scope>
39
- </dependency>
40
- <dependency>
41
- <groupId>androidx.core</groupId>
42
- <artifactId>core</artifactId>
43
- <version>1.6.0</version>
44
- <scope>runtime</scope>
45
- </dependency>
46
- <dependency>
47
- <groupId>androidx.lifecycle</groupId>
48
- <artifactId>lifecycle-runtime</artifactId>
49
- <version>2.2.0</version>
50
- <scope>runtime</scope>
51
- </dependency>
52
- <dependency>
53
- <groupId>androidx.lifecycle</groupId>
54
- <artifactId>lifecycle-process</artifactId>
55
- <version>2.2.0</version>
56
- <scope>runtime</scope>
57
- </dependency>
58
- <dependency>
59
- <groupId>androidx.lifecycle</groupId>
60
- <artifactId>lifecycle-common-java8</artifactId>
61
- <version>2.2.0</version>
62
- <scope>runtime</scope>
63
- </dependency>
64
- <dependency>
65
- <groupId>org.jetbrains.kotlinx</groupId>
66
- <artifactId>kotlinx-coroutines-android</artifactId>
67
- <version>1.7.3</version>
68
- <scope>runtime</scope>
69
- </dependency>
70
- <dependency>
71
- <groupId>com.google.firebase</groupId>
72
- <artifactId>firebase-messaging</artifactId>
73
- <version>24.0.1</version>
74
- <scope>runtime</scope>
75
- </dependency>
76
- <dependency>
77
- <groupId>me.leolin</groupId>
78
- <artifactId>ShortcutBadger</artifactId>
79
- <version>1.1.22</version>
80
- <type>aar</type>
81
- <scope>runtime</scope>
82
- <exclusions>
83
- <exclusion>
84
- <groupId>*</groupId>
85
- <artifactId>*</artifactId>
86
- </exclusion>
87
- </exclusions>
88
- </dependency>
89
- </dependencies>
90
- </project>
@@ -1 +0,0 @@
1
- 44373687b388be5228511aae0ead74fb04e4296550509b5a9696d2147df1c9b1
@@ -1 +0,0 @@
1
- f5d295ae91c6a922f5039ad6fbdf82103671d1d5620ba853fd289d4d1f80c8645a15f4cbf8af0d3e85cd998c0d4b701225aeef0c68ab2fd24faa2692ff9736df
@@ -1,13 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <metadata>
3
- <groupId>host.exp.exponent</groupId>
4
- <artifactId>expo.modules.notifications</artifactId>
5
- <versioning>
6
- <latest>0.31.1</latest>
7
- <release>0.31.1</release>
8
- <versions>
9
- <version>0.31.1</version>
10
- </versions>
11
- <lastUpdated>20250430211459</lastUpdated>
12
- </versioning>
13
- </metadata>
@@ -1 +0,0 @@
1
- 46626b2a0b9b0ba9e9d9a6d7a31ef32e
@@ -1 +0,0 @@
1
- 9c7800b076a655604b07eabcdc11d18bff6e7ba7
@@ -1 +0,0 @@
1
- a7e1c52a49caf1edfdac1ca93cd9572663d3e744f287d958ce029cdc1ccb183a
@@ -1 +0,0 @@
1
- 85e6c58bfc54827437dfd8a69e9773012f5edc240665396f94954ce8819e482693652a1dcd8359346a0b6bb720a76c46fa951b928cf1c25f624e990c773b042e