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.
- package/LICENSE +167 -25
- package/NOTICE +10 -0
- package/README.md +929 -278
- package/lib/AccountLockout.js +47 -30
- package/lib/Adapters/AdapterLoader.js +21 -6
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
- package/lib/Adapters/Auth/AuthAdapter.js +116 -13
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
- package/lib/Adapters/Auth/OAuth1Client.js +27 -46
- package/lib/Adapters/Auth/apple.js +123 -0
- package/lib/Adapters/Auth/facebook.js +162 -35
- package/lib/Adapters/Auth/gcenter.js +217 -0
- package/lib/Adapters/Auth/github.js +118 -48
- package/lib/Adapters/Auth/google.js +160 -51
- package/lib/Adapters/Auth/gpgames.js +125 -0
- package/lib/Adapters/Auth/httpsRequest.js +6 -7
- package/lib/Adapters/Auth/index.js +170 -62
- package/lib/Adapters/Auth/instagram.js +114 -40
- package/lib/Adapters/Auth/janraincapture.js +52 -23
- package/lib/Adapters/Auth/janrainengage.js +19 -36
- package/lib/Adapters/Auth/keycloak.js +148 -0
- package/lib/Adapters/Auth/ldap.js +167 -0
- package/lib/Adapters/Auth/line.js +125 -0
- package/lib/Adapters/Auth/linkedin.js +111 -55
- package/lib/Adapters/Auth/meetup.js +24 -34
- package/lib/Adapters/Auth/mfa.js +324 -0
- package/lib/Adapters/Auth/microsoft.js +111 -0
- package/lib/Adapters/Auth/oauth2.js +97 -162
- package/lib/Adapters/Auth/phantauth.js +53 -0
- package/lib/Adapters/Auth/qq.js +108 -49
- package/lib/Adapters/Auth/spotify.js +107 -55
- package/lib/Adapters/Auth/twitter.js +188 -48
- package/lib/Adapters/Auth/utils.js +28 -0
- package/lib/Adapters/Auth/vkontakte.js +26 -39
- package/lib/Adapters/Auth/wechat.js +106 -44
- package/lib/Adapters/Auth/weibo.js +132 -58
- package/lib/Adapters/Cache/CacheAdapter.js +13 -8
- package/lib/Adapters/Cache/InMemoryCache.js +3 -13
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
- package/lib/Adapters/Cache/LRUCache.js +13 -27
- package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
- package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
- package/lib/Adapters/Cache/SchemaCache.js +25 -0
- package/lib/Adapters/Email/MailAdapter.js +10 -8
- package/lib/Adapters/Files/FilesAdapter.js +83 -25
- package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
- package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
- package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
- package/lib/Adapters/Logger/WinstonLogger.js +69 -88
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
- package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
- package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
- package/lib/Adapters/Push/PushAdapter.js +14 -7
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
- package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
- package/lib/Auth.js +488 -125
- package/lib/ClientSDK.js +2 -6
- package/lib/Config.js +525 -94
- package/lib/Controllers/AdaptableController.js +5 -25
- package/lib/Controllers/AnalyticsController.js +22 -23
- package/lib/Controllers/CacheController.js +10 -31
- package/lib/Controllers/DatabaseController.js +767 -313
- package/lib/Controllers/FilesController.js +49 -54
- package/lib/Controllers/HooksController.js +80 -84
- package/lib/Controllers/LiveQueryController.js +35 -22
- package/lib/Controllers/LoggerController.js +22 -58
- package/lib/Controllers/ParseGraphQLController.js +293 -0
- package/lib/Controllers/PushController.js +58 -49
- package/lib/Controllers/SchemaController.js +916 -422
- package/lib/Controllers/UserController.js +265 -180
- package/lib/Controllers/index.js +90 -125
- package/lib/Controllers/types.js +1 -1
- package/lib/Deprecator/Deprecations.js +30 -0
- package/lib/Deprecator/Deprecator.js +127 -0
- package/lib/Error.js +48 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
- package/lib/GraphQL/ParseGraphQLServer.js +214 -0
- package/lib/GraphQL/helpers/objectsMutations.js +30 -0
- package/lib/GraphQL/helpers/objectsQueries.js +246 -0
- package/lib/GraphQL/loaders/configMutations.js +87 -0
- package/lib/GraphQL/loaders/configQueries.js +79 -0
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
- package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
- package/lib/GraphQL/loaders/filesMutations.js +107 -0
- package/lib/GraphQL/loaders/functionsMutations.js +78 -0
- package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
- package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
- package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
- package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
- package/lib/GraphQL/loaders/schemaMutations.js +162 -0
- package/lib/GraphQL/loaders/schemaQueries.js +81 -0
- package/lib/GraphQL/loaders/schemaTypes.js +341 -0
- package/lib/GraphQL/loaders/usersMutations.js +433 -0
- package/lib/GraphQL/loaders/usersQueries.js +90 -0
- package/lib/GraphQL/parseGraphQLUtils.js +63 -0
- package/lib/GraphQL/transformers/className.js +14 -0
- package/lib/GraphQL/transformers/constraintType.js +53 -0
- package/lib/GraphQL/transformers/inputType.js +51 -0
- package/lib/GraphQL/transformers/mutation.js +274 -0
- package/lib/GraphQL/transformers/outputType.js +51 -0
- package/lib/GraphQL/transformers/query.js +237 -0
- package/lib/GraphQL/transformers/schemaFields.js +99 -0
- package/lib/KeyPromiseQueue.js +48 -0
- package/lib/LiveQuery/Client.js +25 -33
- package/lib/LiveQuery/Id.js +2 -5
- package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
- package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
- package/lib/LiveQuery/ParsePubSub.js +7 -16
- package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
- package/lib/LiveQuery/QueryTools.js +76 -15
- package/lib/LiveQuery/RequestSchema.js +111 -97
- package/lib/LiveQuery/SessionTokenCache.js +23 -36
- package/lib/LiveQuery/Subscription.js +8 -17
- package/lib/LiveQuery/equalObjects.js +2 -3
- package/lib/Options/Definitions.js +1355 -382
- package/lib/Options/docs.js +301 -62
- package/lib/Options/index.js +11 -1
- package/lib/Options/parsers.js +14 -10
- package/lib/Page.js +44 -0
- package/lib/ParseMessageQueue.js +6 -13
- package/lib/ParseServer.js +474 -235
- package/lib/ParseServerRESTController.js +102 -40
- package/lib/PromiseRouter.js +39 -50
- package/lib/Push/PushQueue.js +24 -30
- package/lib/Push/PushWorker.js +32 -56
- package/lib/Push/utils.js +22 -35
- package/lib/RestQuery.js +361 -139
- package/lib/RestWrite.js +713 -344
- package/lib/Routers/AggregateRouter.js +97 -71
- package/lib/Routers/AnalyticsRouter.js +8 -14
- package/lib/Routers/AudiencesRouter.js +16 -35
- package/lib/Routers/ClassesRouter.js +86 -72
- package/lib/Routers/CloudCodeRouter.js +28 -37
- package/lib/Routers/FeaturesRouter.js +22 -25
- package/lib/Routers/FilesRouter.js +266 -171
- package/lib/Routers/FunctionsRouter.js +87 -103
- package/lib/Routers/GlobalConfigRouter.js +94 -33
- package/lib/Routers/GraphQLRouter.js +41 -0
- package/lib/Routers/HooksRouter.js +43 -47
- package/lib/Routers/IAPValidationRouter.js +57 -70
- package/lib/Routers/InstallationsRouter.js +17 -25
- package/lib/Routers/LogsRouter.js +10 -25
- package/lib/Routers/PagesRouter.js +647 -0
- package/lib/Routers/PublicAPIRouter.js +104 -112
- package/lib/Routers/PurgeRouter.js +19 -29
- package/lib/Routers/PushRouter.js +14 -28
- package/lib/Routers/RolesRouter.js +7 -14
- package/lib/Routers/SchemasRouter.js +63 -42
- package/lib/Routers/SecurityRouter.js +34 -0
- package/lib/Routers/SessionsRouter.js +25 -38
- package/lib/Routers/UsersRouter.js +463 -190
- package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
- package/lib/SchemaMigrations/Migrations.js +30 -0
- package/lib/Security/Check.js +109 -0
- package/lib/Security/CheckGroup.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
- package/lib/Security/CheckGroups/CheckGroups.js +21 -0
- package/lib/Security/CheckRunner.js +213 -0
- package/lib/SharedRest.js +29 -0
- package/lib/StatusHandler.js +96 -93
- package/lib/TestUtils.js +70 -14
- package/lib/Utils.js +468 -0
- package/lib/batch.js +74 -40
- package/lib/cache.js +8 -8
- package/lib/cli/definitions/parse-live-query-server.js +4 -3
- package/lib/cli/definitions/parse-server.js +4 -3
- package/lib/cli/parse-live-query-server.js +9 -17
- package/lib/cli/parse-server.js +49 -47
- package/lib/cli/utils/commander.js +20 -29
- package/lib/cli/utils/runner.js +31 -32
- package/lib/cloud-code/Parse.Cloud.js +711 -36
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/cryptoUtils.js +6 -11
- package/lib/defaults.js +21 -15
- package/lib/deprecated.js +1 -1
- package/lib/index.js +78 -67
- package/lib/logger.js +12 -20
- package/lib/middlewares.js +484 -160
- package/lib/password.js +10 -6
- package/lib/request.js +175 -0
- package/lib/requiredParameter.js +4 -3
- package/lib/rest.js +157 -82
- package/lib/triggers.js +627 -185
- package/lib/vendor/README.md +3 -3
- package/lib/vendor/mongodbUrl.js +224 -137
- package/package.json +135 -57
- package/postinstall.js +38 -50
- package/public_html/invalid_verification_link.html +3 -3
- package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
- package/types/@types/deepcopy/index.d.ts +5 -0
- package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
- package/types/Options/index.d.ts +301 -0
- package/types/ParseServer.d.ts +65 -0
- package/types/eslint.config.mjs +30 -0
- package/types/index.d.ts +21 -0
- package/types/logger.d.ts +2 -0
- package/types/tests.ts +44 -0
- package/types/tsconfig.json +24 -0
- package/CHANGELOG.md +0 -1246
- package/PATENTS +0 -37
- package/bin/dev +0 -37
- package/lib/.DS_Store +0 -0
- package/lib/Adapters/Auth/common.js +0 -2
- package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
- package/lib/Controllers/SchemaCache.js +0 -97
- package/lib/LiveQuery/.DS_Store +0 -0
- package/lib/cli/utils/parsers.js +0 -77
- package/lib/cloud-code/.DS_Store +0 -0
- package/lib/cloud-code/HTTPResponse.js +0 -57
- package/lib/cloud-code/Untitled-1 +0 -123
- package/lib/cloud-code/httpRequest.js +0 -102
- package/lib/cloud-code/team.html +0 -123
- package/lib/graphql/ParseClass.js +0 -234
- package/lib/graphql/Schema.js +0 -197
- package/lib/graphql/index.js +0 -1
- package/lib/graphql/types/ACL.js +0 -35
- package/lib/graphql/types/Date.js +0 -25
- package/lib/graphql/types/File.js +0 -24
- package/lib/graphql/types/GeoPoint.js +0 -35
- package/lib/graphql/types/JSONObject.js +0 -30
- package/lib/graphql/types/NumberInput.js +0 -43
- package/lib/graphql/types/NumberQuery.js +0 -42
- package/lib/graphql/types/Pointer.js +0 -35
- package/lib/graphql/types/QueryConstraint.js +0 -61
- package/lib/graphql/types/StringQuery.js +0 -39
- 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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
|