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
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = exports.TARGET_CLASS_ATT = exports.SCHEMA_STRING_FIELD_INPUT = exports.SCHEMA_STRING_FIELD = exports.SCHEMA_RELATION_FIELD_INPUT = exports.SCHEMA_RELATION_FIELD = exports.SCHEMA_POLYGON_FIELD_INPUT = exports.SCHEMA_POLYGON_FIELD = exports.SCHEMA_POINTER_FIELD_INPUT = exports.SCHEMA_POINTER_FIELD = exports.SCHEMA_OBJECT_FIELD_INPUT = exports.SCHEMA_OBJECT_FIELD = exports.SCHEMA_NUMBER_FIELD_INPUT = exports.SCHEMA_NUMBER_FIELD = exports.SCHEMA_GEO_POINT_FIELD_INPUT = exports.SCHEMA_GEO_POINT_FIELD = exports.SCHEMA_FILE_FIELD_INPUT = exports.SCHEMA_FILE_FIELD = exports.SCHEMA_FIELD_NAME_ATT = exports.SCHEMA_FIELD_INPUT = exports.SCHEMA_FIELDS_INPUT = exports.SCHEMA_DATE_FIELD_INPUT = exports.SCHEMA_DATE_FIELD = exports.SCHEMA_BYTES_FIELD_INPUT = exports.SCHEMA_BYTES_FIELD = exports.SCHEMA_BOOLEAN_FIELD_INPUT = exports.SCHEMA_BOOLEAN_FIELD = exports.SCHEMA_ARRAY_FIELD_INPUT = exports.SCHEMA_ARRAY_FIELD = exports.SCHEMA_ACL_FIELD = exports.CLASS_NAME_ATT = exports.CLASS = void 0;
7
+ var _graphql = require("graphql");
8
+ const SCHEMA_FIELD_NAME_ATT = exports.SCHEMA_FIELD_NAME_ATT = {
9
+ description: 'This is the field name.',
10
+ type: new _graphql.GraphQLNonNull(_graphql.GraphQLString)
11
+ };
12
+ const SCHEMA_FIELD_INPUT = exports.SCHEMA_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
13
+ name: 'SchemaFieldInput',
14
+ description: 'The SchemaFieldInput is used to specify a field of an object class schema.',
15
+ fields: {
16
+ name: SCHEMA_FIELD_NAME_ATT
17
+ }
18
+ });
19
+ const SCHEMA_FIELD = new _graphql.GraphQLInterfaceType({
20
+ name: 'SchemaField',
21
+ description: 'The SchemaField interface type is used as a base type for the different supported fields of an object class schema.',
22
+ fields: {
23
+ name: SCHEMA_FIELD_NAME_ATT
24
+ },
25
+ resolveType: value => ({
26
+ String: SCHEMA_STRING_FIELD.name,
27
+ Number: SCHEMA_NUMBER_FIELD.name,
28
+ Boolean: SCHEMA_BOOLEAN_FIELD.name,
29
+ Array: SCHEMA_ARRAY_FIELD.name,
30
+ Object: SCHEMA_OBJECT_FIELD.name,
31
+ Date: SCHEMA_DATE_FIELD.name,
32
+ File: SCHEMA_FILE_FIELD.name,
33
+ GeoPoint: SCHEMA_GEO_POINT_FIELD.name,
34
+ Polygon: SCHEMA_POLYGON_FIELD.name,
35
+ Bytes: SCHEMA_BYTES_FIELD.name,
36
+ Pointer: SCHEMA_POINTER_FIELD.name,
37
+ Relation: SCHEMA_RELATION_FIELD.name,
38
+ ACL: SCHEMA_ACL_FIELD.name
39
+ })[value.type]
40
+ });
41
+ const SCHEMA_STRING_FIELD_INPUT = exports.SCHEMA_STRING_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
42
+ name: 'SchemaStringFieldInput',
43
+ description: 'The SchemaStringFieldInput is used to specify a field of type string for an object class schema.',
44
+ fields: {
45
+ name: SCHEMA_FIELD_NAME_ATT
46
+ }
47
+ });
48
+ const SCHEMA_STRING_FIELD = exports.SCHEMA_STRING_FIELD = new _graphql.GraphQLObjectType({
49
+ name: 'SchemaStringField',
50
+ description: 'The SchemaStringField is used to return information of a String field.',
51
+ interfaces: [SCHEMA_FIELD],
52
+ fields: {
53
+ name: SCHEMA_FIELD_NAME_ATT
54
+ }
55
+ });
56
+ const SCHEMA_NUMBER_FIELD_INPUT = exports.SCHEMA_NUMBER_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
57
+ name: 'SchemaNumberFieldInput',
58
+ description: 'The SchemaNumberFieldInput is used to specify a field of type number for an object class schema.',
59
+ fields: {
60
+ name: SCHEMA_FIELD_NAME_ATT
61
+ }
62
+ });
63
+ const SCHEMA_NUMBER_FIELD = exports.SCHEMA_NUMBER_FIELD = new _graphql.GraphQLObjectType({
64
+ name: 'SchemaNumberField',
65
+ description: 'The SchemaNumberField is used to return information of a Number field.',
66
+ interfaces: [SCHEMA_FIELD],
67
+ fields: {
68
+ name: SCHEMA_FIELD_NAME_ATT
69
+ }
70
+ });
71
+ const SCHEMA_BOOLEAN_FIELD_INPUT = exports.SCHEMA_BOOLEAN_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
72
+ name: 'SchemaBooleanFieldInput',
73
+ description: 'The SchemaBooleanFieldInput is used to specify a field of type boolean for an object class schema.',
74
+ fields: {
75
+ name: SCHEMA_FIELD_NAME_ATT
76
+ }
77
+ });
78
+ const SCHEMA_BOOLEAN_FIELD = exports.SCHEMA_BOOLEAN_FIELD = new _graphql.GraphQLObjectType({
79
+ name: 'SchemaBooleanField',
80
+ description: 'The SchemaBooleanField is used to return information of a Boolean field.',
81
+ interfaces: [SCHEMA_FIELD],
82
+ fields: {
83
+ name: SCHEMA_FIELD_NAME_ATT
84
+ }
85
+ });
86
+ const SCHEMA_ARRAY_FIELD_INPUT = exports.SCHEMA_ARRAY_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
87
+ name: 'SchemaArrayFieldInput',
88
+ description: 'The SchemaArrayFieldInput is used to specify a field of type array for an object class schema.',
89
+ fields: {
90
+ name: SCHEMA_FIELD_NAME_ATT
91
+ }
92
+ });
93
+ const SCHEMA_ARRAY_FIELD = exports.SCHEMA_ARRAY_FIELD = new _graphql.GraphQLObjectType({
94
+ name: 'SchemaArrayField',
95
+ description: 'The SchemaArrayField is used to return information of an Array field.',
96
+ interfaces: [SCHEMA_FIELD],
97
+ fields: {
98
+ name: SCHEMA_FIELD_NAME_ATT
99
+ }
100
+ });
101
+ const SCHEMA_OBJECT_FIELD_INPUT = exports.SCHEMA_OBJECT_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
102
+ name: 'SchemaObjectFieldInput',
103
+ description: 'The SchemaObjectFieldInput is used to specify a field of type object for an object class schema.',
104
+ fields: {
105
+ name: SCHEMA_FIELD_NAME_ATT
106
+ }
107
+ });
108
+ const SCHEMA_OBJECT_FIELD = exports.SCHEMA_OBJECT_FIELD = new _graphql.GraphQLObjectType({
109
+ name: 'SchemaObjectField',
110
+ description: 'The SchemaObjectField is used to return information of an Object field.',
111
+ interfaces: [SCHEMA_FIELD],
112
+ fields: {
113
+ name: SCHEMA_FIELD_NAME_ATT
114
+ }
115
+ });
116
+ const SCHEMA_DATE_FIELD_INPUT = exports.SCHEMA_DATE_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
117
+ name: 'SchemaDateFieldInput',
118
+ description: 'The SchemaDateFieldInput is used to specify a field of type date for an object class schema.',
119
+ fields: {
120
+ name: SCHEMA_FIELD_NAME_ATT
121
+ }
122
+ });
123
+ const SCHEMA_DATE_FIELD = exports.SCHEMA_DATE_FIELD = new _graphql.GraphQLObjectType({
124
+ name: 'SchemaDateField',
125
+ description: 'The SchemaDateField is used to return information of a Date field.',
126
+ interfaces: [SCHEMA_FIELD],
127
+ fields: {
128
+ name: SCHEMA_FIELD_NAME_ATT
129
+ }
130
+ });
131
+ const SCHEMA_FILE_FIELD_INPUT = exports.SCHEMA_FILE_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
132
+ name: 'SchemaFileFieldInput',
133
+ description: 'The SchemaFileFieldInput is used to specify a field of type file for an object class schema.',
134
+ fields: {
135
+ name: SCHEMA_FIELD_NAME_ATT
136
+ }
137
+ });
138
+ const SCHEMA_FILE_FIELD = exports.SCHEMA_FILE_FIELD = new _graphql.GraphQLObjectType({
139
+ name: 'SchemaFileField',
140
+ description: 'The SchemaFileField is used to return information of a File field.',
141
+ interfaces: [SCHEMA_FIELD],
142
+ fields: {
143
+ name: SCHEMA_FIELD_NAME_ATT
144
+ }
145
+ });
146
+ const SCHEMA_GEO_POINT_FIELD_INPUT = exports.SCHEMA_GEO_POINT_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
147
+ name: 'SchemaGeoPointFieldInput',
148
+ description: 'The SchemaGeoPointFieldInput is used to specify a field of type geo point for an object class schema.',
149
+ fields: {
150
+ name: SCHEMA_FIELD_NAME_ATT
151
+ }
152
+ });
153
+ const SCHEMA_GEO_POINT_FIELD = exports.SCHEMA_GEO_POINT_FIELD = new _graphql.GraphQLObjectType({
154
+ name: 'SchemaGeoPointField',
155
+ description: 'The SchemaGeoPointField is used to return information of a Geo Point field.',
156
+ interfaces: [SCHEMA_FIELD],
157
+ fields: {
158
+ name: SCHEMA_FIELD_NAME_ATT
159
+ }
160
+ });
161
+ const SCHEMA_POLYGON_FIELD_INPUT = exports.SCHEMA_POLYGON_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
162
+ name: 'SchemaPolygonFieldInput',
163
+ description: 'The SchemaPolygonFieldInput is used to specify a field of type polygon for an object class schema.',
164
+ fields: {
165
+ name: SCHEMA_FIELD_NAME_ATT
166
+ }
167
+ });
168
+ const SCHEMA_POLYGON_FIELD = exports.SCHEMA_POLYGON_FIELD = new _graphql.GraphQLObjectType({
169
+ name: 'SchemaPolygonField',
170
+ description: 'The SchemaPolygonField is used to return information of a Polygon field.',
171
+ interfaces: [SCHEMA_FIELD],
172
+ fields: {
173
+ name: SCHEMA_FIELD_NAME_ATT
174
+ }
175
+ });
176
+ const SCHEMA_BYTES_FIELD_INPUT = exports.SCHEMA_BYTES_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
177
+ name: 'SchemaBytesFieldInput',
178
+ description: 'The SchemaBytesFieldInput is used to specify a field of type bytes for an object class schema.',
179
+ fields: {
180
+ name: SCHEMA_FIELD_NAME_ATT
181
+ }
182
+ });
183
+ const SCHEMA_BYTES_FIELD = exports.SCHEMA_BYTES_FIELD = new _graphql.GraphQLObjectType({
184
+ name: 'SchemaBytesField',
185
+ description: 'The SchemaBytesField is used to return information of a Bytes field.',
186
+ interfaces: [SCHEMA_FIELD],
187
+ fields: {
188
+ name: SCHEMA_FIELD_NAME_ATT
189
+ }
190
+ });
191
+ const TARGET_CLASS_ATT = exports.TARGET_CLASS_ATT = {
192
+ description: 'This is the name of the target class for the field.',
193
+ type: new _graphql.GraphQLNonNull(_graphql.GraphQLString)
194
+ };
195
+ const SCHEMA_POINTER_FIELD_INPUT = exports.SCHEMA_POINTER_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
196
+ name: 'PointerFieldInput',
197
+ description: 'The PointerFieldInput is used to specify a field of type pointer for an object class schema.',
198
+ fields: {
199
+ name: SCHEMA_FIELD_NAME_ATT,
200
+ targetClassName: TARGET_CLASS_ATT
201
+ }
202
+ });
203
+ const SCHEMA_POINTER_FIELD = exports.SCHEMA_POINTER_FIELD = new _graphql.GraphQLObjectType({
204
+ name: 'SchemaPointerField',
205
+ description: 'The SchemaPointerField is used to return information of a Pointer field.',
206
+ interfaces: [SCHEMA_FIELD],
207
+ fields: {
208
+ name: SCHEMA_FIELD_NAME_ATT,
209
+ targetClassName: TARGET_CLASS_ATT
210
+ }
211
+ });
212
+ const SCHEMA_RELATION_FIELD_INPUT = exports.SCHEMA_RELATION_FIELD_INPUT = new _graphql.GraphQLInputObjectType({
213
+ name: 'RelationFieldInput',
214
+ description: 'The RelationFieldInput is used to specify a field of type relation for an object class schema.',
215
+ fields: {
216
+ name: SCHEMA_FIELD_NAME_ATT,
217
+ targetClassName: TARGET_CLASS_ATT
218
+ }
219
+ });
220
+ const SCHEMA_RELATION_FIELD = exports.SCHEMA_RELATION_FIELD = new _graphql.GraphQLObjectType({
221
+ name: 'SchemaRelationField',
222
+ description: 'The SchemaRelationField is used to return information of a Relation field.',
223
+ interfaces: [SCHEMA_FIELD],
224
+ fields: {
225
+ name: SCHEMA_FIELD_NAME_ATT,
226
+ targetClassName: TARGET_CLASS_ATT
227
+ }
228
+ });
229
+ const SCHEMA_ACL_FIELD = exports.SCHEMA_ACL_FIELD = new _graphql.GraphQLObjectType({
230
+ name: 'SchemaACLField',
231
+ description: 'The SchemaACLField is used to return information of an ACL field.',
232
+ interfaces: [SCHEMA_FIELD],
233
+ fields: {
234
+ name: SCHEMA_FIELD_NAME_ATT
235
+ }
236
+ });
237
+ const SCHEMA_FIELDS_INPUT = exports.SCHEMA_FIELDS_INPUT = new _graphql.GraphQLInputObjectType({
238
+ name: 'SchemaFieldsInput',
239
+ description: `The CreateClassSchemaInput type is used to specify the schema for a new object class to be created.`,
240
+ fields: {
241
+ addStrings: {
242
+ description: 'These are the String fields to be added to the class schema.',
243
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_STRING_FIELD_INPUT))
244
+ },
245
+ addNumbers: {
246
+ description: 'These are the Number fields to be added to the class schema.',
247
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_NUMBER_FIELD_INPUT))
248
+ },
249
+ addBooleans: {
250
+ description: 'These are the Boolean fields to be added to the class schema.',
251
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_BOOLEAN_FIELD_INPUT))
252
+ },
253
+ addArrays: {
254
+ description: 'These are the Array fields to be added to the class schema.',
255
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_ARRAY_FIELD_INPUT))
256
+ },
257
+ addObjects: {
258
+ description: 'These are the Object fields to be added to the class schema.',
259
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_OBJECT_FIELD_INPUT))
260
+ },
261
+ addDates: {
262
+ description: 'These are the Date fields to be added to the class schema.',
263
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_DATE_FIELD_INPUT))
264
+ },
265
+ addFiles: {
266
+ description: 'These are the File fields to be added to the class schema.',
267
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_FILE_FIELD_INPUT))
268
+ },
269
+ addGeoPoint: {
270
+ description: 'This is the Geo Point field to be added to the class schema. Currently it is supported only one GeoPoint field per Class.',
271
+ type: SCHEMA_GEO_POINT_FIELD_INPUT
272
+ },
273
+ addPolygons: {
274
+ description: 'These are the Polygon fields to be added to the class schema.',
275
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_POLYGON_FIELD_INPUT))
276
+ },
277
+ addBytes: {
278
+ description: 'These are the Bytes fields to be added to the class schema.',
279
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_BYTES_FIELD_INPUT))
280
+ },
281
+ addPointers: {
282
+ description: 'These are the Pointer fields to be added to the class schema.',
283
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_POINTER_FIELD_INPUT))
284
+ },
285
+ addRelations: {
286
+ description: 'These are the Relation fields to be added to the class schema.',
287
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_RELATION_FIELD_INPUT))
288
+ },
289
+ remove: {
290
+ description: 'These are the fields to be removed from the class schema.',
291
+ type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_FIELD_INPUT))
292
+ }
293
+ }
294
+ });
295
+ const CLASS_NAME_ATT = exports.CLASS_NAME_ATT = {
296
+ description: 'This is the name of the object class.',
297
+ type: new _graphql.GraphQLNonNull(_graphql.GraphQLString)
298
+ };
299
+ const CLASS = exports.CLASS = new _graphql.GraphQLObjectType({
300
+ name: 'Class',
301
+ description: `The Class type is used to return the information about an object class.`,
302
+ fields: {
303
+ name: CLASS_NAME_ATT,
304
+ schemaFields: {
305
+ description: "These are the schema's fields of the object class.",
306
+ type: new _graphql.GraphQLNonNull(new _graphql.GraphQLList(new _graphql.GraphQLNonNull(SCHEMA_FIELD)))
307
+ }
308
+ }
309
+ });
310
+ const load = parseGraphQLSchema => {
311
+ parseGraphQLSchema.addGraphQLType(SCHEMA_FIELD_INPUT, true);
312
+ parseGraphQLSchema.addGraphQLType(SCHEMA_STRING_FIELD_INPUT, true);
313
+ parseGraphQLSchema.addGraphQLType(SCHEMA_STRING_FIELD, true);
314
+ parseGraphQLSchema.addGraphQLType(SCHEMA_NUMBER_FIELD_INPUT, true);
315
+ parseGraphQLSchema.addGraphQLType(SCHEMA_NUMBER_FIELD, true);
316
+ parseGraphQLSchema.addGraphQLType(SCHEMA_BOOLEAN_FIELD_INPUT, true);
317
+ parseGraphQLSchema.addGraphQLType(SCHEMA_BOOLEAN_FIELD, true);
318
+ parseGraphQLSchema.addGraphQLType(SCHEMA_ARRAY_FIELD_INPUT, true);
319
+ parseGraphQLSchema.addGraphQLType(SCHEMA_ARRAY_FIELD, true);
320
+ parseGraphQLSchema.addGraphQLType(SCHEMA_OBJECT_FIELD_INPUT, true);
321
+ parseGraphQLSchema.addGraphQLType(SCHEMA_OBJECT_FIELD, true);
322
+ parseGraphQLSchema.addGraphQLType(SCHEMA_DATE_FIELD_INPUT, true);
323
+ parseGraphQLSchema.addGraphQLType(SCHEMA_DATE_FIELD, true);
324
+ parseGraphQLSchema.addGraphQLType(SCHEMA_FILE_FIELD_INPUT, true);
325
+ parseGraphQLSchema.addGraphQLType(SCHEMA_FILE_FIELD, true);
326
+ parseGraphQLSchema.addGraphQLType(SCHEMA_GEO_POINT_FIELD_INPUT, true);
327
+ parseGraphQLSchema.addGraphQLType(SCHEMA_GEO_POINT_FIELD, true);
328
+ parseGraphQLSchema.addGraphQLType(SCHEMA_POLYGON_FIELD_INPUT, true);
329
+ parseGraphQLSchema.addGraphQLType(SCHEMA_POLYGON_FIELD, true);
330
+ parseGraphQLSchema.addGraphQLType(SCHEMA_BYTES_FIELD_INPUT, true);
331
+ parseGraphQLSchema.addGraphQLType(SCHEMA_BYTES_FIELD, true);
332
+ parseGraphQLSchema.addGraphQLType(SCHEMA_POINTER_FIELD_INPUT, true);
333
+ parseGraphQLSchema.addGraphQLType(SCHEMA_POINTER_FIELD, true);
334
+ parseGraphQLSchema.addGraphQLType(SCHEMA_RELATION_FIELD_INPUT, true);
335
+ parseGraphQLSchema.addGraphQLType(SCHEMA_RELATION_FIELD, true);
336
+ parseGraphQLSchema.addGraphQLType(SCHEMA_ACL_FIELD, true);
337
+ parseGraphQLSchema.addGraphQLType(SCHEMA_FIELDS_INPUT, true);
338
+ parseGraphQLSchema.addGraphQLType(CLASS, true);
339
+ };
340
+ exports.load = load;
341
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJTQ0hFTUFfRklFTERfTkFNRV9BVFQiLCJleHBvcnRzIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiR3JhcGhRTE5vbk51bGwiLCJHcmFwaFFMU3RyaW5nIiwiU0NIRU1BX0ZJRUxEX0lOUFVUIiwiR3JhcGhRTElucHV0T2JqZWN0VHlwZSIsIm5hbWUiLCJmaWVsZHMiLCJTQ0hFTUFfRklFTEQiLCJHcmFwaFFMSW50ZXJmYWNlVHlwZSIsInJlc29sdmVUeXBlIiwidmFsdWUiLCJTdHJpbmciLCJTQ0hFTUFfU1RSSU5HX0ZJRUxEIiwiTnVtYmVyIiwiU0NIRU1BX05VTUJFUl9GSUVMRCIsIkJvb2xlYW4iLCJTQ0hFTUFfQk9PTEVBTl9GSUVMRCIsIkFycmF5IiwiU0NIRU1BX0FSUkFZX0ZJRUxEIiwiT2JqZWN0IiwiU0NIRU1BX09CSkVDVF9GSUVMRCIsIkRhdGUiLCJTQ0hFTUFfREFURV9GSUVMRCIsIkZpbGUiLCJTQ0hFTUFfRklMRV9GSUVMRCIsIkdlb1BvaW50IiwiU0NIRU1BX0dFT19QT0lOVF9GSUVMRCIsIlBvbHlnb24iLCJTQ0hFTUFfUE9MWUdPTl9GSUVMRCIsIkJ5dGVzIiwiU0NIRU1BX0JZVEVTX0ZJRUxEIiwiUG9pbnRlciIsIlNDSEVNQV9QT0lOVEVSX0ZJRUxEIiwiUmVsYXRpb24iLCJTQ0hFTUFfUkVMQVRJT05fRklFTEQiLCJBQ0wiLCJTQ0hFTUFfQUNMX0ZJRUxEIiwiU0NIRU1BX1NUUklOR19GSUVMRF9JTlBVVCIsIkdyYXBoUUxPYmplY3RUeXBlIiwiaW50ZXJmYWNlcyIsIlNDSEVNQV9OVU1CRVJfRklFTERfSU5QVVQiLCJTQ0hFTUFfQk9PTEVBTl9GSUVMRF9JTlBVVCIsIlNDSEVNQV9BUlJBWV9GSUVMRF9JTlBVVCIsIlNDSEVNQV9PQkpFQ1RfRklFTERfSU5QVVQiLCJTQ0hFTUFfREFURV9GSUVMRF9JTlBVVCIsIlNDSEVNQV9GSUxFX0ZJRUxEX0lOUFVUIiwiU0NIRU1BX0dFT19QT0lOVF9GSUVMRF9JTlBVVCIsIlNDSEVNQV9QT0xZR09OX0ZJRUxEX0lOUFVUIiwiU0NIRU1BX0JZVEVTX0ZJRUxEX0lOUFVUIiwiVEFSR0VUX0NMQVNTX0FUVCIsIlNDSEVNQV9QT0lOVEVSX0ZJRUxEX0lOUFVUIiwidGFyZ2V0Q2xhc3NOYW1lIiwiU0NIRU1BX1JFTEFUSU9OX0ZJRUxEX0lOUFVUIiwiU0NIRU1BX0ZJRUxEU19JTlBVVCIsImFkZFN0cmluZ3MiLCJHcmFwaFFMTGlzdCIsImFkZE51bWJlcnMiLCJhZGRCb29sZWFucyIsImFkZEFycmF5cyIsImFkZE9iamVjdHMiLCJhZGREYXRlcyIsImFkZEZpbGVzIiwiYWRkR2VvUG9pbnQiLCJhZGRQb2x5Z29ucyIsImFkZEJ5dGVzIiwiYWRkUG9pbnRlcnMiLCJhZGRSZWxhdGlvbnMiLCJyZW1vdmUiLCJDTEFTU19OQU1FX0FUVCIsIkNMQVNTIiwic2NoZW1hRmllbGRzIiwibG9hZCIsInBhcnNlR3JhcGhRTFNjaGVtYSIsImFkZEdyYXBoUUxUeXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9zY2hlbWFUeXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBHcmFwaFFMTm9uTnVsbCxcbiAgR3JhcGhRTFN0cmluZyxcbiAgR3JhcGhRTElucHV0T2JqZWN0VHlwZSxcbiAgR3JhcGhRTExpc3QsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMSW50ZXJmYWNlVHlwZSxcbn0gZnJvbSAnZ3JhcGhxbCc7XG5cbmNvbnN0IFNDSEVNQV9GSUVMRF9OQU1FX0FUVCA9IHtcbiAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBmaWVsZCBuYW1lLicsXG4gIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChHcmFwaFFMU3RyaW5nKSxcbn07XG5cbmNvbnN0IFNDSEVNQV9GSUVMRF9JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYUZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBTY2hlbWFGaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9GSUVMRCA9IG5ldyBHcmFwaFFMSW50ZXJmYWNlVHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFGaWVsZCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdUaGUgU2NoZW1hRmllbGQgaW50ZXJmYWNlIHR5cGUgaXMgdXNlZCBhcyBhIGJhc2UgdHlwZSBmb3IgdGhlIGRpZmZlcmVudCBzdXBwb3J0ZWQgZmllbGRzIG9mIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxuICByZXNvbHZlVHlwZTogdmFsdWUgPT5cbiAgICAoe1xuICAgICAgU3RyaW5nOiBTQ0hFTUFfU1RSSU5HX0ZJRUxELm5hbWUsXG4gICAgICBOdW1iZXI6IFNDSEVNQV9OVU1CRVJfRklFTEQubmFtZSxcbiAgICAgIEJvb2xlYW46IFNDSEVNQV9CT09MRUFOX0ZJRUxELm5hbWUsXG4gICAgICBBcnJheTogU0NIRU1BX0FSUkFZX0ZJRUxELm5hbWUsXG4gICAgICBPYmplY3Q6IFNDSEVNQV9PQkpFQ1RfRklFTEQubmFtZSxcbiAgICAgIERhdGU6IFNDSEVNQV9EQVRFX0ZJRUxELm5hbWUsXG4gICAgICBGaWxlOiBTQ0hFTUFfRklMRV9GSUVMRC5uYW1lLFxuICAgICAgR2VvUG9pbnQ6IFNDSEVNQV9HRU9fUE9JTlRfRklFTEQubmFtZSxcbiAgICAgIFBvbHlnb246IFNDSEVNQV9QT0xZR09OX0ZJRUxELm5hbWUsXG4gICAgICBCeXRlczogU0NIRU1BX0JZVEVTX0ZJRUxELm5hbWUsXG4gICAgICBQb2ludGVyOiBTQ0hFTUFfUE9JTlRFUl9GSUVMRC5uYW1lLFxuICAgICAgUmVsYXRpb246IFNDSEVNQV9SRUxBVElPTl9GSUVMRC5uYW1lLFxuICAgICAgQUNMOiBTQ0hFTUFfQUNMX0ZJRUxELm5hbWUsXG4gICAgfVt2YWx1ZS50eXBlXSksXG59KTtcblxuY29uc3QgU0NIRU1BX1NUUklOR19GSUVMRF9JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYVN0cmluZ0ZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIFNjaGVtYVN0cmluZ0ZpZWxkSW5wdXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgZmllbGQgb2YgdHlwZSBzdHJpbmcgZm9yIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9TVFJJTkdfRklFTEQgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hU3RyaW5nRmllbGQnLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBTY2hlbWFTdHJpbmdGaWVsZCBpcyB1c2VkIHRvIHJldHVybiBpbmZvcm1hdGlvbiBvZiBhIFN0cmluZyBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9OVU1CRVJfRklFTERfSU5QVVQgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFOdW1iZXJGaWVsZElucHV0JyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1RoZSBTY2hlbWFOdW1iZXJGaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIHR5cGUgbnVtYmVyIGZvciBhbiBvYmplY3QgY2xhc3Mgc2NoZW1hLicsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IFNDSEVNQV9GSUVMRF9OQU1FX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfTlVNQkVSX0ZJRUxEID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYU51bWJlckZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hTnVtYmVyRmllbGQgaXMgdXNlZCB0byByZXR1cm4gaW5mb3JtYXRpb24gb2YgYSBOdW1iZXIgZmllbGQuJyxcbiAgaW50ZXJmYWNlczogW1NDSEVNQV9GSUVMRF0sXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IFNDSEVNQV9GSUVMRF9OQU1FX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfQk9PTEVBTl9GSUVMRF9JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYUJvb2xlYW5GaWVsZElucHV0JyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1RoZSBTY2hlbWFCb29sZWFuRmllbGRJbnB1dCBpcyB1c2VkIHRvIHNwZWNpZnkgYSBmaWVsZCBvZiB0eXBlIGJvb2xlYW4gZm9yIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9CT09MRUFOX0ZJRUxEID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYUJvb2xlYW5GaWVsZCcsXG4gIGRlc2NyaXB0aW9uOiAnVGhlIFNjaGVtYUJvb2xlYW5GaWVsZCBpcyB1c2VkIHRvIHJldHVybiBpbmZvcm1hdGlvbiBvZiBhIEJvb2xlYW4gZmllbGQuJyxcbiAgaW50ZXJmYWNlczogW1NDSEVNQV9GSUVMRF0sXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IFNDSEVNQV9GSUVMRF9OQU1FX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfQVJSQVlfRklFTERfSU5QVVQgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFBcnJheUZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIFNjaGVtYUFycmF5RmllbGRJbnB1dCBpcyB1c2VkIHRvIHNwZWNpZnkgYSBmaWVsZCBvZiB0eXBlIGFycmF5IGZvciBhbiBvYmplY3QgY2xhc3Mgc2NoZW1hLicsXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IFNDSEVNQV9GSUVMRF9OQU1FX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfQVJSQVlfRklFTEQgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hQXJyYXlGaWVsZCcsXG4gIGRlc2NyaXB0aW9uOiAnVGhlIFNjaGVtYUFycmF5RmllbGQgaXMgdXNlZCB0byByZXR1cm4gaW5mb3JtYXRpb24gb2YgYW4gQXJyYXkgZmllbGQuJyxcbiAgaW50ZXJmYWNlczogW1NDSEVNQV9GSUVMRF0sXG4gIGZpZWxkczoge1xuICAgIG5hbWU6IFNDSEVNQV9GSUVMRF9OQU1FX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfT0JKRUNUX0ZJRUxEX0lOUFVUID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hT2JqZWN0RmllbGRJbnB1dCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdUaGUgU2NoZW1hT2JqZWN0RmllbGRJbnB1dCBpcyB1c2VkIHRvIHNwZWNpZnkgYSBmaWVsZCBvZiB0eXBlIG9iamVjdCBmb3IgYW4gb2JqZWN0IGNsYXNzIHNjaGVtYS4nLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgU0NIRU1BX09CSkVDVF9GSUVMRCA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFPYmplY3RGaWVsZCcsXG4gIGRlc2NyaXB0aW9uOiAnVGhlIFNjaGVtYU9iamVjdEZpZWxkIGlzIHVzZWQgdG8gcmV0dXJuIGluZm9ybWF0aW9uIG9mIGFuIE9iamVjdCBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9EQVRFX0ZJRUxEX0lOUFVUID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hRGF0ZUZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIFNjaGVtYURhdGVGaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIHR5cGUgZGF0ZSBmb3IgYW4gb2JqZWN0IGNsYXNzIHNjaGVtYS4nLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgU0NIRU1BX0RBVEVfRklFTEQgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hRGF0ZUZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hRGF0ZUZpZWxkIGlzIHVzZWQgdG8gcmV0dXJuIGluZm9ybWF0aW9uIG9mIGEgRGF0ZSBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9GSUxFX0ZJRUxEX0lOUFVUID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hRmlsZUZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIFNjaGVtYUZpbGVGaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIHR5cGUgZmlsZSBmb3IgYW4gb2JqZWN0IGNsYXNzIHNjaGVtYS4nLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgU0NIRU1BX0ZJTEVfRklFTEQgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hRmlsZUZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hRmlsZUZpZWxkIGlzIHVzZWQgdG8gcmV0dXJuIGluZm9ybWF0aW9uIG9mIGEgRmlsZSBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9HRU9fUE9JTlRfRklFTERfSU5QVVQgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFHZW9Qb2ludEZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIFNjaGVtYUdlb1BvaW50RmllbGRJbnB1dCBpcyB1c2VkIHRvIHNwZWNpZnkgYSBmaWVsZCBvZiB0eXBlIGdlbyBwb2ludCBmb3IgYW4gb2JqZWN0IGNsYXNzIHNjaGVtYS4nLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgU0NIRU1BX0dFT19QT0lOVF9GSUVMRCA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFHZW9Qb2ludEZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hR2VvUG9pbnRGaWVsZCBpcyB1c2VkIHRvIHJldHVybiBpbmZvcm1hdGlvbiBvZiBhIEdlbyBQb2ludCBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9QT0xZR09OX0ZJRUxEX0lOUFVUID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hUG9seWdvbkZpZWxkSW5wdXQnLFxuICBkZXNjcmlwdGlvbjpcbiAgICAnVGhlIFNjaGVtYVBvbHlnb25GaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIHR5cGUgcG9seWdvbiBmb3IgYW4gb2JqZWN0IGNsYXNzIHNjaGVtYS4nLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgU0NIRU1BX1BPTFlHT05fRklFTEQgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hUG9seWdvbkZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hUG9seWdvbkZpZWxkIGlzIHVzZWQgdG8gcmV0dXJuIGluZm9ybWF0aW9uIG9mIGEgUG9seWdvbiBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9CWVRFU19GSUVMRF9JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYUJ5dGVzRmllbGRJbnB1dCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdUaGUgU2NoZW1hQnl0ZXNGaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIHR5cGUgYnl0ZXMgZm9yIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9CWVRFU19GSUVMRCA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFCeXRlc0ZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hQnl0ZXNGaWVsZCBpcyB1c2VkIHRvIHJldHVybiBpbmZvcm1hdGlvbiBvZiBhIEJ5dGVzIGZpZWxkLicsXG4gIGludGVyZmFjZXM6IFtTQ0hFTUFfRklFTERdLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgVEFSR0VUX0NMQVNTX0FUVCA9IHtcbiAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgY2xhc3MgZm9yIHRoZSBmaWVsZC4nLFxuICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTFN0cmluZyksXG59O1xuXG5jb25zdCBTQ0hFTUFfUE9JTlRFUl9GSUVMRF9JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1BvaW50ZXJGaWVsZElucHV0JyxcbiAgZGVzY3JpcHRpb246XG4gICAgJ1RoZSBQb2ludGVyRmllbGRJbnB1dCBpcyB1c2VkIHRvIHNwZWNpZnkgYSBmaWVsZCBvZiB0eXBlIHBvaW50ZXIgZm9yIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICAgIHRhcmdldENsYXNzTmFtZTogVEFSR0VUX0NMQVNTX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfUE9JTlRFUl9GSUVMRCA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gIG5hbWU6ICdTY2hlbWFQb2ludGVyRmllbGQnLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBTY2hlbWFQb2ludGVyRmllbGQgaXMgdXNlZCB0byByZXR1cm4gaW5mb3JtYXRpb24gb2YgYSBQb2ludGVyIGZpZWxkLicsXG4gIGludGVyZmFjZXM6IFtTQ0hFTUFfRklFTERdLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gICAgdGFyZ2V0Q2xhc3NOYW1lOiBUQVJHRVRfQ0xBU1NfQVRULFxuICB9LFxufSk7XG5cbmNvbnN0IFNDSEVNQV9SRUxBVElPTl9GSUVMRF9JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1JlbGF0aW9uRmllbGRJbnB1dCcsXG4gIGRlc2NyaXB0aW9uOlxuICAgICdUaGUgUmVsYXRpb25GaWVsZElucHV0IGlzIHVzZWQgdG8gc3BlY2lmeSBhIGZpZWxkIG9mIHR5cGUgcmVsYXRpb24gZm9yIGFuIG9iamVjdCBjbGFzcyBzY2hlbWEuJyxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICAgIHRhcmdldENsYXNzTmFtZTogVEFSR0VUX0NMQVNTX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfUkVMQVRJT05fRklFTEQgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnU2NoZW1hUmVsYXRpb25GaWVsZCcsXG4gIGRlc2NyaXB0aW9uOiAnVGhlIFNjaGVtYVJlbGF0aW9uRmllbGQgaXMgdXNlZCB0byByZXR1cm4gaW5mb3JtYXRpb24gb2YgYSBSZWxhdGlvbiBmaWVsZC4nLFxuICBpbnRlcmZhY2VzOiBbU0NIRU1BX0ZJRUxEXSxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogU0NIRU1BX0ZJRUxEX05BTUVfQVRULFxuICAgIHRhcmdldENsYXNzTmFtZTogVEFSR0VUX0NMQVNTX0FUVCxcbiAgfSxcbn0pO1xuXG5jb25zdCBTQ0hFTUFfQUNMX0ZJRUxEID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYUFDTEZpZWxkJyxcbiAgZGVzY3JpcHRpb246ICdUaGUgU2NoZW1hQUNMRmllbGQgaXMgdXNlZCB0byByZXR1cm4gaW5mb3JtYXRpb24gb2YgYW4gQUNMIGZpZWxkLicsXG4gIGludGVyZmFjZXM6IFtTQ0hFTUFfRklFTERdLFxuICBmaWVsZHM6IHtcbiAgICBuYW1lOiBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIH0sXG59KTtcblxuY29uc3QgU0NIRU1BX0ZJRUxEU19JTlBVVCA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgbmFtZTogJ1NjaGVtYUZpZWxkc0lucHV0JyxcbiAgZGVzY3JpcHRpb246IGBUaGUgQ3JlYXRlQ2xhc3NTY2hlbWFJbnB1dCB0eXBlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgc2NoZW1hIGZvciBhIG5ldyBvYmplY3QgY2xhc3MgdG8gYmUgY3JlYXRlZC5gLFxuICBmaWVsZHM6IHtcbiAgICBhZGRTdHJpbmdzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZXNlIGFyZSB0aGUgU3RyaW5nIGZpZWxkcyB0byBiZSBhZGRlZCB0byB0aGUgY2xhc3Mgc2NoZW1hLicsXG4gICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKFNDSEVNQV9TVFJJTkdfRklFTERfSU5QVVQpKSxcbiAgICB9LFxuICAgIGFkZE51bWJlcnM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBOdW1iZXIgZmllbGRzIHRvIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBzY2hlbWEuJyxcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoU0NIRU1BX05VTUJFUl9GSUVMRF9JTlBVVCkpLFxuICAgIH0sXG4gICAgYWRkQm9vbGVhbnM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBCb29sZWFuIGZpZWxkcyB0byBiZSBhZGRlZCB0byB0aGUgY2xhc3Mgc2NoZW1hLicsXG4gICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKFNDSEVNQV9CT09MRUFOX0ZJRUxEX0lOUFVUKSksXG4gICAgfSxcbiAgICBhZGRBcnJheXM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBBcnJheSBmaWVsZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHNjaGVtYS4nLFxuICAgICAgdHlwZTogbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChTQ0hFTUFfQVJSQVlfRklFTERfSU5QVVQpKSxcbiAgICB9LFxuICAgIGFkZE9iamVjdHM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBPYmplY3QgZmllbGRzIHRvIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBzY2hlbWEuJyxcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoU0NIRU1BX09CSkVDVF9GSUVMRF9JTlBVVCkpLFxuICAgIH0sXG4gICAgYWRkRGF0ZXM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBEYXRlIGZpZWxkcyB0byBiZSBhZGRlZCB0byB0aGUgY2xhc3Mgc2NoZW1hLicsXG4gICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKFNDSEVNQV9EQVRFX0ZJRUxEX0lOUFVUKSksXG4gICAgfSxcbiAgICBhZGRGaWxlczoge1xuICAgICAgZGVzY3JpcHRpb246ICdUaGVzZSBhcmUgdGhlIEZpbGUgZmllbGRzIHRvIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBzY2hlbWEuJyxcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoU0NIRU1BX0ZJTEVfRklFTERfSU5QVVQpKSxcbiAgICB9LFxuICAgIGFkZEdlb1BvaW50OiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1RoaXMgaXMgdGhlIEdlbyBQb2ludCBmaWVsZCB0byBiZSBhZGRlZCB0byB0aGUgY2xhc3Mgc2NoZW1hLiBDdXJyZW50bHkgaXQgaXMgc3VwcG9ydGVkIG9ubHkgb25lIEdlb1BvaW50IGZpZWxkIHBlciBDbGFzcy4nLFxuICAgICAgdHlwZTogU0NIRU1BX0dFT19QT0lOVF9GSUVMRF9JTlBVVCxcbiAgICB9LFxuICAgIGFkZFBvbHlnb25zOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZXNlIGFyZSB0aGUgUG9seWdvbiBmaWVsZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHNjaGVtYS4nLFxuICAgICAgdHlwZTogbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChTQ0hFTUFfUE9MWUdPTl9GSUVMRF9JTlBVVCkpLFxuICAgIH0sXG4gICAgYWRkQnl0ZXM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBCeXRlcyBmaWVsZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHNjaGVtYS4nLFxuICAgICAgdHlwZTogbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChTQ0hFTUFfQllURVNfRklFTERfSU5QVVQpKSxcbiAgICB9LFxuICAgIGFkZFBvaW50ZXJzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZXNlIGFyZSB0aGUgUG9pbnRlciBmaWVsZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHNjaGVtYS4nLFxuICAgICAgdHlwZTogbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChTQ0hFTUFfUE9JTlRFUl9GSUVMRF9JTlBVVCkpLFxuICAgIH0sXG4gICAgYWRkUmVsYXRpb25zOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZXNlIGFyZSB0aGUgUmVsYXRpb24gZmllbGRzIHRvIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBzY2hlbWEuJyxcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoU0NIRU1BX1JFTEFUSU9OX0ZJRUxEX0lOUFVUKSksXG4gICAgfSxcbiAgICByZW1vdmU6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBmaWVsZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjbGFzcyBzY2hlbWEuJyxcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoU0NIRU1BX0ZJRUxEX0lOUFVUKSksXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5jb25zdCBDTEFTU19OQU1FX0FUVCA9IHtcbiAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgY2xhc3MuJyxcbiAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxTdHJpbmcpLFxufTtcblxuY29uc3QgQ0xBU1MgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICBuYW1lOiAnQ2xhc3MnLFxuICBkZXNjcmlwdGlvbjogYFRoZSBDbGFzcyB0eXBlIGlzIHVzZWQgdG8gcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBvYmplY3QgY2xhc3MuYCxcbiAgZmllbGRzOiB7XG4gICAgbmFtZTogQ0xBU1NfTkFNRV9BVFQsXG4gICAgc2NoZW1hRmllbGRzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGVzZSBhcmUgdGhlIHNjaGVtYSdzIGZpZWxkcyBvZiB0aGUgb2JqZWN0IGNsYXNzLlwiLFxuICAgICAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoU0NIRU1BX0ZJRUxEKSkpLFxuICAgIH0sXG4gIH0sXG59KTtcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfRklFTERfSU5QVVQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX1NUUklOR19GSUVMRF9JTlBVVCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfU1RSSU5HX0ZJRUxELCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFNDSEVNQV9OVU1CRVJfRklFTERfSU5QVVQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX05VTUJFUl9GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfQk9PTEVBTl9GSUVMRF9JTlBVVCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfQk9PTEVBTl9GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfQVJSQVlfRklFTERfSU5QVVQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX0FSUkFZX0ZJRUxELCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFNDSEVNQV9PQkpFQ1RfRklFTERfSU5QVVQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX09CSkVDVF9GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfREFURV9GSUVMRF9JTlBVVCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfREFURV9GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfRklMRV9GSUVMRF9JTlBVVCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfRklMRV9GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfR0VPX1BPSU5UX0ZJRUxEX0lOUFVULCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFNDSEVNQV9HRU9fUE9JTlRfRklFTEQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX1BPTFlHT05fRklFTERfSU5QVVQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX1BPTFlHT05fRklFTEQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX0JZVEVTX0ZJRUxEX0lOUFVULCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFNDSEVNQV9CWVRFU19GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfUE9JTlRFUl9GSUVMRF9JTlBVVCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfUE9JTlRFUl9GSUVMRCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShTQ0hFTUFfUkVMQVRJT05fRklFTERfSU5QVVQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX1JFTEFUSU9OX0ZJRUxELCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFNDSEVNQV9BQ0xfRklFTEQsIHRydWUpO1xuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoU0NIRU1BX0ZJRUxEU19JTlBVVCwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShDTEFTUywgdHJ1ZSk7XG59O1xuXG5leHBvcnQge1xuICBTQ0hFTUFfRklFTERfTkFNRV9BVFQsXG4gIFNDSEVNQV9GSUVMRF9JTlBVVCxcbiAgU0NIRU1BX1NUUklOR19GSUVMRF9JTlBVVCxcbiAgU0NIRU1BX1NUUklOR19GSUVMRCxcbiAgU0NIRU1BX05VTUJFUl9GSUVMRF9JTlBVVCxcbiAgU0NIRU1BX05VTUJFUl9GSUVMRCxcbiAgU0NIRU1BX0JPT0xFQU5fRklFTERfSU5QVVQsXG4gIFNDSEVNQV9CT09MRUFOX0ZJRUxELFxuICBTQ0hFTUFfQVJSQVlfRklFTERfSU5QVVQsXG4gIFNDSEVNQV9BUlJBWV9GSUVMRCxcbiAgU0NIRU1BX09CSkVDVF9GSUVMRF9JTlBVVCxcbiAgU0NIRU1BX09CSkVDVF9GSUVMRCxcbiAgU0NIRU1BX0RBVEVfRklFTERfSU5QVVQsXG4gIFNDSEVNQV9EQVRFX0ZJRUxELFxuICBTQ0hFTUFfRklMRV9GSUVMRF9JTlBVVCxcbiAgU0NIRU1BX0ZJTEVfRklFTEQsXG4gIFNDSEVNQV9HRU9fUE9JTlRfRklFTERfSU5QVVQsXG4gIFNDSEVNQV9HRU9fUE9JTlRfRklFTEQsXG4gIFNDSEVNQV9QT0xZR09OX0ZJRUxEX0lOUFVULFxuICBTQ0hFTUFfUE9MWUdPTl9GSUVMRCxcbiAgU0NIRU1BX0JZVEVTX0ZJRUxEX0lOUFVULFxuICBTQ0hFTUFfQllURVNfRklFTEQsXG4gIFRBUkdFVF9DTEFTU19BVFQsXG4gIFNDSEVNQV9QT0lOVEVSX0ZJRUxEX0lOUFVULFxuICBTQ0hFTUFfUE9JTlRFUl9GSUVMRCxcbiAgU0NIRU1BX1JFTEFUSU9OX0ZJRUxEX0lOUFVULFxuICBTQ0hFTUFfUkVMQVRJT05fRklFTEQsXG4gIFNDSEVNQV9BQ0xfRklFTEQsXG4gIFNDSEVNQV9GSUVMRFNfSU5QVVQsXG4gIENMQVNTX05BTUVfQVRULFxuICBDTEFTUyxcbiAgbG9hZCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQVNBLE1BQU1DLHFCQUFxQixHQUFBQyxPQUFBLENBQUFELHFCQUFBLEdBQUc7RUFDNUJFLFdBQVcsRUFBRSx5QkFBeUI7RUFDdENDLElBQUksRUFBRSxJQUFJQyx1QkFBYyxDQUFDQyxzQkFBYTtBQUN4QyxDQUFDO0FBRUQsTUFBTUMsa0JBQWtCLEdBQUFMLE9BQUEsQ0FBQUssa0JBQUEsR0FBRyxJQUFJQywrQkFBc0IsQ0FBQztFQUNwREMsSUFBSSxFQUFFLGtCQUFrQjtFQUN4Qk4sV0FBVyxFQUFFLDRFQUE0RTtFQUN6Rk8sTUFBTSxFQUFFO0lBQ05ELElBQUksRUFBRVI7RUFDUjtBQUNGLENBQUMsQ0FBQztBQUVGLE1BQU1VLFlBQVksR0FB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