@nlabs/reaktor 1.6.3 → 1.8.0
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 +74 -201
- package/README.md +48 -16
- package/lib/actions/analytics.d.ts +10 -0
- package/lib/actions/analytics.js +539 -0
- package/lib/actions/apps.js +2 -2
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +2 -2
- package/lib/actions/conversations.js +2 -2
- package/lib/actions/crm.d.ts +11 -1
- package/lib/actions/crm.js +443 -13
- package/lib/actions/crud.js +2 -2
- package/lib/actions/dynamodb.d.ts +1 -1
- package/lib/actions/dynamodb.js +2 -2
- package/lib/actions/email.d.ts +1 -1
- package/lib/actions/email.js +2 -2
- package/lib/actions/files.js +2 -2
- package/lib/actions/flags.d.ts +6 -0
- package/lib/actions/flags.js +147 -0
- package/lib/actions/groups.js +2 -2
- package/lib/actions/images.d.ts +1 -1
- package/lib/actions/images.js +2 -2
- package/lib/actions/index.d.ts +3 -2
- package/lib/actions/index.js +4 -3
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +2 -2
- package/lib/actions/messages.js +2 -2
- package/lib/actions/notifications.d.ts +1 -1
- package/lib/actions/notifications.js +2 -2
- package/lib/actions/payments.d.ts +3 -3
- package/lib/actions/payments.js +144 -189
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.d.ts +0 -4
- package/lib/actions/posts.js +2 -4
- package/lib/actions/query.js +2 -2
- package/lib/actions/reactions.js +2 -2
- package/lib/actions/rum.js +148 -45
- package/lib/actions/s3.d.ts +1 -1
- package/lib/actions/s3.js +2 -2
- package/lib/actions/search.js +2 -2
- package/lib/actions/sms.js +2 -2
- package/lib/actions/statistics.js +2 -2
- package/lib/actions/subscriptions.js +2 -2
- package/lib/actions/tags.js +2 -2
- package/lib/actions/users.d.ts +4 -1
- package/lib/actions/users.js +85 -11
- package/lib/actions/videos.js +2 -2
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +2 -2
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/index.js +1 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.d.ts +0 -1
- package/lib/adapters/tagAdapter.js +1 -2
- package/lib/adapters/userAdapter.d.ts +0 -1
- package/lib/adapters/userAdapter.js +1 -2
- package/lib/config.js +8 -2
- package/lib/constants/collections.d.ts +17 -1
- package/lib/constants/collections.js +18 -2
- package/lib/handlers/graphqlHandler.d.ts +2 -2
- package/lib/handlers/graphqlHandler.js +2 -19
- package/lib/index.d.ts +4 -2
- package/lib/index.js +4 -3
- package/lib/lambdas/actions/websockets.js +2 -2
- package/lib/lambdas/authorizer.js +2 -2
- package/lib/lambdas/connection.js +2 -2
- package/lib/lambdas/utils/message.js +2 -2
- package/lib/lambdas/utils/websocket.d.ts +1 -1
- package/lib/lambdas/utils/websocket.js +2 -2
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.d.ts +1 -0
- package/lib/mutations/analytics/analytics.js +35 -0
- package/lib/mutations/content/content.js +2 -2
- package/lib/mutations/crm/crm.js +57 -11
- package/lib/mutations/events/events.js +2 -2
- package/lib/mutations/flags/flags.d.ts +1 -0
- package/lib/mutations/flags/flags.js +33 -0
- package/lib/mutations/groups/groups.js +2 -2
- package/lib/mutations/images/images.js +2 -2
- package/lib/mutations/index.d.ts +3 -1
- package/lib/mutations/index.js +13 -3
- package/lib/mutations/locations/locations.js +2 -2
- package/lib/mutations/messages/messages.js +2 -2
- package/lib/mutations/personas/personas.js +2 -2
- package/lib/mutations/posts/posts.js +2 -2
- package/lib/mutations/reactions/reactions.js +2 -2
- package/lib/mutations/rum/rum.js +2 -2
- package/lib/mutations/statistics/statistics.js +2 -2
- package/lib/mutations/subscriptions/subscriptions.js +2 -2
- package/lib/mutations/tags/tags.js +2 -2
- package/lib/mutations/users/users.js +30 -17
- package/lib/mutations/videos/videos.js +2 -2
- package/lib/objectTypes/analytics.d.ts +8 -0
- package/lib/objectTypes/analytics.js +147 -0
- package/lib/objectTypes/app.js +2 -2
- package/lib/objectTypes/bankAccount.js +2 -2
- package/lib/objectTypes/connection.js +2 -2
- package/lib/objectTypes/content.js +2 -2
- package/lib/objectTypes/conversation.js +2 -2
- package/lib/objectTypes/creditCard.js +2 -2
- package/lib/objectTypes/crm.d.ts +5 -0
- package/lib/objectTypes/crm.js +68 -2
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +2 -2
- package/lib/objectTypes/event.js +2 -2
- package/lib/objectTypes/external.js +2 -2
- package/lib/objectTypes/file.js +2 -2
- package/lib/objectTypes/filter.js +2 -2
- package/lib/objectTypes/flag.d.ts +1 -0
- package/lib/objectTypes/flag.js +35 -0
- package/lib/objectTypes/group.js +2 -2
- package/lib/objectTypes/iapSubscription.js +2 -2
- package/lib/objectTypes/image.d.ts +1 -1
- package/lib/objectTypes/image.js +2 -2
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +2 -2
- package/lib/objectTypes/message.js +2 -2
- package/lib/objectTypes/passcode.js +2 -2
- package/lib/objectTypes/persona.js +2 -2
- package/lib/objectTypes/plan.js +2 -2
- package/lib/objectTypes/post.js +2 -2
- package/lib/objectTypes/query.js +2 -2
- package/lib/objectTypes/reaction.js +2 -2
- package/lib/objectTypes/relation.js +2 -2
- package/lib/objectTypes/rum.js +4 -4
- package/lib/objectTypes/search.js +2 -2
- package/lib/objectTypes/statistics.js +2 -2
- package/lib/objectTypes/subscription.js +2 -2
- package/lib/objectTypes/tag.js +2 -2
- package/lib/objectTypes/user.js +10 -2
- package/lib/objectTypes/video.d.ts +1 -1
- package/lib/objectTypes/video.js +2 -2
- package/lib/queries/analytics/analytics.d.ts +1 -0
- package/lib/queries/analytics/analytics.js +41 -0
- package/lib/queries/content/content.js +2 -2
- package/lib/queries/crm/crm.js +52 -13
- package/lib/queries/events/events.js +2 -2
- package/lib/queries/flags/flags.d.ts +1 -0
- package/lib/queries/flags/flags.js +16 -0
- package/lib/queries/groups/groups.js +2 -2
- package/lib/queries/images/images.js +2 -2
- package/lib/queries/index.d.ts +3 -1
- package/lib/queries/index.js +13 -3
- package/lib/queries/locations/locations.js +2 -2
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +2 -2
- package/lib/queries/posts/posts.js +2 -2
- package/lib/queries/query/query.js +2 -2
- package/lib/queries/reactions/reactions.js +2 -2
- package/lib/queries/statistics/statistics.js +2 -2
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +2 -2
- package/lib/queries/users/users.js +2 -2
- package/lib/queries/videos/videos.js +2 -2
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +92 -0
- package/lib/types/analytics.types.js +6 -0
- package/lib/types/apps.types.d.ts +1 -1
- package/lib/types/apps.types.js +2 -2
- package/lib/types/arangodb.types.d.ts +2 -2
- package/lib/types/arangodb.types.js +2 -2
- package/lib/types/auth.types.d.ts +4 -1
- package/lib/types/auth.types.js +2 -2
- package/lib/types/connections.types.d.ts +1 -1
- package/lib/types/connections.types.js +2 -2
- package/lib/types/content.types.d.ts +1 -1
- package/lib/types/content.types.js +2 -2
- package/lib/types/conversations.types.d.ts +1 -1
- package/lib/types/conversations.types.js +2 -2
- package/lib/types/crm.types.d.ts +58 -2
- package/lib/types/crm.types.js +2 -2
- package/lib/types/email.types.d.ts +1 -1
- package/lib/types/email.types.js +2 -2
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.d.ts +1 -1
- package/lib/types/files.types.js +2 -2
- package/lib/types/flags.types.d.ts +28 -0
- package/lib/types/flags.types.js +3 -0
- package/lib/types/google.types.d.ts +1 -1
- package/lib/types/google.types.js +2 -2
- package/lib/types/groups.types.d.ts +1 -1
- package/lib/types/groups.types.js +2 -2
- package/lib/types/images.types.d.ts +1 -1
- package/lib/types/images.types.js +2 -2
- package/lib/types/index.d.ts +3 -1
- package/lib/types/index.js +4 -2
- package/lib/types/locations.types.d.ts +1 -1
- package/lib/types/locations.types.js +2 -2
- package/lib/types/messages.types.d.ts +1 -1
- package/lib/types/messages.types.js +2 -2
- package/lib/types/notifications.types.d.ts +1 -1
- package/lib/types/notifications.types.js +2 -2
- package/lib/types/payments.types.d.ts +4 -1
- package/lib/types/payments.types.js +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +1 -1
- package/lib/types/posts.types.js +2 -2
- package/lib/types/rum.types.d.ts +3 -3
- package/lib/types/rum.types.js +2 -2
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +1 -1
- package/lib/types/tags.types.js +2 -2
- package/lib/types/users.types.d.ts +2 -1
- package/lib/types/users.types.js +2 -2
- package/lib/types/videos.types.d.ts +1 -1
- package/lib/types/videos.types.js +2 -2
- package/lib/types/websockets.types.d.ts +1 -1
- package/lib/types/websockets.types.js +2 -2
- package/lib/upload.js +4 -9
- package/lib/utils/adapterUtils.d.ts +1 -1
- package/lib/utils/adapterUtils.js +2 -2
- package/lib/utils/analyticsUtils.d.ts +1 -1
- package/lib/utils/analyticsUtils.js +2 -2
- package/lib/utils/appContext.d.ts +2 -0
- package/lib/utils/appContext.js +10 -0
- package/lib/utils/aqlHelpers.d.ts +1 -1
- package/lib/utils/aqlHelpers.js +2 -2
- package/lib/utils/arangodbUtils.d.ts +9 -1
- package/lib/utils/arangodbUtils.js +10 -2
- package/lib/utils/authUtils.js +2 -2
- package/lib/utils/awsUtils.js +2 -2
- package/lib/utils/collectionRegistry.d.ts +1 -1
- package/lib/utils/collectionRegistry.js +17 -2
- package/lib/utils/contextUtils.d.ts +2 -2
- package/lib/utils/contextUtils.js +2 -2
- package/lib/utils/dbI18n.example.d.ts +1 -1
- package/lib/utils/dbI18n.example.js +2 -2
- package/lib/utils/dbI18n.js +2 -2
- package/lib/utils/googleTranslate.d.ts +1 -1
- package/lib/utils/googleTranslate.js +2 -2
- package/lib/utils/graphqlUtils.d.ts +2 -0
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.d.ts +1 -1
- package/lib/utils/localeUtils.example.d.ts +1 -1
- package/lib/utils/localeUtils.example.js +2 -2
- package/lib/utils/localeUtils.js +2 -2
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/queryBuilder.d.ts +1 -1
- package/lib/utils/queryBuilder.js +2 -2
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.d.ts +4 -0
- package/lib/utils/sessionUtils.js +2 -2
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +2 -2
- package/lib/utils/translationQueue.d.ts +1 -1
- package/lib/utils/translationQueue.example.d.ts +1 -1
- package/lib/utils/translationQueue.example.js +2 -2
- package/lib/utils/translationQueue.js +2 -2
- package/lib/videoProcessing.js +1 -1
- package/package.json +49 -86
- package/lib/actions/websockets.d.ts +0 -20
- package/lib/actions/websockets.js +0 -164
- package/lib/mocks/nlabs.png +0 -0
package/lib/actions/posts.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { parseNum } from '@nlabs/utils/parsers/numbers';
|
|
5
5
|
import { createHash, parseArangoId, parseChar, parseId, parseString, parseVarChar } from '@nlabs/utils/parsers/strings';
|
|
6
6
|
import { aql } from 'arangojs';
|
|
@@ -41,8 +41,6 @@ const filterBlockedPosts = async (context, posts = [])=>{
|
|
|
41
41
|
}));
|
|
42
42
|
return posts.filter((_post, index)=>visibility[index]);
|
|
43
43
|
};
|
|
44
|
-
// Re-export types for backward compatibility
|
|
45
|
-
export { PrivacyLevel, ReactionType };
|
|
46
44
|
export const parsePostOptions = (options = {})=>{
|
|
47
45
|
const { from = 0, latitude = 0, longitude = 0, startDate = 0, to = 30, type = 'post' } = options;
|
|
48
46
|
return {
|
|
@@ -615,4 +613,4 @@ export const createPostEdge = (context, postDocId, itemDocId, edgeType = EDGES.I
|
|
|
615
613
|
});
|
|
616
614
|
};
|
|
617
615
|
|
|
618
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7cGFyc2VQb3N0LCBwYXJzZVBvc3RQcm9wc30gZnJvbSAnLi4vYWRhcHRlcnMvcG9zdEFkYXB0ZXIuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVMsIFByaXZhY3lMZXZlbCwgUmVhY3Rpb25UeXBlfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGlzdGFuY2VRdWVyeSxcbiAgYnVpbGRNYXRjaGVkUmVhY3Rpb25zQ291bnRRdWVyeSxcbiAgYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnksXG4gIGJ1aWxkUmVhY3Rpb25zUXVlcnksXG4gIGJ1aWxkVGFnc1F1ZXJ5LFxuICBidWlsZFVzZXJJbmZvUXVlcnksXG59IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7aXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtleHRyYWN0VGFncywgZ2V0VGFnTGlzdEJ5TmFtZSwgdXBkYXRlVGFnc0luSXRlbX0gZnJvbSAnLi90YWdzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7UHJpdmFjeUxldmVsVHlwZSwgUmVhY3Rpb25UeXBlVHlwZX0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ZpbGVzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtQb3N0SW5wdXRUeXBlLCBQb3N0T3B0aW9ucywgUG9zdFR5cGV9IGZyb20gJy4uL3R5cGVzL3Bvc3RzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtUYWdUeXBlfSBmcm9tICcuLi90eXBlcy90YWdzLnR5cGVzLmpzJztcblxuY29uc3QgTUFYX0NPTlRFTlRfTEVOR1RIID0gMTAwMDAwO1xuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdwb3N0cyc7XG5cbmNvbnN0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBleHBsaWNpdFBlcnNvbmFJZCA9ICcnXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwcm92aWRlZFBlcnNvbmFJZCA9IHBhcnNlSWQoZXhwbGljaXRQZXJzb25hSWQpO1xuXG4gIGlmKHByb3ZpZGVkUGVyc29uYUlkKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVkUGVyc29uYUlkO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZFBhcnNlZCA9IHBhcnNlSWQoc2Vzc2lvblVzZXJJZCB8fCAnJyk7XG4gIGlmKCFzZXNzaW9uVXNlcklkUGFyc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRJdGVtQnk8e3BlcnNvbmFJZD86IHN0cmluZ30+KGNvbnRleHQsIENPTExFQ1RJT05TLlVTRVJTLCB7X2tleTogc2Vzc2lvblVzZXJJZFBhcnNlZH0pO1xuICByZXR1cm4gcGFyc2VJZCh1c2VyPy5wZXJzb25hSWQgfHwgJycpIHx8IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGZpbHRlckJsb2NrZWRQb3N0cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdHM6IFBvc3RUeXBlW10gPSBbXVxuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChwb3N0cy5tYXAoYXN5bmMgKHBvc3QpID0+IHtcbiAgICBjb25zdCBwZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwb3N0Py5wZXJzb25hSWQgfHwgJycpKTtcblxuICAgIGlmKCFwZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIHBvc3RzLmZpbHRlcigoX3Bvc3QsIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB7UHJpdmFjeUxldmVsLCBSZWFjdGlvblR5cGV9O1xuZXhwb3J0IHR5cGUge1ByaXZhY3lMZXZlbFR5cGUsIFJlYWN0aW9uVHlwZVR5cGV9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0T3B0aW9ucyA9IChvcHRpb25zOiBQb3N0T3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICBsYXRpdHVkZSA9IDAsXG4gICAgbG9uZ2l0dWRlID0gMCxcbiAgICBzdGFydERhdGUgPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdwb3N0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMzIpLFxuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHN0YXJ0RGF0ZTogcGFyc2VOdW0oc3RhcnREYXRlLCAzMiksXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuY29uc3QgRVZFTlRfUE9TVF9UWVBFID0gJ2V2ZW50JztcbmNvbnN0IFBPU1RfUkVBQ1RJT05fSVRFTV9UWVBFID0gQ09MTEVDVElPTlMuUE9TVFM7XG5jb25zdCBPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEUgPSBgcC50eXBlID09IFwiJHtFVkVOVF9QT1NUX1RZUEV9XCIgPyBcIiR7RVZFTlRfUE9TVF9UWVBFfVwiIDogXCIke1BPU1RfUkVBQ1RJT05fSVRFTV9UWVBFfVwiYDtcblxuY29uc3QgZ2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlID0gKHJlYWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IChcbiAgcmVhY3Rpb25OYW1lID09PSBSZWFjdGlvblR5cGUuUElOXG4gICAgPyAnaXNTYXZlZCdcbiAgICA6IGBoYXMke3JlYWN0aW9uTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3JlYWN0aW9uTmFtZS5zbGljZSgxKX1gXG4pO1xuXG4vLyBNYXAgb2Ygb3B0aW9uYWwgZmllbGQgaGFuZGxlcnNcbnR5cGUgRmllbGRIYW5kbGVyID0gKGFjdG9yRG9jSWQ6IHN0cmluZykgPT4ge3F1ZXJ5OiBzdHJpbmc7IG9iamVjdDogc3RyaW5nfTtcblxuY29uc3QgT1BUSU9OQUxfRklFTERfSEFORExFUlM6IFJlY29yZDxzdHJpbmcsIEZpZWxkSGFuZGxlcj4gPSB7XG4gIGhhc1JzdnA6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5SU1ZQKX0gPSBUT19CT09MKEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5SU1ZQfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KSAmJiByLl9mcm9tID09IFwiJHthY3RvckRvY0lkfVwiXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKSlgLFxuICAgIG9iamVjdDogJ2hhc1JzdnA6aGFzUnN2cCdcbiAgfSksXG4gIGlzU2F2ZWQ6IChhY3RvckRvY0lkKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUICR7Z2V0T3B0aW9uYWxGaWVsZFVzZXJSZWFjdGlvblZhcmlhYmxlKFJlYWN0aW9uVHlwZS5QSU4pfSA9IFRPX0JPT0woRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlBJTn1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSkgJiYgci5fZnJvbSA9PSBcIiR7YWN0b3JEb2NJZH1cIlxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgICkpYCxcbiAgICBvYmplY3Q6ICdpc1NhdmVkOmlzU2F2ZWQnXG4gIH0pLFxuICByZWFjdGlvbnM6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSlcbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncmVhY3Rpb25zOnJlYWN0aW9ucydcbiAgfSksXG4gIHJzdnBDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5SU1ZQfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlJTVlB9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAncnN2cENvdW50OnJzdnBDb3VudCdcbiAgfSksXG4gIHZpZXdDb3VudDogKCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke1JlYWN0aW9uVHlwZS5WSUVXfUNvdW50ID0gRklSU1QoXG4gICAgICBGT1IgaXRlbSwgciBJTiBJTkJPVU5EIHAuX2lkICR7RURHRVMuSEFTX1JFQUNUSU9OfVxuICAgICAgRklMVEVSIHIubmFtZSA9PSBcIiR7UmVhY3Rpb25UeXBlLlZJRVd9XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gICAgKWAsXG4gICAgb2JqZWN0OiAndmlld0NvdW50OnZpZXdDb3VudCdcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWxGaWVsZHMgPSAoXG4gIGZpZWxkczogc3RyaW5nW10gPSBbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgPSAnJyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJ1xuKSA9PlxuICAoZmllbGRzIHx8IFtdKS5yZWR1Y2UoKHNlbGVjdHM6IHtvYmplY3RzOiBzdHJpbmdbXSwgcXVlcmllczogc3RyaW5nW119LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IE9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTW2ZpZWxkXTtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgY29uc3QgYWN0b3JEb2NJZCA9IHBlcnNvbmFJZFxuICAgICAgICA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BhcnNlSWQocGVyc29uYUlkKX1gXG4gICAgICAgIDogYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gICAgICBjb25zdCB7cXVlcnksIG9iamVjdH0gPSBoYW5kbGVyKGFjdG9yRG9jSWQpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2gob2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdHM7XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGJ1aWxkIHByaXZhY3kgZmlsdGVyIHF1ZXJ5XG5jb25zdCBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSA9IChcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogc3RyaW5nLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgc2VsZWN0UXVlcmllczogc3RyaW5nW10sXG4gIHNlbGVjdE9iamVjdHM6IHN0cmluZ1tdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgIEZJTFRFUiBncm91cC5fa2V5ID09IHAuZ3JvdXBJZFxuICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9IGVsc2UgaWYgKHByaXZhY3kgPT09IFByaXZhY3lMZXZlbC5QVUJMSUMpIHtcbiAgICByZXR1cm4gYExFVCBwID0gRE9DVU1FTlQoXCIke3Bvc3REb2NJZH1cIilcbiAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdEJ5SWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcbiAgY29uc3Qge3R5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfSAmJiBwLnR5cGUgPT0gJHt0eXBlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwb3N0OiBQb3N0VHlwZSA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbiAgICBjb25zdCB7XG4gICAgICBfaWQ6IHBvc3REb2NJZCxcbiAgICAgIHBlcnNvbmFJZCxcbiAgICAgIHVzZXJJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICBpZihwZXJzb25hSWQgJiYgYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIFVzZXIgb3ducyB0aGUgcG9zdCwgcmV0dXJuIGRpcmVjdGx5XG4gICAgaWYgKHVzZXJJZCA9PT0gc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gcG9zdDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBwcml2YWN5IGFuZCBidWlsZCBhcHByb3ByaWF0ZSBxdWVyeVxuICAgIGNvbnN0IHByaXZhY3lBcWxRcnkgPSBidWlsZFByaXZhY3lGaWx0ZXJRdWVyeShcbiAgICAgIHBvc3REb2NJZCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICBwcml2YWN5LFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgc2VsZWN0UXVlcmllcyxcbiAgICAgIHNlbGVjdE9iamVjdHNcbiAgICApO1xuXG4gICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBkYXRhYmFzZS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUFyZWEgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxhdGl0dWRlOiBudW1iZXIsXG4gIGxvbmdpdHVkZTogbnVtYmVyLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeUFyZWEnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiBwLnR5cGUgPT0gJHt0eXBlfSAmJiBwLnByaXZhY3kgPT0gJHtQcml2YWN5TGV2ZWwuUFVCTElDfSAmJiBwLnBhcmVudElkID09IG51bGxcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgU09SVCBkaXN0YW5jZSwgcC5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeUxhdGVzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxQb3N0VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICB7dHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zID0gSlNPTi5zdHJpbmdpZnkocmVhY3Rpb25zLm1hcCgocmVhY3Rpb24pID0+IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpLnRvTG93ZXJDYXNlKCkpKTtcbiAgY29uc3Qgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFtgcC50eXBlID09IFwiJHt0eXBlfVwiYCwgYHAucHJpdmFjeSA9PSBcIiR7UHJpdmFjeUxldmVsLlBVQkxJQ31cImBdO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZSA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gcGFyc2VOdW0obG9uZ2l0dWRlKTtcbiAgY29uc3QgZm9ybWF0U3RhcnREYXRlID0gcGFyc2VOdW0oc3RhcnREYXRlKTtcblxuICBpZiAoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYgKHJlYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFJlYWN0aW9ucyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkocmVhY3Rpb25zKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zOm1hdGNoZWRSZWFjdGlvbnMnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcCwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTil9XG4gICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwICR7bGl0ZXJhbChFREdFUy5JU19UQUdHRUQpfVxuICAgICAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSkgPiAwICYmIFBPU0lUSU9OKCR7bGl0ZXJhbChmb3JtYXRSZWFjdGlvbnMpfSwgcmVhY3Rpb24ubmFtZSlcbiAgICAgICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocmVhY3Rpb24sIHttYXRjaGVkfSlcbiAgICAgIClcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VGFncyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3BlcnNvbmFJZCwgdXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xhdGl0dWRlLCBsaW1pdCwgbG9uZ2l0dWRlLCBzdGFydERhdGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBmb3JtYXRUYWdOYW1lczogc3RyaW5nW10gPSB0YWdOYW1lcy5tYXAoKHRhZ05hbWUpID0+IHBhcnNlQ2hhcih0YWdOYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIC8vIFVzZSBidWlsZFRhZ3NRdWVyeSBoZWxwZXIgd2l0aCBtYXRjaGVkIHRhZ3NcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkVGFnc1F1ZXJ5KCdwJywgZm9ybWF0VGFnTmFtZXMpKTtcblxuICBpZiAodGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRUYWdzIERFU0MnKTtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkoZm9ybWF0VGFnTmFtZXMpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIGlmIChmb3JtYXRTdGFydERhdGUpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAuc3RhcnREYXRlID49ICR7Zm9ybWF0U3RhcnREYXRlfWApO1xuICAgIHNvcnRCeS5wdXNoKCdwLnN0YXJ0RGF0ZSBBU0MnKTtcbiAgfSBlbHNlIHtcbiAgICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIH1cblxuICBzZWxlY3RPYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAgSU4gJHtsaXRlcmFsKENPTExFQ1RJT05TLlBPU1RTKX1cbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVycy5qb2luKCcgJiYgJykpfVxuICAgICAgU09SVCAke2xpdGVyYWwoc29ydEJ5LmpvaW4oJywgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3AnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0c0J5VXNlcic7XG4gIGNvbnN0IHtmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFBvc3RUeXBlPihcbiAgICBjb250ZXh0LFxuICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgIHt1c2VySWQ6IGZvcm1hdFVzZXJJZCwgdHlwZSwgcHJpdmFjeTogUHJpdmFjeUxldmVsLlBVQkxJQywgcGFyZW50SWQ6IG51bGx9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbTogbGltaXQuc3RhcnQsIHRvOiBsaW1pdC5zdGFydCArIGxpbWl0Lm51bX0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBzZWxlY3RRdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICAgIH1cbiAgKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlQYXJlbnQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdExpc3RCeVBhcmVudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChwb3N0SWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHBvc3Q6IFBvc3RUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9rZXksXG4gICAgICAgIGdyb3VwSWQsXG4gICAgICAgIHByaXZhY3kgPSBQcml2YWN5TGV2ZWwuREVGQVVMVFxuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuR1JPVVApIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBGT1IgcCBJTiAke0NPTExFQ1RJT05TLlBPU1RTfVxuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIlxuICAgICAgICAgICR7YnVpbGRVc2VySW5mb1F1ZXJ5KCdwLnVzZXJJZCcpfVxuICAgICAgICAgICR7YnVpbGRSZWFjdGlvbnNRdWVyeSgncCcpfVxuICAgICAgICAgIEZPUiBncm91cCBJTiAke0NPTExFQ1RJT05TLkdST1VQU31cbiAgICAgICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgICAgICBGT1IgdSwgZSBJTiBPVVRCT1VORCBncm91cC5faWQgJHtFREdFUy5IQVNfQ09OTkVDVElPTn1cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfSBlbHNlIGlmIChwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuUFVCTElDKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShwcml2YWN5QXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgICAgICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmVwYXJlIHBvc3QgZGF0YSBmb3IgaW5zZXJ0aW9uXG5jb25zdCBwcmVwYXJlUG9zdERhdGEgPSAoXG4gIGlucHV0OiBQb3N0SW5wdXRUeXBlLFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgcGVyc29uYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBvc3RJZDogc3RyaW5nLFxuICBub3c6IG51bWJlclxuKTogUG9zdFR5cGUgPT4gKHtcbiAgX2lkOiBgJHtDT0xMRUNUSU9OUy5QT1NUU30vJHtwb3N0SWR9YCxcbiAgX2tleTogcG9zdElkLFxuICBhZGRlZDogbm93LFxuICBjb250ZW50OiBwYXJzZVN0cmluZyhpbnB1dC5jb250ZW50IHx8ICcnLCBNQVhfQ09OVEVOVF9MRU5HVEgpIHx8ICcnLFxuICBlbmREYXRlOiBpbnB1dC5lbmREYXRlID8gcGFyc2VOdW0oaW5wdXQuZW5kRGF0ZSwgMTMpIDogdW5kZWZpbmVkLFxuICBncm91cElkOiBpbnB1dC5ncm91cElkID8gcGFyc2VJZChpbnB1dC5ncm91cElkKSA6IHVuZGVmaW5lZCxcbiAgbGF0aXR1ZGU6IGlucHV0LmxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC5sYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gIGxvY2F0aW9uOiBpbnB1dC5sb2NhdGlvbiA/IHBhcnNlU3RyaW5nKGlucHV0LmxvY2F0aW9uLCAxNjApIDogdW5kZWZpbmVkLFxuICBsb25naXR1ZGU6IGlucHV0LmxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubG9uZ2l0dWRlKSA6IHVuZGVmaW5lZCxcbiAgbWF4R3Vlc3RzUGVyUGVyc29uYTogaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubWF4R3Vlc3RzUGVyUGVyc29uYSwgMykgOiB1bmRlZmluZWQsXG4gIG1vZGlmaWVkOiBub3csXG4gIG5hbWU6IHBhcnNlU3RyaW5nKGlucHV0Lm5hbWUgfHwgJycsIDE2MCksXG4gIHBhcmVudElkOiBpbnB1dC5wYXJlbnRJZCA/IHBhcnNlSWQoaW5wdXQucGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICBwcml2YWN5OiBwYXJzZVZhckNoYXIoaW5wdXQucHJpdmFjeSB8fCBQcml2YWN5TGV2ZWwuUFVCTElDLCAxNiksXG4gIHByb3BzOiBwYXJzZVBvc3RQcm9wcyhpbnB1dC5wcm9wcyksXG4gIHBlcnNvbmFJZCxcbiAgc3RhcnREYXRlOiBpbnB1dC5zdGFydERhdGUgPyBwYXJzZU51bShpbnB1dC5zdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgdGlja2V0Q29zdENlbnRzOiBpbnB1dC50aWNrZXRDb3N0Q2VudHMgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LnRpY2tldENvc3RDZW50cywgMTIpIDogdW5kZWZpbmVkLFxuICB0eXBlOiBwYXJzZUNoYXIoaW5wdXQudHlwZSB8fCAnZGVmYXVsdCcsIDMyKSxcbiAgdXNlcklkOiBzZXNzaW9uSWRcbn0pO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHRhZ3MgZm9yIHBvc3RzXG5jb25zdCBoYW5kbGVQb3N0VGFncyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdGFnczogVGFnVHlwZVtdLFxuICBzZXNzaW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgY29udGVudFRhZ05hbWVzID0gYXdhaXQgZXh0cmFjdFRhZ3MoY29udGVudCB8fCAnJyk7XG5cbiAgaWYgKHRhZ3MubGVuZ3RoIHx8IGNvbnRlbnRUYWdOYW1lcy5sZW5ndGgpIHtcbiAgICBjb25zdCB1c2VyVGFncyA9IChhd2FpdCBnZXRUYWdMaXN0QnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUgfHwgJycpKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiBzZXNzaW9uSWR9KSk7XG4gICAgY29uc3QgY29udGVudFRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMgfHwgW10pKVxuICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6ICdleHRyYWN0J30pKTtcblxuICAgIHJldHVybiBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgY29udGV4dCxcbiAgICAgIHtcbiAgICAgICAgaXRlbURvY0lkOiBwb3N0RG9jSWQsXG4gICAgICAgIHRhZ3M6IFsuLi5jb250ZW50VGFncywgLi4udXNlclRhZ3NdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udGVudCA9ICcnLFxuICAgIGVuZERhdGUsXG4gICAgZ3JvdXBJZCA9ICcnLFxuICAgIGxvY2F0aW9uLFxuICAgIGxhdGl0dWRlLFxuICAgIGxvbmdpdHVkZSxcbiAgICBuYW1lID0gJycsXG4gICAgcGFyZW50SWQgPSAnJyxcbiAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLlBVQkxJQyxcbiAgICBwcm9wcyA9IHt9LFxuICAgIG1heEd1ZXN0c1BlclBlcnNvbmEsXG4gICAgcGVyc29uYUlkID0gJycsXG4gICAgdGFncyA9IFtdLFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0aWNrZXRDb3N0Q2VudHMsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9OiBQb3N0SW5wdXRUeXBlXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwb3N0SWQgPSBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCByZXNvbHZlZFBlcnNvbmFJZCA9IGF3YWl0IHJlc29sdmVQZXJzb25hSWRGb3JQb3N0KGNvbnRleHQsIHBlcnNvbmFJZCk7XG5cbiAgY29uc3QgaW5zZXJ0OiBQb3N0VHlwZSA9IHByZXBhcmVQb3N0RGF0YShcbiAgICB7Y29udGVudCwgZW5kRGF0ZSwgZ3JvdXBJZCwgbG9jYXRpb24sIGxhdGl0dWRlLCBsb25naXR1ZGUsIG1heEd1ZXN0c1BlclBlcnNvbmEsIG5hbWUsIHBhcmVudElkLCBwcml2YWN5LCBwcm9wcywgcGVyc29uYUlkOiByZXNvbHZlZFBlcnNvbmFJZCwgc3RhcnREYXRlLCB0YWdzLCB0aWNrZXRDb3N0Q2VudHMsIHR5cGV9LFxuICAgIHNlc3Npb25JZCxcbiAgICByZXNvbHZlZFBlcnNvbmFJZCxcbiAgICBwb3N0SWQsXG4gICAgRGF0ZS5ub3coKVxuICApO1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgYWRkSXRlbSBmdW5jdGlvblxuICAgIGNvbnN0IHNhdmVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCBhZGRJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgaW5zZXJ0KTtcblxuICAgIGNvbnN0IHtfaWQ6IHBvc3REb2NJZH0gPSBzYXZlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCBwb3N0RG9jSWQsIGluc2VydC5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2F2ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2F2ZWRQb3N0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQb3N0ID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3Q6IFBvc3RJbnB1dFR5cGUpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVQb3N0JztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBwYXJzZWRQb3N0ID0gcGFyc2VQb3N0KHBvc3QpO1xuICBjb25zdCB7XG4gICAgcG9zdElkLFxuICAgIHRhZ3MgPSBbXVxuICB9ID0gcGFyc2VkUG9zdDtcblxuICBpZiAoIXBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZTogUG9zdFR5cGUgPSB7XG4gICAgLi4ucGFyc2VkUG9zdFxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIENSVUQgdXBkYXRlSXRlbSB3aXRoIG93bmVyc2hpcCBjaGVja1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IHVwZGF0ZUl0ZW08UG9zdFR5cGU+KFxuICAgICAgY29udGV4dCxcbiAgICAgIENPTExFQ1RJT05TLlBPU1RTLFxuICAgICAgcG9zdElkLFxuICAgICAgdXBkYXRlLFxuICAgICAge293bmVyc2hpcDogdHJ1ZX1cbiAgICApO1xuXG4gICAgY29uc3Qge19pZDogdXBkYXRlZFBvc3RJZH0gPSB1cGRhdGVkUG9zdDtcbiAgICBjb25zdCB1cGRhdGVkVGFncyA9IGF3YWl0IGhhbmRsZVBvc3RUYWdzKGNvbnRleHQsIHVwZGF0ZWRQb3N0SWQsIHVwZGF0ZS5jb250ZW50IHx8ICcnLCB0YWdzLCBzZXNzaW9uSWQpO1xuXG4gICAgaWYgKHVwZGF0ZWRUYWdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZyk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVBvc3QnO1xuICBpZiAoIXBvc3REb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG5cbiAgaWYgKCFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBkZWxldGVJdGVtPFBvc3RUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5QT1NUUywgZm9ybWF0UG9zdElkLCB7XG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KSB8fCB7X2lkOiBmb3JtYXRQb3N0SWR9IGFzIFBvc3RUeXBlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3N0RWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcG9zdERvY0lkOiBzdHJpbmcsXG4gIGl0ZW1Eb2NJZDogc3RyaW5nLFxuICBlZGdlVHlwZTogc3RyaW5nID0gRURHRVMuSVNfUE9TVEVELFxuICBwcm9wcyA9IHt9XG4pOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVQb3N0RWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKGVkZ2VUeXBlKTtcbiAgaWYgKCFwb3N0RG9jSWQgfHwgIWl0ZW1Eb2NJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuICBjb25zdCBmb3JtYXRQb3N0SWQgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG4gIGNvbnN0IGZvcm1hdERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtRG9jSWQpO1xuXG4gIGlmICghZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBvc3RFZGdlLSR7Zm9ybWF0UG9zdElkfS0ke2Zvcm1hdERvY0lkfWApO1xuICBjb25zdCBlZGdlID0ge1xuICAgIF9mcm9tOiBmb3JtYXRQb3N0SWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZm9ybWF0RG9jSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgLi4ucHJvcHNcbiAgfTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwiYXFsIiwibGl0ZXJhbCIsInBhcnNlUG9zdCIsInBhcnNlUG9zdFByb3BzIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRGlzdGFuY2VRdWVyeSIsImJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnkiLCJidWlsZE1hdGNoZWRUYWdzQ291bnRRdWVyeSIsImJ1aWxkUmVhY3Rpb25zUXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImJ1aWxkVXNlckluZm9RdWVyeSIsImdldExpbWl0IiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImV4dHJhY3RUYWdzIiwiZ2V0VGFnTGlzdEJ5TmFtZSIsInVwZGF0ZVRhZ3NJbkl0ZW0iLCJNQVhfQ09OVEVOVF9MRU5HVEgiLCJldmVudENhdGVnb3J5IiwicmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QiLCJjb250ZXh0IiwiZXhwbGljaXRQZXJzb25hSWQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvblVzZXJJZCIsInByb3ZpZGVkUGVyc29uYUlkIiwic2Vzc2lvblVzZXJJZFBhcnNlZCIsInVuZGVmaW5lZCIsInVzZXIiLCJVU0VSUyIsIl9rZXkiLCJwZXJzb25hSWQiLCJmaWx0ZXJCbG9ja2VkUG9zdHMiLCJwb3N0cyIsInZpc2liaWxpdHkiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicG9zdCIsIlN0cmluZyIsImZpbHRlciIsIl9wb3N0IiwiaW5kZXgiLCJwYXJzZVBvc3RPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInN0YXJ0RGF0ZSIsInRvIiwidHlwZSIsImxpbWl0IiwiRVZFTlRfUE9TVF9UWVBFIiwiUE9TVF9SRUFDVElPTl9JVEVNX1RZUEUiLCJQT1NUUyIsIk9QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRSIsImdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSIsInJlYWN0aW9uTmFtZSIsIlBJTiIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJPUFRJT05BTF9GSUVMRF9IQU5ETEVSUyIsImhhc1JzdnAiLCJhY3RvckRvY0lkIiwicXVlcnkiLCJSU1ZQIiwiSEFTX1JFQUNUSU9OIiwib2JqZWN0IiwiaXNTYXZlZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInZpZXdDb3VudCIsIlZJRVciLCJnZXRQb3N0T3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZXNzaW9uSWQiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJoYW5kbGVyIiwiUEVSU09OQVMiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJidWlsZFByaXZhY3lGaWx0ZXJRdWVyeSIsInBvc3REb2NJZCIsImdyb3VwSWQiLCJwcml2YWN5Iiwic2VsZWN0UXVlcmllcyIsInNlbGVjdE9iamVjdHMiLCJHUk9VUCIsImpvaW4iLCJHUk9VUFMiLCJIQVNfQ09OTkVDVElPTiIsIlBVQkxJQyIsImdldFBvc3RCeUlkIiwicG9zdElkIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZGF0YWJhc2UiLCJhcWxRcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsIl9pZCIsIkRFRkFVTFQiLCJwcml2YWN5QXFsUXJ5IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldFBvc3RMaXN0QnlBcmVhIiwiZm9ybWF0TGF0aXR1ZGUiLCJmb3JtYXRMb25naXR1ZGUiLCJsZW5ndGgiLCJnZXRQb3N0TGlzdEJ5TGF0ZXN0IiwicGFyZW50SWQiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImdldFBvc3RMaXN0QnlSZWFjdGlvbiIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWFjdGlvbiIsInRvTG93ZXJDYXNlIiwic29ydEJ5IiwiZmlsdGVycyIsImZvcm1hdFN0YXJ0RGF0ZSIsIklTX1RBR0dFRCIsImdldFBvc3RMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJmb3JtYXRUYWdOYW1lcyIsInRhZ05hbWUiLCJnZXRQb3N0TGlzdEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFBvc3RMaXN0QnlQYXJlbnQiLCJwcmVwYXJlUG9zdERhdGEiLCJpbnB1dCIsIm5vdyIsImFkZGVkIiwiY29udGVudCIsImVuZERhdGUiLCJsb2NhdGlvbiIsIm1heEd1ZXN0c1BlclBlcnNvbmEiLCJtb2RpZmllZCIsIm5hbWUiLCJwcm9wcyIsInRpY2tldENvc3RDZW50cyIsImhhbmRsZVBvc3RUYWdzIiwidGFncyIsImNvbnRlbnRUYWdOYW1lcyIsInVzZXJUYWdzIiwidGFnIiwidGFnQnkiLCJjb250ZW50VGFncyIsIml0ZW1Eb2NJZCIsImFkZFBvc3QiLCJyZXNvbHZlZFBlcnNvbmFJZCIsImluc2VydCIsIkRhdGUiLCJzYXZlZFBvc3QiLCJ1cGRhdGVkVGFncyIsInVwZGF0ZVBvc3QiLCJwYXJzZWRQb3N0IiwidmFsdWUiLCJJTlZBTElEX0lEIiwidXBkYXRlIiwidXBkYXRlZFBvc3QiLCJvd25lcnNoaXAiLCJ1cGRhdGVkUG9zdElkIiwiZGVsZXRlUG9zdCIsImZvcm1hdFBvc3RJZCIsImNyZWF0ZVBvc3RFZGdlIiwiZWRnZVR5cGUiLCJJU19QT1NURUQiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJmb3JtYXREb2NJZCIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90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
|
|
616
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3Bvc3RzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmcsIHBhcnNlVmFyQ2hhclxufSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge3BhcnNlUG9zdCwgcGFyc2VQb3N0UHJvcHN9IGZyb20gJy4uL2FkYXB0ZXJzL3Bvc3RBZGFwdGVyLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTLCBQcml2YWN5TGV2ZWwsIFJlYWN0aW9uVHlwZX0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge1xuICBidWlsZERpc3RhbmNlUXVlcnksXG4gIGJ1aWxkTWF0Y2hlZFJlYWN0aW9uc0NvdW50UXVlcnksXG4gIGJ1aWxkTWF0Y2hlZFRhZ3NDb3VudFF1ZXJ5LFxuICBidWlsZFJlYWN0aW9uc1F1ZXJ5LFxuICBidWlsZFRhZ3NRdWVyeSxcbiAgYnVpbGRVc2VySW5mb1F1ZXJ5LFxufSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2lzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIGdldFRhZ0xpc3RCeU5hbWUsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1Bvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZX0gZnJvbSAnLi4vdHlwZXMvcG9zdHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MudHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEggPSAxMDAwMDA7XG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3Bvc3RzJztcblxuY29uc3QgcmVzb2x2ZVBlcnNvbmFJZEZvclBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGV4cGxpY2l0UGVyc29uYUlkID0gJydcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHByb3ZpZGVkUGVyc29uYUlkID0gcGFyc2VJZChleHBsaWNpdFBlcnNvbmFJZCk7XG5cbiAgaWYocHJvdmlkZWRQZXJzb25hSWQpIHtcbiAgICByZXR1cm4gcHJvdmlkZWRQZXJzb25hSWQ7XG4gIH1cblxuICBjb25zdCBzZXNzaW9uVXNlcklkUGFyc2VkID0gcGFyc2VJZChzZXNzaW9uVXNlcklkIHx8ICcnKTtcbiAgaWYoIXNlc3Npb25Vc2VySWRQYXJzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IGdldEl0ZW1CeTx7cGVyc29uYUlkPzogc3RyaW5nfT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHtfa2V5OiBzZXNzaW9uVXNlcklkUGFyc2VkfSk7XG4gIHJldHVybiBwYXJzZUlkKHVzZXI/LnBlcnNvbmFJZCB8fCAnJykgfHwgdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZFBvc3RzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0czogUG9zdFR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eSA9IGF3YWl0IFByb21pc2UuYWxsKHBvc3RzLm1hcChhc3luYyAocG9zdCkgPT4ge1xuICAgIGNvbnN0IHBlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHBvc3Q/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBlcnNvbmFJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEoYXdhaXQgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQoY29udGV4dCwgcGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gcG9zdHMuZmlsdGVyKChfcG9zdCwgaW5kZXgpID0+IHZpc2liaWxpdHlbaW5kZXhdKTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdE9wdGlvbnMgPSAob3B0aW9uczogUG9zdE9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgbGF0aXR1ZGUgPSAwLFxuICAgIGxvbmdpdHVkZSA9IDAsXG4gICAgc3RhcnREYXRlID0gMCxcbiAgICB0byA9IDMwLFxuICAgIHR5cGUgPSAncG9zdCdcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsYXRpdHVkZTogcGFyc2VOdW0obGF0aXR1ZGUsIDMyKSxcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXQsXG4gICAgbG9uZ2l0dWRlOiBwYXJzZU51bShsb25naXR1ZGUsIDMyKSxcbiAgICBzdGFydERhdGU6IHBhcnNlTnVtKHN0YXJ0RGF0ZSwgMzIpLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmNvbnN0IEVWRU5UX1BPU1RfVFlQRSA9ICdldmVudCc7XG5jb25zdCBQT1NUX1JFQUNUSU9OX0lURU1fVFlQRSA9IENPTExFQ1RJT05TLlBPU1RTO1xuY29uc3QgT1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFID0gYHAudHlwZSA9PSBcIiR7RVZFTlRfUE9TVF9UWVBFfVwiID8gXCIke0VWRU5UX1BPU1RfVFlQRX1cIiA6IFwiJHtQT1NUX1JFQUNUSU9OX0lURU1fVFlQRX1cImA7XG5cbmNvbnN0IGdldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZSA9IChyZWFjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiAoXG4gIHJlYWN0aW9uTmFtZSA9PT0gUmVhY3Rpb25UeXBlLlBJTlxuICAgID8gJ2lzU2F2ZWQnXG4gICAgOiBgaGFzJHtyZWFjdGlvbk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtyZWFjdGlvbk5hbWUuc2xpY2UoMSl9YFxuKTtcblxuLy8gTWFwIG9mIG9wdGlvbmFsIGZpZWxkIGhhbmRsZXJzXG50eXBlIEZpZWxkSGFuZGxlciA9IChhY3RvckRvY0lkOiBzdHJpbmcpID0+IHtxdWVyeTogc3RyaW5nOyBvYmplY3Q6IHN0cmluZ307XG5cbmNvbnN0IE9QVElPTkFMX0ZJRUxEX0hBTkRMRVJTOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZEhhbmRsZXI+ID0ge1xuICBoYXNSc3ZwOiAoYWN0b3JEb2NJZCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke2dldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZShSZWFjdGlvblR5cGUuUlNWUCl9ID0gVE9fQk9PTChGSVJTVChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci5uYW1lID09IFwiJHtSZWFjdGlvblR5cGUuUlNWUH1cIiAmJiByLnR5cGUgPT0gKCR7T1BUSU9OQUxfRklFTERfUkVBQ1RJT05fSVRFTV9UWVBFfSkgJiYgci5fZnJvbSA9PSBcIiR7YWN0b3JEb2NJZH1cIlxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgICkpYCxcbiAgICBvYmplY3Q6ICdoYXNSc3ZwOmhhc1JzdnAnXG4gIH0pLFxuICBpc1NhdmVkOiAoYWN0b3JEb2NJZCkgPT4gKHtcbiAgICBxdWVyeTogYExFVCAke2dldE9wdGlvbmFsRmllbGRVc2VyUmVhY3Rpb25WYXJpYWJsZShSZWFjdGlvblR5cGUuUElOKX0gPSBUT19CT09MKEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5QSU59XCIgJiYgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pICYmIHIuX2Zyb20gPT0gXCIke2FjdG9yRG9jSWR9XCJcbiAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICBSRVRVUk4gY291bnRcbiAgICApKWAsXG4gICAgb2JqZWN0OiAnaXNTYXZlZDppc1NhdmVkJ1xuICB9KSxcbiAgcmVhY3Rpb25zOiAoKSA9PiAoe1xuICAgIHF1ZXJ5OiBgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgIEZPUiBpdGVtLCByIElOIElOQk9VTkQgcC5faWQgJHtFREdFUy5IQVNfUkVBQ1RJT059XG4gICAgICBGSUxURVIgci50eXBlID09ICgke09QVElPTkFMX0ZJRUxEX1JFQUNUSU9OX0lURU1fVFlQRX0pXG4gICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgIClgLFxuICAgIG9iamVjdDogJ3JlYWN0aW9uczpyZWFjdGlvbnMnXG4gIH0pLFxuICByc3ZwQ291bnQ6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtSZWFjdGlvblR5cGUuUlNWUH1Db3VudCA9IEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5SU1ZQfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgIClgLFxuICAgIG9iamVjdDogJ3JzdnBDb3VudDpyc3ZwQ291bnQnXG4gIH0pLFxuICB2aWV3Q291bnQ6ICgpID0+ICh7XG4gICAgcXVlcnk6IGBMRVQgJHtSZWFjdGlvblR5cGUuVklFV31Db3VudCA9IEZJUlNUKFxuICAgICAgRk9SIGl0ZW0sIHIgSU4gSU5CT1VORCBwLl9pZCAke0VER0VTLkhBU19SRUFDVElPTn1cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCIke1JlYWN0aW9uVHlwZS5WSUVXfVwiICYmIHIudHlwZSA9PSAoJHtPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEV9KVxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICAgIClgLFxuICAgIG9iamVjdDogJ3ZpZXdDb3VudDp2aWV3Q291bnQnXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdE9wdGlvbmFsRmllbGRzID0gKFxuICBmaWVsZHM6IHN0cmluZ1tdID0gW10sXG4gIHNlc3Npb25JZDogc3RyaW5nID0gJycsXG4gIHBlcnNvbmFJZDogc3RyaW5nID0gJydcbikgPT5cbiAgKGZpZWxkcyB8fCBbXSkucmVkdWNlKChzZWxlY3RzOiB7b2JqZWN0czogc3RyaW5nW10sIHF1ZXJpZXM6IHN0cmluZ1tdfSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBPUFRJT05BTF9GSUVMRF9IQU5ETEVSU1tmaWVsZF07XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IGFjdG9yRG9jSWQgPSBwZXJzb25hSWRcbiAgICAgICAgPyBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtwYXJzZUlkKHBlcnNvbmFJZCl9YFxuICAgICAgICA6IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuICAgICAgY29uc3Qge3F1ZXJ5LCBvYmplY3R9ID0gaGFuZGxlcihhY3RvckRvY0lkKTtcbiAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RzO1xuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBidWlsZCBwcml2YWN5IGZpbHRlciBxdWVyeVxuY29uc3QgYnVpbGRQcml2YWN5RmlsdGVyUXVlcnkgPSAoXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBncm91cElkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHByaXZhY3k6IHN0cmluZyxcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIHNlbGVjdFF1ZXJpZXM6IHN0cmluZ1tdLFxuICBzZWxlY3RPYmplY3RzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLkdST1VQKSB7XG4gICAgcmV0dXJuIGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICBGT1IgZ3JvdXAgSU4gJHtDT0xMRUNUSU9OUy5HUk9VUFN9XG4gICAgICBGSUxURVIgZ3JvdXAuX2tleSA9PSBwLmdyb3VwSWRcbiAgICAgIEZPUiB1LCBlIElOIE9VVEJPVU5EIGdyb3VwLl9pZCAke0VER0VTLkhBU19DT05ORUNUSU9OfVxuICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgfSBlbHNlIGlmIChwcml2YWN5ID09PSBQcml2YWN5TGV2ZWwuUFVCTElDKSB7XG4gICAgcmV0dXJuIGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RCeUlkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKHBvc3RJZCk7XG4gIGNvbnN0IHt0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgRklMVEVSIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgcC50eXBlID09ICR7dHlwZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcG9zdDogUG9zdFR5cGUgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gICAgY29uc3Qge1xuICAgICAgX2lkOiBwb3N0RG9jSWQsXG4gICAgICBwZXJzb25hSWQsXG4gICAgICB1c2VySWQsXG4gICAgICBncm91cElkLFxuICAgICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5ERUZBVUxUXG4gICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgaWYocGVyc29uYUlkICYmIGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBlcnNvbmFJZCkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyBVc2VyIG93bnMgdGhlIHBvc3QsIHJldHVybiBkaXJlY3RseVxuICAgIGlmICh1c2VySWQgPT09IHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIHBvc3Q7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcHJpdmFjeSBhbmQgYnVpbGQgYXBwcm9wcmlhdGUgcXVlcnlcbiAgICBjb25zdCBwcml2YWN5QXFsUXJ5ID0gYnVpbGRQcml2YWN5RmlsdGVyUXVlcnkoXG4gICAgICBwb3N0RG9jSWQsXG4gICAgICBncm91cElkLFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHNlbGVjdFF1ZXJpZXMsXG4gICAgICBzZWxlY3RPYmplY3RzXG4gICAgKTtcblxuICAgIGlmIChwcml2YWN5QXFsUXJ5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgZGF0YWJhc2UucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlBcmVhID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsYXRpdHVkZTogbnVtYmVyLFxuICBsb25naXR1ZGU6IG51bWJlcixcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RzQnlBcmVhJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkRGlzdGFuY2VRdWVyeShmb3JtYXRMYXRpdHVkZSwgZm9ybWF0TG9uZ2l0dWRlKSk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBwIElOICR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QT1NUUyl9XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgcC50eXBlID09ICR7dHlwZX0gJiYgcC5wcml2YWN5ID09ICR7UHJpdmFjeUxldmVsLlBVQkxJQ30gJiYgcC5wYXJlbnRJZCA9PSBudWxsXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFNPUlQgZGlzdGFuY2UsIHAuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgncCcpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBvc3RMaXN0QnlMYXRlc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRMaXN0QnlMYXRlc3QnO1xuICBjb25zdCB7ZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsRmllbGRzKGZpZWxkcywgc2Vzc2lvbklkLCBwZXJzb25hSWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8UG9zdFR5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgQ09MTEVDVElPTlMuUE9TVFMsXG4gICAge3R5cGUsIHByaXZhY3k6IFByaXZhY3lMZXZlbC5QVUJMSUMsIHBhcmVudElkOiBudWxsfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tOiBsaW1pdC5zdGFydCwgdG86IGxpbWl0LnN0YXJ0ICsgbGltaXQubnVtfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVJlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRQb3N0TGlzdEJ5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgc3RhcnREYXRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uKSA9PiBwYXJzZUNoYXIocmVhY3Rpb24sIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsIGBwLnByaXZhY3kgPT0gXCIke1ByaXZhY3lMZXZlbC5QVUJMSUN9XCJgXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGUgPSBwYXJzZU51bShsYXRpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdExvbmdpdHVkZSA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IGZvcm1hdFN0YXJ0RGF0ZSA9IHBhcnNlTnVtKHN0YXJ0RGF0ZSk7XG5cbiAgaWYgKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZERpc3RhbmNlUXVlcnkoZm9ybWF0TGF0aXR1ZGUsIGZvcm1hdExvbmdpdHVkZSkpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIGlmIChyZWFjdGlvbnMubGVuZ3RoKSB7XG4gICAgc29ydEJ5LnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5KHJlYWN0aW9ucykpO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnbWF0Y2hlZFJlYWN0aW9uczptYXRjaGVkUmVhY3Rpb25zJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zID4gMCcpO1xuICB9XG5cbiAgaWYgKGZvcm1hdFN0YXJ0RGF0ZSkge1xuICAgIGZpbHRlcnMucHVzaChgcC5zdGFydERhdGUgPj0gJHtmb3JtYXRTdGFydERhdGV9YCk7XG4gICAgc29ydEJ5LnB1c2goJ3Auc3RhcnREYXRlIEFTQycpO1xuICB9IGVsc2Uge1xuICAgIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgfVxuXG4gIHNlbGVjdE9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHAsIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9ICR7bGl0ZXJhbChFREdFUy5IQVNfUkVBQ1RJT04pfVxuICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgRk9SIHJlYWN0aW9uLCBociBJTiAxLi4xIElOQk9VTkQgcCAke2xpdGVyYWwoRURHRVMuSVNfVEFHR0VEKX1cbiAgICAgICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2xpdGVyYWwoZm9ybWF0UmVhY3Rpb25zKX0pID4gMCAmJiBQT1NJVElPTigke2xpdGVyYWwoZm9ybWF0UmVhY3Rpb25zKX0sIHJlYWN0aW9uLm5hbWUpXG4gICAgICAgICAgU09SVCByZWFjdGlvbi5uYW1lXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHJlYWN0aW9uLCB7bWF0Y2hlZH0pXG4gICAgICApXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlcnMuam9pbignICYmICcpKX1cbiAgICAgIFNPUlQgJHtsaXRlcmFsKHNvcnRCeS5qb2luKCcsICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVRhZ3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRhZ05hbWVzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHtwZXJzb25hSWQsIHVzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbGltaXQsIGxvbmdpdHVkZSwgc3RhcnREYXRlLCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbEZpZWxkcyhmaWVsZHMsIHNlc3Npb25JZCwgcGVyc29uYUlkKTtcbiAgY29uc3QgZm9ybWF0VGFnTmFtZXM6IHN0cmluZ1tdID0gdGFnTmFtZXMubWFwKCh0YWdOYW1lKSA9PiBwYXJzZUNoYXIodGFnTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCBgcC5wcml2YWN5ID09IFwiJHtQcml2YWN5TGV2ZWwuUFVCTElDfVwiYF07XG4gIGNvbnN0IGZvcm1hdExhdGl0dWRlID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGUgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuICBjb25zdCBmb3JtYXRTdGFydERhdGUgPSBwYXJzZU51bShzdGFydERhdGUpO1xuXG4gIGlmIChmb3JtYXRMYXRpdHVkZSAmJiBmb3JtYXRMb25naXR1ZGUpIHtcbiAgICBzZWxlY3RRdWVyaWVzLnB1c2goYnVpbGREaXN0YW5jZVF1ZXJ5KGZvcm1hdExhdGl0dWRlLCBmb3JtYXRMb25naXR1ZGUpKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ2Rpc3RhbmNlOmRpc3RhbmNlJyk7XG4gICAgc29ydEJ5LnB1c2goJ2Rpc3RhbmNlJyk7XG4gIH1cblxuICAvLyBVc2UgYnVpbGRUYWdzUXVlcnkgaGVscGVyIHdpdGggbWF0Y2hlZCB0YWdzXG4gIHNlbGVjdFF1ZXJpZXMucHVzaChidWlsZFRhZ3NRdWVyeSgncCcsIGZvcm1hdFRhZ05hbWVzKSk7XG5cbiAgaWYgKHRhZ05hbWVzLmxlbmd0aCkge1xuICAgIHNvcnRCeS5wdXNoKCdtYXRjaGVkVGFncyBERVNDJyk7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGJ1aWxkTWF0Y2hlZFRhZ3NDb3VudFF1ZXJ5KGZvcm1hdFRhZ05hbWVzKSk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkVGFnczptYXRjaGVkVGFncycpO1xuICAgIGZpbHRlcnMucHVzaCgnbWF0Y2hlZFRhZ3MgPiAwJyk7XG4gIH1cblxuICBpZiAoZm9ybWF0U3RhcnREYXRlKSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnN0YXJ0RGF0ZSA+PSAke2Zvcm1hdFN0YXJ0RGF0ZX1gKTtcbiAgICBzb3J0QnkucHVzaCgncC5zdGFydERhdGUgQVNDJyk7XG4gIH0gZWxzZSB7XG4gICAgc29ydEJ5LnB1c2goJ3AuYWRkZWQgREVTQycpO1xuICB9XG5cbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBwIElOICR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QT1NUUyl9XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlcnMuam9pbignICYmICcpKX1cbiAgICAgIFNPUlQgJHtsaXRlcmFsKHNvcnRCeS5qb2luKCcsICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIERJU1RJTkNUICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdwJyl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLnRoZW4oKHBvc3RzKSA9PiBmaWx0ZXJCbG9ja2VkUG9zdHMoY29udGV4dCwgcG9zdHMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdExpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UG9zdHNCeVVzZXInO1xuICBjb25zdCB7ZmllbGRzLCBzZXNzaW9uOiB7cGVyc29uYUlkLCB1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWxGaWVsZHMoZmllbGRzLCBzZXNzaW9uSWQsIHBlcnNvbmFJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxQb3N0VHlwZT4oXG4gICAgY29udGV4dCxcbiAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICB7dXNlcklkOiBmb3JtYXRVc2VySWQsIHR5cGUsIHByaXZhY3k6IFByaXZhY3lMZXZlbC5QVUJMSUMsIHBhcmVudElkOiBudWxsfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdBU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IHNlbGVjdE9iamVjdHNcbiAgICB9XG4gIClcbiAgICAudGhlbigocG9zdHMpID0+IGZpbHRlckJsb2NrZWRQb3N0cyhjb250ZXh0LCBwb3N0cykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0TGlzdEJ5UGFyZW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3RJZDogc3RyaW5nLCBvcHRpb25zPzogUG9zdE9wdGlvbnMpOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFBvc3RMaXN0QnlQYXJlbnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQocG9zdElkKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfa2V5LFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gUHJpdmFjeUxldmVsLkRFRkFVTFRcbiAgICAgIH06IFBvc3RUeXBlID0gcG9zdDtcblxuICAgICAgbGV0IHByaXZhY3lBcWxRcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLkdST1VQKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gJHtDT0xMRUNUSU9OUy5QT1NUU31cbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCJcbiAgICAgICAgICAke2J1aWxkVXNlckluZm9RdWVyeSgncC51c2VySWQnKX1cbiAgICAgICAgICAke2J1aWxkUmVhY3Rpb25zUXVlcnkoJ3AnKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gJHtDT0xMRUNUSU9OUy5HUk9VUFN9XG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkICR7RURHRVMuSEFTX0NPTk5FQ1RJT059XG4gICAgICAgICAgRklMVEVSIHUuX2tleSA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH0gZWxzZSBpZiAocHJpdmFjeSA9PT0gUHJpdmFjeUxldmVsLlBVQkxJQykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOICR7Q09MTEVDVElPTlMuUE9TVFN9XG4gICAgICAgICAgRklMVEVSIHAucGFyZW50ID09IFwiJHtfa2V5fVwiXG4gICAgICAgICAgJHtidWlsZFVzZXJJbmZvUXVlcnkoJ3AudXNlcklkJyl9XG4gICAgICAgICAgJHtidWlsZFJlYWN0aW9uc1F1ZXJ5KCdwJyl9XG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHt1c2VyOiB1c2VyLCByZWFjdGlvbnM6IHJlYWN0aW9uc30pYDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgICAgICAgIC50aGVuKChwb3N0cykgPT4gZmlsdGVyQmxvY2tlZFBvc3RzKGNvbnRleHQsIHBvc3RzKSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJlcGFyZSBwb3N0IGRhdGEgZm9yIGluc2VydGlvblxuY29uc3QgcHJlcGFyZVBvc3REYXRhID0gKFxuICBpbnB1dDogUG9zdElucHV0VHlwZSxcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIHBlcnNvbmFJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgbm93OiBudW1iZXJcbik6IFBvc3RUeXBlID0+ICh7XG4gIF9pZDogYCR7Q09MTEVDVElPTlMuUE9TVFN9LyR7cG9zdElkfWAsXG4gIF9rZXk6IHBvc3RJZCxcbiAgYWRkZWQ6IG5vdyxcbiAgY29udGVudDogcGFyc2VTdHJpbmcoaW5wdXQuY29udGVudCB8fCAnJywgTUFYX0NPTlRFTlRfTEVOR1RIKSB8fCAnJyxcbiAgZW5kRGF0ZTogaW5wdXQuZW5kRGF0ZSA/IHBhcnNlTnVtKGlucHV0LmVuZERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgZ3JvdXBJZDogaW5wdXQuZ3JvdXBJZCA/IHBhcnNlSWQoaW5wdXQuZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gIGxhdGl0dWRlOiBpbnB1dC5sYXRpdHVkZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VOdW0oaW5wdXQubGF0aXR1ZGUpIDogdW5kZWZpbmVkLFxuICBsb2NhdGlvbjogaW5wdXQubG9jYXRpb24gPyBwYXJzZVN0cmluZyhpbnB1dC5sb2NhdGlvbiwgMTYwKSA6IHVuZGVmaW5lZCxcbiAgbG9uZ2l0dWRlOiBpbnB1dC5sb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0LmxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gIG1heEd1ZXN0c1BlclBlcnNvbmE6IGlucHV0Lm1heEd1ZXN0c1BlclBlcnNvbmEgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGlucHV0Lm1heEd1ZXN0c1BlclBlcnNvbmEsIDMpIDogdW5kZWZpbmVkLFxuICBtb2RpZmllZDogbm93LFxuICBuYW1lOiBwYXJzZVN0cmluZyhpbnB1dC5uYW1lIHx8ICcnLCAxNjApLFxuICBwYXJlbnRJZDogaW5wdXQucGFyZW50SWQgPyBwYXJzZUlkKGlucHV0LnBhcmVudElkKSA6IHVuZGVmaW5lZCxcbiAgcHJpdmFjeTogcGFyc2VWYXJDaGFyKGlucHV0LnByaXZhY3kgfHwgUHJpdmFjeUxldmVsLlBVQkxJQywgMTYpLFxuICBwcm9wczogcGFyc2VQb3N0UHJvcHMoaW5wdXQucHJvcHMpLFxuICBwZXJzb25hSWQsXG4gIHN0YXJ0RGF0ZTogaW5wdXQuc3RhcnREYXRlID8gcGFyc2VOdW0oaW5wdXQuc3RhcnREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gIHRpY2tldENvc3RDZW50czogaW5wdXQudGlja2V0Q29zdENlbnRzICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShpbnB1dC50aWNrZXRDb3N0Q2VudHMsIDEyKSA6IHVuZGVmaW5lZCxcbiAgdHlwZTogcGFyc2VDaGFyKGlucHV0LnR5cGUgfHwgJ2RlZmF1bHQnLCAzMiksXG4gIHVzZXJJZDogc2Vzc2lvbklkXG59KTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSB0YWdzIGZvciBwb3N0c1xuY29uc3QgaGFuZGxlUG9zdFRhZ3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRhZ3M6IFRhZ1R5cGVbXSxcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbik6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGNvbnRlbnQgfHwgJycpO1xuXG4gIGlmICh0YWdzLmxlbmd0aCB8fCBjb250ZW50VGFnTmFtZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdXNlclRhZ3MgPSAoYXdhaXQgZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdzLm1hcCgoe25hbWV9KSA9PiBuYW1lIHx8ICcnKSkpXG4gICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogc2Vzc2lvbklkfSkpO1xuICAgIGNvbnN0IGNvbnRlbnRUYWdzID0gKGF3YWl0IGdldFRhZ0xpc3RCeU5hbWUoY29udGV4dCwgY29udGVudFRhZ05hbWVzIHx8IFtdKSlcbiAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiAnZXh0cmFjdCd9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdXBkYXRlVGFnc0luSXRlbShcbiAgICAgIGNvbnRleHQsXG4gICAgICB7XG4gICAgICAgIGl0ZW1Eb2NJZDogcG9zdERvY0lkLFxuICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW107XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUG9zdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnRlbnQgPSAnJyxcbiAgICBlbmREYXRlLFxuICAgIGdyb3VwSWQgPSAnJyxcbiAgICBsb2NhdGlvbixcbiAgICBsYXRpdHVkZSxcbiAgICBsb25naXR1ZGUsXG4gICAgbmFtZSA9ICcnLFxuICAgIHBhcmVudElkID0gJycsXG4gICAgcHJpdmFjeSA9IFByaXZhY3lMZXZlbC5QVUJMSUMsXG4gICAgcHJvcHMgPSB7fSxcbiAgICBtYXhHdWVzdHNQZXJQZXJzb25hLFxuICAgIHBlcnNvbmFJZCA9ICcnLFxuICAgIHRhZ3MgPSBbXSxcbiAgICBzdGFydERhdGUsXG4gICAgdGlja2V0Q29zdENlbnRzLFxuICAgIHR5cGUgPSAnZGVmYXVsdCdcbiAgfTogUG9zdElucHV0VHlwZVxuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUG9zdCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcG9zdElkID0gY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgcmVzb2x2ZWRQZXJzb25hSWQgPSBhd2FpdCByZXNvbHZlUGVyc29uYUlkRm9yUG9zdChjb250ZXh0LCBwZXJzb25hSWQpO1xuXG4gIGNvbnN0IGluc2VydDogUG9zdFR5cGUgPSBwcmVwYXJlUG9zdERhdGEoXG4gICAge2NvbnRlbnQsIGVuZERhdGUsIGdyb3VwSWQsIGxvY2F0aW9uLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBtYXhHdWVzdHNQZXJQZXJzb25hLCBuYW1lLCBwYXJlbnRJZCwgcHJpdmFjeSwgcHJvcHMsIHBlcnNvbmFJZDogcmVzb2x2ZWRQZXJzb25hSWQsIHN0YXJ0RGF0ZSwgdGFncywgdGlja2V0Q29zdENlbnRzLCB0eXBlfSxcbiAgICBzZXNzaW9uSWQsXG4gICAgcmVzb2x2ZWRQZXJzb25hSWQsXG4gICAgcG9zdElkLFxuICAgIERhdGUubm93KClcbiAgKTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBDUlVEIGFkZEl0ZW0gZnVuY3Rpb25cbiAgICBjb25zdCBzYXZlZFBvc3Q6IFBvc3RUeXBlID0gYXdhaXQgYWRkSXRlbTxQb3N0VHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuUE9TVFMsIGluc2VydCk7XG5cbiAgICBjb25zdCB7X2lkOiBwb3N0RG9jSWR9ID0gc2F2ZWRQb3N0O1xuICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gYXdhaXQgaGFuZGxlUG9zdFRhZ3MoY29udGV4dCwgcG9zdERvY0lkLCBpbnNlcnQuY29udGVudCB8fCAnJywgdGFncywgc2Vzc2lvbklkKTtcblxuICAgIGlmICh1cGRhdGVkVGFncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNhdmVkUG9zdCxcbiAgICAgICAgdGFnczogdXBkYXRlZFRhZ3NcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmVkUG9zdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUG9zdCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0OiBQb3N0SW5wdXRUeXBlKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlUG9zdCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgcGFyc2VkUG9zdCA9IHBhcnNlUG9zdChwb3N0KTtcbiAgY29uc3Qge1xuICAgIHBvc3RJZCxcbiAgICB0YWdzID0gW11cbiAgfSA9IHBhcnNlZFBvc3Q7XG5cbiAgaWYgKCFwb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCB1cGRhdGU6IFBvc3RUeXBlID0ge1xuICAgIC4uLnBhcnNlZFBvc3RcbiAgfTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBDUlVEIHVwZGF0ZUl0ZW0gd2l0aCBvd25lcnNoaXAgY2hlY2tcbiAgICBjb25zdCB1cGRhdGVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCB1cGRhdGVJdGVtPFBvc3RUeXBlPihcbiAgICAgIGNvbnRleHQsXG4gICAgICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgICAgIHBvc3RJZCxcbiAgICAgIHVwZGF0ZSxcbiAgICAgIHtvd25lcnNoaXA6IHRydWV9XG4gICAgKTtcblxuICAgIGNvbnN0IHtfaWQ6IHVwZGF0ZWRQb3N0SWR9ID0gdXBkYXRlZFBvc3Q7XG4gICAgY29uc3QgdXBkYXRlZFRhZ3MgPSBhd2FpdCBoYW5kbGVQb3N0VGFncyhjb250ZXh0LCB1cGRhdGVkUG9zdElkLCB1cGRhdGUuY29udGVudCB8fCAnJywgdGFncywgc2Vzc2lvbklkKTtcblxuICAgIGlmICh1cGRhdGVkVGFncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFBvc3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdERvY0lkOiBzdHJpbmcpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVQb3N0JztcbiAgaWYgKCFwb3N0RG9jSWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbiAgY29uc3QgZm9ybWF0UG9zdElkID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuXG4gIGlmICghZm9ybWF0UG9zdElkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9JRFxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsZXRlSXRlbTxQb3N0VHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuUE9TVFMsIGZvcm1hdFBvc3RJZCwge1xuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSkgfHwge19pZDogZm9ybWF0UG9zdElkfSBhcyBQb3N0VHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgZWRnZVR5cGU6IHN0cmluZyA9IEVER0VTLklTX1BPU1RFRCxcbiAgcHJvcHMgPSB7fVxuKTogUHJvbWlzZTxGaWxlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlUG9zdEVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihlZGdlVHlwZSk7XG4gIGlmICghcG9zdERvY0lkIHx8ICFpdGVtRG9jSWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cbiAgY29uc3QgZm9ybWF0UG9zdElkID0gcGFyc2VBcmFuZ29JZChwb3N0RG9jSWQpO1xuICBjb25zdCBmb3JtYXREb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbURvY0lkKTtcblxuICBpZiAoIWZvcm1hdERvY0lkIHx8ICFmb3JtYXRQb3N0SWQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0lEXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBwb3N0RWRnZS0ke2Zvcm1hdFBvc3RJZH0tJHtmb3JtYXREb2NJZH1gKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZm9ybWF0UG9zdElkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdERvY0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIC4uLnByb3BzXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInBhcnNlVmFyQ2hhciIsImFxbCIsImxpdGVyYWwiLCJwYXJzZVBvc3QiLCJwYXJzZVBvc3RQcm9wcyIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJQcml2YWN5TGV2ZWwiLCJSZWFjdGlvblR5cGUiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJidWlsZERpc3RhbmNlUXVlcnkiLCJidWlsZE1hdGNoZWRSZWFjdGlvbnNDb3VudFF1ZXJ5IiwiYnVpbGRNYXRjaGVkVGFnc0NvdW50UXVlcnkiLCJidWlsZFJlYWN0aW9uc1F1ZXJ5IiwiYnVpbGRUYWdzUXVlcnkiLCJidWlsZFVzZXJJbmZvUXVlcnkiLCJnZXRMaW1pdCIsInVzZURiIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWQiLCJleHRyYWN0VGFncyIsImdldFRhZ0xpc3RCeU5hbWUiLCJ1cGRhdGVUYWdzSW5JdGVtIiwiTUFYX0NPTlRFTlRfTEVOR1RIIiwiZXZlbnRDYXRlZ29yeSIsInJlc29sdmVQZXJzb25hSWRGb3JQb3N0IiwiY29udGV4dCIsImV4cGxpY2l0UGVyc29uYUlkIiwic2Vzc2lvbiIsInVzZXJJZCIsInNlc3Npb25Vc2VySWQiLCJwcm92aWRlZFBlcnNvbmFJZCIsInNlc3Npb25Vc2VySWRQYXJzZWQiLCJ1bmRlZmluZWQiLCJ1c2VyIiwiVVNFUlMiLCJfa2V5IiwicGVyc29uYUlkIiwiZmlsdGVyQmxvY2tlZFBvc3RzIiwicG9zdHMiLCJ2aXNpYmlsaXR5IiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInBvc3QiLCJTdHJpbmciLCJmaWx0ZXIiLCJfcG9zdCIsImluZGV4IiwicGFyc2VQb3N0T3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJzdGFydERhdGUiLCJ0byIsInR5cGUiLCJsaW1pdCIsIkVWRU5UX1BPU1RfVFlQRSIsIlBPU1RfUkVBQ1RJT05fSVRFTV9UWVBFIiwiUE9TVFMiLCJPUFRJT05BTF9GSUVMRF9SRUFDVElPTl9JVEVNX1RZUEUiLCJnZXRPcHRpb25hbEZpZWxkVXNlclJlYWN0aW9uVmFyaWFibGUiLCJyZWFjdGlvbk5hbWUiLCJQSU4iLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiT1BUSU9OQUxfRklFTERfSEFORExFUlMiLCJoYXNSc3ZwIiwiYWN0b3JEb2NJZCIsInF1ZXJ5IiwiUlNWUCIsIkhBU19SRUFDVElPTiIsIm9iamVjdCIsImlzU2F2ZWQiLCJyZWFjdGlvbnMiLCJyc3ZwQ291bnQiLCJ2aWV3Q291bnQiLCJWSUVXIiwiZ2V0UG9zdE9wdGlvbmFsRmllbGRzIiwiZmllbGRzIiwic2Vzc2lvbklkIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwiaGFuZGxlciIsIlBFUlNPTkFTIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwiYnVpbGRQcml2YWN5RmlsdGVyUXVlcnkiLCJwb3N0RG9jSWQiLCJncm91cElkIiwicHJpdmFjeSIsInNlbGVjdFF1ZXJpZXMiLCJzZWxlY3RPYmplY3RzIiwiR1JPVVAiLCJqb2luIiwiR1JPVVBTIiwiSEFTX0NPTk5FQ1RJT04iLCJQVUJMSUMiLCJnZXRQb3N0QnlJZCIsInBvc3RJZCIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsImZvcm1hdEl0ZW1JZCIsImRhdGFiYXNlIiwiYXFsUXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJfaWQiLCJERUZBVUxUIiwicHJpdmFjeUFxbFFyeSIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRQb3N0TGlzdEJ5QXJlYSIsImZvcm1hdExhdGl0dWRlIiwiZm9ybWF0TG9uZ2l0dWRlIiwibGVuZ3RoIiwiZ2V0UG9zdExpc3RCeUxhdGVzdCIsInBhcmVudElkIiwic29ydCIsImRpcmVjdGlvbiIsInN0YXJ0IiwibnVtIiwiY3VzdG9tUXVlcmllcyIsImN1c3RvbU9iamVjdHMiLCJnZXRQb3N0TGlzdEJ5UmVhY3Rpb24iLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJKU09OIiwic3RyaW5naWZ5IiwicmVhY3Rpb24iLCJ0b0xvd2VyQ2FzZSIsInNvcnRCeSIsImZpbHRlcnMiLCJmb3JtYXRTdGFydERhdGUiLCJJU19UQUdHRUQiLCJnZXRQb3N0TGlzdEJ5VGFncyIsInRhZ05hbWVzIiwiZm9ybWF0VGFnTmFtZXMiLCJ0YWdOYW1lIiwiZ2V0UG9zdExpc3RCeVVzZXIiLCJmb3JtYXRVc2VySWQiLCJnZXRQb3N0TGlzdEJ5UGFyZW50IiwicHJlcGFyZVBvc3REYXRhIiwiaW5wdXQiLCJub3ciLCJhZGRlZCIsImNvbnRlbnQiLCJlbmREYXRlIiwibG9jYXRpb24iLCJtYXhHdWVzdHNQZXJQZXJzb25hIiwibW9kaWZpZWQiLCJuYW1lIiwicHJvcHMiLCJ0aWNrZXRDb3N0Q2VudHMiLCJoYW5kbGVQb3N0VGFncyIsInRhZ3MiLCJjb250ZW50VGFnTmFtZXMiLCJ1c2VyVGFncyIsInRhZyIsInRhZ0J5IiwiY29udGVudFRhZ3MiLCJpdGVtRG9jSWQiLCJhZGRQb3N0IiwicmVzb2x2ZWRQZXJzb25hSWQiLCJpbnNlcnQiLCJEYXRlIiwic2F2ZWRQb3N0IiwidXBkYXRlZFRhZ3MiLCJ1cGRhdGVQb3N0IiwicGFyc2VkUG9zdCIsInZhbHVlIiwiSU5WQUxJRF9JRCIsInVwZGF0ZSIsInVwZGF0ZWRQb3N0Iiwib3duZXJzaGlwIiwidXBkYXRlZFBvc3RJZCIsImRlbGV0ZVBvc3QiLCJmb3JtYXRQb3N0SWQiLCJjcmVhdGVQb3N0RWRnZSIsImVkZ2VUeXBlIiwiSVNfUE9TVEVEIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwiZm9ybWF0RG9jSWQiLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJzYXZlIiwicmV0dXJuTmV3Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQ0VDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxZQUFZLFFBQ25FLCtCQUErQjtBQUN0QyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFF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
|
package/lib/actions/query.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { ErrorTypes } from '../types/error.types.js';
|
|
5
5
|
import { logException } from '../utils/analyticsUtils.js';
|
|
6
6
|
import { useDb } from '../utils/arangodbUtils.js';
|
|
@@ -94,4 +94,4 @@ const eventCategory = 'query';
|
|
|
94
94
|
}
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3F1ZXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkQWdncmVnYXRpb25RdWVyeSxcbiAgYnVpbGRRdWVyeSxcbiAgYnVpbGRTZWFyY2hRdWVyeSxcbiAgdmFsaWRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMsXG4gIHZhbGlkYXRlUXVlcnlPcHRpb25zLFxuICB2YWxpZGF0ZVNlYXJjaE9wdGlvbnNcbn0gZnJvbSAnLi4vdXRpbHMvcXVlcnlCdWlsZGVyLmpzJztcblxuaW1wb3J0IHR5cGUge1xuICBBZ2dyZWdhdGlvbk9wdGlvbnMsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgU2VhcmNoT3B0aW9uc1xufSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncXVlcnknO1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBmbGV4aWJsZSBxdWVyeSBhZ2FpbnN0IGFueSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dCAtIEFQSSBjb250ZXh0IHdpdGggc2Vzc2lvbiBhbmQgZGF0YWJhc2UgaW5mb1xuICogQHBhcmFtIG9wdGlvbnMgLSBRdWVyeSBvcHRpb25zIGluY2x1ZGluZyBjb2xsZWN0aW9uLCBmaWx0ZXJzLCBzb3J0LCBsaW1pdCwgZXRjLlxuICogQHJldHVybnMgQXJyYXkgb2YgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBxdWVyeVxuICovXG5leHBvcnQgY29uc3QgZXhlY3V0ZVF1ZXJ5ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiBRdWVyeU9wdGlvbnNcbik6IFByb21pc2U8YW55W10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2V4ZWN1dGVRdWVyeSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIC8vIFZhbGlkYXRlIHF1ZXJ5IG9wdGlvbnNcbiAgICB2YWxpZGF0ZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBxdWVyeVxuICAgIGNvbnN0IHF1ZXJ5ID0gYnVpbGRRdWVyeShvcHRpb25zKTtcblxuICAgIC8vIEV4ZWN1dGUgcXVlcnlcbiAgICBjb25zdCBkYiA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgZGIucXVlcnkocXVlcnkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjdXJzb3IuYWxsKCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICB2YWx1ZTogZXJyb3IubWVzc2FnZVxuICAgIH0sIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4ZWN1dGUgYW4gYWdncmVnYXRpb24gcXVlcnkgKENPVU5ULCBTVU0sIEFWRywgTUlOLCBNQVgpXG4gKiBAcGFyYW0gY29udGV4dCAtIEFQSSBjb250ZXh0XG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFnZ3JlZ2F0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIEFnZ3JlZ2F0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgY29uc3QgZXhlY3V0ZUFnZ3JlZ2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvbnNcbik6IFByb21pc2U8YW55PiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdleGVjdXRlQWdncmVnYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBWYWxpZGF0ZSBhZ2dyZWdhdGlvbiBvcHRpb25zXG4gICAgdmFsaWRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBCdWlsZCB0aGUgYWdncmVnYXRpb24gcXVlcnlcbiAgICBjb25zdCBxdWVyeSA9IGJ1aWxkQWdncmVnYXRpb25RdWVyeShvcHRpb25zKTtcblxuICAgIC8vIEV4ZWN1dGUgcXVlcnlcbiAgICBjb25zdCBkYiA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgZGIucXVlcnkocXVlcnkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjdXJzb3IuYWxsKCk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IHJlc3VsdCAoYWdncmVnYXRpb25zIHJldHVybiBzaW5nbGUgdmFsdWUpXG4gICAgLy8gSWYgbm8gcmVzdWx0LCByZXR1cm4gYSBwcm9wZXJseSB0eXBlZCBkZWZhdWx0XG4gICAgcmV0dXJuIHJlc3VsdHNbMF0gfHwge1xuICAgICAgZmllbGQ6IG9wdGlvbnMuZmllbGQgfHwgbnVsbCxcbiAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfTtcbiAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICB2YWx1ZTogZXJyb3IubWVzc2FnZVxuICAgIH0sIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBtdWx0aS1jb2xsZWN0aW9uIHNlYXJjaFxuICogQHBhcmFtIGNvbnRleHQgLSBBUEkgY29udGV4dFxuICogQHBhcmFtIG9wdGlvbnMgLSBTZWFyY2ggb3B0aW9ucyBpbmNsdWRpbmcgY29sbGVjdGlvbnMsIHF1ZXJ5IHN0cmluZywgYW5kIGZpbHRlcnNcbiAqIEByZXR1cm5zIEFycmF5IG9mIGRvY3VtZW50cyBmcm9tIG11bHRpcGxlIGNvbGxlY3Rpb25zIG1hdGNoaW5nIHRoZSBzZWFyY2hcbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnNcbik6IFByb21pc2U8YW55W10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2V4ZWN1dGVTZWFyY2gnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICAvLyBWYWxpZGF0ZSBzZWFyY2ggb3B0aW9uc1xuICAgIHZhbGlkYXRlU2VhcmNoT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBzZWFyY2ggcXVlcnlcbiAgICBjb25zdCBxdWVyeSA9IGJ1aWxkU2VhcmNoUXVlcnkob3B0aW9ucyk7XG5cbiAgICAvLyBFeGVjdXRlIHF1ZXJ5XG4gICAgY29uc3QgZGIgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IGRiLnF1ZXJ5KHF1ZXJ5KTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY3Vyc29yLmFsbCgpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgdmFsdWU6IGVycm9yLm1lc3NhZ2VcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJFcnJvclR5cGVzIiwibG9nRXhjZXB0aW9uIiwidXNlRGIiLCJidWlsZEFnZ3JlZ2F0aW9uUXVlcnkiLCJidWlsZFF1ZXJ5IiwiYnVpbGRTZWFyY2hRdWVyeSIsInZhbGlkYXRlQWdncmVnYXRpb25PcHRpb25zIiwidmFsaWRhdGVRdWVyeU9wdGlvbnMiLCJ2YWxpZGF0ZVNlYXJjaE9wdGlvbnMiLCJldmVudENhdGVnb3J5IiwiZXhlY3V0ZVF1ZXJ5IiwiY29udGV4dCIsIm9wdGlvbnMiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsImRiIiwiY3Vyc29yIiwicmVzdWx0cyIsImFsbCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwidmFsdWUiLCJtZXNzYWdlIiwiZXhlY3V0ZUFnZ3JlZ2F0aW9uIiwiZmllbGQiLCJ0eXBlIiwiZXhlY3V0ZVNlYXJjaCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxZQUFZLFFBQU8sNkJBQTZCO0FBQ3hELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FDRUMscUJBQXFCLEVBQ3JCQyxVQUFVLEVBQ1ZDLGdCQUFnQixFQUNoQkMsMEJBQTBCLEVBQzFCQyxvQkFBb0IsRUFDcEJDLHFCQUFxQixRQUNoQiwyQkFBMkI7QUFTbEMsTUFBTUMsZ0JBQWdCO0FBRXRCOzs7OztDQUtDLEdBQ0QsT0FBTyxNQUFNQyxlQUFlLE9BQzFCQyxTQUNBQztJQUVBLE1BQU1DLFNBQVM7SUFDZixNQUFNLEVBQUNDLFlBQVksRUFBQyxHQUFHSDtJQUV2QixJQUFJO1FBQ0YseUJBQXlCO1FBQ3pCSixxQkFBcUJLO1FBRXJCLGtCQUFrQjtRQUNsQixNQUFNRyxRQUFRWCxXQUFXUTtRQUV6QixnQkFBZ0I7UUFDaEIsTUFBTUksS0FBS2QsTUFBTVk7UUFDakIsTUFBTUcsU0FBUyxNQUFNRCxHQUFHRCxLQUFLLENBQUNBO1FBQzlCLE1BQU1HLFVBQVUsTUFBTUQsT0FBT0UsR0FBRztRQUVoQyxPQUFPRDtJQUNULEVBQUUsT0FBTUUsT0FBWTtRQUNsQixNQUFNbkIsYUFBYTtZQUNqQlk7WUFDQVEsVUFBVVo7WUFDVmEsT0FBT3RCLFdBQVd1QixjQUFjO1lBQ2hDQyxPQUFPSixNQUFNSyxPQUFPO1FBQ3RCLEdBQUdkO0lBQ0w7QUFDRixFQUFFO0FBRUY7Ozs7O0NBS0MsR0FDRCxPQUFPLE1BQU1lLHFCQUFxQixPQUNoQ2YsU0FDQUM7SUFFQSxNQUFNQyxTQUFTO0lBQ2YsTUFBTSxFQUFDQyxZQUFZLEVBQUMsR0FBR0g7SUFFdkIsSUFBSTtRQUNGLCtCQUErQjtRQUMvQkwsMkJBQTJCTTtRQUUzQiw4QkFBOEI7UUFDOUIsTUFBTUcsUUFBUVosc0JBQXNCUztRQUVwQyxnQkFBZ0I7UUFDaEIsTUFBTUksS0FBS2QsTUFBTVk7UUFDakIsTUFBTUcsU0FBUyxNQUFNRCxHQUFHRCxLQUFLLENBQUNBO1FBQzlCLE1BQU1HLFVBQVUsTUFBTUQsT0FBT0UsR0FBRztRQUVoQyw2REFBNkQ7UUFDN0QsZ0RBQWdEO1FBQ2hELE9BQU9ELE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDbkJTLE9BQU9mLFFBQVFlLEtBQUssSUFBSTtZQUN4QkMsTUFBTWhCLFFBQVFnQixJQUFJO1lBQ2xCSixPQUFPO1FBQ1Q7SUFDRixFQUFFLE9BQU1KLE9BQVk7UUFDbEIsTUFBTW5CLGFBQWE7WUFDakJZO1lBQ0FRLFVBQVVaO1lBQ1ZhLE9BQU90QixXQUFXdUIsY0FBYztZQUNoQ0MsT0FBT0osTUFBTUssT0FBTztRQUN0QixHQUFHZDtJQUNMO0FBQ0YsRUFBRTtBQUVGOzs7OztDQUtDLEdBQ0QsT0FBTyxNQUFNa0IsZ0JBQWdCLE9BQzNCbEIsU0FDQUM7SUFFQSxNQUFNQyxTQUFTO0lBQ2YsTUFBTSxFQUFDQyxZQUFZLEVBQUMsR0FBR0g7SUFFdkIsSUFBSTtRQUNGLDBCQUEwQjtRQUMxQkgsc0JBQXNCSTtRQUV0Qix5QkFBeUI7UUFDekIsTUFBTUcsUUFBUVYsaUJBQWlCTztRQUUvQixnQkFBZ0I7UUFDaEIsTUFBTUksS0FBS2QsTUFBTVk7UUFDakIsTUFBTUcsU0FBUyxNQUFNRCxHQUFHRCxLQUFLLENBQUNBO1FBQzlCLE1BQU1HLFVBQVUsTUFBTUQsT0FBT0UsR0FBRztRQUVoQyxPQUFPRDtJQUNULEVBQUUsT0FBTUUsT0FBWTtRQUNsQixNQUFNbkIsYUFBYTtZQUNqQlk7WUFDQVEsVUFBVVo7WUFDVmEsT0FBT3RCLFdBQVd1QixjQUFjO1lBQ2hDQyxPQUFPSixNQUFNSyxPQUFPO1FBQ3RCLEdBQUdkO0lBQ0w7QUFDRixFQUFFIn0=
|