@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/reactions.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 } from '@nlabs/utils/parsers/strings';
|
|
6
6
|
import { aql } from 'arangojs';
|
|
@@ -653,4 +653,4 @@ export const hasReaction = async (context, itemId, reactionName, direction = 'OU
|
|
|
653
653
|
}
|
|
654
654
|
};
|
|
655
655
|
|
|
656
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7Z2V0Q29ubmVjdGlvbnNCeVVzZXJ9IGZyb20gJy4uL2xhbWJkYXMvYWN0aW9ucy93ZWJzb2NrZXRzLmpzJztcbmltcG9ydCB7d3NDbGllbnR9IGZyb20gJy4uL2xhbWJkYXMvdXRpbHMvd2Vic29ja2V0LmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEltYWdlQnlJZH0gZnJvbSAnLi9pbWFnZXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtRdWVyeUZpbHRlcn0gZnJvbSAnLi4vdHlwZXMvYXBwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0LCBGaWx0ZXJDb25kaXRpb24sIEZpbHRlck9wZXJhdG9yfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclJlYWN0aW9uUXVlcnksIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncmVhY3Rpb25zJztcbmNvbnN0IGhhc1JlYWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKTtcbmNvbnN0IHVzZXJzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuVVNFUlMpO1xuY29uc3QgUEhPVE9fUkVBQ1RJT05fTkFNRVMgPSBbJ2Rpc2xpa2UnLCAnbGlrZScsICdzYXZlZCddIGFzIGNvbnN0O1xuY29uc3QgT1BQT1NJTkdfUkVBQ1RJT05fTkFNRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGRpc2xpa2U6ICdsaWtlJyxcbiAgbGlrZTogJ2Rpc2xpa2UnXG59O1xuXG5leHBvcnQgdHlwZSBSZWFjdGlvbkRpcmVjdGlvbiA9ICdJTkJPVU5EJyB8ICdPVVRCT1VORCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb24ge1xuICByZWFkb25seSBfZnJvbT86IHN0cmluZztcbiAgcmVhZG9ubHkgX2tleT86IHN0cmluZztcbiAgcmVhZG9ubHkgX3RvPzogc3RyaW5nO1xuICByZWFkb25seSBhZGRlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgY291bnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogQXJhbmdvRGJDb2xsZWN0aW9uO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hUmVhY3Rpb24ge1xuICByZWFkb25seSBfZnJvbT86IHN0cmluZztcbiAgcmVhZG9ubHkgX2tleT86IHN0cmluZztcbiAgcmVhZG9ubHkgX3RvPzogc3RyaW5nO1xuICByZWFkb25seSBhZGRlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSZWFjdGlvbk9wdGlvbnMgPSAob3B0aW9uczogUmVhY3Rpb25PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXRcbiAgfTtcbn07XG5cbmNvbnN0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkUmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuXG4gIGlmKCFQSE9UT19SRUFDVElPTl9OQU1FUy5pbmNsdWRlcyhub3JtYWxpemVkUmVhY3Rpb25OYW1lIGFzIHR5cGVvZiBQSE9UT19SRUFDVElPTl9OQU1FU1tudW1iZXJdKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcblxuICBpZighZm9ybWF0SXRlbUlkLnN0YXJ0c1dpdGgoYCR7Q09MTEVDVElPTlMuSU1BR0VTfS9gKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGltYWdlSWQgPSBwYXJzZUlkKGZvcm1hdEl0ZW1JZC5zcGxpdCgnLycpLmF0KC0xKSB8fCAnJyk7XG5cbiAgaWYoIWltYWdlSWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbWFnZSA9IGF3YWl0IGdldEltYWdlQnlJZChjb250ZXh0LCBpbWFnZUlkKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhpbWFnZT8udXNlcklkIHx8ICcnKSk7XG5cbiAgaWYoIW93bmVyVXNlcklkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2Zhdm9yaXRlQ291bnQsIGxpa2VDb3VudCwgZGlzbGlrZUNvdW50XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBnZXRSZWFjdGlvbkNvdW50KGNvbnRleHQsIGZvcm1hdEl0ZW1JZCwgJ3NhdmVkJykuY2F0Y2goKCkgPT4gMCksXG4gICAgZ2V0UmVhY3Rpb25Db3VudChjb250ZXh0LCBmb3JtYXRJdGVtSWQsICdsaWtlJykuY2F0Y2goKCkgPT4gMCksXG4gICAgZ2V0UmVhY3Rpb25Db3VudChjb250ZXh0LCBmb3JtYXRJdGVtSWQsICdkaXNsaWtlJykuY2F0Y2goKCkgPT4gMClcbiAgXSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gYXdhaXQgZ2V0Q29ubmVjdGlvbnNCeVVzZXIob3duZXJVc2VySWQpLmNhdGNoKCgpID0+IFtdKTtcbiAgY29uc3QgY29ubmVjdGlvbklkcyA9IGNvbm5lY3Rpb25zXG4gICAgLm1hcCgoY29ubmVjdGlvbikgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbj8uY29ubmVjdGlvbklkIHx8IGNvbm5lY3Rpb24/LnNvY2tldElkIHx8ICcnLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoIWNvbm5lY3Rpb25JZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgd3NDbGllbnQuc2VuZChjb25uZWN0aW9uSWRzLCB7XG4gICAgYWN0aW9uOiAncGhvdG8ucmVhY3Rpb24udXBkYXRlZCcsXG4gICAgZGF0YToge1xuICAgICAgaW1hZ2VJZCxcbiAgICAgIHJlYWN0aW9uczoge1xuICAgICAgICBkaXNsaWtlOiBOdW1iZXIoZGlzbGlrZUNvdW50IHx8IDApLFxuICAgICAgICBsaWtlOiBOdW1iZXIobGlrZUNvdW50IHx8IDApLFxuICAgICAgICBzYXZlZDogTnVtYmVyKGZhdm9yaXRlQ291bnQgfHwgMClcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgdmFsaWRhdGVTZXNzaW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGFjdGlvbjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmICghc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuSU5WQUxJRF9TRVNTSU9OLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2Vzc2lvbklkO1xufTtcblxuY29uc3QgZ2V0UGVyc29uYURvY0lkID0gKHBlcnNvbmFJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gcGFyc2VBcmFuZ29JZChwZXJzb25hSWQpO1xuXG4gIGlmKHBlcnNvbmFEb2NJZCkge1xuICAgIHJldHVybiBwZXJzb25hRG9jSWQ7XG4gIH1cblxuICBjb25zdCBwZXJzb25hS2V5ID0gcGFyc2VJZChwZXJzb25hSWQpO1xuICByZXR1cm4gcGVyc29uYUtleSA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BlcnNvbmFLZXl9YCA6ICcnO1xufTtcblxuY29uc3QgZ2V0UmVhY3Rpb25QZXJzb25hRG9jSWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcGVyc29uYUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCByZXF1ZXN0ZWRQZXJzb25hRG9jSWQgPSBnZXRQZXJzb25hRG9jSWQocGVyc29uYUlkKTtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFEb2NJZCA9IGdldFBlcnNvbmFEb2NJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgcmV0dXJuIHJlcXVlc3RlZFBlcnNvbmFEb2NJZCB8fCBzZXNzaW9uUGVyc29uYURvY0lkO1xufTtcblxuY29uc3QgYXNzZXJ0UGVyc29uYVJlYWN0aW9uU291cmNlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hRG9jSWQ6IHN0cmluZyxcbiAgYWN0aW9uOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBzZXNzaW9uVXNlcklkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IHBlcnNvbmFLZXkgPSBwYXJzZUlkKHBlcnNvbmFEb2NJZCk7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hS2V5ID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIXBlcnNvbmFLZXkgfHwgIXNlc3Npb25Vc2VySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpO1xuICB9XG5cbiAgaWYoc2Vzc2lvblBlcnNvbmFLZXkgJiYgcGVyc29uYUtleSA9PT0gc2Vzc2lvblBlcnNvbmFLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1c2VyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBSRVRVUk4gRE9DVU1FTlQoJHt1c2Vyc0NvbGxlY3Rpb259LCAke3Nlc3Npb25Vc2VySWR9KVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpO1xuICBjb25zdCB1c2VyUGVyc29uYUtleSA9IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKHVzZXJQZXJzb25hS2V5ICYmIHBlcnNvbmFLZXkgPT09IHVzZXJQZXJzb25hS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgIGFjdGlvbixcbiAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICBsYWJlbDogJ2ludmFsaWRfcGVyc29uYV9yZWFjdGlvbl9zb3VyY2UnLFxuICAgIHZhbHVlOiAnaW52YWxpZF9wZXJzb25hX3JlYWN0aW9uX3NvdXJjZSdcbiAgfSwgbmV3IEVycm9yKCdpbnZhbGlkX3BlcnNvbmFfcmVhY3Rpb25fc291cmNlJyksIGNvbnRleHQpO1xufTtcblxuY29uc3QgYnVpbGRQZXJzb25hUmVhY3Rpb24gPSAoXG4gIHBlcnNvbmFEb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHJlYWN0aW9uVHlwZTogc3RyaW5nLFxuICByZWFjdGlvblZhbHVlOiBzdHJpbmdcbik6IFBlcnNvbmFSZWFjdGlvbiA9PiAoe1xuICBfZnJvbTogcGVyc29uYURvY0lkLFxuICBfa2V5OiBjcmVhdGVIYXNoKGByZWFjdGlvbi0ke2l0ZW1Eb2NJZH0tJHtwZXJzb25hRG9jSWR9LSR7cmVhY3Rpb25OYW1lfWApLFxuICBfdG86IGl0ZW1Eb2NJZCxcbiAgYWRkZWQ6IERhdGUubm93KCksXG4gIG5hbWU6IHJlYWN0aW9uTmFtZSxcbiAgdHlwZTogcmVhY3Rpb25UeXBlLFxuICB2YWx1ZTogcmVhY3Rpb25WYWx1ZSB8fCB1bmRlZmluZWRcbn0pO1xuXG5jb25zdCByZW1vdmVQZXJzb25hUmVhY3Rpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFEb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8UGVyc29uYVJlYWN0aW9uIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiByZWFjdGlvbiBJTiAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiByZWFjdGlvbi5fZnJvbSA9PSAke3BlcnNvbmFEb2NJZH1cbiAgICAgIEZJTFRFUiByZWFjdGlvbi5fdG8gPT0gJHtpdGVtRG9jSWR9XG4gICAgICBGSUxURVIgcmVhY3Rpb24ubmFtZSA9PSAke3JlYWN0aW9uTmFtZX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSByZWFjdGlvbiBJTiAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIFJFVFVSTiBPTERcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIGFzIFByb21pc2U8UGVyc29uYVJlYWN0aW9uIHwgbnVsbD4pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBlcnNvbmFSZWFjdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbjogUGVyc29uYVJlYWN0aW9uID0ge31cbik6IFByb21pc2U8UGVyc29uYVJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQZXJzb25hUmVhY3Rpb24nO1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBnZXRSZWFjdGlvblBlcnNvbmFEb2NJZChjb250ZXh0LCBwZXJzb25hSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IHJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbj8ubmFtZSB8fCAnbGlrZScsIDMyKTtcbiAgY29uc3QgcmVhY3Rpb25UeXBlID0gcGFyc2VDaGFyKHJlYWN0aW9uPy50eXBlIHx8ICcnLCAzMikudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVhY3Rpb25WYWx1ZSA9IHBhcnNlU3RyaW5nKHJlYWN0aW9uPy52YWx1ZSB8fCAnJywgMzIpO1xuXG4gIGF3YWl0IGFzc2VydFBlcnNvbmFSZWFjdGlvblNvdXJjZShjb250ZXh0LCBwZXJzb25hRG9jSWQsIGFjdGlvbik7XG5cbiAgY29uc3QgbmV4dFJlYWN0aW9uID0gYnVpbGRQZXJzb25hUmVhY3Rpb24ocGVyc29uYURvY0lkLCBpdGVtRG9jSWQsIHJlYWN0aW9uTmFtZSwgcmVhY3Rpb25UeXBlLCByZWFjdGlvblZhbHVlKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG9wcG9zaW5nUmVhY3Rpb25OYW1lID0gT1BQT1NJTkdfUkVBQ1RJT05fTkFNRVNbcmVhY3Rpb25OYW1lXTtcblxuICAgIGlmKG9wcG9zaW5nUmVhY3Rpb25OYW1lKSB7XG4gICAgICBhd2FpdCByZW1vdmVQZXJzb25hUmVhY3Rpb24oY29udGV4dCwgcGVyc29uYURvY0lkLCBpdGVtRG9jSWQsIG9wcG9zaW5nUmVhY3Rpb25OYW1lKTtcbiAgICAgIGF3YWl0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlKGNvbnRleHQsIGl0ZW1Eb2NJZCwgb3Bwb3NpbmdSZWFjdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBVUFNFUlQge19mcm9tOiAke3BlcnNvbmFEb2NJZH0sIF90bzogJHtpdGVtRG9jSWR9LCBuYW1lOiAke3JlYWN0aW9uTmFtZX19XG4gICAgICBJTlNFUlQgJHtuZXh0UmVhY3Rpb259XG4gICAgICBVUERBVEUge1xuICAgICAgICBuYW1lOiAke3JlYWN0aW9uTmFtZX0sXG4gICAgICAgIHR5cGU6ICR7cmVhY3Rpb25UeXBlfSxcbiAgICAgICAgdmFsdWU6ICR7cmVhY3Rpb25WYWx1ZSB8fCBudWxsfVxuICAgICAgfSBJTiAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIFJFVFVSTiBORVdcbiAgICBgO1xuXG4gICAgY29uc3Qgc2F2ZWRSZWFjdGlvbiA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpIGFzIFByb21pc2U8UGVyc29uYVJlYWN0aW9uPik7XG4gICAgYXdhaXQgZW1pdFBob3RvUmVhY3Rpb25VcGRhdGUoY29udGV4dCwgaXRlbURvY0lkLCByZWFjdGlvbk5hbWUpO1xuICAgIHJldHVybiBzYXZlZFJlYWN0aW9uO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVBlcnNvbmFSZWFjdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxQZXJzb25hUmVhY3Rpb24gfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVQZXJzb25hUmVhY3Rpb24nO1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBnZXRSZWFjdGlvblBlcnNvbmFEb2NJZChjb250ZXh0LCBwZXJzb25hSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcblxuICBhd2FpdCBhc3NlcnRQZXJzb25hUmVhY3Rpb25Tb3VyY2UoY29udGV4dCwgcGVyc29uYURvY0lkLCBhY3Rpb24pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGVsZXRlZFJlYWN0aW9uID0gYXdhaXQgcmVtb3ZlUGVyc29uYVJlYWN0aW9uKGNvbnRleHQsIHBlcnNvbmFEb2NJZCwgaXRlbURvY0lkLCBmb3JtYXRSZWFjdGlvbk5hbWUpO1xuXG4gICAgaWYoZGVsZXRlZFJlYWN0aW9uPy5uYW1lKSB7XG4gICAgICBhd2FpdCBlbWl0UGhvdG9SZWFjdGlvblVwZGF0ZShjb250ZXh0LCBpdGVtRG9jSWQsIFN0cmluZyhkZWxldGVkUmVhY3Rpb24ubmFtZSB8fCAnJykpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkUmVhY3Rpb247XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzUGVyc29uYVJlYWN0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hSWQ6IHN0cmluZyxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2hhc1BlcnNvbmFSZWFjdGlvbic7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGdldFJlYWN0aW9uUGVyc29uYURvY0lkKGNvbnRleHQsIHBlcnNvbmFJZCk7XG4gIGNvbnN0IGl0ZW1Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuXG4gIGF3YWl0IGFzc2VydFBlcnNvbmFSZWFjdGlvblNvdXJjZShjb250ZXh0LCBwZXJzb25hRG9jSWQsIGFjdGlvbik7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcmVhY3Rpb24gSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgcmVhY3Rpb24uX2Zyb20gPT0gJHtwZXJzb25hRG9jSWR9XG4gICAgICBGSUxURVIgcmVhY3Rpb24uX3RvID09ICR7aXRlbURvY0lkfVxuICAgICAgRklMVEVSIHJlYWN0aW9uLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdHJ1ZVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuICEhKGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgcmVhY3Rpb24gZWRnZSBkb2N1bWVudFxuICovXG5jb25zdCBjcmVhdGVSZWFjdGlvbkVkZ2UgPSAoXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHJlYWN0aW9uVHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbixcbiAgcmVhY3Rpb25WYWx1ZT86IHN0cmluZ1xuKTogUmVhY3Rpb24gPT4ge1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuXG4gIHJldHVybiB7XG4gICAgX2Zyb206IHNlc3Npb25Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBpdGVtSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogcmVhY3Rpb25OYW1lLFxuICAgIHR5cGU6IHJlYWN0aW9uVHlwZSxcbiAgICB2YWx1ZTogcmVhY3Rpb25WYWx1ZSAhPT0gdW5kZWZpbmVkID8gcmVhY3Rpb25WYWx1ZSA6IHVuZGVmaW5lZFxuICB9O1xufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgcmVhY3Rpb24gZXhpc3RzXG4gKi9cbmNvbnN0IGZpbmRFeGlzdGluZ1JlYWN0aW9uID0gYXN5bmMgKFxuICBkYXRhYmFzZU5hbWU6IHN0cmluZyxcbiAgc2Vzc2lvbkRvY0lkOiBzdHJpbmcsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxSZWFjdGlvbiB8IG51bGw+ID0+IHtcbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogc2Vzc2lvbkRvY0lkfSxcbiAgICAgIHtmaWVsZDogJ190bycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogaXRlbUlkfSxcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHJlYWN0aW9uTmFtZX1cbiAgICBdXG4gIH0sICdyJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgciBJTiAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiByXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKCgpID0+IG51bGwpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJlYWN0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb246IFJlYWN0aW9uID0ge30sXG4gIGFsbG93RHVwbGljYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSB2YWxpZGF0ZVNlc3Npb24oY29udGV4dCwgYWN0aW9uKTtcblxuICBjb25zdCB7XG4gICAgbmFtZTogaXRlbU5hbWUgPSAnbGlrZScsXG4gICAgdHlwZTogaXRlbVR5cGUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG5cbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIoaXRlbU5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25UeXBlID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdFZhbHVlID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuXG4gIGNvbnN0IGVkZ2UgPSBjcmVhdGVSZWFjdGlvbkVkZ2Uoc2Vzc2lvbklkLCBmb3JtYXRJdGVtSWQsIGZvcm1hdFJlYWN0aW9uTmFtZSwgZm9ybWF0UmVhY3Rpb25UeXBlLCBmb3JtYXRWYWx1ZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvcHBvc2luZ1JlYWN0aW9uTmFtZSA9IE9QUE9TSU5HX1JFQUNUSU9OX05BTUVTW2Zvcm1hdFJlYWN0aW9uTmFtZV07XG5cbiAgICBpZihvcHBvc2luZ1JlYWN0aW9uTmFtZSkge1xuICAgICAgY29uc3Qgb3Bwb3NpbmdSZWFjdGlvbiA9IGF3YWl0IGZpbmRFeGlzdGluZ1JlYWN0aW9uKFxuICAgICAgICBkYXRhYmFzZU5hbWUsXG4gICAgICAgIHNlc3Npb25Eb2NJZCxcbiAgICAgICAgZm9ybWF0SXRlbUlkLFxuICAgICAgICBvcHBvc2luZ1JlYWN0aW9uTmFtZVxuICAgICAgKTtcblxuICAgICAgaWYob3Bwb3NpbmdSZWFjdGlvbj8uX2tleSkge1xuICAgICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX1JFQUNUSU9OKTtcbiAgICAgICAgYXdhaXQgZWRnZUNvbGxlY3Rpb24ucmVtb3ZlKG9wcG9zaW5nUmVhY3Rpb24uX2tleSk7XG4gICAgICAgIGF3YWl0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlKGNvbnRleHQsIGZvcm1hdEl0ZW1JZCwgb3Bwb3NpbmdSZWFjdGlvbk5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzIGlmIG5vdCBhbGxvd2VkXG4gICAgaWYgKCFhbGxvd0R1cGxpY2F0ZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdSZWFjdGlvbiA9IGF3YWl0IGZpbmRFeGlzdGluZ1JlYWN0aW9uKFxuICAgICAgICBkYXRhYmFzZU5hbWUsXG4gICAgICAgIHNlc3Npb25Eb2NJZCxcbiAgICAgICAgZm9ybWF0SXRlbUlkLFxuICAgICAgICBmb3JtYXRSZWFjdGlvbk5hbWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChleGlzdGluZ1JlYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1JlYWN0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfUkVBQ1RJT04pO1xuICAgIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pO1xuICAgIGF3YWl0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlKGNvbnRleHQsIGZvcm1hdEl0ZW1JZCwgZm9ybWF0UmVhY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gZWRnZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVhY3Rpb24gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcmVhY3Rpb25JZDogc3RyaW5nKTogUHJvbWlzZTxSZWFjdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHZhbGlkYXRlU2Vzc2lvbihjb250ZXh0LCBhY3Rpb24pO1xuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3BhcnNlSWQoc2Vzc2lvbklkKX1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbklkID0gYCR7RURHRVMuSEFTX1JFQUNUSU9OfS8ke3BhcnNlSWQocmVhY3Rpb25JZCl9YDtcblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZSh7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ19mcm9tJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRTZXNzaW9uSWR9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIHIgPSBET0NVTUVOVCgke2Zvcm1hdFJlYWN0aW9uSWR9KVxuICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIHIgSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgUkVUVVJOIE9MRFxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGVsZXRlZFJlYWN0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGlmKGRlbGV0ZWRSZWFjdGlvbj8uX3RvICYmIGRlbGV0ZWRSZWFjdGlvbj8ubmFtZSkge1xuICAgICAgYXdhaXQgZW1pdFBob3RvUmVhY3Rpb25VcGRhdGUoY29udGV4dCwgU3RyaW5nKGRlbGV0ZWRSZWFjdGlvbi5fdG8gfHwgJycpLCBTdHJpbmcoZGVsZXRlZFJlYWN0aW9uLm5hbWUgfHwgJycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZFJlYWN0aW9uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbkJ5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVSZWFjdGlvbkJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbklkID0gdmFsaWRhdGVTZXNzaW9uKGNvbnRleHQsIGFjdGlvbik7XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7cGFyc2VJZChzZXNzaW9uSWQpfWA7XG4gIGNvbnN0IGZvcm1hdEl0ZW1Eb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSk7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0U2Vzc2lvbklkfSxcbiAgICAgIHtmaWVsZDogJ190bycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0SXRlbURvY0lkfSxcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBdXG4gIH0sICdyJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgciBJTiAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSByIElOICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgUkVUVVJOIE9MRFxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGVsZXRlZFJlYWN0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGlmKGRlbGV0ZWRSZWFjdGlvbj8ubmFtZSkge1xuICAgICAgYXdhaXQgZW1pdFBob3RvUmVhY3Rpb25VcGRhdGUoY29udGV4dCwgZm9ybWF0SXRlbURvY0lkLCBTdHJpbmcoZGVsZXRlZFJlYWN0aW9uLm5hbWUgfHwgJycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZFJlYWN0aW9uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWFjdGlvbiA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSB2YWxpZGF0ZVNlc3Npb24oY29udGV4dCwgYWN0aW9uKTtcblxuICBjb25zdCB7XG4gICAgaWQ6IGl0ZW1JZCxcbiAgICBuYW1lOiBpdGVtTmFtZSxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdE5hbWUgPSBwYXJzZUNoYXIoaXRlbU5hbWUsIDMyKTtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtmb3JtYXRJZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHVwZGF0ZTogUmVhY3Rpb24gPSB7XG4gICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgfTtcbiAgY29uc3QgaW5zZXJ0OiBSZWFjdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQgJHt7X2lkOiBmb3JtYXRJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE5FV2A7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0UmVhY3Rpb25Db3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gSU5CT1VORCAke2Zvcm1hdEl0ZW1JZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgICAgUkVUVVJOIGNvdW50XG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnRCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHZhbGlkYXRlU2Vzc2lvbihjb250ZXh0LCBhY3Rpb24pO1xuXG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZSh7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFJlYWN0aW9uTmFtZX0sXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogc2Vzc2lvbkRvY0lkfVxuICAgIF1cbiAgfSwgJ3InKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9ICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJDbGF1c2UpfVxuICAgICAgQ09MTEVDVCByZWFjdGlvblZhbHVlID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiBNRVJHRShyLCB7Y291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIHZhbGlkYXRlU2Vzc2lvbihjb250ZXh0LCBhY3Rpb24pO1xuXG4gIGNvbnN0IHtmaWx0ZXJzID0gW10sIGlkOiBncm91cElkLCB2YWx1ZX06IFVzZXJSZWFjdGlvblF1ZXJ5ID0gcGFyYW1zO1xuICBjb25zdCByZWFjdGlvbiA9IHBhcnNlQ2hhcih2YWx1ZSwgMzIpO1xuICBjb25zdCBncm91cERvY0lkID0gcGFyc2VBcmFuZ29JZChncm91cElkKTtcblxuICAvLyBCdWlsZCBmaWx0ZXIgY29uZGl0aW9ucyBkeW5hbWljYWxseVxuICBjb25zdCBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSA9IFtcbiAgICB7ZmllbGQ6ICd2YWx1ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogcmVhY3Rpb259XG4gIF07XG5cbiAgLy8gQWRkIGR5bmFtaWMgZmlsdGVycyBmcm9tIHBhcmFtc1xuICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICBjb25zdCB7Y29uZGl0aW9uYWwgPSAnJywgbmFtZSwgdmFsdWU6IHF1ZXJ5VmFsdWV9OiBRdWVyeUZpbHRlciA9IGZpbHRlcjtcbiAgICBsZXQgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yID0gJz09JztcblxuICAgIGlmKGNvbmRpdGlvbmFsID09PSAnPj0nIHx8IGNvbmRpdGlvbmFsID09PSAnPD0nIHx8IGNvbmRpdGlvbmFsID09PSAnPicgfHwgY29uZGl0aW9uYWwgPT09ICc8Jykge1xuICAgICAgb3BlcmF0b3IgPSBjb25kaXRpb25hbCBhcyBGaWx0ZXJPcGVyYXRvcjtcbiAgICB9XG5cbiAgICBpZihuYW1lID09PSAnYWRkZWQnKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goe2ZpZWxkOiAnYWRkZWQnLCBvcGVyYXRvciwgdmFsdWU6IHBhcnNlTnVtKHF1ZXJ5VmFsdWUpfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZSh7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnNcbiAgfSwgJ3InKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBnLCByIElOIElOQk9VTkQgJHtncm91cERvY0lkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZPUiB1IElOICR7dXNlcnNDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChgJHtmaWx0ZXJDbGF1c2V9ICYmIHUuX2lkID09IHIuX2Zyb21gKX1cbiAgICAgIFJFVFVSTiB1XG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbkxpc3RCeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZSh7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBdXG4gIH0sICdyJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaSwgciBJTiBJTkJPVU5EICR7Zm9ybWF0SXRlbUlkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKGksIHtyZWFjdGlvbjogcn0pXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtTGlzdEJ5UmVhY3Rpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW1zQnlSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZSh7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBdXG4gIH0sICdyJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSwgciBJTiBPVVRCT1VORCAke2Zvcm1hdEl0ZW1JZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRSh1LCB7cmVhY3Rpb246IHJ9KVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzUmVhY3Rpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgZGlyZWN0aW9uOiBSZWFjdGlvbkRpcmVjdGlvbiA9ICdPVVRCT1VORCdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnaGFzUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHZhbGlkYXRlU2Vzc2lvbihjb250ZXh0LCBhY3Rpb24pO1xuXG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdPVVRCT1VORCcgOiAnSU5CT1VORCc7XG4gIGNvbnN0IGl0ZW1GaWVsZCA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdfdG8nIDogJ19mcm9tJztcblxuICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlckNsYXVzZSh7XG4gICAgbG9naWM6ICdBTkQnLFxuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIHtmaWVsZDogJ25hbWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHJlYWN0aW9uTmFtZX0sXG4gICAgICB7ZmllbGQ6IGl0ZW1GaWVsZCwgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRJdGVtSWR9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gJHtsaXRlcmFsKGZvcm1hdERpcmVjdGlvbil9ICR7c2Vzc2lvbkRvY0lkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiByXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZWFjdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uID8gcmVhY3Rpb24udmFsdWUgPT09ICd0cnVlJyA6IGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiRXJyb3JUeXBlcyIsImdldENvbm5lY3Rpb25zQnlVc2VyIiwid3NDbGllbnQiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImJ1aWxkRmlsdGVyQ2xhdXNlIiwiZ2V0TGltaXQiLCJ1c2VEYiIsImdldEltYWdlQnlJZCIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNSZWFjdGlvbkNvbGxlY3Rpb24iLCJIQVNfUkVBQ1RJT04iLCJ1c2Vyc0NvbGxlY3Rpb24iLCJVU0VSUyIsIlBIT1RPX1JFQUNUSU9OX05BTUVTIiwiT1BQT1NJTkdfUkVBQ1RJT05fTkFNRVMiLCJkaXNsaWtlIiwibGlrZSIsInBhcnNlUmVhY3Rpb25PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiZW1pdFBob3RvUmVhY3Rpb25VcGRhdGUiLCJjb250ZXh0IiwiaXRlbUlkIiwicmVhY3Rpb25OYW1lIiwibm9ybWFsaXplZFJlYWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiZm9ybWF0SXRlbUlkIiwic3RhcnRzV2l0aCIsIklNQUdFUyIsImltYWdlSWQiLCJzcGxpdCIsImF0IiwiaW1hZ2UiLCJjYXRjaCIsIm93bmVyVXNlcklkIiwiU3RyaW5nIiwidXNlcklkIiwiZmF2b3JpdGVDb3VudCIsImxpa2VDb3VudCIsImRpc2xpa2VDb3VudCIsIlByb21pc2UiLCJhbGwiLCJnZXRSZWFjdGlvbkNvdW50IiwiY29ubmVjdGlvbnMiLCJjb25uZWN0aW9uSWRzIiwibWFwIiwiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25JZCIsInNvY2tldElkIiwiZmlsdGVyIiwiQm9vbGVhbiIsImluZGV4IiwibGlzdCIsImluZGV4T2YiLCJsZW5ndGgiLCJzZW5kIiwiYWN0aW9uIiwiZGF0YSIsInJlYWN0aW9ucyIsIk51bWJlciIsInNhdmVkIiwidmFsaWRhdGVTZXNzaW9uIiwic2Vzc2lvbiIsInNlc3Npb25JZCIsImNhdGVnb3J5IiwibGFiZWwiLCJJTlZBTElEX1NFU1NJT04iLCJ2YWx1ZSIsImdldFBlcnNvbmFEb2NJZCIsInBlcnNvbmFJZCIsInBlcnNvbmFEb2NJZCIsInBlcnNvbmFLZXkiLCJQRVJTT05BUyIsImdldFJlYWN0aW9uUGVyc29uYURvY0lkIiwicmVxdWVzdGVkUGVyc29uYURvY0lkIiwic2Vzc2lvblBlcnNvbmFEb2NJZCIsImFzc2VydFBlcnNvbmFSZWFjdGlvblNvdXJjZSIsInNlc3Npb25Vc2VySWQiLCJzZXNzaW9uUGVyc29uYUtleSIsIkVycm9yIiwidXNlciIsImRhdGFiYXNlTmFtZSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJ1c2VyUGVyc29uYUtleSIsImJ1aWxkUGVyc29uYVJlYWN0aW9uIiwiaXRlbURvY0lkIiwicmVhY3Rpb25UeXBlIiwicmVhY3Rpb25WYWx1ZSIsIl9mcm9tIiwiX2tleSIsIl90byIsImFkZGVkIiwiRGF0ZSIsIm5vdyIsIm5hbWUiLCJ0eXBlIiwidW5kZWZpbmVkIiwicmVtb3ZlUGVyc29uYVJlYWN0aW9uIiwiYXFsUXJ5IiwiYWRkUGVyc29uYVJlYWN0aW9uIiwicmVhY3Rpb24iLCJ0b0xvd2VyQ2FzZSIsIm5leHRSZWFjdGlvbiIsIm9wcG9zaW5nUmVhY3Rpb25OYW1lIiwic2F2ZWRSZWFjdGlvbiIsImVycm9yIiwiREFUQUJBU0VfRVJST1IiLCJkZWxldGVQZXJzb25hUmVhY3Rpb24iLCJmb3JtYXRSZWFjdGlvbk5hbWUiLCJkZWxldGVkUmVhY3Rpb24iLCJoYXNQZXJzb25hUmVhY3Rpb24iLCJjcmVhdGVSZWFjdGlvbkVkZ2UiLCJzZXNzaW9uRG9jSWQiLCJlZGdlSWQiLCJmaW5kRXhpc3RpbmdSZWFjdGlvbiIsImZpbHRlckNsYXVzZSIsImxvZ2ljIiwiY29uZGl0aW9ucyIsImZpZWxkIiwib3BlcmF0b3IiLCJhZGRSZWFjdGlvbiIsImFsbG93RHVwbGljYXRlIiwiaXRlbU5hbWUiLCJpdGVtVHlwZSIsIml0ZW1WYWx1ZSIsImZvcm1hdFJlYWN0aW9uVHlwZSIsImZvcm1hdFZhbHVlIiwiZWRnZSIsIm9wcG9zaW5nUmVhY3Rpb24iLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJyZW1vdmUiLCJleGlzdGluZ1JlYWN0aW9uIiwic2F2ZSIsInJldHVybk5ldyIsImRlbGV0ZVJlYWN0aW9uIiwicmVhY3Rpb25JZCIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9uSWQiLCJkZWxldGVSZWFjdGlvbkJ5SXRlbSIsImZvcm1hdEl0ZW1Eb2NJZCIsInVwZGF0ZVJlYWN0aW9uIiwiaWQiLCJmb3JtYXRJZCIsImZvcm1hdE5hbWUiLCJ1cGRhdGUiLCJpbnNlcnQiLCJfaWQiLCJnZXRSZWFjdGlvbkNvdW50QnlVc2VyIiwiZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24iLCJwYXJhbXMiLCJmaWx0ZXJzIiwiZ3JvdXBJZCIsImdyb3VwRG9jSWQiLCJmb3JFYWNoIiwiY29uZGl0aW9uYWwiLCJxdWVyeVZhbHVlIiwicHVzaCIsImdldFJlYWN0aW9uTGlzdEJ5SXRlbSIsImdldEl0ZW1MaXN0QnlSZWFjdGlvbiIsImhhc1JlYWN0aW9uIiwiZGlyZWN0aW9uIiwiZm9ybWF0RGlyZWN0aW9uIiwiaXRlbUZpZWxkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsb0JBQW9CLFFBQU8sbUNBQW1DO0FBQ3RFLFNBQVFDLFFBQVEsUUFBTyxnQ0FBZ0M7QUFDdkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZLFFBQU8sNkJBQTZCO0FBQ2xFLFNBQVFDLGlCQUFpQixRQUFPLHlCQUF5QjtBQUN6RCxTQUFRQyxRQUFRLEVBQUVDLEtBQUssUUFBTyw0QkFBNEI7QUFDMUQsU0FBUUMsWUFBWSxRQUFPLGNBQWM7QUFRekMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLHdCQUF3QmIsUUFBUUUsTUFBTVksWUFBWTtBQUN4RCxNQUFNQyxrQkFBa0JmLFFBQVFDLFlBQVllLEtBQUs7QUFDakQsTUFBTUMsdUJBQXVCO0lBQUM7SUFBVztJQUFRO0NBQVE7QUFDekQsTUFBTUMsMEJBQWtEO0lBQ3REQyxTQUFTO0lBQ1RDLE1BQU07QUFDUjtBQWdDQSxPQUFPLE1BQU1DLHVCQUF1QixDQUFDQyxVQUEyQixDQUFDLENBQUM7SUFDaEUsTUFBTSxFQUNKQyxPQUFPLENBQUMsRUFDUkMsS0FBSyxFQUFFLEVBQ1IsR0FBR0Y7SUFFSixPQUFPO1FBQ0xHLE9BQU9oQixTQUFTYyxNQUFNQztJQUN4QjtBQUNGLEVBQUU7QUFFRixNQUFNRSwwQkFBMEIsT0FDOUJDLFNBQ0FDLFFBQ0FDO0lBRUEsTUFBTUMseUJB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
|
|
656
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3JlYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2dldENvbm5lY3Rpb25zQnlVc2VyfSBmcm9tICcuLi9sYW1iZGFzL2FjdGlvbnMvd2Vic29ja2V0cy5qcyc7XG5pbXBvcnQge3dzQ2xpZW50fSBmcm9tICcuLi9sYW1iZGFzL3V0aWxzL3dlYnNvY2tldC5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRGaWx0ZXJDbGF1c2V9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRJbWFnZUJ5SWR9IGZyb20gJy4vaW1hZ2VzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7UXVlcnlGaWx0ZXJ9IGZyb20gJy4uL3R5cGVzL2FwcHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdCwgRmlsdGVyQ29uZGl0aW9uLCBGaWx0ZXJPcGVyYXRvcn0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJSZWFjdGlvblF1ZXJ5LCBVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3JlYWN0aW9ucyc7XG5jb25zdCBoYXNSZWFjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTik7XG5jb25zdCB1c2Vyc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlVTRVJTKTtcbmNvbnN0IFBIT1RPX1JFQUNUSU9OX05BTUVTID0gWydkaXNsaWtlJywgJ2xpa2UnLCAnc2F2ZWQnXSBhcyBjb25zdDtcbmNvbnN0IE9QUE9TSU5HX1JFQUNUSU9OX05BTUVTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBkaXNsaWtlOiAnbGlrZScsXG4gIGxpa2U6ICdkaXNsaWtlJ1xufTtcblxuZXhwb3J0IHR5cGUgUmVhY3Rpb25EaXJlY3Rpb24gPSAnSU5CT1VORCcgfCAnT1VUQk9VTkQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uIHtcbiAgcmVhZG9ubHkgX2Zyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF9rZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF90bz86IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc29uYVJlYWN0aW9uIHtcbiAgcmVhZG9ubHkgX2Zyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF9rZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF90bz86IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUmVhY3Rpb25PcHRpb25zID0gKG9wdGlvbnM6IFJlYWN0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5jb25zdCBlbWl0UGhvdG9SZWFjdGlvblVwZGF0ZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcblxuICBpZighUEhPVE9fUkVBQ1RJT05fTkFNRVMuaW5jbHVkZXMobm9ybWFsaXplZFJlYWN0aW9uTmFtZSBhcyB0eXBlb2YgUEhPVE9fUkVBQ1RJT05fTkFNRVNbbnVtYmVyXSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYoIWZvcm1hdEl0ZW1JZC5zdGFydHNXaXRoKGAke0NPTExFQ1RJT05TLklNQUdFU30vYCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbWFnZUlkID0gcGFyc2VJZChmb3JtYXRJdGVtSWQuc3BsaXQoJy8nKS5hdCgtMSkgfHwgJycpO1xuXG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW1hZ2UgPSBhd2FpdCBnZXRJbWFnZUJ5SWQoY29udGV4dCwgaW1hZ2VJZCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gIGNvbnN0IG93bmVyVXNlcklkID0gcGFyc2VJZChTdHJpbmcoaW1hZ2U/LnVzZXJJZCB8fCAnJykpO1xuXG4gIGlmKCFvd25lclVzZXJJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFtmYXZvcml0ZUNvdW50LCBsaWtlQ291bnQsIGRpc2xpa2VDb3VudF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0UmVhY3Rpb25Db3VudChjb250ZXh0LCBmb3JtYXRJdGVtSWQsICdzYXZlZCcpLmNhdGNoKCgpID0+IDApLFxuICAgIGdldFJlYWN0aW9uQ291bnQoY29udGV4dCwgZm9ybWF0SXRlbUlkLCAnbGlrZScpLmNhdGNoKCgpID0+IDApLFxuICAgIGdldFJlYWN0aW9uQ291bnQoY29udGV4dCwgZm9ybWF0SXRlbUlkLCAnZGlzbGlrZScpLmNhdGNoKCgpID0+IDApXG4gIF0pO1xuICBjb25zdCBjb25uZWN0aW9ucyA9IGF3YWl0IGdldENvbm5lY3Rpb25zQnlVc2VyKG93bmVyVXNlcklkKS5jYXRjaCgoKSA9PiBbXSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25JZHMgPSBjb25uZWN0aW9uc1xuICAgIC5tYXAoKGNvbm5lY3Rpb24pID0+IHBhcnNlU3RyaW5nKGNvbm5lY3Rpb24/LmNvbm5lY3Rpb25JZCB8fCBjb25uZWN0aW9uPy5zb2NrZXRJZCB8fCAnJywgMzIpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZmlsdGVyKChjb25uZWN0aW9uSWQsIGluZGV4LCBsaXN0KSA9PiBsaXN0LmluZGV4T2YoY29ubmVjdGlvbklkKSA9PT0gaW5kZXgpO1xuXG4gIGlmKCFjb25uZWN0aW9uSWRzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHdzQ2xpZW50LnNlbmQoY29ubmVjdGlvbklkcywge1xuICAgIGFjdGlvbjogJ3Bob3RvLnJlYWN0aW9uLnVwZGF0ZWQnLFxuICAgIGRhdGE6IHtcbiAgICAgIGltYWdlSWQsXG4gICAgICByZWFjdGlvbnM6IHtcbiAgICAgICAgZGlzbGlrZTogTnVtYmVyKGRpc2xpa2VDb3VudCB8fCAwKSxcbiAgICAgICAgbGlrZTogTnVtYmVyKGxpa2VDb3VudCB8fCAwKSxcbiAgICAgICAgc2F2ZWQ6IE51bWJlcihmYXZvcml0ZUNvdW50IHx8IDApXG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHZhbGlkYXRlU2Vzc2lvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhY3Rpb246IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcblxuICBpZiAoIXNlc3Npb25JZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLklOVkFMSURfU0VTU0lPTixcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNlc3Npb25JZDtcbn07XG5cbmNvbnN0IGdldFBlcnNvbmFEb2NJZCA9IChwZXJzb25hSWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IHBhcnNlQXJhbmdvSWQocGVyc29uYUlkKTtcblxuICBpZihwZXJzb25hRG9jSWQpIHtcbiAgICByZXR1cm4gcGVyc29uYURvY0lkO1xuICB9XG5cbiAgY29uc3QgcGVyc29uYUtleSA9IHBhcnNlSWQocGVyc29uYUlkKTtcbiAgcmV0dXJuIHBlcnNvbmFLZXkgPyBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtwZXJzb25hS2V5fWAgOiAnJztcbn07XG5cbmNvbnN0IGdldFJlYWN0aW9uUGVyc29uYURvY0lkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBlcnNvbmFJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcmVxdWVzdGVkUGVyc29uYURvY0lkID0gZ2V0UGVyc29uYURvY0lkKHBlcnNvbmFJZCk7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hRG9jSWQgPSBnZXRQZXJzb25hRG9jSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIHJldHVybiByZXF1ZXN0ZWRQZXJzb25hRG9jSWQgfHwgc2Vzc2lvblBlcnNvbmFEb2NJZDtcbn07XG5cbmNvbnN0IGFzc2VydFBlcnNvbmFSZWFjdGlvblNvdXJjZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYURvY0lkOiBzdHJpbmcsXG4gIGFjdGlvbjogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBwZXJzb25hS2V5ID0gcGFyc2VJZChwZXJzb25hRG9jSWQpO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUtleSA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gIGlmKCFwZXJzb25hS2V5IHx8ICFzZXNzaW9uVXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgfVxuXG4gIGlmKHNlc3Npb25QZXJzb25hS2V5ICYmIHBlcnNvbmFLZXkgPT09IHNlc3Npb25QZXJzb25hS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgUkVUVVJOIERPQ1VNRU5UKCR7dXNlcnNDb2xsZWN0aW9ufSwgJHtzZXNzaW9uVXNlcklkfSlcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgY29uc3QgdXNlclBlcnNvbmFLZXkgPSBwYXJzZUlkKFN0cmluZyh1c2VyPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZih1c2VyUGVyc29uYUtleSAmJiBwZXJzb25hS2V5ID09PSB1c2VyUGVyc29uYUtleSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IGxvZ0Vycm9yKHtcbiAgICBhY3Rpb24sXG4gICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgbGFiZWw6ICdpbnZhbGlkX3BlcnNvbmFfcmVhY3Rpb25fc291cmNlJyxcbiAgICB2YWx1ZTogJ2ludmFsaWRfcGVyc29uYV9yZWFjdGlvbl9zb3VyY2UnXG4gIH0sIG5ldyBFcnJvcignaW52YWxpZF9wZXJzb25hX3JlYWN0aW9uX3NvdXJjZScpLCBjb250ZXh0KTtcbn07XG5cbmNvbnN0IGJ1aWxkUGVyc29uYVJlYWN0aW9uID0gKFxuICBwZXJzb25hRG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICByZWFjdGlvblR5cGU6IHN0cmluZyxcbiAgcmVhY3Rpb25WYWx1ZTogc3RyaW5nXG4pOiBQZXJzb25hUmVhY3Rpb24gPT4gKHtcbiAgX2Zyb206IHBlcnNvbmFEb2NJZCxcbiAgX2tleTogY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtpdGVtRG9jSWR9LSR7cGVyc29uYURvY0lkfS0ke3JlYWN0aW9uTmFtZX1gKSxcbiAgX3RvOiBpdGVtRG9jSWQsXG4gIGFkZGVkOiBEYXRlLm5vdygpLFxuICBuYW1lOiByZWFjdGlvbk5hbWUsXG4gIHR5cGU6IHJlYWN0aW9uVHlwZSxcbiAgdmFsdWU6IHJlYWN0aW9uVmFsdWUgfHwgdW5kZWZpbmVkXG59KTtcblxuY29uc3QgcmVtb3ZlUGVyc29uYVJlYWN0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hRG9jSWQ6IHN0cmluZyxcbiAgaXRlbURvY0lkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFBlcnNvbmFSZWFjdGlvbiB8IG51bGw+ID0+IHtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgcmVhY3Rpb24gSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgcmVhY3Rpb24uX2Zyb20gPT0gJHtwZXJzb25hRG9jSWR9XG4gICAgICBGSUxURVIgcmVhY3Rpb24uX3RvID09ICR7aXRlbURvY0lkfVxuICAgICAgRklMVEVSIHJlYWN0aW9uLm5hbWUgPT0gJHtyZWFjdGlvbk5hbWV9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgcmVhY3Rpb24gSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBSRVRVUk4gT0xEXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSBhcyBQcm9taXNlPFBlcnNvbmFSZWFjdGlvbiB8IG51bGw+KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRQZXJzb25hUmVhY3Rpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nLFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb246IFBlcnNvbmFSZWFjdGlvbiA9IHt9XG4pOiBQcm9taXNlPFBlcnNvbmFSZWFjdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkUGVyc29uYVJlYWN0aW9uJztcbiAgY29uc3QgcGVyc29uYURvY0lkID0gZ2V0UmVhY3Rpb25QZXJzb25hRG9jSWQoY29udGV4dCwgcGVyc29uYUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCByZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb24/Lm5hbWUgfHwgJ2xpa2UnLCAzMik7XG4gIGNvbnN0IHJlYWN0aW9uVHlwZSA9IHBhcnNlQ2hhcihyZWFjdGlvbj8udHlwZSB8fCAnJywgMzIpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJlYWN0aW9uVmFsdWUgPSBwYXJzZVN0cmluZyhyZWFjdGlvbj8udmFsdWUgfHwgJycsIDMyKTtcblxuICBhd2FpdCBhc3NlcnRQZXJzb25hUmVhY3Rpb25Tb3VyY2UoY29udGV4dCwgcGVyc29uYURvY0lkLCBhY3Rpb24pO1xuXG4gIGNvbnN0IG5leHRSZWFjdGlvbiA9IGJ1aWxkUGVyc29uYVJlYWN0aW9uKHBlcnNvbmFEb2NJZCwgaXRlbURvY0lkLCByZWFjdGlvbk5hbWUsIHJlYWN0aW9uVHlwZSwgcmVhY3Rpb25WYWx1ZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvcHBvc2luZ1JlYWN0aW9uTmFtZSA9IE9QUE9TSU5HX1JFQUNUSU9OX05BTUVTW3JlYWN0aW9uTmFtZV07XG5cbiAgICBpZihvcHBvc2luZ1JlYWN0aW9uTmFtZSkge1xuICAgICAgYXdhaXQgcmVtb3ZlUGVyc29uYVJlYWN0aW9uKGNvbnRleHQsIHBlcnNvbmFEb2NJZCwgaXRlbURvY0lkLCBvcHBvc2luZ1JlYWN0aW9uTmFtZSk7XG4gICAgICBhd2FpdCBlbWl0UGhvdG9SZWFjdGlvblVwZGF0ZShjb250ZXh0LCBpdGVtRG9jSWQsIG9wcG9zaW5nUmVhY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgVVBTRVJUIHtfZnJvbTogJHtwZXJzb25hRG9jSWR9LCBfdG86ICR7aXRlbURvY0lkfSwgbmFtZTogJHtyZWFjdGlvbk5hbWV9fVxuICAgICAgSU5TRVJUICR7bmV4dFJlYWN0aW9ufVxuICAgICAgVVBEQVRFIHtcbiAgICAgICAgbmFtZTogJHtyZWFjdGlvbk5hbWV9LFxuICAgICAgICB0eXBlOiAke3JlYWN0aW9uVHlwZX0sXG4gICAgICAgIHZhbHVlOiAke3JlYWN0aW9uVmFsdWUgfHwgbnVsbH1cbiAgICAgIH0gSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBSRVRVUk4gTkVXXG4gICAgYDtcblxuICAgIGNvbnN0IHNhdmVkUmVhY3Rpb24gPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSBhcyBQcm9taXNlPFBlcnNvbmFSZWFjdGlvbj4pO1xuICAgIGF3YWl0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlKGNvbnRleHQsIGl0ZW1Eb2NJZCwgcmVhY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gc2F2ZWRSZWFjdGlvbjtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVQZXJzb25hUmVhY3Rpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBlcnNvbmFJZDogc3RyaW5nLFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8UGVyc29uYVJlYWN0aW9uIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlUGVyc29uYVJlYWN0aW9uJztcbiAgY29uc3QgcGVyc29uYURvY0lkID0gZ2V0UmVhY3Rpb25QZXJzb25hRG9jSWQoY29udGV4dCwgcGVyc29uYUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG5cbiAgYXdhaXQgYXNzZXJ0UGVyc29uYVJlYWN0aW9uU291cmNlKGNvbnRleHQsIHBlcnNvbmFEb2NJZCwgYWN0aW9uKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGRlbGV0ZWRSZWFjdGlvbiA9IGF3YWl0IHJlbW92ZVBlcnNvbmFSZWFjdGlvbihjb250ZXh0LCBwZXJzb25hRG9jSWQsIGl0ZW1Eb2NJZCwgZm9ybWF0UmVhY3Rpb25OYW1lKTtcblxuICAgIGlmKGRlbGV0ZWRSZWFjdGlvbj8ubmFtZSkge1xuICAgICAgYXdhaXQgZW1pdFBob3RvUmVhY3Rpb25VcGRhdGUoY29udGV4dCwgaXRlbURvY0lkLCBTdHJpbmcoZGVsZXRlZFJlYWN0aW9uLm5hbWUgfHwgJycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZFJlYWN0aW9uO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhhc1BlcnNvbmFSZWFjdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdoYXNQZXJzb25hUmVhY3Rpb24nO1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBnZXRSZWFjdGlvblBlcnNvbmFEb2NJZChjb250ZXh0LCBwZXJzb25hSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcblxuICBhd2FpdCBhc3NlcnRQZXJzb25hUmVhY3Rpb25Tb3VyY2UoY29udGV4dCwgcGVyc29uYURvY0lkLCBhY3Rpb24pO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHJlYWN0aW9uIElOICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSIHJlYWN0aW9uLl9mcm9tID09ICR7cGVyc29uYURvY0lkfVxuICAgICAgRklMVEVSIHJlYWN0aW9uLl90byA9PSAke2l0ZW1Eb2NJZH1cbiAgICAgIEZJTFRFUiByZWFjdGlvbi5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHRydWVcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiAhIShhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHJlYWN0aW9uIGVkZ2UgZG9jdW1lbnRcbiAqL1xuY29uc3QgY3JlYXRlUmVhY3Rpb25FZGdlID0gKFxuICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICByZWFjdGlvblR5cGU/OiBBcmFuZ29EYkNvbGxlY3Rpb24sXG4gIHJlYWN0aW9uVmFsdWU/OiBzdHJpbmdcbik6IFJlYWN0aW9uID0+IHtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHJlYWN0aW9uLSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcblxuICByZXR1cm4ge1xuICAgIF9mcm9tOiBzZXNzaW9uRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogaXRlbUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IHJlYWN0aW9uTmFtZSxcbiAgICB0eXBlOiByZWFjdGlvblR5cGUsXG4gICAgdmFsdWU6IHJlYWN0aW9uVmFsdWUgIT09IHVuZGVmaW5lZCA/IHJlYWN0aW9uVmFsdWUgOiB1bmRlZmluZWRcbiAgfTtcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHJlYWN0aW9uIGV4aXN0c1xuICovXG5jb25zdCBmaW5kRXhpc3RpbmdSZWFjdGlvbiA9IGFzeW5jIChcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmcsXG4gIHNlc3Npb25Eb2NJZDogc3RyaW5nLFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmdcbik6IFByb21pc2U8UmVhY3Rpb24gfCBudWxsPiA9PiB7XG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW1xuICAgICAge2ZpZWxkOiAnX2Zyb20nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHNlc3Npb25Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICdfdG8nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGl0ZW1JZH0sXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiByZWFjdGlvbk5hbWV9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHIgSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoKSA9PiBudWxsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZWFjdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uOiBSZWFjdGlvbiA9IHt9LFxuICBhbGxvd0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbklkID0gdmFsaWRhdGVTZXNzaW9uKGNvbnRleHQsIGFjdGlvbik7XG5cbiAgY29uc3Qge1xuICAgIG5hbWU6IGl0ZW1OYW1lID0gJ2xpa2UnLFxuICAgIHR5cGU6IGl0ZW1UeXBlLFxuICAgIHZhbHVlOiBpdGVtVmFsdWVcbiAgfSA9IHJlYWN0aW9uO1xuXG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uVHlwZSA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRWYWx1ZSA9IHBhcnNlU3RyaW5nKGl0ZW1WYWx1ZSwgMzIpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcblxuICBjb25zdCBlZGdlID0gY3JlYXRlUmVhY3Rpb25FZGdlKHNlc3Npb25JZCwgZm9ybWF0SXRlbUlkLCBmb3JtYXRSZWFjdGlvbk5hbWUsIGZvcm1hdFJlYWN0aW9uVHlwZSwgZm9ybWF0VmFsdWUpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb3Bwb3NpbmdSZWFjdGlvbk5hbWUgPSBPUFBPU0lOR19SRUFDVElPTl9OQU1FU1tmb3JtYXRSZWFjdGlvbk5hbWVdO1xuXG4gICAgaWYob3Bwb3NpbmdSZWFjdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG9wcG9zaW5nUmVhY3Rpb24gPSBhd2FpdCBmaW5kRXhpc3RpbmdSZWFjdGlvbihcbiAgICAgICAgZGF0YWJhc2VOYW1lLFxuICAgICAgICBzZXNzaW9uRG9jSWQsXG4gICAgICAgIGZvcm1hdEl0ZW1JZCxcbiAgICAgICAgb3Bwb3NpbmdSZWFjdGlvbk5hbWVcbiAgICAgICk7XG5cbiAgICAgIGlmKG9wcG9zaW5nUmVhY3Rpb24/Ll9rZXkpIHtcbiAgICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19SRUFDVElPTik7XG4gICAgICAgIGF3YWl0IGVkZ2VDb2xsZWN0aW9uLnJlbW92ZShvcHBvc2luZ1JlYWN0aW9uLl9rZXkpO1xuICAgICAgICBhd2FpdCBlbWl0UGhvdG9SZWFjdGlvblVwZGF0ZShjb250ZXh0LCBmb3JtYXRJdGVtSWQsIG9wcG9zaW5nUmVhY3Rpb25OYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyBpZiBub3QgYWxsb3dlZFxuICAgIGlmICghYWxsb3dEdXBsaWNhdGUpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUmVhY3Rpb24gPSBhd2FpdCBmaW5kRXhpc3RpbmdSZWFjdGlvbihcbiAgICAgICAgZGF0YWJhc2VOYW1lLFxuICAgICAgICBzZXNzaW9uRG9jSWQsXG4gICAgICAgIGZvcm1hdEl0ZW1JZCxcbiAgICAgICAgZm9ybWF0UmVhY3Rpb25OYW1lXG4gICAgICApO1xuXG4gICAgICBpZiAoZXhpc3RpbmdSZWFjdGlvbikge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdSZWFjdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX1JFQUNUSU9OKTtcbiAgICBhd2FpdCBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KTtcbiAgICBhd2FpdCBlbWl0UGhvdG9SZWFjdGlvblVwZGF0ZShjb250ZXh0LCBmb3JtYXRJdGVtSWQsIGZvcm1hdFJlYWN0aW9uTmFtZSk7XG4gICAgcmV0dXJuIGVkZ2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlYWN0aW9uID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJlYWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSB2YWxpZGF0ZVNlc3Npb24oY29udGV4dCwgYWN0aW9uKTtcblxuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25JZCA9IGAke0VER0VTLkhBU19SRUFDVElPTn0vJHtwYXJzZUlkKHJlYWN0aW9uSWQpfWA7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICdfZnJvbScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0U2Vzc2lvbklkfVxuICAgIF1cbiAgfSwgJ3InKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCByID0gRE9DVU1FTlQoJHtmb3JtYXRSZWFjdGlvbklkfSlcbiAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSByIElOICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgIFJFVFVSTiBPTERcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGRlbGV0ZWRSZWFjdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgICBpZihkZWxldGVkUmVhY3Rpb24/Ll90byAmJiBkZWxldGVkUmVhY3Rpb24/Lm5hbWUpIHtcbiAgICAgIGF3YWl0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlKGNvbnRleHQsIFN0cmluZyhkZWxldGVkUmVhY3Rpb24uX3RvIHx8ICcnKSwgU3RyaW5nKGRlbGV0ZWRSZWFjdGlvbi5uYW1lIHx8ICcnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRSZWFjdGlvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVhY3Rpb25CeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxSZWFjdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlUmVhY3Rpb25CeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25JZCA9IHZhbGlkYXRlU2Vzc2lvbihjb250ZXh0LCBhY3Rpb24pO1xuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke3BhcnNlSWQoc2Vzc2lvbklkKX1gO1xuICBjb25zdCBmb3JtYXRJdGVtRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUpO1xuXG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW1xuICAgICAge2ZpZWxkOiAnX2Zyb20nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdFNlc3Npb25JZH0sXG4gICAgICB7ZmllbGQ6ICdfdG8nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IGZvcm1hdEl0ZW1Eb2NJZH0sXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHIgSU4gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRU1PVkUgciBJTiAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIFJFVFVSTiBPTERcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGRlbGV0ZWRSZWFjdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgICBpZihkZWxldGVkUmVhY3Rpb24/Lm5hbWUpIHtcbiAgICAgIGF3YWl0IGVtaXRQaG90b1JlYWN0aW9uVXBkYXRlKGNvbnRleHQsIGZvcm1hdEl0ZW1Eb2NJZCwgU3RyaW5nKGRlbGV0ZWRSZWFjdGlvbi5uYW1lIHx8ICcnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRSZWFjdGlvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVhY3Rpb24gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcmVhY3Rpb246IFJlYWN0aW9uID0ge30pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVSZWFjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbklkID0gdmFsaWRhdGVTZXNzaW9uKGNvbnRleHQsIGFjdGlvbik7XG5cbiAgY29uc3Qge1xuICAgIGlkOiBpdGVtSWQsXG4gICAgbmFtZTogaXRlbU5hbWUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXROYW1lID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHJlYWN0aW9uLSR7Zm9ybWF0SWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCB1cGRhdGU6IFJlYWN0aW9uID0ge1xuICAgIG5hbWU6IGZvcm1hdE5hbWUsXG4gICAgdmFsdWU6IGZvcm1hdFZhbHVlXG4gIH07XG4gIGNvbnN0IGluc2VydDogUmVhY3Rpb24gPSB7XG4gICAgLi4udXBkYXRlLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKVxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUICR7e19pZDogZm9ybWF0SWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBORVdgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlYWN0aW9uQ291bnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuXG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW1xuICAgICAge2ZpZWxkOiAnbmFtZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgIF1cbiAgfSwgJ3InKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9ICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJDbGF1c2UpfVxuICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgIFJFVFVSTiBjb3VudFxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlYWN0aW9uQ291bnRCeVVzZXIgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICBpdGVtVHlwZTogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxSZWFjdGlvbltdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRSZWFjdGlvbkNvdW50QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSB2YWxpZGF0ZVNlc3Npb24oY29udGV4dCwgYWN0aW9uKTtcblxuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRSZWFjdGlvbk5hbWV9LFxuICAgICAge2ZpZWxkOiAnX2Zyb20nLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHNlc3Npb25Eb2NJZH1cbiAgICBdXG4gIH0sICdyJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaSwgciBJTiBJTkJPVU5EICR7Zm9ybWF0SXRlbUlkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQ2xhdXNlKX1cbiAgICAgIENPTExFQ1QgcmVhY3Rpb25WYWx1ZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4gTUVSR0Uociwge2NvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX0pXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cFVzZXJzQnlSZWFjdGlvbiA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBwYXJhbXM6IFVzZXJSZWFjdGlvblF1ZXJ5ID0ge30pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEdyb3VwVXNlcnNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICB2YWxpZGF0ZVNlc3Npb24oY29udGV4dCwgYWN0aW9uKTtcblxuICBjb25zdCB7ZmlsdGVycyA9IFtdLCBpZDogZ3JvdXBJZCwgdmFsdWV9OiBVc2VyUmVhY3Rpb25RdWVyeSA9IHBhcmFtcztcbiAgY29uc3QgcmVhY3Rpb24gPSBwYXJzZUNoYXIodmFsdWUsIDMyKTtcbiAgY29uc3QgZ3JvdXBEb2NJZCA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBJZCk7XG5cbiAgLy8gQnVpbGQgZmlsdGVyIGNvbmRpdGlvbnMgZHluYW1pY2FsbHlcbiAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXG4gICAge2ZpZWxkOiAndmFsdWUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHJlYWN0aW9ufVxuICBdO1xuXG4gIC8vIEFkZCBkeW5hbWljIGZpbHRlcnMgZnJvbSBwYXJhbXNcbiAgZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IFF1ZXJ5RmlsdGVyKSA9PiB7XG4gICAgY29uc3Qge2NvbmRpdGlvbmFsID0gJycsIG5hbWUsIHZhbHVlOiBxdWVyeVZhbHVlfTogUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgbGV0IG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciA9ICc9PSc7XG5cbiAgICBpZihjb25kaXRpb25hbCA9PT0gJz49JyB8fCBjb25kaXRpb25hbCA9PT0gJzw9JyB8fCBjb25kaXRpb25hbCA9PT0gJz4nIHx8IGNvbmRpdGlvbmFsID09PSAnPCcpIHtcbiAgICAgIG9wZXJhdG9yID0gY29uZGl0aW9uYWwgYXMgRmlsdGVyT3BlcmF0b3I7XG4gICAgfVxuXG4gICAgaWYobmFtZSA9PT0gJ2FkZGVkJykge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ2FkZGVkJywgb3BlcmF0b3IsIHZhbHVlOiBwYXJzZU51bShxdWVyeVZhbHVlKX0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zXG4gIH0sICdyJyk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgZywgciBJTiBJTkJPVU5EICR7Z3JvdXBEb2NJZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoYCR7ZmlsdGVyQ2xhdXNlfSAmJiB1Ll9pZCA9PSByLl9mcm9tYCl9XG4gICAgICBSRVRVUk4gdVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25MaXN0QnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlYWN0aW9uT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRSZWFjdGlvbnNCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VSZWFjdGlvbk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gSU5CT1VORCAke2Zvcm1hdEl0ZW1JZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShpLCB7cmVhY3Rpb246IHJ9KVxuICBgO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SXRlbUxpc3RCeVJlYWN0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlYWN0aW9uT3B0aW9uc1xuKTogUHJvbWlzZTxSZWFjdGlvbltdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VSZWFjdGlvbk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgXVxuICB9LCAncicpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHUsIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRJdGVtSWR9ICR7aGFzUmVhY3Rpb25Db2xsZWN0aW9ufVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJDbGF1c2UpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UodSwge3JlYWN0aW9uOiByfSlcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhhc1JlYWN0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogUmVhY3Rpb25EaXJlY3Rpb24gPSAnT1VUQk9VTkQnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2hhc1JlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSB2YWxpZGF0ZVNlc3Npb24oY29udGV4dCwgYWN0aW9uKTtcblxuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXREaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09ICdPVVRCT1VORCcgPyAnT1VUQk9VTkQnIDogJ0lOQk9VTkQnO1xuICBjb25zdCBpdGVtRmllbGQgPSBkaXJlY3Rpb24gPT09ICdPVVRCT1VORCcgPyAnX3RvJyA6ICdfZnJvbSc7XG5cbiAgY29uc3QgZmlsdGVyQ2xhdXNlID0gYnVpbGRGaWx0ZXJDbGF1c2Uoe1xuICAgIGxvZ2ljOiAnQU5EJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICB7ZmllbGQ6ICduYW1lJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiByZWFjdGlvbk5hbWV9LFxuICAgICAge2ZpZWxkOiBpdGVtRmllbGQsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0SXRlbUlkfVxuICAgIF1cbiAgfSwgJ3InKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBpLCByIElOICR7bGl0ZXJhbChmb3JtYXREaXJlY3Rpb24pfSAke3Nlc3Npb25Eb2NJZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gclxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVhY3Rpb24gPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuICAgIHJldHVybiByZWFjdGlvbiA/IHJlYWN0aW9uLnZhbHVlID09PSAndHJ1ZScgOiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkVycm9yVHlwZXMiLCJnZXRDb25uZWN0aW9uc0J5VXNlciIsIndzQ2xpZW50IiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJidWlsZEZpbHRlckNsYXVzZSIsImdldExpbWl0IiwidXNlRGIiLCJnZXRJbWFnZUJ5SWQiLCJldmVudENhdGVnb3J5IiwiaGFzUmVhY3Rpb25Db2xsZWN0aW9uIiwiSEFTX1JFQUNUSU9OIiwidXNlcnNDb2xsZWN0aW9uIiwiVVNFUlMiLCJQSE9UT19SRUFDVElPTl9OQU1FUyIsIk9QUE9TSU5HX1JFQUNUSU9OX05BTUVTIiwiZGlzbGlrZSIsImxpa2UiLCJwYXJzZVJlYWN0aW9uT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJsaW1pdCIsImVtaXRQaG90b1JlYWN0aW9uVXBkYXRlIiwiY29udGV4dCIsIml0ZW1JZCIsInJlYWN0aW9uTmFtZSIsIm5vcm1hbGl6ZWRSZWFjdGlvbk5hbWUiLCJpbmNsdWRlcyIsImZvcm1hdEl0ZW1JZCIsInN0YXJ0c1dpdGgiLCJJTUFHRVMiLCJpbWFnZUlkIiwic3BsaXQiLCJhdCIsImltYWdlIiwiY2F0Y2giLCJvd25lclVzZXJJZCIsIlN0cmluZyIsInVzZXJJZCIsImZhdm9yaXRlQ291bnQiLCJsaWtlQ291bnQiLCJkaXNsaWtlQ291bnQiLCJQcm9taXNlIiwiYWxsIiwiZ2V0UmVhY3Rpb25Db3VudCIsImNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbklkcyIsIm1hcCIsImNvbm5lY3Rpb24iLCJjb25uZWN0aW9uSWQiLCJzb2NrZXRJZCIsImZpbHRlciIsIkJvb2xlYW4iLCJpbmRleCIsImxpc3QiLCJpbmRleE9mIiwibGVuZ3RoIiwic2VuZCIsImFjdGlvbiIsImRhdGEiLCJyZWFjdGlvbnMiLCJOdW1iZXIiLCJzYXZlZCIsInZhbGlkYXRlU2Vzc2lvbiIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJjYXRlZ29yeSIsImxhYmVsIiwiSU5WQUxJRF9TRVNTSU9OIiwidmFsdWUiLCJnZXRQZXJzb25hRG9jSWQiLCJwZXJzb25hSWQiLCJwZXJzb25hRG9jSWQiLCJwZXJzb25hS2V5IiwiUEVSU09OQVMiLCJnZXRSZWFjdGlvblBlcnNvbmFEb2NJZCIsInJlcXVlc3RlZFBlcnNvbmFEb2NJZCIsInNlc3Npb25QZXJzb25hRG9jSWQiLCJhc3NlcnRQZXJzb25hUmVhY3Rpb25Tb3VyY2UiLCJzZXNzaW9uVXNlcklkIiwic2Vzc2lvblBlcnNvbmFLZXkiLCJFcnJvciIsInVzZXIiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwidXNlclBlcnNvbmFLZXkiLCJidWlsZFBlcnNvbmFSZWFjdGlvbiIsIml0ZW1Eb2NJZCIsInJlYWN0aW9uVHlwZSIsInJlYWN0aW9uVmFsdWUiLCJfZnJvbSIsIl9rZXkiLCJfdG8iLCJhZGRlZCIsIkRhdGUiLCJub3ciLCJuYW1lIiwidHlwZSIsInVuZGVmaW5lZCIsInJlbW92ZVBlcnNvbmFSZWFjdGlvbiIsImFxbFFyeSIsImFkZFBlcnNvbmFSZWFjdGlvbiIsInJlYWN0aW9uIiwidG9Mb3dlckNhc2UiLCJuZXh0UmVhY3Rpb24iLCJvcHBvc2luZ1JlYWN0aW9uTmFtZSIsInNhdmVkUmVhY3Rpb24iLCJlcnJvciIsIkRBVEFCQVNFX0VSUk9SIiwiZGVsZXRlUGVyc29uYVJlYWN0aW9uIiwiZm9ybWF0UmVhY3Rpb25OYW1lIiwiZGVsZXRlZFJlYWN0aW9uIiwiaGFzUGVyc29uYVJlYWN0aW9uIiwiY3JlYXRlUmVhY3Rpb25FZGdlIiwic2Vzc2lvbkRvY0lkIiwiZWRnZUlkIiwiZmluZEV4aXN0aW5nUmVhY3Rpb24iLCJmaWx0ZXJDbGF1c2UiLCJsb2dpYyIsImNvbmRpdGlvbnMiLCJmaWVsZCIsIm9wZXJhdG9yIiwiYWRkUmVhY3Rpb24iLCJhbGxvd0R1cGxpY2F0ZSIsIml0ZW1OYW1lIiwiaXRlbVR5cGUiLCJpdGVtVmFsdWUiLCJmb3JtYXRSZWFjdGlvblR5cGUiLCJmb3JtYXRWYWx1ZSIsImVkZ2UiLCJvcHBvc2luZ1JlYWN0aW9uIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwicmVtb3ZlIiwiZXhpc3RpbmdSZWFjdGlvbiIsInNhdmUiLCJyZXR1cm5OZXciLCJkZWxldGVSZWFjdGlvbiIsInJlYWN0aW9uSWQiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbklkIiwiZGVsZXRlUmVhY3Rpb25CeUl0ZW0iLCJmb3JtYXRJdGVtRG9jSWQiLCJ1cGRhdGVSZWFjdGlvbiIsImlkIiwiZm9ybWF0SWQiLCJmb3JtYXROYW1lIiwidXBkYXRlIiwiaW5zZXJ0IiwiX2lkIiwiZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciIsImdldEdyb3VwVXNlcnNCeVJlYWN0aW9uIiwicGFyYW1zIiwiZmlsdGVycyIsImdyb3VwSWQiLCJncm91cERvY0lkIiwiZm9yRWFjaCIsImNvbmRpdGlvbmFsIiwicXVlcnlWYWx1ZSIsInB1c2giLCJnZXRSZWFjdGlvbkxpc3RCeUl0ZW0iLCJnZXRJdGVtTGlzdEJ5UmVhY3Rpb24iLCJoYXNSZWFjdGlvbiIsImRpcmVjdGlvbiIsImZvcm1hdERpcmVjdGlvbiIsIml0ZW1GaWVsZCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDeEcsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBa0JDLE9BQU8sUUFBTyxlQUFlO0FBRS9DLFNBQVFDLFdBQVcsRUFBRUMsS0FBSyxRQUFPLDhCQUE4QjtBQUMvRCxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLG9CQUFvQixRQUFPLG1DQUFtQztBQUN0RSxTQUFRQyxRQUFRLFFBQU8sZ0NBQWdDO0FBQ3ZELFNBQVFDLFFBQVEsRUFBRUMsWUFBWSxRQUFPLDZCQUE2QjtBQUNsRSxTQUFRQyxpQkFBaUIsUUFBTyx5QkFBeUI7QUFDekQsU0FBUUMsUUFBUSxFQUFFQyxLQUFLLFFBQU8sNEJBQTRCO0FBQzFELFNBQVFDLFlBQVksUUFBTyxjQUFjO0FBUXpDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyx3QkFBd0JiLFFBQVFFLE1BQU1ZLFlBQVk7QUFDeEQsTUFBTUMsa0JBQWtCZixRQUFRQyxZQUFZZSxLQUFLO0FBQ2pELE1BQU1DLHVCQUF1QjtJQUFDO0lBQVc7SUFBUTtDQUFRO0FBQ3pELE1BQU1DLDBCQUFrRDtJQUN0REMsU0FBUztJQUNUQyxNQUFNO0FBQ1I7QUFnQ0EsT0FBTyxNQUFNQyx1QkFBdUIsQ0FBQ0MsVUFBMkIsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sRUFDSkMsT0FBTyxDQUFDLEVBQ1JDLEtBQUssRUFBRSxFQUNSLEdBQUdGO0lBRUosT0FBTztRQUNMRyxPQUFPaEIsU0FBU2MsTUFBTUM7SUFDeEI7QUFDRixFQUFFO0FBRUYsTUFBTUUsMEJBQTBCLE9BQzlCQyxTQUNBQyxRQUNBQztJQUVBLE1BQU1D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
|