parse-server 2.8.4 → 8.6.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 (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -1,48 +1,23 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PushWorker = undefined;
7
-
8
- var _deepcopy = require('deepcopy');
9
-
10
- var _deepcopy2 = _interopRequireDefault(_deepcopy);
11
-
12
- var _AdaptableController = require('../Controllers/AdaptableController');
13
-
14
- var _AdaptableController2 = _interopRequireDefault(_AdaptableController);
15
-
16
- var _Auth = require('../Auth');
17
-
18
- var _Config = require('../Config');
19
-
20
- var _Config2 = _interopRequireDefault(_Config);
21
-
22
- var _PushAdapter = require('../Adapters/Push/PushAdapter');
23
-
24
- var _rest = require('../rest');
25
-
26
- var _rest2 = _interopRequireDefault(_rest);
27
-
28
- var _StatusHandler = require('../StatusHandler');
29
-
30
- var _utils = require('./utils');
31
-
32
- var utils = _interopRequireWildcard(_utils);
33
-
34
- var _ParseMessageQueue = require('../ParseMessageQueue');
35
-
36
- var _PushQueue = require('./PushQueue');
37
-
38
- var _logger = require('../logger');
39
-
40
- var _logger2 = _interopRequireDefault(_logger);
41
-
42
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
43
-
44
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45
-
6
+ exports.default = exports.PushWorker = void 0;
7
+ var _deepcopy = _interopRequireDefault(require("deepcopy"));
8
+ var _AdaptableController = _interopRequireDefault(require("../Controllers/AdaptableController"));
9
+ var _Auth = require("../Auth");
10
+ var _Config = _interopRequireDefault(require("../Config"));
11
+ var _PushAdapter = require("../Adapters/Push/PushAdapter");
12
+ var _rest = _interopRequireDefault(require("../rest"));
13
+ var _StatusHandler = require("../StatusHandler");
14
+ var utils = _interopRequireWildcard(require("./utils"));
15
+ var _ParseMessageQueue = require("../ParseMessageQueue");
16
+ var _PushQueue = require("./PushQueue");
17
+ var _logger = _interopRequireDefault(require("../logger"));
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
+ // -disable-next
46
21
  function groupByBadge(installations) {
47
22
  return installations.reduce((map, installation) => {
48
23
  const badge = installation.badge + '';
@@ -51,13 +26,10 @@ function groupByBadge(installations) {
51
26
  return map;
52
27
  }, {});
53
28
  }
54
- // -disable-next
55
29
  class PushWorker {
56
-
57
30
  constructor(pushAdapter, subscriberConfig = {}) {
58
- _AdaptableController2.default.validateAdapter(pushAdapter, this, _PushAdapter.PushAdapter);
31
+ _AdaptableController.default.validateAdapter(pushAdapter, this, _PushAdapter.PushAdapter);
59
32
  this.adapter = pushAdapter;
60
-
61
33
  this.channel = subscriberConfig.channel || _PushQueue.PushQueue.defaultPushChannel();
62
34
  this.subscriber = _ParseMessageQueue.ParseMessageQueue.createSubscriber(subscriberConfig);
63
35
  if (this.subscriber) {
@@ -69,21 +41,27 @@ class PushWorker {
69
41
  });
70
42
  }
71
43
  }
72
-
73
- run({ body, query, pushStatus, applicationId, UTCOffset }) {
74
- const config = _Config2.default.get(applicationId);
44
+ run({
45
+ body,
46
+ query,
47
+ pushStatus,
48
+ applicationId,
49
+ UTCOffset
50
+ }) {
51
+ const config = _Config.default.get(applicationId);
75
52
  const auth = (0, _Auth.master)(config);
76
53
  const where = utils.applyDeviceTokenExists(query.where);
77
54
  delete query.where;
78
55
  pushStatus = (0, _StatusHandler.pushStatusHandler)(config, pushStatus.objectId);
79
- return _rest2.default.find(config, auth, '_Installation', where, query).then(({ results }) => {
56
+ return _rest.default.find(config, auth, '_Installation', where, query).then(({
57
+ results
58
+ }) => {
80
59
  if (results.length == 0) {
81
60
  return;
82
61
  }
83
62
  return this.sendToAdapter(body, results, pushStatus, config, UTCOffset);
84
63
  });
85
64
  }
86
-
87
65
  sendToAdapter(body, installations, pushStatus, config, UTCOffset) {
88
66
  // Check if we have locales in the push body
89
67
  const locales = utils.getLocalesFromPush(body);
@@ -100,9 +78,8 @@ class PushWorker {
100
78
  });
101
79
  return Promise.all(promises);
102
80
  }
103
-
104
81
  if (!utils.isPushIncrementing(body)) {
105
- _logger2.default.verbose(`Sending push to ${installations.length}`);
82
+ _logger.default.verbose(`Sending push to ${installations.length}`);
106
83
  return this.adapter.send(body, installations, pushStatus.objectId).then(results => {
107
84
  return pushStatus.trackSent(results, UTCOffset).then(() => results);
108
85
  });
@@ -113,7 +90,7 @@ class PushWorker {
113
90
 
114
91
  // Map the on the badges count and return the send result
115
92
  const promises = Object.keys(badgeInstallationsMap).map(badge => {
116
- const payload = (0, _deepcopy2.default)(body);
93
+ const payload = (0, _deepcopy.default)(body);
117
94
  payload.data.badge = parseInt(badge);
118
95
  const installations = badgeInstallationsMap[badge];
119
96
  return this.sendToAdapter(payload, installations, pushStatus, config, UTCOffset);
@@ -121,7 +98,6 @@ class PushWorker {
121
98
  return Promise.all(promises);
122
99
  }
123
100
  }
124
-
125
101
  exports.PushWorker = PushWorker;
126
- exports.default = PushWorker;
127
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QdXNoL1B1c2hXb3JrZXIuanMiXSwibmFtZXMiOlsidXRpbHMiLCJncm91cEJ5QmFkZ2UiLCJpbnN0YWxsYXRpb25zIiwicmVkdWNlIiwibWFwIiwiaW5zdGFsbGF0aW9uIiwiYmFkZ2UiLCJwdXNoIiwiUHVzaFdvcmtlciIsImNvbnN0cnVjdG9yIiwicHVzaEFkYXB0ZXIiLCJzdWJzY3JpYmVyQ29uZmlnIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsInZhbGlkYXRlQWRhcHRlciIsIlB1c2hBZGFwdGVyIiwiYWRhcHRlciIsImNoYW5uZWwiLCJQdXNoUXVldWUiLCJkZWZhdWx0UHVzaENoYW5uZWwiLCJzdWJzY3JpYmVyIiwiUGFyc2VNZXNzYWdlUXVldWUiLCJjcmVhdGVTdWJzY3JpYmVyIiwic3Vic2NyaWJlIiwib24iLCJtZXNzYWdlU3RyIiwid29ya0l0ZW0iLCJKU09OIiwicGFyc2UiLCJydW4iLCJib2R5IiwicXVlcnkiLCJwdXNoU3RhdHVzIiwiYXBwbGljYXRpb25JZCIsIlVUQ09mZnNldCIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsImF1dGgiLCJ3aGVyZSIsImFwcGx5RGV2aWNlVG9rZW5FeGlzdHMiLCJvYmplY3RJZCIsInJlc3QiLCJmaW5kIiwidGhlbiIsInJlc3VsdHMiLCJsZW5ndGgiLCJzZW5kVG9BZGFwdGVyIiwibG9jYWxlcyIsImdldExvY2FsZXNGcm9tUHVzaCIsImJvZGllc1BlckxvY2FsZXMiLCJncm91cHBlZEluc3RhbGxhdGlvbnMiLCJncm91cEJ5TG9jYWxlSWRlbnRpZmllciIsInByb21pc2VzIiwiT2JqZWN0Iiwia2V5cyIsImxvY2FsZSIsIlByb21pc2UiLCJhbGwiLCJpc1B1c2hJbmNyZW1lbnRpbmciLCJsb2dnZXIiLCJ2ZXJib3NlIiwic2VuZCIsInRyYWNrU2VudCIsImJhZGdlSW5zdGFsbGF0aW9uc01hcCIsInBheWxvYWQiLCJkYXRhIiwicGFyc2VJbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOztBQUNBOztJQUFZQSxLOztBQUNaOztBQUNBOztBQUNBOzs7Ozs7OztBQUVBLFNBQVNDLFlBQVQsQ0FBc0JDLGFBQXRCLEVBQXFDO0FBQ25DLFNBQU9BLGNBQWNDLE1BQWQsQ0FBcUIsQ0FBQ0MsR0FBRCxFQUFNQyxZQUFOLEtBQXVCO0FBQ2pELFVBQU1DLFFBQVFELGFBQWFDLEtBQWIsR0FBcUIsRUFBbkM7QUFDQUYsUUFBSUUsS0FBSixJQUFhRixJQUFJRSxLQUFKLEtBQWMsRUFBM0I7QUFDQUYsUUFBSUUsS0FBSixFQUFXQyxJQUFYLENBQWdCRixZQUFoQjtBQUNBLFdBQU9ELEdBQVA7QUFDRCxHQUxNLEVBS0osRUFMSSxDQUFQO0FBTUQ7QUFwQkQ7QUFzQk8sTUFBTUksVUFBTixDQUFpQjs7QUFLdEJDLGNBQVlDLFdBQVosRUFBc0NDLG1CQUF3QixFQUE5RCxFQUFrRTtBQUNoRUMsa0NBQW9CQyxlQUFwQixDQUFvQ0gsV0FBcEMsRUFBaUQsSUFBakQsRUFBdURJLHdCQUF2RDtBQUNBLFNBQUtDLE9BQUwsR0FBZUwsV0FBZjs7QUFFQSxTQUFLTSxPQUFMLEdBQWVMLGlCQUFpQkssT0FBakIsSUFBNEJDLHFCQUFVQyxrQkFBVixFQUEzQztBQUNBLFNBQUtDLFVBQUwsR0FBa0JDLHFDQUFrQkMsZ0JBQWxCLENBQW1DVixnQkFBbkMsQ0FBbEI7QUFDQSxRQUFJLEtBQUtRLFVBQVQsRUFBcUI7QUFDbkIsWUFBTUEsYUFBYSxLQUFLQSxVQUF4QjtBQUNBQSxpQkFBV0csU0FBWCxDQUFxQixLQUFLTixPQUExQjtBQUNBRyxpQkFBV0ksRUFBWCxDQUFjLFNBQWQsRUFBeUIsQ0FBQ1AsT0FBRCxFQUFVUSxVQUFWLEtBQXlCO0FBQ2hELGNBQU1DLFdBQVdDLEtBQUtDLEtBQUwsQ0FBV0gsVUFBWCxDQUFqQjtBQUNBLGFBQUtJLEdBQUwsQ0FBU0gsUUFBVDtBQUNELE9BSEQ7QUFJRDtBQUNGOztBQUVERyxNQUFJLEVBQUVDLElBQUYsRUFBUUMsS0FBUixFQUFlQyxVQUFmLEVBQTJCQyxhQUEzQixFQUEwQ0MsU0FBMUMsRUFBSixFQUE0RTtBQUMxRSxVQUFNQyxTQUFTQyxpQkFBT0MsR0FBUCxDQUFXSixhQUFYLENBQWY7QUFDQSxVQUFNSyxPQUFPLGtCQUFPSCxNQUFQLENBQWI7QUFDQSxVQUFNSSxRQUFRdEMsTUFBTXVDLHNCQUFOLENBQTZCVCxNQUFNUSxLQUFuQyxDQUFkO0FBQ0EsV0FBT1IsTUFBTVEsS0FBYjtBQUNBUCxpQkFBYSxzQ0FBa0JHLE1BQWxCLEVBQTBCSCxXQUFXUyxRQUFyQyxDQUFiO0FBQ0EsV0FBT0MsZUFBS0MsSUFBTCxDQUFVUixNQUFWLEVBQWtCRyxJQUFsQixFQUF3QixlQUF4QixFQUF5Q0MsS0FBekMsRUFBZ0RSLEtBQWhELEVBQXVEYSxJQUF2RCxDQUE0RCxDQUFDLEVBQUNDLE9BQUQsRUFBRCxLQUFlO0FBQ2hGLFVBQUlBLFFBQVFDLE1BQVIsSUFBa0IsQ0FBdEIsRUFBeUI7QUFDdkI7QUFDRDtBQUNELGFBQU8sS0FBS0MsYUFBTCxDQUFtQmpCLElBQW5CLEVBQXlCZSxPQUF6QixFQUFrQ2IsVUFBbEMsRUFBOENHLE1BQTlDLEVBQXNERCxTQUF0RCxDQUFQO0FBQ0QsS0FMTSxDQUFQO0FBTUQ7O0FBRURhLGdCQUFjakIsSUFBZCxFQUF5QjNCLGFBQXpCLEVBQStDNkIsVUFBL0MsRUFBZ0VHLE1BQWhFLEVBQWdGRCxTQUFoRixFQUE2RztBQUMzRztBQUNBLFVBQU1jLFVBQVUvQyxNQUFNZ0Qsa0JBQU4sQ0FBeUJuQixJQUF6QixDQUFoQjtBQUNBLFFBQUlrQixRQUFRRixNQUFSLEdBQWlCLENBQXJCLEVBQXdCO0FBQ3RCO0FBQ0EsWUFBTUksbUJBQW1CakQsTUFBTWlELGdCQUFOLENBQXVCcEIsSUFBdkIsRUFBNkJrQixPQUE3QixDQUF6Qjs7QUFFQTtBQUNBLFlBQU1HLHdCQUF3QmxELE1BQU1tRCx1QkFBTixDQUE4QmpELGFBQTlCLEVBQTZDNkMsT0FBN0MsQ0FBOUI7QUFDQSxZQUFNSyxXQUFXQyxPQUFPQyxJQUFQLENBQVlKLHFCQUFaLEVBQW1DOUMsR0FBbkMsQ0FBd0NtRCxNQUFELElBQVk7QUFDbEUsY0FBTXJELGdCQUFnQmdELHNCQUFzQkssTUFBdEIsQ0FBdEI7QUFDQSxjQUFNMUIsT0FBT29CLGlCQUFpQk0sTUFBakIsQ0FBYjtBQUNBLGVBQU8sS0FBS1QsYUFBTCxDQUFtQmpCLElBQW5CLEVBQXlCM0IsYUFBekIsRUFBd0M2QixVQUF4QyxFQUFvREcsTUFBcEQsRUFBNERELFNBQTVELENBQVA7QUFDRCxPQUpnQixDQUFqQjtBQUtBLGFBQU91QixRQUFRQyxHQUFSLENBQVlMLFFBQVosQ0FBUDtBQUNEOztBQUVELFFBQUksQ0FBQ3BELE1BQU0wRCxrQkFBTixDQUF5QjdCLElBQXpCLENBQUwsRUFBcUM7QUFDbkM4Qix1QkFBT0MsT0FBUCxDQUFnQixtQkFBa0IxRCxjQUFjMkMsTUFBTyxFQUF2RDtBQUNBLGFBQU8sS0FBSzlCLE9BQUwsQ0FBYThDLElBQWIsQ0FBa0JoQyxJQUFsQixFQUF3QjNCLGFBQXhCLEVBQXVDNkIsV0FBV1MsUUFBbEQsRUFBNERHLElBQTVELENBQWtFQyxPQUFELElBQWE7QUFDbkYsZUFBT2IsV0FBVytCLFNBQVgsQ0FBcUJsQixPQUFyQixFQUE4QlgsU0FBOUIsRUFBeUNVLElBQXpDLENBQThDLE1BQU1DLE9BQXBELENBQVA7QUFDRCxPQUZNLENBQVA7QUFHRDs7QUFFRDtBQUNBLFVBQU1tQix3QkFBd0I5RCxhQUFhQyxhQUFiLENBQTlCOztBQUVBO0FBQ0EsVUFBTWtELFdBQVdDLE9BQU9DLElBQVAsQ0FBWVMscUJBQVosRUFBbUMzRCxHQUFuQyxDQUF3Q0UsS0FBRCxJQUFXO0FBQ2pFLFlBQU0wRCxVQUFVLHdCQUFTbkMsSUFBVCxDQUFoQjtBQUNBbUMsY0FBUUMsSUFBUixDQUFhM0QsS0FBYixHQUFxQjRELFNBQVM1RCxLQUFULENBQXJCO0FBQ0EsWUFBTUosZ0JBQWdCNkQsc0JBQXNCekQsS0FBdEIsQ0FBdEI7QUFDQSxhQUFPLEtBQUt3QyxhQUFMLENBQW1Ca0IsT0FBbkIsRUFBNEI5RCxhQUE1QixFQUEyQzZCLFVBQTNDLEVBQXVERyxNQUF2RCxFQUErREQsU0FBL0QsQ0FBUDtBQUNELEtBTGdCLENBQWpCO0FBTUEsV0FBT3VCLFFBQVFDLEdBQVIsQ0FBWUwsUUFBWixDQUFQO0FBQ0Q7QUF0RXFCOztRQUFYNUMsVSxHQUFBQSxVO2tCQXlFRUEsVSIsImZpbGUiOiJQdXNoV29ya2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IGRlZXBjb3B5ICAgICAgICAgICAgICAgZnJvbSAnZGVlcGNvcHknO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgICAgZnJvbSAnLi4vQ29udHJvbGxlcnMvQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBtYXN0ZXIgfSAgICAgICAgICAgICBmcm9tICcuLi9BdXRoJztcbmltcG9ydCBDb25maWcgICAgICAgICAgICAgICAgIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgeyBQdXNoQWRhcHRlciB9ICAgICAgICBmcm9tICcuLi9BZGFwdGVycy9QdXNoL1B1c2hBZGFwdGVyJztcbmltcG9ydCByZXN0ICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IHsgcHVzaFN0YXR1c0hhbmRsZXIgfSAgZnJvbSAnLi4vU3RhdHVzSGFuZGxlcic7XG5pbXBvcnQgKiBhcyB1dGlscyAgICAgICAgICAgICBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFBhcnNlTWVzc2FnZVF1ZXVlIH0gIGZyb20gJy4uL1BhcnNlTWVzc2FnZVF1ZXVlJztcbmltcG9ydCB7IFB1c2hRdWV1ZSB9ICAgICAgICAgIGZyb20gJy4vUHVzaFF1ZXVlJztcbmltcG9ydCBsb2dnZXIgICAgICAgICAgICAgICAgIGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZSgobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICBjb25zdCBiYWRnZSA9IGluc3RhbGxhdGlvbi5iYWRnZSArICcnO1xuICAgIG1hcFtiYWRnZV0gPSBtYXBbYmFkZ2VdIHx8IFtdO1xuICAgIG1hcFtiYWRnZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFB1c2hXb3JrZXIge1xuICBzdWJzY3JpYmVyOiA/YW55O1xuICBhZGFwdGVyOiBhbnk7XG4gIGNoYW5uZWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdXNoQWRhcHRlcjogUHVzaEFkYXB0ZXIsIHN1YnNjcmliZXJDb25maWc6IGFueSA9IHt9KSB7XG4gICAgQWRhcHRhYmxlQ29udHJvbGxlci52YWxpZGF0ZUFkYXB0ZXIocHVzaEFkYXB0ZXIsIHRoaXMsIFB1c2hBZGFwdGVyKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSBwdXNoQWRhcHRlcjtcblxuICAgIHRoaXMuY2hhbm5lbCA9IHN1YnNjcmliZXJDb25maWcuY2hhbm5lbCB8fCBQdXNoUXVldWUuZGVmYXVsdFB1c2hDaGFubmVsKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gUGFyc2VNZXNzYWdlUXVldWUuY3JlYXRlU3Vic2NyaWJlcihzdWJzY3JpYmVyQ29uZmlnKTtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgc3Vic2NyaWJlci5zdWJzY3JpYmUodGhpcy5jaGFubmVsKTtcbiAgICAgIHN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgICBjb25zdCB3b3JrSXRlbSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICAgIHRoaXMucnVuKHdvcmtJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1bih7IGJvZHksIHF1ZXJ5LCBwdXNoU3RhdHVzLCBhcHBsaWNhdGlvbklkLCBVVENPZmZzZXQgfTogYW55KTogUHJvbWlzZTwqPiB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBhdXRoID0gbWFzdGVyKGNvbmZpZyk7XG4gICAgY29uc3Qgd2hlcmUgPSB1dGlscy5hcHBseURldmljZVRva2VuRXhpc3RzKHF1ZXJ5LndoZXJlKTtcbiAgICBkZWxldGUgcXVlcnkud2hlcmU7XG4gICAgcHVzaFN0YXR1cyA9IHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZywgcHVzaFN0YXR1cy5vYmplY3RJZCk7XG4gICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHF1ZXJ5KS50aGVuKCh7cmVzdWx0c30pID0+IHtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNlbmRUb0FkYXB0ZXIoYm9keSwgcmVzdWx0cywgcHVzaFN0YXR1cywgY29uZmlnLCBVVENPZmZzZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VuZFRvQWRhcHRlcihib2R5OiBhbnksIGluc3RhbGxhdGlvbnM6IGFueVtdLCBwdXNoU3RhdHVzOiBhbnksIGNvbmZpZzogQ29uZmlnLCBVVENPZmZzZXQ6ID9hbnkpOiBQcm9taXNlPCo+IHtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGxvY2FsZXMgaW4gdGhlIHB1c2ggYm9keVxuICAgIGNvbnN0IGxvY2FsZXMgPSB1dGlscy5nZXRMb2NhbGVzRnJvbVB1c2goYm9keSk7XG4gICAgaWYgKGxvY2FsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgICAgIGNvbnN0IGJvZGllc1BlckxvY2FsZXMgPSB1dGlscy5ib2RpZXNQZXJMb2NhbGVzKGJvZHksIGxvY2FsZXMpO1xuXG4gICAgICAvLyBHcm91cCBpbnN0YWxsYXRpb25zIG9uIHRoZSBzcGVjaWZpZWQgbG9jYWxlcyAoZW4sIGZyLCBkZWZhdWx0IGV0Yy4uLilcbiAgICAgIGNvbnN0IGdyb3VwcGVkSW5zdGFsbGF0aW9ucyA9IHV0aWxzLmdyb3VwQnlMb2NhbGVJZGVudGlmaWVyKGluc3RhbGxhdGlvbnMsIGxvY2FsZXMpO1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3Qua2V5cyhncm91cHBlZEluc3RhbGxhdGlvbnMpLm1hcCgobG9jYWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbGxhdGlvbnMgPSBncm91cHBlZEluc3RhbGxhdGlvbnNbbG9jYWxlXTtcbiAgICAgICAgY29uc3QgYm9keSA9IGJvZGllc1BlckxvY2FsZXNbbG9jYWxlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBTZW5kaW5nIHB1c2ggdG8gJHtpbnN0YWxsYXRpb25zLmxlbmd0aH1gKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuc2VuZChib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLm9iamVjdElkKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgIHJldHVybiBwdXNoU3RhdHVzLnRyYWNrU2VudChyZXN1bHRzLCBVVENPZmZzZXQpLnRoZW4oKCkgPT4gcmVzdWx0cyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb2xsZWN0IHRoZSBiYWRnZXMgdG8gcmVkdWNlIHRoZSAjIG9mIGNhbGxzXG4gICAgY29uc3QgYmFkZ2VJbnN0YWxsYXRpb25zTWFwID0gZ3JvdXBCeUJhZGdlKGluc3RhbGxhdGlvbnMpO1xuXG4gICAgLy8gTWFwIHRoZSBvbiB0aGUgYmFkZ2VzIGNvdW50IGFuZCByZXR1cm4gdGhlIHNlbmQgcmVzdWx0XG4gICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3Qua2V5cyhiYWRnZUluc3RhbGxhdGlvbnNNYXApLm1hcCgoYmFkZ2UpID0+IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBkZWVwY29weShib2R5KTtcbiAgICAgIHBheWxvYWQuZGF0YS5iYWRnZSA9IHBhcnNlSW50KGJhZGdlKTtcbiAgICAgIGNvbnN0IGluc3RhbGxhdGlvbnMgPSBiYWRnZUluc3RhbGxhdGlvbnNNYXBbYmFkZ2VdO1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihwYXlsb2FkLCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQdXNoV29ya2VyO1xuIl19
102
+ var _default = exports.default = PushWorker;
103
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVlcGNvcHkiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9BZGFwdGFibGVDb250cm9sbGVyIiwiX0F1dGgiLCJfQ29uZmlnIiwiX1B1c2hBZGFwdGVyIiwiX3Jlc3QiLCJfU3RhdHVzSGFuZGxlciIsInV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGFyc2VNZXNzYWdlUXVldWUiLCJfUHVzaFF1ZXVlIiwiX2xvZ2dlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdyb3VwQnlCYWRnZSIsImluc3RhbGxhdGlvbnMiLCJyZWR1Y2UiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJiYWRnZSIsInB1c2giLCJQdXNoV29ya2VyIiwiY29uc3RydWN0b3IiLCJwdXNoQWRhcHRlciIsInN1YnNjcmliZXJDb25maWciLCJBZGFwdGFibGVDb250cm9sbGVyIiwidmFsaWRhdGVBZGFwdGVyIiwiUHVzaEFkYXB0ZXIiLCJhZGFwdGVyIiwiY2hhbm5lbCIsIlB1c2hRdWV1ZSIsImRlZmF1bHRQdXNoQ2hhbm5lbCIsInN1YnNjcmliZXIiLCJQYXJzZU1lc3NhZ2VRdWV1ZSIsImNyZWF0ZVN1YnNjcmliZXIiLCJzdWJzY3JpYmUiLCJvbiIsIm1lc3NhZ2VTdHIiLCJ3b3JrSXRlbSIsIkpTT04iLCJwYXJzZSIsInJ1biIsImJvZHkiLCJxdWVyeSIsInB1c2hTdGF0dXMiLCJhcHBsaWNhdGlvbklkIiwiVVRDT2Zmc2V0IiwiY29uZmlnIiwiQ29uZmlnIiwiYXV0aCIsIm1hc3RlciIsIndoZXJlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInB1c2hTdGF0dXNIYW5kbGVyIiwib2JqZWN0SWQiLCJyZXN0IiwiZmluZCIsInRoZW4iLCJyZXN1bHRzIiwibGVuZ3RoIiwic2VuZFRvQWRhcHRlciIsImxvY2FsZXMiLCJnZXRMb2NhbGVzRnJvbVB1c2giLCJib2RpZXNQZXJMb2NhbGVzIiwiZ3JvdXBwZWRJbnN0YWxsYXRpb25zIiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJwcm9taXNlcyIsImtleXMiLCJsb2NhbGUiLCJQcm9taXNlIiwiYWxsIiwiaXNQdXNoSW5jcmVtZW50aW5nIiwibG9nZ2VyIiwidmVyYm9zZSIsInNlbmQiLCJ0cmFja1NlbnQiLCJiYWRnZUluc3RhbGxhdGlvbnNNYXAiLCJwYXlsb2FkIiwiZGVlcGNvcHkiLCJkYXRhIiwicGFyc2VJbnQiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC9QdXNoV29ya2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5pbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IG1hc3RlciB9IGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IHsgUHVzaEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9QdXNoL1B1c2hBZGFwdGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IHsgcHVzaFN0YXR1c0hhbmRsZXIgfSBmcm9tICcuLi9TdGF0dXNIYW5kbGVyJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUGFyc2VNZXNzYWdlUXVldWUgfSBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyBQdXNoUXVldWUgfSBmcm9tICcuL1B1c2hRdWV1ZSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZSgobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICBjb25zdCBiYWRnZSA9IGluc3RhbGxhdGlvbi5iYWRnZSArICcnO1xuICAgIG1hcFtiYWRnZV0gPSBtYXBbYmFkZ2VdIHx8IFtdO1xuICAgIG1hcFtiYWRnZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFB1c2hXb3JrZXIge1xuICBzdWJzY3JpYmVyOiA/YW55O1xuICBhZGFwdGVyOiBhbnk7XG4gIGNoYW5uZWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdXNoQWRhcHRlcjogUHVzaEFkYXB0ZXIsIHN1YnNjcmliZXJDb25maWc6IGFueSA9IHt9KSB7XG4gICAgQWRhcHRhYmxlQ29udHJvbGxlci52YWxpZGF0ZUFkYXB0ZXIocHVzaEFkYXB0ZXIsIHRoaXMsIFB1c2hBZGFwdGVyKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSBwdXNoQWRhcHRlcjtcblxuICAgIHRoaXMuY2hhbm5lbCA9IHN1YnNjcmliZXJDb25maWcuY2hhbm5lbCB8fCBQdXNoUXVldWUuZGVmYXVsdFB1c2hDaGFubmVsKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gUGFyc2VNZXNzYWdlUXVldWUuY3JlYXRlU3Vic2NyaWJlcihzdWJzY3JpYmVyQ29uZmlnKTtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgc3Vic2NyaWJlci5zdWJzY3JpYmUodGhpcy5jaGFubmVsKTtcbiAgICAgIHN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgICBjb25zdCB3b3JrSXRlbSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICAgIHRoaXMucnVuKHdvcmtJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1bih7IGJvZHksIHF1ZXJ5LCBwdXNoU3RhdHVzLCBhcHBsaWNhdGlvbklkLCBVVENPZmZzZXQgfTogYW55KTogUHJvbWlzZTwqPiB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBhdXRoID0gbWFzdGVyKGNvbmZpZyk7XG4gICAgY29uc3Qgd2hlcmUgPSB1dGlscy5hcHBseURldmljZVRva2VuRXhpc3RzKHF1ZXJ5LndoZXJlKTtcbiAgICBkZWxldGUgcXVlcnkud2hlcmU7XG4gICAgcHVzaFN0YXR1cyA9IHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZywgcHVzaFN0YXR1cy5vYmplY3RJZCk7XG4gICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHF1ZXJ5KS50aGVuKCh7IHJlc3VsdHMgfSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCByZXN1bHRzLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kVG9BZGFwdGVyKFxuICAgIGJvZHk6IGFueSxcbiAgICBpbnN0YWxsYXRpb25zOiBhbnlbXSxcbiAgICBwdXNoU3RhdHVzOiBhbnksXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgVVRDT2Zmc2V0OiA/YW55XG4gICk6IFByb21pc2U8Kj4ge1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbG9jYWxlcyBpbiB0aGUgcHVzaCBib2R5XG4gICAgY29uc3QgbG9jYWxlcyA9IHV0aWxzLmdldExvY2FsZXNGcm9tUHVzaChib2R5KTtcbiAgICBpZiAobG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBHZXQgYWxsIHRyYW5mb3JtZWQgYm9kaWVzIGZvciBlYWNoIGxvY2FsZVxuICAgICAgY29uc3QgYm9kaWVzUGVyTG9jYWxlcyA9IHV0aWxzLmJvZGllc1BlckxvY2FsZXMoYm9keSwgbG9jYWxlcyk7XG5cbiAgICAgIC8vIEdyb3VwIGluc3RhbGxhdGlvbnMgb24gdGhlIHNwZWNpZmllZCBsb2NhbGVzIChlbiwgZnIsIGRlZmF1bHQgZXRjLi4uKVxuICAgICAgY29uc3QgZ3JvdXBwZWRJbnN0YWxsYXRpb25zID0gdXRpbHMuZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyk7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5rZXlzKGdyb3VwcGVkSW5zdGFsbGF0aW9ucykubWFwKGxvY2FsZSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbGxhdGlvbnMgPSBncm91cHBlZEluc3RhbGxhdGlvbnNbbG9jYWxlXTtcbiAgICAgICAgY29uc3QgYm9keSA9IGJvZGllc1BlckxvY2FsZXNbbG9jYWxlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBTZW5kaW5nIHB1c2ggdG8gJHtpbnN0YWxsYXRpb25zLmxlbmd0aH1gKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuc2VuZChib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLm9iamVjdElkKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICByZXR1cm4gcHVzaFN0YXR1cy50cmFja1NlbnQocmVzdWx0cywgVVRDT2Zmc2V0KS50aGVuKCgpID0+IHJlc3VsdHMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGVjdCB0aGUgYmFkZ2VzIHRvIHJlZHVjZSB0aGUgIyBvZiBjYWxsc1xuICAgIGNvbnN0IGJhZGdlSW5zdGFsbGF0aW9uc01hcCA9IGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKTtcblxuICAgIC8vIE1hcCB0aGUgb24gdGhlIGJhZGdlcyBjb3VudCBhbmQgcmV0dXJuIHRoZSBzZW5kIHJlc3VsdFxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoYmFkZ2VJbnN0YWxsYXRpb25zTWFwKS5tYXAoYmFkZ2UgPT4ge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGRlZXBjb3B5KGJvZHkpO1xuICAgICAgcGF5bG9hZC5kYXRhLmJhZGdlID0gcGFyc2VJbnQoYmFkZ2UpO1xuICAgICAgY29uc3QgaW5zdGFsbGF0aW9ucyA9IGJhZGdlSW5zdGFsbGF0aW9uc01hcFtiYWRnZV07XG4gICAgICByZXR1cm4gdGhpcy5zZW5kVG9BZGFwdGVyKHBheWxvYWQsIGluc3RhbGxhdGlvbnMsIHB1c2hTdGF0dXMsIGNvbmZpZywgVVRDT2Zmc2V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hXb3JrZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQUFBLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLG9CQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFDLHVCQUFB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
package/lib/Push/utils.js CHANGED
@@ -1,42 +1,30 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isPushIncrementing = isPushIncrementing;
7
- exports.getLocalesFromPush = getLocalesFromPush;
8
- exports.transformPushBodyForLocale = transformPushBodyForLocale;
9
- exports.stripLocalesFromBody = stripLocalesFromBody;
6
+ exports.applyDeviceTokenExists = applyDeviceTokenExists;
10
7
  exports.bodiesPerLocales = bodiesPerLocales;
8
+ exports.getLocalesFromPush = getLocalesFromPush;
11
9
  exports.groupByLocaleIdentifier = groupByLocaleIdentifier;
10
+ exports.isPushIncrementing = isPushIncrementing;
11
+ exports.stripLocalesFromBody = stripLocalesFromBody;
12
+ exports.transformPushBodyForLocale = transformPushBodyForLocale;
12
13
  exports.validatePushType = validatePushType;
13
- exports.applyDeviceTokenExists = applyDeviceTokenExists;
14
-
15
- var _node = require('parse/node');
16
-
17
- var _node2 = _interopRequireDefault(_node);
18
-
19
- var _deepcopy = require('deepcopy');
20
-
21
- var _deepcopy2 = _interopRequireDefault(_deepcopy);
22
-
23
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
-
14
+ var _node = _interopRequireDefault(require("parse/node"));
15
+ var _deepcopy = _interopRequireDefault(require("deepcopy"));
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
17
  function isPushIncrementing(body) {
26
18
  if (!body.data || !body.data.badge) {
27
19
  return false;
28
20
  }
29
-
30
21
  const badge = body.data.badge;
31
- if (typeof badge == 'string' && badge.toLowerCase() == "increment") {
22
+ if (typeof badge == 'string' && badge.toLowerCase() == 'increment') {
32
23
  return true;
33
24
  }
34
-
35
- return typeof badge == 'object' && typeof badge.__op == 'string' && badge.__op.toLowerCase() == "increment" && Number(badge.amount);
25
+ return typeof badge == 'object' && typeof badge.__op == 'string' && badge.__op.toLowerCase() == 'increment' && Number(badge.amount);
36
26
  }
37
-
38
27
  const localizableKeys = ['alert', 'title'];
39
-
40
28
  function getLocalesFromPush(body) {
41
29
  const data = body.data;
42
30
  if (!data) {
@@ -51,13 +39,12 @@ function getLocalesFromPush(body) {
51
39
  return memo;
52
40
  }, []))];
53
41
  }
54
-
55
42
  function transformPushBodyForLocale(body, locale) {
56
43
  const data = body.data;
57
44
  if (!data) {
58
45
  return body;
59
46
  }
60
- body = (0, _deepcopy2.default)(body);
47
+ body = (0, _deepcopy.default)(body);
61
48
  localizableKeys.forEach(key => {
62
49
  const localeValue = body.data[`${key}-${locale}`];
63
50
  if (localeValue) {
@@ -66,7 +53,6 @@ function transformPushBodyForLocale(body, locale) {
66
53
  });
67
54
  return stripLocalesFromBody(body);
68
55
  }
69
-
70
56
  function stripLocalesFromBody(body) {
71
57
  if (!body.data) {
72
58
  return body;
@@ -80,7 +66,6 @@ function stripLocalesFromBody(body) {
80
66
  });
81
67
  return body;
82
68
  }
83
-
84
69
  function bodiesPerLocales(body, locales = []) {
85
70
  // Get all tranformed bodies for each locale
86
71
  const result = locales.reduce((memo, locale) => {
@@ -91,7 +76,6 @@ function bodiesPerLocales(body, locales = []) {
91
76
  result.default = stripLocalesFromBody(body);
92
77
  return result;
93
78
  }
94
-
95
79
  function groupByLocaleIdentifier(installations, locales = []) {
96
80
  return installations.reduce((map, installation) => {
97
81
  let added = false;
@@ -109,7 +93,9 @@ function groupByLocaleIdentifier(installations, locales = []) {
109
93
  map.default.push(installation);
110
94
  }
111
95
  return map;
112
- }, { default: [] });
96
+ }, {
97
+ default: []
98
+ });
113
99
  }
114
100
 
115
101
  /**
@@ -128,16 +114,17 @@ function validatePushType(where = {}, validPushTypes = []) {
128
114
  for (var i = 0; i < deviceTypes.length; i++) {
129
115
  var deviceType = deviceTypes[i];
130
116
  if (validPushTypes.indexOf(deviceType) < 0) {
131
- throw new _node2.default.Error(_node2.default.Error.PUSH_MISCONFIGURED, deviceType + ' is not supported push type.');
117
+ throw new _node.default.Error(_node.default.Error.PUSH_MISCONFIGURED, deviceType + ' is not supported push type.');
132
118
  }
133
119
  }
134
120
  }
135
-
136
121
  function applyDeviceTokenExists(where) {
137
- where = (0, _deepcopy2.default)(where);
138
- if (!where.hasOwnProperty('deviceToken')) {
139
- where['deviceToken'] = { '$exists': true };
122
+ where = (0, _deepcopy.default)(where);
123
+ if (!Object.prototype.hasOwnProperty.call(where, 'deviceToken')) {
124
+ where['deviceToken'] = {
125
+ $exists: true
126
+ };
140
127
  }
141
128
  return where;
142
129
  }
143
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QdXNoL3V0aWxzLmpzIl0sIm5hbWVzIjpbImlzUHVzaEluY3JlbWVudGluZyIsImdldExvY2FsZXNGcm9tUHVzaCIsInRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlIiwic3RyaXBMb2NhbGVzRnJvbUJvZHkiLCJib2RpZXNQZXJMb2NhbGVzIiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJ2YWxpZGF0ZVB1c2hUeXBlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsImJvZHkiLCJkYXRhIiwiYmFkZ2UiLCJ0b0xvd2VyQ2FzZSIsIl9fb3AiLCJOdW1iZXIiLCJhbW91bnQiLCJsb2NhbGl6YWJsZUtleXMiLCJTZXQiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwibWVtbyIsImtleSIsImZvckVhY2giLCJsb2NhbGl6YWJsZUtleSIsImluZGV4T2YiLCJwdXNoIiwic2xpY2UiLCJsZW5ndGgiLCJsb2NhbGUiLCJsb2NhbGVWYWx1ZSIsImxvY2FsZXMiLCJyZXN1bHQiLCJkZWZhdWx0IiwiaW5zdGFsbGF0aW9ucyIsIm1hcCIsImluc3RhbGxhdGlvbiIsImFkZGVkIiwibG9jYWxlSWRlbnRpZmllciIsIndoZXJlIiwidmFsaWRQdXNoVHlwZXMiLCJkZXZpY2VUeXBlRmllbGQiLCJkZXZpY2VUeXBlIiwiZGV2aWNlVHlwZXMiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJpIiwiUGFyc2UiLCJFcnJvciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsImhhc093blByb3BlcnR5Il0sIm1hcHBpbmdzIjoiOzs7OztRQUdnQkEsa0IsR0FBQUEsa0I7UUFnQkFDLGtCLEdBQUFBLGtCO1FBZUFDLDBCLEdBQUFBLDBCO1FBZUFDLG9CLEdBQUFBLG9CO1FBWUFDLGdCLEdBQUFBLGdCO1FBV0FDLHVCLEdBQUFBLHVCO1FBeUJBQyxnQixHQUFBQSxnQjtRQWlCQUMsc0IsR0FBQUEsc0I7O0FBbEhoQjs7OztBQUNBOzs7Ozs7QUFFTyxTQUFTUCxrQkFBVCxDQUE0QlEsSUFBNUIsRUFBa0M7QUFDdkMsTUFBSSxDQUFDQSxLQUFLQyxJQUFOLElBQWMsQ0FBQ0QsS0FBS0MsSUFBTCxDQUFVQyxLQUE3QixFQUFvQztBQUNsQyxXQUFPLEtBQVA7QUFDRDs7QUFFRCxRQUFNQSxRQUFRRixLQUFLQyxJQUFMLENBQVVDLEtBQXhCO0FBQ0EsTUFBSSxPQUFPQSxLQUFQLElBQWdCLFFBQWhCLElBQTRCQSxNQUFNQyxXQUFOLE1BQXVCLFdBQXZELEVBQW9FO0FBQ2xFLFdBQU8sSUFBUDtBQUNEOztBQUVELFNBQU8sT0FBT0QsS0FBUCxJQUFnQixRQUFoQixJQUE0QixPQUFPQSxNQUFNRSxJQUFiLElBQXFCLFFBQWpELElBQ0FGLE1BQU1FLElBQU4sQ0FBV0QsV0FBWCxNQUE0QixXQUQ1QixJQUMyQ0UsT0FBT0gsTUFBTUksTUFBYixDQURsRDtBQUVEOztBQUVELE1BQU1DLGtCQUFrQixDQUFDLE9BQUQsRUFBVSxPQUFWLENBQXhCOztBQUVPLFNBQVNkLGtCQUFULENBQTRCTyxJQUE1QixFQUFrQztBQUN2QyxRQUFNQyxPQUFPRCxLQUFLQyxJQUFsQjtBQUNBLE1BQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1QsV0FBTyxFQUFQO0FBQ0Q7QUFDRCxTQUFPLENBQUMsR0FBRyxJQUFJTyxHQUFKLENBQVFDLE9BQU9DLElBQVAsQ0FBWVQsSUFBWixFQUFrQlUsTUFBbEIsQ0FBeUIsQ0FBQ0MsSUFBRCxFQUFPQyxHQUFQLEtBQWU7QUFDekROLG9CQUFnQk8sT0FBaEIsQ0FBeUJDLGNBQUQsSUFBb0I7QUFDMUMsVUFBSUYsSUFBSUcsT0FBSixDQUFhLEdBQUVELGNBQWUsR0FBOUIsS0FBcUMsQ0FBekMsRUFBNEM7QUFDMUNILGFBQUtLLElBQUwsQ0FBVUosSUFBSUssS0FBSixDQUFVSCxlQUFlSSxNQUFmLEdBQXdCLENBQWxDLENBQVY7QUFDRDtBQUNGLEtBSkQ7QUFLQSxXQUFPUCxJQUFQO0FBQ0QsR0FQa0IsRUFPaEIsRUFQZ0IsQ0FBUixDQUFKLENBQVA7QUFRRDs7QUFFTSxTQUFTbEIsMEJBQVQsQ0FBb0NNLElBQXBDLEVBQTBDb0IsTUFBMUMsRUFBa0Q7QUFDdkQsUUFBTW5CLE9BQU9ELEtBQUtDLElBQWxCO0FBQ0EsTUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVCxXQUFPRCxJQUFQO0FBQ0Q7QUFDREEsU0FBTyx3QkFBU0EsSUFBVCxDQUFQO0FBQ0FPLGtCQUFnQk8sT0FBaEIsQ0FBeUJELEdBQUQsSUFBUztBQUMvQixVQUFNUSxjQUFjckIsS0FBS0MsSUFBTCxDQUFXLEdBQUVZLEdBQUksSUFBR08sTUFBTyxFQUEzQixDQUFwQjtBQUNBLFFBQUlDLFdBQUosRUFBaUI7QUFDZnJCLFdBQUtDLElBQUwsQ0FBVVksR0FBVixJQUFpQlEsV0FBakI7QUFDRDtBQUNGLEdBTEQ7QUFNQSxTQUFPMUIscUJBQXFCSyxJQUFyQixDQUFQO0FBQ0Q7O0FBRU0sU0FBU0wsb0JBQVQsQ0FBOEJLLElBQTlCLEVBQW9DO0FBQ3pDLE1BQUksQ0FBQ0EsS0FBS0MsSUFBVixFQUFnQjtBQUFFLFdBQU9ELElBQVA7QUFBYztBQUNoQ1MsU0FBT0MsSUFBUCxDQUFZVixLQUFLQyxJQUFqQixFQUF1QmEsT0FBdkIsQ0FBZ0NELEdBQUQsSUFBUztBQUN0Q04sb0JBQWdCTyxPQUFoQixDQUF5QkMsY0FBRCxJQUFvQjtBQUMxQyxVQUFJRixJQUFJRyxPQUFKLENBQWEsR0FBRUQsY0FBZSxHQUE5QixLQUFxQyxDQUF6QyxFQUE0QztBQUMxQyxlQUFPZixLQUFLQyxJQUFMLENBQVVZLEdBQVYsQ0FBUDtBQUNEO0FBQ0YsS0FKRDtBQUtELEdBTkQ7QUFPQSxTQUFPYixJQUFQO0FBQ0Q7O0FBRU0sU0FBU0osZ0JBQVQsQ0FBMEJJLElBQTFCLEVBQWdDc0IsVUFBVSxFQUExQyxFQUE4QztBQUNuRDtBQUNBLFFBQU1DLFNBQVNELFFBQVFYLE1BQVIsQ0FBZSxDQUFDQyxJQUFELEVBQU9RLE1BQVAsS0FBa0I7QUFDOUNSLFNBQUtRLE1BQUwsSUFBZTFCLDJCQUEyQk0sSUFBM0IsRUFBaUNvQixNQUFqQyxDQUFmO0FBQ0EsV0FBT1IsSUFBUDtBQUNELEdBSGMsRUFHWixFQUhZLENBQWY7QUFJQTtBQUNBVyxTQUFPQyxPQUFQLEdBQWlCN0IscUJBQXFCSyxJQUFyQixDQUFqQjtBQUNBLFNBQU91QixNQUFQO0FBQ0Q7O0FBRU0sU0FBUzFCLHVCQUFULENBQWlDNEIsYUFBakMsRUFBZ0RILFVBQVUsRUFBMUQsRUFBOEQ7QUFDbkUsU0FBT0csY0FBY2QsTUFBZCxDQUFxQixDQUFDZSxHQUFELEVBQU1DLFlBQU4sS0FBdUI7QUFDakQsUUFBSUMsUUFBUSxLQUFaO0FBQ0FOLFlBQVFSLE9BQVIsQ0FBaUJNLE1BQUQsSUFBWTtBQUMxQixVQUFJUSxLQUFKLEVBQVc7QUFDVDtBQUNEO0FBQ0QsVUFBSUQsYUFBYUUsZ0JBQWIsSUFBaUNGLGFBQWFFLGdCQUFiLENBQThCYixPQUE5QixDQUFzQ0ksTUFBdEMsTUFBa0QsQ0FBdkYsRUFBMEY7QUFDeEZRLGdCQUFRLElBQVI7QUFDQUYsWUFBSU4sTUFBSixJQUFjTSxJQUFJTixNQUFKLEtBQWUsRUFBN0I7QUFDQU0sWUFBSU4sTUFBSixFQUFZSCxJQUFaLENBQWlCVSxZQUFqQjtBQUNEO0FBQ0YsS0FURDtBQVVBLFFBQUksQ0FBQ0MsS0FBTCxFQUFZO0FBQ1ZGLFVBQUlGLE9BQUosQ0FBWVAsSUFBWixDQUFpQlUsWUFBakI7QUFDRDtBQUNELFdBQU9ELEdBQVA7QUFDRCxHQWhCTSxFQWdCSixFQUFDRixTQUFTLEVBQVYsRUFoQkksQ0FBUDtBQWlCRDs7QUFFRDs7Ozs7QUFLTyxTQUFTMUIsZ0JBQVQsQ0FBMEJnQyxRQUFRLEVBQWxDLEVBQXNDQyxpQkFBaUIsRUFBdkQsRUFBMkQ7QUFDaEUsTUFBSUMsa0JBQWtCRixNQUFNRyxVQUFOLElBQW9CLEVBQTFDO0FBQ0EsTUFBSUMsY0FBYyxFQUFsQjtBQUNBLE1BQUksT0FBT0YsZUFBUCxLQUEyQixRQUEvQixFQUF5QztBQUN2Q0UsZ0JBQVlqQixJQUFaLENBQWlCZSxlQUFqQjtBQUNELEdBRkQsTUFFTyxJQUFJRyxNQUFNQyxPQUFOLENBQWNKLGdCQUFnQixLQUFoQixDQUFkLENBQUosRUFBMkM7QUFDaERFLGdCQUFZRyxNQUFaLENBQW1CTCxnQkFBZ0IsS0FBaEIsQ0FBbkI7QUFDRDtBQUNELE9BQUssSUFBSU0sSUFBSSxDQUFiLEVBQWdCQSxJQUFJSixZQUFZZixNQUFoQyxFQUF3Q21CLEdBQXhDLEVBQTZDO0FBQzNDLFFBQUlMLGFBQWFDLFlBQVlJLENBQVosQ0FBakI7QUFDQSxRQUFJUCxlQUFlZixPQUFmLENBQXVCaUIsVUFBdkIsSUFBcUMsQ0FBekMsRUFBNEM7QUFDMUMsWUFBTSxJQUFJTSxlQUFNQyxLQUFWLENBQWdCRCxlQUFNQyxLQUFOLENBQVlDLGtCQUE1QixFQUNKUixhQUFhLDhCQURULENBQU47QUFFRDtBQUNGO0FBQ0Y7O0FBRU0sU0FBU2xDLHNCQUFULENBQWdDK0IsS0FBaEMsRUFBdUM7QUFDNUNBLFVBQVEsd0JBQVNBLEtBQVQsQ0FBUjtBQUNBLE1BQUksQ0FBQ0EsTUFBTVksY0FBTixDQUFxQixhQUFyQixDQUFMLEVBQTBDO0FBQ3hDWixVQUFNLGFBQU4sSUFBdUIsRUFBQyxXQUFXLElBQVosRUFBdkI7QUFDRDtBQUNELFNBQU9BLEtBQVA7QUFDRCIsImZpbGUiOiJ1dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSAgICBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkge1xuICBpZiAoIWJvZHkuZGF0YSB8fCAhYm9keS5kYXRhLmJhZGdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYmFkZ2UgPSBib2R5LmRhdGEuYmFkZ2U7XG4gIGlmICh0eXBlb2YgYmFkZ2UgPT0gJ3N0cmluZycgJiYgYmFkZ2UudG9Mb3dlckNhc2UoKSA9PSBcImluY3JlbWVudFwiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIGJhZGdlID09ICdvYmplY3QnICYmIHR5cGVvZiBiYWRnZS5fX29wID09ICdzdHJpbmcnICYmXG4gICAgICAgICBiYWRnZS5fX29wLnRvTG93ZXJDYXNlKCkgPT0gXCJpbmNyZW1lbnRcIiAmJiBOdW1iZXIoYmFkZ2UuYW1vdW50KTtcbn1cblxuY29uc3QgbG9jYWxpemFibGVLZXlzID0gWydhbGVydCcsICd0aXRsZSddO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlc0Zyb21QdXNoKGJvZHkpIHtcbiAgY29uc3QgZGF0YSA9IGJvZHkuZGF0YTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBbLi4ubmV3IFNldChPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgIGxvY2FsaXphYmxlS2V5cy5mb3JFYWNoKChsb2NhbGl6YWJsZUtleSkgPT4ge1xuICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgIG1lbW8ucHVzaChrZXkuc2xpY2UobG9jYWxpemFibGVLZXkubGVuZ3RoICsgMSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtZW1vO1xuICB9LCBbXSkpXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlKGJvZHksIGxvY2FsZSkge1xuICBjb25zdCBkYXRhID0gYm9keS5kYXRhO1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuICBib2R5ID0gZGVlcGNvcHkoYm9keSk7XG4gIGxvY2FsaXphYmxlS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBsb2NhbGVWYWx1ZSA9IGJvZHkuZGF0YVtgJHtrZXl9LSR7bG9jYWxlfWBdO1xuICAgIGlmIChsb2NhbGVWYWx1ZSkge1xuICAgICAgYm9keS5kYXRhW2tleV0gPSBsb2NhbGVWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KSB7XG4gIGlmICghYm9keS5kYXRhKSB7IHJldHVybiBib2R5OyB9XG4gIE9iamVjdC5rZXlzKGJvZHkuZGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2goKGxvY2FsaXphYmxlS2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoYCR7bG9jYWxpemFibGVLZXl9LWApID09IDApIHtcbiAgICAgICAgZGVsZXRlIGJvZHkuZGF0YVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib2RpZXNQZXJMb2NhbGVzKGJvZHksIGxvY2FsZXMgPSBbXSkge1xuICAvLyBHZXQgYWxsIHRyYW5mb3JtZWQgYm9kaWVzIGZvciBlYWNoIGxvY2FsZVxuICBjb25zdCByZXN1bHQgPSBsb2NhbGVzLnJlZHVjZSgobWVtbywgbG9jYWxlKSA9PiB7XG4gICAgbWVtb1tsb2NhbGVdID0gdHJhbnNmb3JtUHVzaEJvZHlGb3JMb2NhbGUoYm9keSwgbG9jYWxlKTtcbiAgICByZXR1cm4gbWVtbztcbiAgfSwge30pO1xuICAvLyBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlLCB3aXRoIHRoZSBzdHJpcHBlZCBib2R5XG4gIHJlc3VsdC5kZWZhdWx0ID0gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5TG9jYWxlSWRlbnRpZmllcihpbnN0YWxsYXRpb25zLCBsb2NhbGVzID0gW10pIHtcbiAgcmV0dXJuIGluc3RhbGxhdGlvbnMucmVkdWNlKChtYXAsIGluc3RhbGxhdGlvbikgPT4ge1xuICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgIGxvY2FsZXMuZm9yRWFjaCgobG9jYWxlKSA9PiB7XG4gICAgICBpZiAoYWRkZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbGxhdGlvbi5sb2NhbGVJZGVudGlmaWVyICYmIGluc3RhbGxhdGlvbi5sb2NhbGVJZGVudGlmaWVyLmluZGV4T2YobG9jYWxlKSA9PT0gMCkge1xuICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgIG1hcFtsb2NhbGVdID0gbWFwW2xvY2FsZV0gfHwgW107XG4gICAgICAgIG1hcFtsb2NhbGVdLnB1c2goaW5zdGFsbGF0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWFkZGVkKSB7XG4gICAgICBtYXAuZGVmYXVsdC5wdXNoKGluc3RhbGxhdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH0sIHtkZWZhdWx0OiBbXX0pO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZVR5cGUgcGFyYW1ldGVyIGluIHF1cnkgY29uZGl0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSBBIHF1ZXJ5IGNvbmRpdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRQdXNoVHlwZXMgQW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcyhzdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1c2hUeXBlKHdoZXJlID0ge30sIHZhbGlkUHVzaFR5cGVzID0gW10pIHtcbiAgdmFyIGRldmljZVR5cGVGaWVsZCA9IHdoZXJlLmRldmljZVR5cGUgfHwge307XG4gIHZhciBkZXZpY2VUeXBlcyA9IFtdO1xuICBpZiAodHlwZW9mIGRldmljZVR5cGVGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXZpY2VUeXBlcy5wdXNoKGRldmljZVR5cGVGaWVsZCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXZpY2VUeXBlRmllbGRbJyRpbiddKSkge1xuICAgIGRldmljZVR5cGVzLmNvbmNhdChkZXZpY2VUeXBlRmllbGRbJyRpbiddKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRldmljZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRldmljZVR5cGUgPSBkZXZpY2VUeXBlc1tpXTtcbiAgICBpZiAodmFsaWRQdXNoVHlwZXMuaW5kZXhPZihkZXZpY2VUeXBlKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgIGRldmljZVR5cGUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgcHVzaCB0eXBlLicpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSkge1xuICB3aGVyZSA9IGRlZXBjb3B5KHdoZXJlKTtcbiAgaWYgKCF3aGVyZS5oYXNPd25Qcm9wZXJ0eSgnZGV2aWNlVG9rZW4nKSkge1xuICAgIHdoZXJlWydkZXZpY2VUb2tlbiddID0geyckZXhpc3RzJzogdHJ1ZX07XG4gIH1cbiAgcmV0dXJuIHdoZXJlO1xufVxuIl19
130
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2RlZXBjb3B5IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaXNQdXNoSW5jcmVtZW50aW5nIiwiYm9keSIsImRhdGEiLCJiYWRnZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsIk51bWJlciIsImFtb3VudCIsImxvY2FsaXphYmxlS2V5cyIsImdldExvY2FsZXNGcm9tUHVzaCIsIlNldCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJtZW1vIiwia2V5IiwiZm9yRWFjaCIsImxvY2FsaXphYmxlS2V5IiwiaW5kZXhPZiIsInB1c2giLCJzbGljZSIsImxlbmd0aCIsInRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlIiwibG9jYWxlIiwiZGVlcGNvcHkiLCJsb2NhbGVWYWx1ZSIsInN0cmlwTG9jYWxlc0Zyb21Cb2R5IiwiYm9kaWVzUGVyTG9jYWxlcyIsImxvY2FsZXMiLCJyZXN1bHQiLCJncm91cEJ5TG9jYWxlSWRlbnRpZmllciIsImluc3RhbGxhdGlvbnMiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJhZGRlZCIsImxvY2FsZUlkZW50aWZpZXIiLCJ2YWxpZGF0ZVB1c2hUeXBlIiwid2hlcmUiLCJ2YWxpZFB1c2hUeXBlcyIsImRldmljZVR5cGVGaWVsZCIsImRldmljZVR5cGUiLCJkZXZpY2VUeXBlcyIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsImkiLCJQYXJzZSIsIkVycm9yIiwiUFVTSF9NSVNDT05GSUdVUkVEIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIiRleGlzdHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgZGVlcGNvcHkgZnJvbSAnZGVlcGNvcHknO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQdXNoSW5jcmVtZW50aW5nKGJvZHkpIHtcbiAgaWYgKCFib2R5LmRhdGEgfHwgIWJvZHkuZGF0YS5iYWRnZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGJhZGdlID0gYm9keS5kYXRhLmJhZGdlO1xuICBpZiAodHlwZW9mIGJhZGdlID09ICdzdHJpbmcnICYmIGJhZGdlLnRvTG93ZXJDYXNlKCkgPT0gJ2luY3JlbWVudCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGJhZGdlID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIGJhZGdlLl9fb3AgPT0gJ3N0cmluZycgJiZcbiAgICBiYWRnZS5fX29wLnRvTG93ZXJDYXNlKCkgPT0gJ2luY3JlbWVudCcgJiZcbiAgICBOdW1iZXIoYmFkZ2UuYW1vdW50KVxuICApO1xufVxuXG5jb25zdCBsb2NhbGl6YWJsZUtleXMgPSBbJ2FsZXJ0JywgJ3RpdGxlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVzRnJvbVB1c2goYm9keSkge1xuICBjb25zdCBkYXRhID0gYm9keS5kYXRhO1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFtcbiAgICAuLi5uZXcgU2V0KFxuICAgICAgT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICAgICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihgJHtsb2NhbGl6YWJsZUtleX0tYCkgPT0gMCkge1xuICAgICAgICAgICAgbWVtby5wdXNoKGtleS5zbGljZShsb2NhbGl6YWJsZUtleS5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgICB9LCBbXSlcbiAgICApLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUHVzaEJvZHlGb3JMb2NhbGUoYm9keSwgbG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG4gIGJvZHkgPSBkZWVwY29weShib2R5KTtcbiAgbG9jYWxpemFibGVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsb2NhbGVWYWx1ZSA9IGJvZHkuZGF0YVtgJHtrZXl9LSR7bG9jYWxlfWBdO1xuICAgIGlmIChsb2NhbGVWYWx1ZSkge1xuICAgICAgYm9keS5kYXRhW2tleV0gPSBsb2NhbGVWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KSB7XG4gIGlmICghYm9keS5kYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgT2JqZWN0LmtleXMoYm9keS5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBib2R5LmRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9kaWVzUGVyTG9jYWxlcyhib2R5LCBsb2NhbGVzID0gW10pIHtcbiAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgY29uc3QgcmVzdWx0ID0gbG9jYWxlcy5yZWR1Y2UoKG1lbW8sIGxvY2FsZSkgPT4ge1xuICAgIG1lbW9bbG9jYWxlXSA9IHRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlKGJvZHksIGxvY2FsZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgLy8gU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSwgd2l0aCB0aGUgc3RyaXBwZWQgYm9keVxuICByZXN1bHQuZGVmYXVsdCA9IHN0cmlwTG9jYWxlc0Zyb21Cb2R5KGJvZHkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyA9IFtdKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZShcbiAgICAobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIgJiYgaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIuaW5kZXhPZihsb2NhbGUpID09PSAwKSB7XG4gICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIG1hcFtsb2NhbGVdID0gbWFwW2xvY2FsZV0gfHwgW107XG4gICAgICAgICAgbWFwW2xvY2FsZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgbWFwLmRlZmF1bHQucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICAgIHsgZGVmYXVsdDogW10gfVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZVR5cGUgcGFyYW1ldGVyIGluIHF1cnkgY29uZGl0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSBBIHF1ZXJ5IGNvbmRpdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRQdXNoVHlwZXMgQW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcyhzdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1c2hUeXBlKHdoZXJlID0ge30sIHZhbGlkUHVzaFR5cGVzID0gW10pIHtcbiAgdmFyIGRldmljZVR5cGVGaWVsZCA9IHdoZXJlLmRldmljZVR5cGUgfHwge307XG4gIHZhciBkZXZpY2VUeXBlcyA9IFtdO1xuICBpZiAodHlwZW9mIGRldmljZVR5cGVGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXZpY2VUeXBlcy5wdXNoKGRldmljZVR5cGVGaWVsZCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXZpY2VUeXBlRmllbGRbJyRpbiddKSkge1xuICAgIGRldmljZVR5cGVzLmNvbmNhdChkZXZpY2VUeXBlRmllbGRbJyRpbiddKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRldmljZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRldmljZVR5cGUgPSBkZXZpY2VUeXBlc1tpXTtcbiAgICBpZiAodmFsaWRQdXNoVHlwZXMuaW5kZXhPZihkZXZpY2VUeXBlKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBkZXZpY2VUeXBlICsgJyBpcyBub3Qgc3VwcG9ydGVkIHB1c2ggdHlwZS4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSkge1xuICB3aGVyZSA9IGRlZXBjb3B5KHdoZXJlKTtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2hlcmUsICdkZXZpY2VUb2tlbicpKSB7XG4gICAgd2hlcmVbJ2RldmljZVRva2VuJ10gPSB7ICRleGlzdHM6IHRydWUgfTtcbiAgfVxuICByZXR1cm4gd2hlcmU7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