@nlabs/reaktor 1.17.0 → 1.19.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/README.md +182 -0
- package/docs/ASSISTANT.md +138 -0
- package/docs/GENERATION.md +42 -5
- package/docs/NATIVE_PUSH.md +56 -0
- package/lib/actions/alfredFaq.d.ts +80 -0
- package/lib/actions/alfredFaq.js +206 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/contentGeneration.d.ts +4 -0
- package/lib/actions/contentGeneration.js +82 -10
- package/lib/actions/contentGenerationErrors.js +1 -1
- package/lib/actions/conversations.d.ts +1 -1
- package/lib/actions/conversations.js +19 -9
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.js +26 -1
- package/lib/actions/databaseAccounts.js +1 -1
- package/lib/actions/databaseProvisioningLease.js +1 -1
- package/lib/actions/dynamodb.js +1 -1
- package/lib/actions/email.js +1 -1
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/geminiVideo.js +1 -1
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.js +1 -1
- package/lib/actions/imageGeneration.js +1 -1
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.d.ts +1 -0
- package/lib/actions/index.js +2 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +23 -7
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/ollamaGeneration.js +1 -1
- package/lib/actions/openaiResponseSession.js +1 -1
- package/lib/actions/payments.js +1 -1
- package/lib/actions/personas.js +1 -1
- package/lib/actions/phoneSupport.js +1 -1
- package/lib/actions/posts.js +1 -1
- package/lib/actions/query.js +1 -1
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.js +1 -1
- package/lib/actions/search.js +1 -1
- package/lib/actions/sms.js +1 -1
- package/lib/actions/statistics.js +1 -1
- package/lib/actions/subscriptions.js +1 -1
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.js +57 -4
- package/lib/actions/videoGeneration.js +1 -1
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/geminiGenerationAdapter.js +1 -1
- package/lib/adapters/higgsfieldAdapter.js +1 -1
- package/lib/adapters/higgsfieldModelCatalog.js +1 -1
- package/lib/adapters/higgsfieldModels.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.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.js +1 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/assistant/core.d.ts +53 -0
- package/lib/assistant/core.js +123 -0
- package/lib/assistant/faq.d.ts +26 -0
- package/lib/assistant/faq.js +238 -0
- package/lib/assistant/faqCore.d.ts +23 -0
- package/lib/assistant/faqCore.js +20 -0
- package/lib/assistant/index.d.ts +7 -0
- package/lib/assistant/index.js +5 -0
- package/lib/assistant/service.d.ts +35 -0
- package/lib/assistant/service.js +201 -0
- package/lib/config.js +1 -1
- package/lib/constants/collections.js +1 -1
- package/lib/durableChat/conversations.d.ts +62 -0
- package/lib/durableChat/conversations.js +729 -0
- package/lib/durableChat/errors.d.ts +6 -0
- package/lib/durableChat/errors.js +11 -0
- package/lib/durableChat/events.d.ts +22 -0
- package/lib/durableChat/events.js +50 -0
- package/lib/durableChat/index.d.ts +8 -0
- package/lib/durableChat/index.js +10 -0
- package/lib/durableChat/membership.d.ts +24 -0
- package/lib/durableChat/membership.js +85 -0
- package/lib/durableChat/messageTypes.d.ts +76 -0
- package/lib/durableChat/messageTypes.js +3 -0
- package/lib/durableChat/messages.d.ts +16 -0
- package/lib/durableChat/messages.js +257 -0
- package/lib/durableChat/transaction.d.ts +10 -0
- package/lib/durableChat/transaction.js +53 -0
- package/lib/durableChat/types.d.ts +81 -0
- package/lib/durableChat/types.js +3 -0
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +5 -3
- package/lib/lambdas/actions/websockets.js +4 -4
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.js +1 -1
- 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.js +1 -1
- package/lib/mutations/content/content.js +1 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/higgsfield/higgsfield.js +1 -1
- package/lib/mutations/images/images.js +1 -1
- package/lib/mutations/index.js +1 -1
- package/lib/mutations/locations/locations.js +1 -1
- package/lib/mutations/messages/messages.js +1 -1
- package/lib/mutations/personas/personas.js +1 -1
- package/lib/mutations/posts/posts.js +1 -1
- package/lib/mutations/reactions/reactions.js +1 -1
- package/lib/mutations/rum/rum.js +1 -1
- package/lib/mutations/statistics/statistics.js +1 -1
- package/lib/mutations/subscriptions/subscriptions.js +1 -1
- package/lib/mutations/tags/tags.js +1 -1
- package/lib/mutations/users/users.js +1 -1
- package/lib/mutations/videos/videos.js +1 -1
- package/lib/nativePush/graphql.d.ts +14 -0
- package/lib/nativePush/graphql.js +105 -0
- package/lib/nativePush/index.d.ts +7 -0
- package/lib/nativePush/index.js +9 -0
- package/lib/nativePush/migrations.d.ts +2 -0
- package/lib/nativePush/migrations.js +36 -0
- package/lib/nativePush/nativePushContract.fixture.d.ts +22 -0
- package/lib/nativePush/nativePushContract.fixture.js +27 -0
- package/lib/nativePush/payload.d.ts +2 -0
- package/lib/nativePush/payload.js +106 -0
- package/lib/nativePush/repository.d.ts +9 -0
- package/lib/nativePush/repository.js +120 -0
- package/lib/nativePush/service.d.ts +2 -0
- package/lib/nativePush/service.js +110 -0
- package/lib/nativePush/snsProvider.d.ts +17 -0
- package/lib/nativePush/snsProvider.js +165 -0
- package/lib/nativePush/types.d.ts +89 -0
- package/lib/nativePush/types.js +3 -0
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/contentGeneration.js +1 -1
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/higgsfield.js +1 -1
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.js +1 -1
- package/lib/objectTypes/index.js +1 -1
- package/lib/objectTypes/location.js +1 -1
- package/lib/objectTypes/message.js +1 -1
- package/lib/objectTypes/passcode.js +1 -1
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/objectTypes/videoGeneration.js +1 -1
- package/lib/organizations/accountLifecycle.d.ts +7 -0
- package/lib/organizations/accountLifecycle.js +106 -0
- package/lib/organizations/authorization.d.ts +9 -0
- package/lib/organizations/authorization.js +40 -0
- package/lib/organizations/billing.d.ts +38 -0
- package/lib/organizations/billing.js +277 -0
- package/lib/organizations/billingProvider.d.ts +4 -0
- package/lib/organizations/billingProvider.js +287 -0
- package/lib/organizations/billingUpdates.d.ts +9 -0
- package/lib/organizations/billingUpdates.js +388 -0
- package/lib/organizations/index.d.ts +10 -0
- package/lib/organizations/index.js +12 -0
- package/lib/organizations/mail.d.ts +10 -0
- package/lib/organizations/mail.js +60 -0
- package/lib/organizations/memberDirectory.d.ts +15 -0
- package/lib/organizations/memberDirectory.js +28 -0
- package/lib/organizations/membership.d.ts +19 -0
- package/lib/organizations/membership.js +248 -0
- package/lib/organizations/passwordRecovery.d.ts +9 -0
- package/lib/organizations/passwordRecovery.js +50 -0
- package/lib/organizations/plans.d.ts +6 -0
- package/lib/organizations/plans.js +40 -0
- package/lib/organizations/providerPagination.d.ts +6 -0
- package/lib/organizations/providerPagination.js +23 -0
- package/lib/organizations/reconciliation.d.ts +11 -0
- package/lib/organizations/reconciliation.js +400 -0
- package/lib/organizations/signup.d.ts +25 -0
- package/lib/organizations/signup.js +169 -0
- package/lib/organizations/store.d.ts +25 -0
- package/lib/organizations/store.js +167 -0
- package/lib/organizations/types.d.ts +138 -0
- package/lib/organizations/types.js +3 -0
- package/lib/organizations/verification.d.ts +3 -0
- package/lib/organizations/verification.js +51 -0
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/higgsfield/higgsfield.js +1 -1
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.js +1 -1
- package/lib/queries/locations/locations.js +1 -1
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +1 -1
- package/lib/queries/posts/posts.js +1 -1
- package/lib/queries/query/query.js +1 -1
- package/lib/queries/reactions/reactions.js +1 -1
- package/lib/queries/statistics/statistics.js +1 -1
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +1 -1
- package/lib/queries/users/users.js +1 -1
- package/lib/queries/videos/videos.js +1 -1
- 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.js +1 -1
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.js +1 -1
- package/lib/types/databaseCredentials.types.js +1 -1
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.js +1 -1
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/databaseCredentials.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/generationCallback.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.js +1 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/mediaAccess.js +1 -1
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.js +1 -1
- package/lib/utils/opaqueToken.js +1 -1
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/secretDatabase.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.js +1 -1
- package/lib/utils/stripeUtils.ts.bak +1 -1
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +1 -1
- package/lib/utils/translationQueue.example.js +1 -1
- package/lib/utils/translationQueue.js +1 -1
- package/lib/videoProcessing.js +1 -1
- package/package.json +16 -3
package/lib/actions/crm.js
CHANGED
|
@@ -925,4 +925,4 @@ export const getCustomerNotificationsByUser = (context, userId)=>{
|
|
|
925
925
|
return useDb(context.databaseName).query(query).then((cursor)=>cursor.all());
|
|
926
926
|
};
|
|
927
927
|
|
|
928
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jcm0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7c2VzU2VuZH0gZnJvbSAnLi9lbWFpbC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ3VzdG9tZXJOb3RpZmljYXRpb25UeXBlLFxuICBDdXN0b21lck9yZGVyVHlwZSxcbiAgQ3JtQ2FtcGFpZ25JbnB1dCxcbiAgQ3JtQ2FtcGFpZ25UeXBlLFxuICBDcm1Db250YWN0RmlsdGVyLFxuICBDcm1Gb3JtU3VibWlzc2lvbklucHV0LFxuICBDcm1Gb3JtU3VibWlzc2lvblR5cGUsXG4gIE1haWxpbmdMaXN0VHlwZSxcbiAgUHVibGljU3VwcG9ydFRpY2tldEZlZWQsXG4gIFB1YmxpY1N1cHBvcnRUaWNrZXRJbnB1dCxcbiAgU2hvcGlmeUN1c3RvbWVyT3JkZXJJbnB1dCxcbiAgU3VwcG9ydFRpY2tldEV2ZW50VHlwZSxcbiAgU3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlLFxuICBTdXBwb3J0VGlja2V0U3RhdHVzLFxuICBTdXBwb3J0VGlja2V0VHlwZURhdGFcbn0gZnJvbSAnLi4vdHlwZXMvY3JtLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBub3cgPSAoKTogbnVtYmVyID0+IERhdGUubm93KCk7XG5jb25zdCBjb2xsZWN0aW9uID0gKG5hbWU6IHN0cmluZykgPT4gbGl0ZXJhbChuYW1lKTtcbmNvbnN0IGRvY0tleSA9ICh2YWx1ZSA9ICcnKTogc3RyaW5nID0+IHBhcnNlSWQoU3RyaW5nKHZhbHVlKSk7XG5jb25zdCBkb2NJZCA9IChjb2xsZWN0aW9uTmFtZTogc3RyaW5nLCBrZXkgPSAnJyk6IHN0cmluZyA9PiBgJHtjb2xsZWN0aW9uTmFtZX0vJHtkb2NLZXkoa2V5KX1gO1xuY29uc3QgZXh0ZXJuYWxLZXkgPSAocHJlZml4OiBzdHJpbmcsIGlkID0gJycpOiBzdHJpbmcgPT4gY3JlYXRlSGFzaChgJHtwcmVmaXh9LSR7U3RyaW5nKGlkKX1gLCBudWxsKTtcbmNvbnN0IGNsZWFuU3RyaW5nID0gKHZhbHVlOiB1bmtub3duLCBsZW5ndGggPSA2NDApOiBzdHJpbmcgPT4gcGFyc2VTdHJpbmcoU3RyaW5nKHZhbHVlIHx8ICcnKSwgbGVuZ3RoKTtcbmNvbnN0IGNsZWFuRXh0ZXJuYWxJZCA9ICh2YWx1ZTogdW5rbm93biwgbGVuZ3RoID0gMzIwKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnNsaWNlKDAsIGxlbmd0aCk7XG5jb25zdCBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2U6IFJldHVyblR5cGU8dHlwZW9mIHVzZURiPiwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRhcmdldCA9IGRhdGFiYXNlLmNvbGxlY3Rpb24obmFtZSk7XG4gIGlmKGF3YWl0IHRhcmdldC5leGlzdHMoKSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGF3YWl0IGRhdGFiYXNlLmNyZWF0ZUNvbGxlY3Rpb24obmFtZSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZighYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IGVuc3VyZUVkZ2VDb2xsZWN0aW9uID0gYXN5bmMgKGRhdGFiYXNlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VEYj4sIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0YXJnZXQgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKG5hbWUpO1xuICBpZihhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCBkYXRhYmFzZS5jcmVhdGVFZGdlQ29sbGVjdGlvbihuYW1lKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKCFhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCByZXF1aXJlQ3JtQWRtaW4gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IHZvaWQgPT4ge1xuICBpZighaXNBZG1pblVzZXIoY29udGV4dC5zZXNzaW9uIGFzIGFueSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkbWluaXN0cmF0b3JfYWNjZXNzX3JlcXVpcmVkJyk7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgcmVxdWlyZUNybUFkbWluaXN0cmF0b3IgPSByZXF1aXJlQ3JtQWRtaW47XG5cbmNvbnN0IGFsbG93ZWRDb250YWN0RmllbGRzID0gbmV3IFNldChbJ2VtYWlsJywgJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICdwaG9uZScsICdtYXJrZXRpbmdDb25zZW50U291cmNlJywgJ2NybVNvdXJjZSddKTtcbmNvbnN0IHN1cHBvcnRQcmlvcml0aWVzID0gbmV3IFNldChbJ2xvdycsICdub3JtYWwnLCAnaGlnaCcsICd1cmdlbnQnXSk7XG5jb25zdCBzdXBwb3J0U3RhdHVzZXMgPSBuZXcgU2V0KFsnc3VibWl0dGVkJywgJ2luX3Byb2dyZXNzJywgJ2RvbmUnLCAnY29tcGxldGVkJ10pO1xuY29uc3Qgc3VwcG9ydFR5cGVzID0gbmV3IFNldChbJ2RlbGl2ZXJ5X2lzc3VlJywgJ3JlZnVuZF9yZXF1ZXN0JywgJ2J1Z19yZXBvcnQnLCAnYWNjb3VudF9pc3N1ZScsICdnZW5lcmFsX3N1cHBvcnQnXSk7XG5jb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskL3U7XG5jb25zdCBlc2NhcGVIdG1sID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbmNvbnN0IHNhbml0aXplSHRtbCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpXG4gIC5yZXBsYWNlKC88KHNjcmlwdHxpZnJhbWV8b2JqZWN0fGVtYmVkKVxcYltePl0qPltcXHNcXFNdKj88XFwvXFwxPi9naSwgJycpXG4gIC5yZXBsYWNlKC9cXHNvblxcdytcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHM+XSspL2dpLCAnJyk7XG5jb25zdCBzYW5pdGl6ZUNzcyA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpXG4gIC5yZXBsYWNlKC88XFwvP3N0eWxlXFxiW14+XSo+L2dpLCAnJylcbiAgLnJlcGxhY2UoL0BpbXBvcnRcXHMrW147XSs7Py9naSwgJycpXG4gIC5yZXBsYWNlKC91cmxcXHMqXFwoXFxzKihbJ1wiXT8pamF2YXNjcmlwdDpbXildK1xcKS9naSwgJycpO1xuY29uc3QgaHRtbFRvVGV4dCA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHZhbHVlLnJlcGxhY2UoLzxbXj5dKz4vZywgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuY29uc3QgY2h1bmsgPSA8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSwgc2l6ZTogbnVtYmVyKTogVFtdW10gPT4ge1xuICBjb25zdCBncm91cHM6IFRbXVtdID0gW107XG4gIGZvcihsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXggKz0gc2l6ZSkgZ3JvdXBzLnB1c2goaXRlbXMuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2l6ZSkpO1xuICByZXR1cm4gZ3JvdXBzO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Ym1pdENybUZvcm0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBDcm1Gb3JtU3VibWlzc2lvbklucHV0XG4pOiBQcm9taXNlPENybUZvcm1TdWJtaXNzaW9uVHlwZT4gPT4ge1xuICBpZih0eXBlb2YgaW5wdXQ/Lm1hcmtldGluZ09wdEluICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfbWFya2V0aW5nT3B0SW4nKTtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhpbnB1dC5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByYXdQaG9uZSA9IGNsZWFuU3RyaW5nKGlucHV0LnBob25lLCA4MCk7XG4gIGNvbnN0IHBob25lID0gcmF3UGhvbmUgPyAocGFyc2VQaG9uZShyYXdQaG9uZSkgfHwgcmF3UGhvbmUpIDogJyc7XG4gIGlmKCFlbWFpbCAmJiAhcGhvbmUpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfZW1haWxfb3JfcGhvbmUnKTtcblxuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgYXdhaXQgZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uKGRhdGFiYXNlLCBDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBzb3VyY2UgPSBjbGVhblN0cmluZyhpbnB1dC5zb3VyY2UgfHwgaW5wdXQuZm9ybUlkIHx8ICdmb3JtJywgMTYwKTtcbiAgY29uc3QgdmFsdWVzID0gaW5wdXQudmFsdWVzIHx8IHt9O1xuICBjb25zdCBmaXJzdE5hbWUgPSBjbGVhblN0cmluZyhpbnB1dC5maXJzdE5hbWUgfHwgdmFsdWVzLmZpcnN0TmFtZSwgMTYwKTtcbiAgY29uc3QgbGFzdE5hbWUgPSBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSB8fCB2YWx1ZXMubGFzdE5hbWUsIDE2MCk7XG4gIGNvbnN0IGdlbmVyYXRlZFVzZXJLZXkgPSBjcmVhdGVIYXNoKGVtYWlsIHx8IHBob25lLCBudWxsKTtcbiAgY29uc3QgY29uc2VudCA9IGlucHV0Lm1hcmtldGluZ09wdEluXG4gICAgPyB7bWFya2V0aW5nT3B0SW5BdDogdGltZXN0YW1wLCBtYXJrZXRpbmdPcHRPdXRBdDogbnVsbH1cbiAgICA6IHttYXJrZXRpbmdPcHRPdXRBdDogdGltZXN0YW1wfTtcbiAgY29uc3QgdXNlckluc2VydCA9IHtcbiAgICBfa2V5OiBnZW5lcmF0ZWRVc2VyS2V5LFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgbWFpbGluZ0xpc3Q6IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6IHNvdXJjZSxcbiAgICBtYXJrZXRpbmdPcHRJbjogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwaG9uZSxcbiAgICB0eXBlOiAnY3JtQ29udGFjdCcsXG4gICAgdXNlckFjY2VzczogMCxcbiAgICB1c2VySWQ6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgdmVyaWZpZWRFbWFpbDogZmFsc2UsXG4gICAgdmVyaWZpZWRQaG9uZTogZmFsc2UsXG4gICAgLi4uY29uc2VudFxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIC4uLihlbWFpbCA/IHtlbWFpbH0gOiB7fSksXG4gICAgLi4uKGZpcnN0TmFtZSA/IHtmaXJzdE5hbWV9IDoge30pLFxuICAgIC4uLihsYXN0TmFtZSA/IHtsYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBob25lID8ge3Bob25lfSA6IHt9KSxcbiAgICBtYWlsaW5nTGlzdDogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogc291cmNlLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIC4uLmNvbnNlbnRcbiAgfTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBMRVQgZXhpc3RpbmcgPSBGSVJTVChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiAoJHtlbWFpbH0gIT0gXCJcIiAmJiBMT1dFUih1c2VyLmVtYWlsIHx8IFwiXCIpID09ICR7ZW1haWx9KVxuICAgICAgICAgIHx8ICgke3Bob25lfSAhPSBcIlwiICYmIHVzZXIucGhvbmUgPT0gJHtwaG9uZX0pXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTEVUIHVzZXJLZXkgPSBleGlzdGluZyA/IGV4aXN0aW5nLl9rZXkgOiAke2dlbmVyYXRlZFVzZXJLZXl9XG4gICAgVVBTRVJUIHtfa2V5OiB1c2VyS2V5fVxuICAgIElOU0VSVCBNRVJHRSgke3VzZXJJbnNlcnR9LCB7X2tleTogdXNlcktleSwgdXNlcklkOiB1c2VyS2V5fSlcbiAgICBVUERBVEUgJHt1c2VyVXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gIGNvbnN0IHVzZXJJZCA9IGRvY0tleShTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgZ2VuZXJhdGVkVXNlcktleSkpO1xuXG4gIGNvbnN0IHN1Ym1pc3Npb25JZCA9IGNyZWF0ZUhhc2goYGNybS1zdWJtaXNzaW9uLSR7dGltZXN0YW1wfS0ke2VtYWlsfS0ke3Bob25lfWAsIG51bGwpO1xuICBjb25zdCBzdWJtaXNzaW9uID0ge1xuICAgIF9rZXk6IHN1Ym1pc3Npb25JZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZvcm1JZDogY2xlYW5TdHJpbmcoaW5wdXQuZm9ybUlkLCAxNjApLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHBob25lLFxuICAgIHNvdXJjZSxcbiAgICBzdWJtaXNzaW9uSWQsXG4gICAgdXNlcklkLFxuICAgIHZhbHVlc1xuICB9O1xuICBjb25zdCBzYXZlZCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBJTlNFUlQgJHtzdWJtaXNzaW9ufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICByZXR1cm4gc2F2ZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JtRm9ybVN1Ym1pc3Npb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPENybUZvcm1TdWJtaXNzaW9uVHlwZVtdPiA9PiB7XG4gIHJlcXVpcmVDcm1BZG1pbihjb250ZXh0KTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIGlmKCFhd2FpdCBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKS5leGlzdHMoKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgICBGT1Igc3VibWlzc2lvbiBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpfVxuICAgICAgICBTT1JUIHN1Ym1pc3Npb24uYWRkZWQgREVTQ1xuICAgICAgICBMSU1JVCA1MDBcbiAgICAgICAgUkVUVVJOIHN1Ym1pc3Npb25cbiAgICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0pKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JtQ29udGFjdHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsdGVyOiBDcm1Db250YWN0RmlsdGVyID0ge30pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2ggPSBjbGVhblN0cmluZyhmaWx0ZXIuc2VhcmNoLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGZpZWxkID0gYWxsb3dlZENvbnRhY3RGaWVsZHMuaGFzKGZpbHRlci5maWVsZCB8fCAnJykgPyBTdHJpbmcoZmlsdGVyLmZpZWxkKSA6ICcnO1xuICBjb25zdCB2YWx1ZSA9IGNsZWFuU3RyaW5nKGZpbHRlci52YWx1ZSwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBvcHRlZEluT25seSA9IGZpbHRlci5vcHRlZEluT25seSAhPT0gZmFsc2U7XG4gIGNvbnN0IG9wZXJhdG9yID0gWydjb250YWlucycsICdlcXVhbHMnLCAnZXhpc3RzJ10uaW5jbHVkZXMoZmlsdGVyLm9wZXJhdG9yIHx8ICcnKSA/IGZpbHRlci5vcGVyYXRvciA6ICdjb250YWlucyc7XG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICBGSUxURVIgJHshb3B0ZWRJbk9ubHl9IHx8IHVzZXIubWFya2V0aW5nT3B0SW4gPT0gdHJ1ZVxuICAgICAgRklMVEVSICR7IXNlYXJjaH0gfHwgQ09OVEFJTlMoTE9XRVIoQ09OQ0FUX1NFUEFSQVRPUihcIiBcIiwgdXNlci5maXJzdE5hbWUsIHVzZXIubGFzdE5hbWUsIHVzZXIuZW1haWwsIHVzZXIucGhvbmUpKSwgJHtzZWFyY2h9KVxuICAgICAgRklMVEVSICR7IWZpZWxkfSB8fCAoJHtvcGVyYXRvciA9PT0gJ2V4aXN0cyd9XG4gICAgICAgID8gSEFTKHVzZXIsICR7ZmllbGR9KVxuICAgICAgICA6ICgke29wZXJhdG9yID09PSAnZXF1YWxzJ30gPyBMT1dFUihUT19TVFJJTkcodXNlclske2ZpZWxkfV0pKSA9PSAke3ZhbHVlfSA6IENPTlRBSU5TKExPV0VSKFRPX1NUUklORyh1c2VyWyR7ZmllbGR9XSkpLCAke3ZhbHVlfSkpKVxuICAgICAgU09SVCB1c2VyLmFkZGVkIERFU0NcbiAgICAgIExJTUlUIDEwMDBcbiAgICAgIFJFVFVSTiBNRVJHRSh1c2VyLCB7Y3JtU291cmNlOiB1c2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2V9KVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZENybUNhbXBhaWduID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogQ3JtQ2FtcGFpZ25JbnB1dFxuKTogUHJvbWlzZTxDcm1DYW1wYWlnblR5cGU+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBzdWJqZWN0ID0gY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKTtcbiAgY29uc3QgYm9keUh0bWwgPSBzYW5pdGl6ZUh0bWwoaW5wdXQuaHRtbCk7XG4gIGNvbnN0IGNzcyA9IHNhbml0aXplQ3NzKGlucHV0LmNzcyk7XG4gIGlmKCFzdWJqZWN0IHx8ICFib2R5SHRtbCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jYW1wYWlnbl9jb250ZW50Jyk7XG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IGF3YWl0IGdldENybUNvbnRhY3RzKGNvbnRleHQsIHsuLi5pbnB1dC5maWx0ZXIsIG9wdGVkSW5Pbmx5OiB0cnVlfSk7XG4gIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldCgoaW5wdXQudXNlcklkcyB8fCBbXSkubWFwKChpZCkgPT4gZG9jS2V5KGlkKSkpO1xuICBjb25zdCByZWNpcGllbnRzID0gY2FuZGlkYXRlcy5maWx0ZXIoKHVzZXIpID0+XG4gICAgQm9vbGVhbih1c2VyLmVtYWlsKSAmJiAoIXNlbGVjdGVkSWRzLnNpemUgfHwgc2VsZWN0ZWRJZHMuaGFzKGRvY0tleSh1c2VyLnVzZXJJZCB8fCB1c2VyLl9rZXkpKSkpO1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgY2FtcGFpZ25JZCA9IGNyZWF0ZUhhc2goYGNybS1jYW1wYWlnbi0ke3RpbWVzdGFtcH0tJHtzdWJqZWN0fWAsIG51bGwpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgY2FtcGFpZ24gPSB7XG4gICAgX2tleTogY2FtcGFpZ25JZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGNhbXBhaWduSWQsXG4gICAgY3NzLFxuICAgIGZhaWxlZENvdW50OiAwLFxuICAgIGh0bWw6IGJvZHlIdG1sLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcmVjaXBpZW50Q291bnQ6IHJlY2lwaWVudHMubGVuZ3RoLFxuICAgIHNlbnRDb3VudDogMCxcbiAgICBzdGF0dXM6ICdzZW5kaW5nJyxcbiAgICBzdWJqZWN0XG4gIH07XG4gIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBJTlNFUlQgJHtjYW1wYWlnbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9DQU1QQUlHTlMpfWApO1xuXG4gIGxldCBmYWlsZWRDb3VudCA9IDA7XG4gIGxldCBzZW50Q291bnQgPSAwO1xuICBmb3IoY29uc3QgcmVjaXBpZW50c0JhdGNoIG9mIGNodW5rKHJlY2lwaWVudHMsIDUwKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXNTZW5kKHtcbiAgICAgICAgRGVzdGluYXRpb246IHtCY2NBZGRyZXNzZXM6IHJlY2lwaWVudHNCYXRjaC5tYXAoKHJlY2lwaWVudCkgPT4gU3RyaW5nKHJlY2lwaWVudC5lbWFpbCkpfSxcbiAgICAgICAgTWVzc2FnZToge1xuICAgICAgICAgIEJvZHk6IHtIdG1sOiB7RGF0YTogYDxzdHlsZT4ke2Nzc308L3N0eWxlPiR7Ym9keUh0bWx9YH0sIFRleHQ6IHtEYXRhOiBodG1sVG9UZXh0KGJvZHlIdG1sKX19LFxuICAgICAgICAgIFN1YmplY3Q6IHtEYXRhOiBzdWJqZWN0fVxuICAgICAgICB9LFxuICAgICAgICBTb3VyY2U6IGBcIiR7Y29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnROYW1lIHx8ICdSZWFrdG9yJ31cIiA8JHtjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydEVtYWlsIHx8ICdzdXBwb3J0QHJlYWt0b3IuaW8nfT5gXG4gICAgICB9KTtcbiAgICAgIHNlbnRDb3VudCArPSByZWNpcGllbnRzQmF0Y2gubGVuZ3RoO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBmYWlsZWRDb3VudCArPSByZWNpcGllbnRzQmF0Y2gubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXN1bHQgPSB7Li4uY2FtcGFpZ24sIGZhaWxlZENvdW50LCBzZW50QXQ6IG5vdygpLCBzZW50Q291bnQsIHN0YXR1czogZmFpbGVkQ291bnQgPyAoc2VudENvdW50ID8gJ3BhcnRpYWwnIDogJ2ZhaWxlZCcpIDogJ3NlbnQnfTtcbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIFVQREFURSAke2NhbXBhaWduSWR9IFdJVEggJHt7XG4gICAgICBmYWlsZWRDb3VudDogcmVzdWx0LmZhaWxlZENvdW50LFxuICAgICAgbW9kaWZpZWQ6IHJlc3VsdC5zZW50QXQsXG4gICAgICBzZW50QXQ6IHJlc3VsdC5zZW50QXQsXG4gICAgICBzZW50Q291bnQ6IHJlc3VsdC5zZW50Q291bnQsXG4gICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXNcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0NBTVBBSUdOUyl9XG4gIGApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3Qgc2F2ZUVkZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGVkZ2VDb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGVkZ2VLZXk6IHN0cmluZyxcbiAgZnJvbTogc3RyaW5nLFxuICB0bzogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgX2Zyb206IGZyb20sXG4gICAgX2tleTogZWRnZUtleSxcbiAgICBfdG86IHRvLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAuLi5kYXRhXG4gIH07XG4gIGNvbnN0IHF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBVUFNFUlQge19rZXk6ICR7ZWRnZUtleX19XG4gICAgSU5TRVJUICR7ZWRnZX1cbiAgICBVUERBVEUgJHtkYXRhfSBJTiAke2NvbGxlY3Rpb24oZWRnZUNvbGxlY3Rpb24pfVxuICBgO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPE1haWxpbmdMaXN0VHlwZT5cbik6IFByb21pc2U8TWFpbGluZ0xpc3RUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBtYWlsaW5nTGlzdElkID0gZG9jS2V5KFN0cmluZyhpbnB1dD8ubWFpbGluZ0xpc3RJZCB8fCBjcmVhdGVIYXNoKGBtYWlsaW5nLWxpc3QtJHtpbnB1dD8ubmFtZX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgbWFpbGluZ0xpc3QgPSB7XG4gICAgX2tleTogbWFpbGluZ0xpc3RJZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGNyZWF0ZWRCeVVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBkZXNjcmlwdGlvbjogY2xlYW5TdHJpbmcoaW5wdXQ/LmRlc2NyaXB0aW9uLCAyMDAwKSxcbiAgICBtYWlsaW5nTGlzdElkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgbmFtZTogY2xlYW5TdHJpbmcoaW5wdXQ/Lm5hbWUsIDE2MCksXG4gICAgc3RhdHVzOiBpbnB1dD8uc3RhdHVzIHx8ICdhY3RpdmUnXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHttYWlsaW5nTGlzdElkfX1cbiAgICBJTlNFUlQgJHttYWlsaW5nTGlzdH1cbiAgICBVUERBVEUgJHt7XG4gICAgICBkZXNjcmlwdGlvbjogbWFpbGluZ0xpc3QuZGVzY3JpcHRpb24sXG4gICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgbmFtZTogbWFpbGluZ0xpc3QubmFtZSxcbiAgICAgIHN0YXR1czogbWFpbGluZ0xpc3Quc3RhdHVzXG4gICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1haWxpbmdMaXN0cyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxNYWlsaW5nTGlzdFR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgbGlzdCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUyl9XG4gICAgICBGSUxURVIgbGlzdC5zdGF0dXMgIT0gXCJhcmNoaXZlZFwiXG4gICAgICBTT1JUIGxpc3QuYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOIGxpc3RcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmcsXG4gIHNvdXJjZSA9ICdtYW51YWwnXG4pOiBQcm9taXNlPE1haWxpbmdMaXN0VHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleSh1c2VySWQpO1xuICBjb25zdCBsaXN0S2V5ID0gZG9jS2V5KG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBlZGdlS2V5ID0gY3JlYXRlSGFzaChgaGFzTWFpbGluZ0xpc3QtJHt1c2VyS2V5fS0ke2xpc3RLZXl9YCk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfTUFJTElOR19MSVNULFxuICAgIGVkZ2VLZXksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIGxpc3RLZXkpLFxuICAgIHtcbiAgICAgIGFkZGVkQnlVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgICBzb3VyY2U6IGNsZWFuU3RyaW5nKHNvdXJjZSwgODApLFxuICAgICAgc3RhdHVzOiAnYWN0aXZlJ1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpXG4gICAgLnF1ZXJ5KGFxbGBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBsaXN0S2V5KX0pYClcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVVc2VyRnJvbU1haWxpbmdMaXN0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgbWFpbGluZ0xpc3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleSh1c2VySWQpO1xuICBjb25zdCBsaXN0S2V5ID0gZG9jS2V5KG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBlZGdlS2V5ID0gY3JlYXRlSGFzaChgaGFzTWFpbGluZ0xpc3QtJHt1c2VyS2V5fS0ke2xpc3RLZXl9YCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBtb2RpZmllZDogbm93KCksXG4gICAgcmVtb3ZlZEF0OiBub3coKSxcbiAgICBzdGF0dXM6ICdyZW1vdmVkJ1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBVUERBVEUgJHtlZGdlS2V5fSBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkudGhlbihCb29sZWFuKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYWlsaW5nTGlzdFVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmdcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBsaXN0SWQgPSBkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBtYWlsaW5nTGlzdElkKTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIsIGVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7bGlzdElkfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgICBGSUxURVIgZWRnZS5zdGF0dXMgPT0gXCJhY3RpdmVcIlxuICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlcnNCeVB1cmNoYXNlZFByb2R1Y3QgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHByb2R1Y3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgcHJvZHVjdEtleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXByb2R1Y3QnLCBwcm9kdWN0SWQpO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igb3JkZXIgSU4gMS4uMSBJTkJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUywgcHJvZHVjdEtleSl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfUFVSQ0hBU0VEX1BST0RVQ1QpfVxuICAgICAgRk9SIHVzZXIgSU4gMS4uMSBJTkJPVU5EIG9yZGVyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgICBSRVRVUk4gRElTVElOQ1QgdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGlnaWJsZU1haWxpbmdVc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgb3B0aW9uczoge3JlYWRvbmx5IG1haWxpbmdMaXN0SWQ/OiBzdHJpbmc7IHJlYWRvbmx5IHByb2R1Y3RJZD86IHN0cmluZzsgcmVhZG9ubHkgZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cz86IGJvb2xlYW59ID0ge31cbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzID0gb3B0aW9ucy5leGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzICE9PSBmYWxzZTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgTEVUIGJhc2VVc2VycyA9IChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiB1c2VyLm1hcmtldGluZ09wdEluID09IHRydWVcbiAgICAgICAgRklMVEVSIHVzZXIuZW1haWwgIT0gbnVsbCAmJiB1c2VyLmVtYWlsICE9IFwiXCJcbiAgICAgICAgRklMVEVSIHVzZXIuZW1haWxEZWxpdmVyeVN0YXR1cyA9PSBudWxsIHx8IHVzZXIuZW1haWxEZWxpdmVyeVN0YXR1cyA9PSBcInZhbGlkXCJcbiAgICAgICAgJHtvcHRpb25zLm1haWxpbmdMaXN0SWQgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiBsaXN0IElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19NQUlMSU5HX0xJU1QpfVxuICAgICAgICAgICAgICBGSUxURVIgbGlzdC5fa2V5ID09ICR7ZG9jS2V5KG9wdGlvbnMubWFpbGluZ0xpc3RJZCl9XG4gICAgICAgICAgICAgIFJFVFVSTiBsaXN0XG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICAke29wdGlvbnMucHJvZHVjdElkID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICAgICAgRk9SIHByb2R1Y3QgSU4gMS4uMSBPVVRCT1VORCBvcmRlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19QVVJDSEFTRURfUFJPRFVDVCl9XG4gICAgICAgICAgICAgICAgRklMVEVSIHByb2R1Y3QucHJvZHVjdElkID09ICR7U3RyaW5nKG9wdGlvbnMucHJvZHVjdElkKX1cbiAgICAgICAgICAgICAgICBSRVRVUk4gcHJvZHVjdFxuICAgICAgICAgICkgPiAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgJHtleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1IgdGlja2V0IElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCl9XG4gICAgICAgICAgICAgIEZJTFRFUiB0aWNrZXQuc3RhdHVzIElOIFtcIm9wZW5cIiwgXCJpbl9wcm9ncmVzc1wiLCBcIndhaXRpbmdfb25fY3VzdG9tZXJcIiwgXCJ3YWl0aW5nX29uX2ludGVybmFsXCJdXG4gICAgICAgICAgICAgIEZJTFRFUiB0aWNrZXQucHJpb3JpdHkgSU4gW1wiaGlnaFwiLCBcInVyZ2VudFwiXVxuICAgICAgICAgICAgICBSRVRVUk4gdGlja2V0XG4gICAgICAgICAgKSA9PSAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgRk9SIHVzZXIgSU4gYmFzZVVzZXJzXG4gICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICBSRVRVUk4gRElTVElOQ1QgdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmdlc3RTaG9waWZ5Q3VzdG9tZXJPcmRlciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFNob3BpZnlDdXN0b21lck9yZGVySW5wdXRcbik6IFByb21pc2U8Q3VzdG9tZXJPcmRlclR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHNob3BpZnlDdXN0b21lcklkID0gY2xlYW5FeHRlcm5hbElkKGlucHV0LnNob3BpZnlDdXN0b21lcklkLCAxNjApO1xuICBjb25zdCBzaG9waWZ5T3JkZXJJZCA9IGNsZWFuRXh0ZXJuYWxJZChpbnB1dC5zaG9waWZ5T3JkZXJJZCwgMTYwKTtcbiAgY29uc3QgY3VzdG9tZXIgPSBpbnB1dC5jdXN0b21lciB8fCB7fTtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhjdXN0b21lci5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwcm9kdWN0SWRzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi4oaW5wdXQucHJvZHVjdElkcyB8fCBbXSksIC4uLihpbnB1dC5wcm9kdWN0cyB8fCBbXSkubWFwKChwcm9kdWN0KSA9PiBwcm9kdWN0LnByb2R1Y3RJZCldXG4gICAgLm1hcCgocHJvZHVjdElkKSA9PiBjbGVhbkV4dGVybmFsSWQocHJvZHVjdElkLCAzMjApKVxuICAgIC5maWx0ZXIoQm9vbGVhbikpKTtcblxuICBpZighc2hvcGlmeUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3Nob3BpZnlDdXN0b21lcklkJyk7XG4gIH1cbiAgaWYoIXNob3BpZnlPcmRlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zaG9waWZ5T3JkZXJJZCcpO1xuICB9XG4gIGlmKCFlbWFpbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfY3VzdG9tZXJFbWFpbCcpO1xuICB9XG5cbiAgY29uc3QgdXNlcktleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXVzZXInLCBzaG9waWZ5Q3VzdG9tZXJJZCk7XG4gIGNvbnN0IHVzZXJJbnNlcnQgPSB7XG4gICAgX2tleTogdXNlcktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5sYXN0TmFtZSwgMTYwKSxcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiAnc2hvcGlmeScsXG4gICAgbWFya2V0aW5nT3B0SW46IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlLFxuICAgIG1hcmtldGluZ09wdEluQXQ6IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlID8gdGltZXN0YW1wIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWQsXG4gICAgdHlwZTogJ2NybUNvbnRhY3QnLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5sYXN0TmFtZSwgMTYwKSxcbiAgICBsYXN0UHVyY2hhc2VkQXQ6IGlucHV0LnB1cmNoYXNlZEF0IHx8IHRpbWVzdGFtcCxcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiAnc2hvcGlmeScsXG4gICAgbWFya2V0aW5nT3B0SW46IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWRcbiAgfTtcbiAgY29uc3QgdXNlclF1ZXJ5ID0gYXFsYFxuICAgIExFVCBleGlzdGluZyA9IEZJUlNUKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSIHVzZXIuc2hvcGlmeUN1c3RvbWVySWQgPT0gJHtzaG9waWZ5Q3VzdG9tZXJJZH0gfHwgdXNlci5lbWFpbCA9PSAke2VtYWlsfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1c2VyXG4gICAgKVxuICAgIExFVCB1c2VyS2V5ID0gZXhpc3RpbmcgPyBleGlzdGluZy5fa2V5IDogJHt1c2VyS2V5fVxuICAgIFVQU0VSVCB7X2tleTogdXNlcktleX1cbiAgICBJTlNFUlQgTUVSR0UoJHt1c2VySW5zZXJ0fSwge19rZXk6IHVzZXJLZXksIHVzZXJJZDogdXNlcktleX0pXG4gICAgVVBEQVRFICR7dXNlclVwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXNlclF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlO1xuICBjb25zdCByZXNvbHZlZFVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IHVzZXJLZXkpKTtcbiAgY29uc3Qgb3JkZXJLZXkgPSBleHRlcm5hbEtleSgnc2hvcGlmeS1vcmRlcicsIHNob3BpZnlPcmRlcklkKTtcbiAgY29uc3Qgb3JkZXIgPSB7XG4gICAgX2tleTogb3JkZXJLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBjdXJyZW5jeTogY2xlYW5TdHJpbmcoaW5wdXQuY3VycmVuY3ksIDMpLnRvVXBwZXJDYXNlKCksXG4gICAgY3VzdG9tZXJPcmRlcklkOiBvcmRlcktleSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHByb2R1Y3RJZHMsXG4gICAgcHVyY2hhc2VkQXQ6IGlucHV0LnB1cmNoYXNlZEF0IHx8IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZCxcbiAgICBzaG9waWZ5T3JkZXJJZCxcbiAgICB0b3RhbFByaWNlOiBOdW1iZXIoaW5wdXQudG90YWxQcmljZSB8fCAwKSxcbiAgICB1c2VySWQ6IHJlc29sdmVkVXNlcktleVxuICB9O1xuICBjb25zdCBvcmRlclF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtvcmRlcktleX19XG4gICAgSU5TRVJUICR7b3JkZXJ9XG4gICAgVVBEQVRFICR7e1xuICAgICAgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5LFxuICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHByb2R1Y3RJZHMsXG4gICAgICBwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXQsXG4gICAgICB0b3RhbFByaWNlOiBvcmRlci50b3RhbFByaWNlLFxuICAgICAgdXNlcklkOiByZXNvbHZlZFVzZXJLZXlcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1VTVE9NRVJfT1JERVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkT3JkZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkob3JkZXJRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBDdXN0b21lck9yZGVyVHlwZTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19DVVNUT01FUl9PUkRFUixcbiAgICBjcmVhdGVIYXNoKGBoYXNDdXN0b21lck9yZGVyLSR7cmVzb2x2ZWRVc2VyS2V5fS0ke29yZGVyS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX09SREVSUywgb3JkZXJLZXkpLFxuICAgIHtwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXQsIHNob3BpZnlDdXN0b21lcklkLCBzaG9waWZ5T3JkZXJJZH1cbiAgKTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9kdWN0SWRzLm1hcChhc3luYyAocHJvZHVjdElkKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdCA9IChpbnB1dC5wcm9kdWN0cyB8fCBbXSkuZmluZCgoaXRlbSkgPT4gaXRlbS5wcm9kdWN0SWQgPT09IHByb2R1Y3RJZCkgfHwge3Byb2R1Y3RJZH07XG4gICAgY29uc3QgcHJvZHVjdEtleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXByb2R1Y3QnLCBwcm9kdWN0SWQpO1xuICAgIGNvbnN0IHByb2R1Y3REb2MgPSB7XG4gICAgICBfa2V5OiBwcm9kdWN0S2V5LFxuICAgICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICB0aXRsZTogY2xlYW5TdHJpbmcocHJvZHVjdC50aXRsZSwgMzIwKSxcbiAgICAgIHZhcmlhbnRJZDogY2xlYW5FeHRlcm5hbElkKHByb2R1Y3QudmFyaWFudElkLCAxNjApXG4gICAgfTtcbiAgICBjb25zdCBwcm9kdWN0UXVlcnkgPSBhcWxgXG4gICAgICBVUFNFUlQge19rZXk6ICR7cHJvZHVjdEtleX19XG4gICAgICBJTlNFUlQgJHtwcm9kdWN0RG9jfVxuICAgICAgVVBEQVRFICR7e1xuICAgICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgICB0aXRsZTogcHJvZHVjdERvYy50aXRsZSxcbiAgICAgICAgdmFyaWFudElkOiBwcm9kdWN0RG9jLnZhcmlhbnRJZFxuICAgICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMpfVxuICAgIGA7XG4gICAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHByb2R1Y3RRdWVyeSk7XG4gICAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgICBjb250ZXh0LFxuICAgICAgRURHRVMuSEFTX1BVUkNIQVNFRF9QUk9EVUNULFxuICAgICAgY3JlYXRlSGFzaChgaGFzUHVyY2hhc2VkUHJvZHVjdC0ke29yZGVyS2V5fS0ke3Byb2R1Y3RLZXl9YCksXG4gICAgICBkb2NJZChDT0xMRUNUSU9OUy5DVVNUT01FUl9PUkRFUlMsIG9yZGVyS2V5KSxcbiAgICAgIGRvY0lkKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMsIHByb2R1Y3RLZXkpLFxuICAgICAge3Byb2R1Y3RJZCwgcHVyY2hhc2VkQXQ6IG9yZGVyLnB1cmNoYXNlZEF0fVxuICAgICk7XG4gIH0pKTtcblxuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIFVQREFURSAke3Jlc29sdmVkVXNlcktleX1cbiAgICBXSVRIIHtcbiAgICAgIGxhc3RQdXJjaGFzZWRBdDogJHtvcmRlci5wdXJjaGFzZWRBdH0sXG4gICAgICB0b3RhbE9yZGVyQ291bnQ6IExFTkdUSChcbiAgICAgICAgRk9SIG9yZGVyIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgcmVzb2x2ZWRVc2VyS2V5KX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICAgICAgUkVUVVJOIG9yZGVyXG4gICAgICApLFxuICAgICAgdG90YWxTcGVuZDogU1VNKFxuICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICBSRVRVUk4gVE9fTlVNQkVSKG9yZGVyLnRvdGFsUHJpY2UpXG4gICAgICApXG4gICAgfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICBgKTtcblxuICByZXR1cm4gc2F2ZWRPcmRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXN0b21lck9yZGVyc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8Q3VzdG9tZXJPcmRlclR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VySWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgIFNPUlQgb3JkZXIucHVyY2hhc2VkQXQgREVTQ1xuICAgICAgUkVUVVJOIG9yZGVyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuY29uc3Qgc2VuZFN1cHBvcnRUaWNrZXRFbWFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGlja2V0OiBTdXBwb3J0VGlja2V0VHlwZURhdGEsXG4gIGRldGFpbHM6IHN0cmluZyxcbiAgaGVhZGluZzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHRpY2tldC51c2VySWQpfSlcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gIGlmKCF1c2VyPy5lbWFpbCkgcmV0dXJuO1xuICBjb25zdCBzdXBwb3J0TmFtZSA9IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0TmFtZSB8fCBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnROYW1lJykgfHwgJ1JlYWt0b3IgU3VwcG9ydCc7XG4gIGNvbnN0IHN1cHBvcnRFbWFpbCA9IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0RW1haWwgfHwgQ29uZmlnLmdldCgnZGV0YWlscy5zdXBwb3J0RW1haWwnKSB8fCAnc3VwcG9ydEByZWFrdG9yLmlvJztcbiAgY29uc3QgdGlja2V0TnVtYmVyID0gU3RyaW5nKHRpY2tldC50aWNrZXROdW1iZXIgfHwgdGlja2V0LnN1cHBvcnRUaWNrZXRJZCB8fCB0aWNrZXQuX2tleSB8fCAnJyk7XG4gIGNvbnN0IHN0YXR1c1VybCA9IGBodHRwczovL2NybS5yZWFrdG9yLmlvL3N1cHBvcnQvc3RhdHVzP3RpY2tldD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aWNrZXROdW1iZXIpfWA7XG4gIGNvbnN0IHRleHQgPSBgJHtoZWFkaW5nfVxcblxcblRpY2tldDogJHt0aWNrZXROdW1iZXJ9XFxuU3RhdHVzOiAke3RpY2tldC5zdGF0dXMgfHwgJ3N1Ym1pdHRlZCd9XFxuXFxuJHtkZXRhaWxzfVxcblxcblRyYWNrIHRoaXMgdGlja2V0OiAke3N0YXR1c1VybH1gO1xuICBhd2FpdCBzZXNTZW5kKHtcbiAgICBEZXN0aW5hdGlvbjoge1RvQWRkcmVzc2VzOiBbU3RyaW5nKHVzZXIuZW1haWwpXX0sXG4gICAgTWVzc2FnZToge1xuICAgICAgQm9keToge0h0bWw6IHtEYXRhOiBgPGgxPiR7ZXNjYXBlSHRtbChoZWFkaW5nKX08L2gxPjxwPjxzdHJvbmc+VGlja2V0Ojwvc3Ryb25nPiAke2VzY2FwZUh0bWwodGlja2V0TnVtYmVyKX08L3A+PHA+PHN0cm9uZz5TdGF0dXM6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChTdHJpbmcodGlja2V0LnN0YXR1cyB8fCAnc3VibWl0dGVkJykpfTwvcD48cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6aW5oZXJpdFwiPiR7ZXNjYXBlSHRtbChkZXRhaWxzKX08L3ByZT48cD48YSBocmVmPVwiJHtlc2NhcGVIdG1sKHN0YXR1c1VybCl9XCI+VHJhY2sgdGhpcyB0aWNrZXQgb25saW5lPC9hPjwvcD5gfSwgVGV4dDoge0RhdGE6IHRleHR9fSxcbiAgICAgIFN1YmplY3Q6IHtEYXRhOiBgWyR7dGlja2V0TnVtYmVyfV0gJHtoZWFkaW5nfWB9XG4gICAgfSxcbiAgICBTb3VyY2U6IGBcIiR7c3VwcG9ydE5hbWV9XCIgPCR7c3VwcG9ydEVtYWlsfT5gXG4gIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldFR5cGVEYXRhPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCBjcmVhdGVIYXNoKGBzdXBwb3J0LXRpY2tldC0ke3VzZXJLZXl9LSR7dGltZXN0YW1wfWApKSk7XG4gIGNvbnN0IHRpY2tldE51bWJlciA9IGNsZWFuU3RyaW5nKGlucHV0LnRpY2tldE51bWJlciwgODApIHx8IGBSS1QtJHtuZXcgRGF0ZSh0aW1lc3RhbXApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApLnJlcGxhY2UoLy0vZywgJycpfS0ke3RpY2tldEtleS5zbGljZSgwLCA4KS50b1VwcGVyQ2FzZSgpfWA7XG4gIGNvbnN0IHRpY2tldCA9IHtcbiAgICBfa2V5OiB0aWNrZXRLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhc3NpZ25lZFRvVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmFzc2lnbmVkVG9Vc2VySWQgfHwgJycpKSxcbiAgICBkZXNjcmlwdGlvbjogY2xlYW5TdHJpbmcoaW5wdXQuZGVzY3JpcHRpb24sIDQwMDApLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcHJpb3JpdHk6IGlucHV0LnByaW9yaXR5IHx8ICdub3JtYWwnLFxuICAgIHByb2R1Y3RJZDogY2xlYW5FeHRlcm5hbElkKGlucHV0LnByb2R1Y3RJZCwgMzIwKSxcbiAgICBzaG9waWZ5T3JkZXJJZDogY2xlYW5TdHJpbmcoaW5wdXQuc2hvcGlmeU9yZGVySWQsIDE2MCksXG4gICAgc3RhdHVzOiAnc3VibWl0dGVkJyxcbiAgICBzdWJqZWN0OiBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRpY2tldE51bWJlcixcbiAgICB0eXBlOiBpbnB1dC50eXBlIHx8ICdnZW5lcmFsX3N1cHBvcnQnLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBJTlNFUlQgJHt0aWNrZXR9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRUaWNrZXQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldC0ke3VzZXJLZXl9LSR7dGlja2V0S2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VyS2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSksXG4gICAge3ByaW9yaXR5OiB0aWNrZXQucHJpb3JpdHksIHN0YXR1czogdGlja2V0LnN0YXR1cywgdHlwZTogdGlja2V0LnR5cGV9XG4gICk7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRFdmVudChjb250ZXh0LCB7XG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8IHVzZXJLZXkpKSxcbiAgICBldmVudFR5cGU6ICdzdWJtaXR0ZWQnLFxuICAgIG1ldGFkYXRhOiB7ZGV0YWlsczogdGlja2V0LmRlc2NyaXB0aW9ufSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiB0aWNrZXQuc3RhdHVzXG4gIH0pO1xuXG4gIHJldHVybiBzYXZlZFRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBzdWJtaXRQdWJsaWNTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUHVibGljU3VwcG9ydFRpY2tldElucHV0XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGlucHV0LmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gY2xlYW5TdHJpbmcoaW5wdXQuZGVzY3JpcHRpb24sIDQwMDApO1xuICBjb25zdCBzdWJqZWN0ID0gY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKTtcbiAgaWYoIWVtYWlsUGF0dGVybi50ZXN0KGVtYWlsKSkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF92YWxpZF9lbWFpbCcpO1xuICBpZighc3ViamVjdCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zdWJqZWN0Jyk7XG4gIGlmKCFkZXNjcmlwdGlvbikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9kZXNjcmlwdGlvbicpO1xuXG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTLFxuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTLFxuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyxcbiAgICBDT0xMRUNUSU9OUy5VU0VSU1xuICBdLm1hcCgobmFtZSkgPT4gZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uKGRhdGFiYXNlLCBuYW1lKSkpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VULFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRVxuICBdLm1hcCgobmFtZSkgPT4gZW5zdXJlRWRnZUNvbGxlY3Rpb24oZGF0YWJhc2UsIG5hbWUpKSk7XG5cbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGdlbmVyYXRlZFVzZXJLZXkgPSBjcmVhdGVIYXNoKGVtYWlsLCBudWxsKTtcbiAgY29uc3Qgb3B0ZWRJbiA9IGlucHV0Lm1hcmtldGluZ09wdEluID09PSB0cnVlO1xuICBjb25zdCB1c2VySW5zZXJ0ID0ge1xuICAgIF9rZXk6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSwgMTYwKSxcbiAgICBtYWlsaW5nTGlzdDogb3B0ZWRJbixcbiAgICBtYXJrZXRpbmdPcHRJbjogb3B0ZWRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHVzZXJJZDogZ2VuZXJhdGVkVXNlcktleVxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIC4uLihvcHRlZEluID8ge21haWxpbmdMaXN0OiB0cnVlLCBtYXJrZXRpbmdPcHRJbjogdHJ1ZSwgbWFya2V0aW5nT3B0SW5BdDogdGltZXN0YW1wfSA6IHt9KSxcbiAgICBmaXJzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0LmZpcnN0TmFtZSwgMTYwKSB8fCB1bmRlZmluZWQsXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lLCAxNjApIHx8IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wXG4gIH07XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgVVBTRVJUIHtlbWFpbDogJHtlbWFpbH19XG4gICAgICBJTlNFUlQgJHt1c2VySW5zZXJ0fVxuICAgICAgVVBEQVRFICR7dXNlclVwZGF0ZX1cbiAgICAgIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICBSRVRVUk4gTkVXXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGU7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IGNyZWF0ZVN1cHBvcnRUaWNrZXQoY29udGV4dCwge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIHByaW9yaXR5OiBzdXBwb3J0UHJpb3JpdGllcy5oYXMoU3RyaW5nKGlucHV0LnByaW9yaXR5KSkgPyBpbnB1dC5wcmlvcml0eSA6ICdub3JtYWwnLFxuICAgIHN1YmplY3QsXG4gICAgdHlwZTogc3VwcG9ydFR5cGVzLmhhcyhTdHJpbmcoaW5wdXQudHlwZSkpID8gaW5wdXQudHlwZSA6ICdnZW5lcmFsX3N1cHBvcnQnLFxuICAgIHVzZXJJZDogU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IGdlbmVyYXRlZFVzZXJLZXkpXG4gIH0pO1xuICBhd2FpdCBzZW5kU3VwcG9ydFRpY2tldEVtYWlsKGNvbnRleHQsIHRpY2tldCwgZGVzY3JpcHRpb24sICdXZSByZWNlaXZlZCB5b3VyIHN1cHBvcnQgdGlja2V0Jyk7XG4gIHJldHVybiB0aWNrZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHVibGljU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGlja2V0TnVtYmVyOiBzdHJpbmcsXG4gIGVtYWlsQWRkcmVzczogc3RyaW5nXG4pOiBQcm9taXNlPFB1YmxpY1N1cHBvcnRUaWNrZXRGZWVkIHwgbnVsbD4gPT4ge1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGVtYWlsQWRkcmVzcywgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBudW1iZXIgPSBjbGVhblN0cmluZyh0aWNrZXROdW1iZXIsIDgwKS50b1VwcGVyQ2FzZSgpO1xuICBpZighZW1haWxQYXR0ZXJuLnRlc3QoZW1haWwpIHx8ICFudW1iZXIpIHJldHVybiBudWxsO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgaWYoIWF3YWl0IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKS5leGlzdHMoKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgRk9SIHRpY2tldCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICAgIEZJTFRFUiBVUFBFUih0aWNrZXQudGlja2V0TnVtYmVyKSA9PSAke251bWJlcn1cbiAgICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJHtDT0xMRUNUSU9OUy5VU0VSU30sIHRpY2tldC51c2VySWQpXG4gICAgICBGSUxURVIgTE9XRVIodXNlci5lbWFpbCkgPT0gJHtlbWFpbH1cbiAgICAgIExFVCBtZXNzYWdlcyA9IChcbiAgICAgICAgRk9SIG1lc3NhZ2UgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTKX1cbiAgICAgICAgICBGSUxURVIgbWVzc2FnZS5zdXBwb3J0VGlja2V0SWQgPT0gdGlja2V0Ll9rZXkgQU5EIG1lc3NhZ2UudmlzaWJpbGl0eSA9PSBcImN1c3RvbWVyXCJcbiAgICAgICAgICBTT1JUIG1lc3NhZ2UuYWRkZWQgQVNDXG4gICAgICAgICAgUkVUVVJOIG1lc3NhZ2VcbiAgICAgIClcbiAgICAgIExFVCBldmVudHMgPSAoXG4gICAgICAgIEZPUiBldmVudCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTKX1cbiAgICAgICAgICBGSUxURVIgZXZlbnQuc3VwcG9ydFRpY2tldElkID09IHRpY2tldC5fa2V5XG4gICAgICAgICAgU09SVCBldmVudC5hZGRlZCBBU0NcbiAgICAgICAgICBSRVRVUk4gZXZlbnRcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB7dGlja2V0LCBtZXNzYWdlcywgZXZlbnRzfVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFByb21pc2U8UHVibGljU3VwcG9ydFRpY2tldEZlZWQgfCBudWxsPjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0cyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZmlsdGVyczoge3JlYWRvbmx5IHN0YXR1cz86IHN0cmluZzsgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nfSA9IHt9XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YVtdPiA9PiB7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICBpZighYXdhaXQgZGF0YWJhc2UuY29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpLmV4aXN0cygpKSByZXR1cm4gW107XG4gICAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdGlja2V0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgICAgICAke2ZpbHRlcnMuc3RhdHVzID8gYXFsYEZJTFRFUiB0aWNrZXQuc3RhdHVzID09ICR7ZmlsdGVycy5zdGF0dXN9YCA6IGFxbGBgfVxuICAgICAgICAke2ZpbHRlcnMudXNlcklkID8gYXFsYEZJTFRFUiB0aWNrZXQudXNlcklkID09ICR7ZG9jS2V5KGZpbHRlcnMudXNlcklkKX1gIDogYXFsYGB9XG4gICAgICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJHtDT0xMRUNUSU9OUy5VU0VSU30sIHRpY2tldC51c2VySWQpXG4gICAgICAgIFNPUlQgdGlja2V0LmFkZGVkIERFU0NcbiAgICAgICAgUkVUVVJOIE1FUkdFKHRpY2tldCwge3VzZXJ9KVxuICAgIGA7XG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0pKCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlU3VwcG9ydFRpY2tldFN0YXR1cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmcsXG4gIHN0YXR1czogU3VwcG9ydFRpY2tldFN0YXR1cyxcbiAgcmVzb2x1dGlvblN1bW1hcnkgPSAnJ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KHN1cHBvcnRUaWNrZXRJZCk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKVxuICAgIC5xdWVyeShhcWxgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpfSlgKVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFN1cHBvcnRUaWNrZXRUeXBlRGF0YSB8IG51bGw7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAuLi4oc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiB7Y29tcGxldGVkQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdkb25lJyAmJiB7ZG9uZUF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAncmVzb2x2ZWQnICYmIHtyZXNvbHZlZEF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAnY2xvc2VkJyAmJiB7Y2xvc2VkQXQ6IHRpbWVzdGFtcH0pLFxuICAgIGxhc3RVcGRhdGVEZXRhaWxzOiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzdGF0dXNcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dGlja2V0S2V5fSBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBTdXBwb3J0VGlja2V0VHlwZURhdGE7XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgZWRnZSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgICAgIEZJTFRFUiBlZGdlLl90byA9PSAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KX1cbiAgICAgIFVQREFURSBlZGdlIFdJVEggJHt7XG4gICAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICAgIHJlc29sdmVkQXQ6IHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzXG4gICAgICB9fSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgYCk7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRFdmVudChjb250ZXh0LCB7XG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgZXZlbnRUeXBlOiAnc3RhdHVzX2NoYW5nZWQnLFxuICAgIGZyb21WYWx1ZTogcHJldmlvdXM/LnN0YXR1cyxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiBzdGF0dXNcbiAgfSk7XG5cbiAgaWYoc3RhdHVzID09PSAncmVzb2x2ZWQnKSB7XG4gICAgYXdhaXQgY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24oY29udGV4dCwge1xuICAgICAgYm9keTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnkgfHwgJ1lvdXIgc3VwcG9ydCB0aWNrZXQgaGFzIGJlZW4gcmVzb2x2ZWQuJywgNDAwMCksXG4gICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgc3ViamVjdDogYFJlc29sdmVkOiAke3RpY2tldC5zdWJqZWN0IHx8ICdTdXBwb3J0IHRpY2tldCd9YCxcbiAgICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgICAgdHlwZTogJ3N1cHBvcnRfdGlja2V0X3Jlc29sdmVkJyxcbiAgICAgIHVzZXJJZDogdGlja2V0LnVzZXJJZFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTdXBwb3J0VGlja2V0UHJvZ3Jlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nLFxuICBzdGF0dXM6IFN1cHBvcnRUaWNrZXRTdGF0dXMsXG4gIGRldGFpbHM6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBpZighc3VwcG9ydFN0YXR1c2VzLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWRfc3VwcG9ydF90aWNrZXRfc3RhdHVzJyk7XG4gIGNvbnN0IG1hcmtkb3duID0gY2xlYW5TdHJpbmcoZGV0YWlscywgNDAwMCk7XG4gIGlmKCFtYXJrZG93bikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF91cGRhdGVfZGV0YWlscycpO1xuICBjb25zdCB0aWNrZXQgPSBhd2FpdCB1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzKGNvbnRleHQsIHN1cHBvcnRUaWNrZXRJZCwgc3RhdHVzLCBtYXJrZG93bik7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlKGNvbnRleHQsIHtcbiAgICBhdXRob3JVc2VySWQ6IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJyksXG4gICAgYm9keTogbWFya2Rvd24sXG4gICAgc3VwcG9ydFRpY2tldElkLFxuICAgIHZpc2liaWxpdHk6ICdjdXN0b21lcidcbiAgfSk7XG4gIGF3YWl0IGNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uKGNvbnRleHQsIHtcbiAgICBib2R5OiBtYXJrZG93bixcbiAgICBzdGF0dXM6ICdzZW50JyxcbiAgICBzdWJqZWN0OiBgVGlja2V0ICR7dGlja2V0LnRpY2tldE51bWJlciB8fCBzdXBwb3J0VGlja2V0SWR9OiAke3N0YXR1cy5yZXBsYWNlKC9fL2csICcgJyl9YCxcbiAgICBzdXBwb3J0VGlja2V0SWQsXG4gICAgdHlwZTogJ3N1cHBvcnRfdGlja2V0X3Byb2dyZXNzJyxcbiAgICB1c2VySWQ6IHRpY2tldC51c2VySWRcbiAgfSk7XG4gIGF3YWl0IHNlbmRTdXBwb3J0VGlja2V0RW1haWwoY29udGV4dCwgdGlja2V0LCBtYXJrZG93biwgYFN1cHBvcnQgdGlja2V0ICR7c3RhdHVzLnJlcGxhY2UoL18vZywgJyAnKX1gKTtcbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTdXBwb3J0VGlja2V0TWVzc2FnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8ICcnKSk7XG4gIGNvbnN0IG1lc3NhZ2VLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRNZXNzYWdlSWQgfHwgY3JlYXRlSGFzaChgc3VwcG9ydC10aWNrZXQtbWVzc2FnZS0ke3RpY2tldEtleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICBfa2V5OiBtZXNzYWdlS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYXV0aG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmF1dGhvclVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBib2R5OiBjbGVhblN0cmluZyhpbnB1dC5ib2R5LCA0MDAwKSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHN1cHBvcnRUaWNrZXRNZXNzYWdlSWQ6IG1lc3NhZ2VLZXksXG4gICAgdmlzaWJpbGl0eTogaW5wdXQudmlzaWJpbGl0eSB8fCAnY3VzdG9tZXInXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke21lc3NhZ2V9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZE1lc3NhZ2UgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRSxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0TWVzc2FnZS0ke3RpY2tldEtleX0tJHttZXNzYWdlS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUywgbWVzc2FnZUtleSksXG4gICAge2F1dGhvclVzZXJJZDogbWVzc2FnZS5hdXRob3JVc2VySWQsIHZpc2liaWxpdHk6IG1lc3NhZ2UudmlzaWJpbGl0eX1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWRNZXNzYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRNZXNzYWdlcyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmdcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG1lc3NhZ2UgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgc3VwcG9ydFRpY2tldElkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFKX1cbiAgICAgIFNPUlQgbWVzc2FnZS5hZGRlZCBBU0NcbiAgICAgIFJFVFVSTiBtZXNzYWdlXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFN1cHBvcnRUaWNrZXRFdmVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldEV2ZW50VHlwZT5cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldEV2ZW50VHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgJycpKTtcbiAgY29uc3QgZXZlbnRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRFdmVudElkIHx8IGNyZWF0ZUhhc2goYHN1cHBvcnQtdGlja2V0LWV2ZW50LSR7dGlja2V0S2V5fS0ke3RpbWVzdGFtcH0tJHtpbnB1dC5ldmVudFR5cGV9YCkpKTtcbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgX2tleTogZXZlbnRLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhpbnB1dC5hY3RvclVzZXJJZCB8fCAnJykpLFxuICAgIGV2ZW50VHlwZTogY2xlYW5TdHJpbmcoaW5wdXQuZXZlbnRUeXBlLCAxNjApLFxuICAgIGZyb21WYWx1ZTogY2xlYW5TdHJpbmcoaW5wdXQuZnJvbVZhbHVlLCAzMjApLFxuICAgIG1ldGFkYXRhOiBpbnB1dC5tZXRhZGF0YSB8fCB7fSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN1cHBvcnRUaWNrZXRFdmVudElkOiBldmVudEtleSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiBjbGVhblN0cmluZyhpbnB1dC50b1ZhbHVlLCAzMjApXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke2V2ZW50fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkRXZlbnQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldEV2ZW50LSR7dGlja2V0S2V5fS0ke2V2ZW50S2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMsIGV2ZW50S2V5KSxcbiAgICB7YWN0b3JVc2VySWQ6IGV2ZW50LmFjdG9yVXNlcklkLCBldmVudFR5cGU6IGV2ZW50LmV2ZW50VHlwZX1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWRFdmVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0RXZlbnRzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0RXZlbnRUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIGV2ZW50IElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHN1cHBvcnRUaWNrZXRJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQpfVxuICAgICAgU09SVCBldmVudC5hZGRlZCBBU0NcbiAgICAgIFJFVFVSTiBldmVudFxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlPlxuKTogUHJvbWlzZTxDdXN0b21lck5vdGlmaWNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBub3RpZmljYXRpb25LZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LmN1c3RvbWVyTm90aWZpY2F0aW9uSWQgfHwgY3JlYXRlSGFzaChgY3VzdG9tZXItbm90aWZpY2F0aW9uLSR7dXNlcktleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xuICAgIF9rZXk6IG5vdGlmaWNhdGlvbktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGJvZHk6IGNsZWFuU3RyaW5nKGlucHV0LmJvZHksIDQwMDApLFxuICAgIGN1c3RvbWVyTm90aWZpY2F0aW9uSWQ6IG5vdGlmaWNhdGlvbktleSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHNlbnRBdDogaW5wdXQuc2VudEF0LFxuICAgIHN0YXR1czogaW5wdXQuc3RhdHVzIHx8ICdxdWV1ZWQnLFxuICAgIHN1YmplY3Q6IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCksXG4gICAgc3VwcG9ydFRpY2tldElkOiBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCAnJykpLFxuICAgIHR5cGU6IGNsZWFuU3RyaW5nKGlucHV0LnR5cGUsIDE2MCksXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke25vdGlmaWNhdGlvbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNVU1RPTUVSX05PVElGSUNBVElPTlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWROb3RpZmljYXRpb24gPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OLFxuICAgIGNyZWF0ZUhhc2goYGhhc0N1c3RvbWVyTm90aWZpY2F0aW9uLSR7dXNlcktleX0tJHtub3RpZmljYXRpb25LZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX05PVElGSUNBVElPTlMsIG5vdGlmaWNhdGlvbktleSksXG4gICAge1xuICAgICAgc3RhdHVzOiBub3RpZmljYXRpb24uc3RhdHVzLFxuICAgICAgc3VwcG9ydFRpY2tldElkOiBub3RpZmljYXRpb24uc3VwcG9ydFRpY2tldElkLFxuICAgICAgdHlwZTogbm90aWZpY2F0aW9uLnR5cGVcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIHNhdmVkTm90aWZpY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbWVyTm90aWZpY2F0aW9uc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG5vdGlmaWNhdGlvbiBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OKX1cbiAgICAgIFNPUlQgbm90aWZpY2F0aW9uLmFkZGVkIERFU0NcbiAgICAgIFJFVFVSTiBub3RpZmljYXRpb25cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwicGFyc2VQaG9uZSIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25maWciLCJ1c2VEYiIsImlzQWRtaW5Vc2VyIiwic2VzU2VuZCIsIm5vdyIsIkRhdGUiLCJjb2xsZWN0aW9uIiwibmFtZSIsImRvY0tleSIsInZhbHVlIiwiU3RyaW5nIiwiZG9jSWQiLCJjb2xsZWN0aW9uTmFtZSIsImtleSIsImV4dGVybmFsS2V5IiwicHJlZml4IiwiaWQiLCJjbGVhblN0cmluZyIsImxlbmd0aCIsImNsZWFuRXh0ZXJuYWxJZCIsInRyaW0iLCJzbGljZSIsImVuc3VyZURvY3VtZW50Q29sbGVjdGlvbiIsImRhdGFiYXNlIiwidGFyZ2V0IiwiZXhpc3RzIiwiY3JlYXRlQ29sbGVjdGlvbiIsImVycm9yIiwiZW5zdXJlRWRnZUNvbGxlY3Rpb24iLCJjcmVhdGVFZGdlQ29sbGVjdGlvbiIsInJlcXVpcmVDcm1BZG1pbiIsImNvbnRleHQiLCJzZXNzaW9uIiwiRXJyb3IiLCJyZXF1aXJlQ3JtQWRtaW5pc3RyYXRvciIsImFsbG93ZWRDb250YWN0RmllbGRzIiwiU2V0Iiwic3VwcG9ydFByaW9yaXRpZXMiLCJzdXBwb3J0U3RhdHVzZXMiLCJzdXBwb3J0VHlwZXMiLCJlbWFpbFBhdHRlcm4iLCJlc2NhcGVIdG1sIiwicmVwbGFjZSIsInNhbml0aXplSHRtbCIsInNhbml0aXplQ3NzIiwiaHRtbFRvVGV4dCIsImNodW5rIiwiaXRlbXMiLCJzaXplIiwiZ3JvdXBzIiwiaW5kZXgiLCJwdXNoIiwic3VibWl0Q3JtRm9ybSIsImlucHV0IiwibWFya2V0aW5nT3B0SW4iLCJlbWFpbCIsInRvTG93ZXJDYXNlIiwicmF3UGhvbmUiLCJwaG9uZSIsImRhdGFiYXNlTmFtZSIsIkNSTV9GT1JNX1NVQk1JU1NJT05TIiwidGltZXN0YW1wIiwic291cmNlIiwiZm9ybUlkIiwidmFsdWVzIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJnZW5lcmF0ZWRVc2VyS2V5IiwiY29uc2VudCIsIm1hcmtldGluZ09wdEluQXQiLCJtYXJrZXRpbmdPcHRPdXRBdCIsInVzZXJJbnNlcnQiLCJfa2V5IiwiYWN0aXZlIiwiYWRkZWQiLCJtYWlsaW5nTGlzdCIsIm1hcmtldGluZ0NvbnNlbnRTb3VyY2UiLCJtb2RpZmllZCIsInR5cGUiLCJ1c2VyQWNjZXNzIiwidXNlcklkIiwidmVyaWZpZWRFbWFpbCIsInZlcmlmaWVkUGhvbmUiLCJ1c2VyVXBkYXRlIiwidXNlciIsInF1ZXJ5IiwiVVNFUlMiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsInN1Ym1pc3Npb25JZCIsInN1Ym1pc3Npb24iLCJzYXZlZCIsImdldENybUZvcm1TdWJtaXNzaW9ucyIsImFsbCIsImdldENybUNvbnRhY3RzIiwiZmlsdGVyIiwic2VhcmNoIiwiZmllbGQiLCJoYXMiLCJvcHRlZEluT25seSIsIm9wZXJhdG9yIiwiaW5jbHVkZXMiLCJzZW5kQ3JtQ2FtcGFpZ24iLCJzdWJqZWN0IiwiYm9keUh0bWwiLCJodG1sIiwiY3NzIiwiY2FuZGlkYXRlcyIsInNlbGVjdGVkSWRzIiwidXNlcklkcyIsIm1hcCIsInJlY2lwaWVudHMiLCJCb29sZWFuIiwiY2FtcGFpZ25JZCIsImNhbXBhaWduIiwiZmFpbGVkQ291bnQiLCJyZWNpcGllbnRDb3VudCIsInNlbnRDb3VudCIsInN0YXR1cyIsIkNSTV9DQU1QQUlHTlMiLCJyZWNpcGllbnRzQmF0Y2giLCJEZXN0aW5hdGlvbiIsIkJjY0FkZHJlc3NlcyIsInJlY2lwaWVudCIsIk1lc3NhZ2UiLCJCb2R5IiwiSHRtbCIsIkRhdGEiLCJUZXh0IiwiU3ViamVjdCIsIlNvdXJjZSIsImNvbmZpZyIsImRldGFpbHMiLCJzdXBwb3J0TmFtZSIsInN1cHBvcnRFbWFpbCIsIl9lcnJvciIsInJlc3VsdCIsInNlbnRBdCIsInNhdmVFZGdlIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlS2V5IiwiZnJvbSIsInRvIiwiZGF0YSIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNyZWF0ZU1haWxpbmdMaXN0IiwibWFpbGluZ0xpc3RJZCIsImNyZWF0ZWRCeVVzZXJJZCIsImRlc2NyaXB0aW9uIiwiTUFJTElOR19MSVNUUyIsImdldE1haWxpbmdMaXN0cyIsImFkZFVzZXJUb01haWxpbmdMaXN0IiwidXNlcktleSIsImxpc3RLZXkiLCJIQVNfTUFJTElOR19MSVNUIiwiYWRkZWRCeVVzZXJJZCIsInJlbW92ZVVzZXJGcm9tTWFpbGluZ0xpc3QiLCJ1cGRhdGUiLCJyZW1vdmVkQXQiLCJnZXRNYWlsaW5nTGlzdFVzZXJzIiwibGlzdElkIiwiZ2V0VXNlcnNCeVB1cmNoYXNlZFByb2R1Y3QiLCJwcm9kdWN0SWQiLCJwcm9kdWN0S2V5IiwiU0hPUElGWV9QUk9EVUNUUyIsIkhBU19QVVJDSEFTRURfUFJPRFVDVCIsIkhBU19DVVNUT01FUl9PUkRFUiIsImdldEVsaWdpYmxlTWFpbGluZ1VzZXJzIiwib3B0aW9ucyIsImV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMiLCJIQVNfU1VQUE9SVF9USUNLRVQiLCJpbmdlc3RTaG9waWZ5Q3VzdG9tZXJPcmRlciIsInNob3BpZnlDdXN0b21lcklkIiwic2hvcGlmeU9yZGVySWQiLCJjdXN0b21lciIsInByb2R1Y3RJZHMiLCJBcnJheSIsInByb2R1Y3RzIiwicHJvZHVjdCIsInVuZGVmaW5lZCIsImxhc3RQdXJjaGFzZWRBdCIsInB1cmNoYXNlZEF0IiwidXNlclF1ZXJ5IiwicmVzb2x2ZWRVc2VyS2V5Iiwib3JkZXJLZXkiLCJvcmRlciIsImN1cnJlbmN5IiwidG9VcHBlckNhc2UiLCJjdXN0b21lck9yZGVySWQiLCJ0b3RhbFByaWNlIiwiTnVtYmVyIiwib3JkZXJRdWVyeSIsIkNVU1RPTUVSX09SREVSUyIsInNhdmVkT3JkZXIiLCJQcm9taXNlIiwiZmluZCIsIml0ZW0iLCJwcm9kdWN0RG9jIiwidGl0bGUiLCJ2YXJpYW50SWQiLCJwcm9kdWN0UXVlcnkiLCJnZXRDdXN0b21lck9yZGVyc0J5VXNlciIsInNlbmRTdXBwb3J0VGlja2V0RW1haWwiLCJ0aWNrZXQiLCJoZWFkaW5nIiwiZ2V0IiwidGlja2V0TnVtYmVyIiwic3VwcG9ydFRpY2tldElkIiwic3RhdHVzVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidGV4dCIsIlRvQWRkcmVzc2VzIiwiY2F0Y2giLCJjcmVhdGVTdXBwb3J0VGlja2V0IiwidGlja2V0S2V5IiwidG9JU09TdHJpbmciLCJhc3NpZ25lZFRvVXNlcklkIiwicHJpb3JpdHkiLCJTVVBQT1JUX1RJQ0tFVFMiLCJzYXZlZFRpY2tldCIsImFkZFN1cHBvcnRUaWNrZXRFdmVudCIsImFjdG9yVXNlcklkIiwiZXZlbnRUeXBlIiwibWV0YWRhdGEiLCJ0b1ZhbHVlIiwic3VibWl0UHVibGljU3VwcG9ydFRpY2tldCIsInRlc3QiLCJTVVBQT1JUX1RJQ0tFVF9FVkVOVFMiLCJTVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyIsIkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCIsIkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFIiwib3B0ZWRJbiIsImdldFB1YmxpY1N1cHBvcnRUaWNrZXQiLCJlbWFpbEFkZHJlc3MiLCJudW1iZXIiLCJnZXRTdXBwb3J0VGlja2V0cyIsImZpbHRlcnMiLCJ1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzIiwicmVzb2x1dGlvblN1bW1hcnkiLCJwcmV2aW91cyIsImNvbXBsZXRlZEF0IiwiZG9uZUF0IiwicmVzb2x2ZWRBdCIsImNsb3NlZEF0IiwibGFzdFVwZGF0ZURldGFpbHMiLCJmcm9tVmFsdWUiLCJjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbiIsImJvZHkiLCJ1cGRhdGVTdXBwb3J0VGlja2V0UHJvZ3Jlc3MiLCJtYXJrZG93biIsImFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlIiwiYXV0aG9yVXNlcklkIiwidmlzaWJpbGl0eSIsIm1lc3NhZ2VLZXkiLCJzdXBwb3J0VGlja2V0TWVzc2FnZUlkIiwibWVzc2FnZSIsInNhdmVkTWVzc2FnZSIsImdldFN1cHBvcnRUaWNrZXRNZXNzYWdlcyIsImV2ZW50S2V5Iiwic3VwcG9ydFRpY2tldEV2ZW50SWQiLCJldmVudCIsInNhdmVkRXZlbnQiLCJnZXRTdXBwb3J0VGlja2V0RXZlbnRzIiwibm90aWZpY2F0aW9uS2V5IiwiY3VzdG9tZXJOb3RpZmljYXRpb25JZCIsIm5vdGlmaWNhdGlvbiIsIkNVU1RPTUVSX05PVElGSUNBVElPTlMiLCJzYXZlZE5vdGlmaWNhdGlvbiIsIkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04iLCJnZXRDdXN0b21lck5vdGlmaWNhdGlvbnNCeVVzZXIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDMUYsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsV0FBVyxRQUFPLDJCQUEyQjtBQUNyRCxTQUFRQyxPQUFPLFFBQU8sYUFBYTtBQXVCbkMsTUFBTUMsTUFBTSxJQUFjQyxLQUFLRCxHQUFHO0FBQ2xDLE1BQU1FLGFBQWEsQ0FBQ0MsT0FBaUJWLFFBQVFVO0FBQzdDLE1BQU1DLFNBQVMsQ0FBQ0MsUUFBUSxFQUFFLEdBQWFoQixRQUFRaUIsT0FBT0Q7QUFDdEQsTUFBTUUsUUFBUSxDQUFDQyxnQkFBd0JDLE1BQU0sRUFBRSxHQUFhLEdBQUdELGVBQWUsQ0FBQyxFQUFFSixPQUFPSyxNQUFNO0FBQzlGLE1BQU1DLGNBQWMsQ0FBQ0MsUUFBZ0JDLEtBQUssRUFBRSxHQUFheEIsV0FBVyxHQUFHdUIsT0FBTyxDQUFDLEVBQUVMLE9BQU9NLEtBQUssRUFBRTtBQUMvRixNQUFNQyxjQUFjLENBQUNSLE9BQWdCUyxTQUFTLEdBQUcsR0FBYXZCLFlBQVllLE9BQU9ELFNBQVMsS0FBS1M7QUFDL0YsTUFBTUMsa0JBQWtCLENBQUNWLE9BQWdCUyxTQUFTLEdBQUcsR0FBYVIsT0FBT0QsU0FBUyxJQUFJVyxJQUFJLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUN0RyxNQUFNSSwyQkFBMkIsT0FBT0Ms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
|
|
928
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9jcm0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VQaG9uZSwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtpc0FkbWluVXNlcn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7c2VzU2VuZH0gZnJvbSAnLi9lbWFpbC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ3VzdG9tZXJOb3RpZmljYXRpb25UeXBlLFxuICBDdXN0b21lck9yZGVyVHlwZSxcbiAgQ3JtQ2FtcGFpZ25JbnB1dCxcbiAgQ3JtQ2FtcGFpZ25UeXBlLFxuICBDcm1Db250YWN0RmlsdGVyLFxuICBDcm1Gb3JtU3VibWlzc2lvbklucHV0LFxuICBDcm1Gb3JtU3VibWlzc2lvblR5cGUsXG4gIE1haWxpbmdMaXN0VHlwZSxcbiAgUHVibGljU3VwcG9ydFRpY2tldEZlZWQsXG4gIFB1YmxpY1N1cHBvcnRUaWNrZXRJbnB1dCxcbiAgU2hvcGlmeUN1c3RvbWVyT3JkZXJJbnB1dCxcbiAgU3VwcG9ydFRpY2tldEV2ZW50VHlwZSxcbiAgU3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlLFxuICBTdXBwb3J0VGlja2V0U3RhdHVzLFxuICBTdXBwb3J0VGlja2V0VHlwZURhdGFcbn0gZnJvbSAnLi4vdHlwZXMvY3JtLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBub3cgPSAoKTogbnVtYmVyID0+IERhdGUubm93KCk7XG5jb25zdCBjb2xsZWN0aW9uID0gKG5hbWU6IHN0cmluZykgPT4gbGl0ZXJhbChuYW1lKTtcbmNvbnN0IGRvY0tleSA9ICh2YWx1ZSA9ICcnKTogc3RyaW5nID0+IHBhcnNlSWQoU3RyaW5nKHZhbHVlKSk7XG5jb25zdCBkb2NJZCA9IChjb2xsZWN0aW9uTmFtZTogc3RyaW5nLCBrZXkgPSAnJyk6IHN0cmluZyA9PiBgJHtjb2xsZWN0aW9uTmFtZX0vJHtkb2NLZXkoa2V5KX1gO1xuY29uc3QgZXh0ZXJuYWxLZXkgPSAocHJlZml4OiBzdHJpbmcsIGlkID0gJycpOiBzdHJpbmcgPT4gY3JlYXRlSGFzaChgJHtwcmVmaXh9LSR7U3RyaW5nKGlkKX1gLCBudWxsKTtcbmNvbnN0IGNsZWFuU3RyaW5nID0gKHZhbHVlOiB1bmtub3duLCBsZW5ndGggPSA2NDApOiBzdHJpbmcgPT4gcGFyc2VTdHJpbmcoU3RyaW5nKHZhbHVlIHx8ICcnKSwgbGVuZ3RoKTtcbmNvbnN0IGNsZWFuRXh0ZXJuYWxJZCA9ICh2YWx1ZTogdW5rbm93biwgbGVuZ3RoID0gMzIwKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnNsaWNlKDAsIGxlbmd0aCk7XG5jb25zdCBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2U6IFJldHVyblR5cGU8dHlwZW9mIHVzZURiPiwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRhcmdldCA9IGRhdGFiYXNlLmNvbGxlY3Rpb24obmFtZSk7XG4gIGlmKGF3YWl0IHRhcmdldC5leGlzdHMoKSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGF3YWl0IGRhdGFiYXNlLmNyZWF0ZUNvbGxlY3Rpb24obmFtZSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZighYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IGVuc3VyZUVkZ2VDb2xsZWN0aW9uID0gYXN5bmMgKGRhdGFiYXNlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VEYj4sIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0YXJnZXQgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKG5hbWUpO1xuICBpZihhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCBkYXRhYmFzZS5jcmVhdGVFZGdlQ29sbGVjdGlvbihuYW1lKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKCFhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCByZXF1aXJlQ3JtQWRtaW4gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IHZvaWQgPT4ge1xuICBpZighaXNBZG1pblVzZXIoY29udGV4dC5zZXNzaW9uIGFzIGFueSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkbWluaXN0cmF0b3JfYWNjZXNzX3JlcXVpcmVkJyk7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgcmVxdWlyZUNybUFkbWluaXN0cmF0b3IgPSByZXF1aXJlQ3JtQWRtaW47XG5cbmNvbnN0IGFsbG93ZWRDb250YWN0RmllbGRzID0gbmV3IFNldChbJ2VtYWlsJywgJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICdwaG9uZScsICdtYXJrZXRpbmdDb25zZW50U291cmNlJywgJ2NybVNvdXJjZSddKTtcbmNvbnN0IHN1cHBvcnRQcmlvcml0aWVzID0gbmV3IFNldChbJ2xvdycsICdub3JtYWwnLCAnaGlnaCcsICd1cmdlbnQnXSk7XG5jb25zdCBzdXBwb3J0U3RhdHVzZXMgPSBuZXcgU2V0KFsnc3VibWl0dGVkJywgJ2luX3Byb2dyZXNzJywgJ2RvbmUnLCAnY29tcGxldGVkJ10pO1xuY29uc3Qgc3VwcG9ydFR5cGVzID0gbmV3IFNldChbJ2RlbGl2ZXJ5X2lzc3VlJywgJ3JlZnVuZF9yZXF1ZXN0JywgJ2J1Z19yZXBvcnQnLCAnYWNjb3VudF9pc3N1ZScsICdnZW5lcmFsX3N1cHBvcnQnXSk7XG5jb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskL3U7XG5jb25zdCBlc2NhcGVIdG1sID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbmNvbnN0IHNhbml0aXplSHRtbCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpXG4gIC5yZXBsYWNlKC88KHNjcmlwdHxpZnJhbWV8b2JqZWN0fGVtYmVkKVxcYltePl0qPltcXHNcXFNdKj88XFwvXFwxPi9naSwgJycpXG4gIC5yZXBsYWNlKC9cXHNvblxcdytcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHM+XSspL2dpLCAnJyk7XG5jb25zdCBzYW5pdGl6ZUNzcyA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpXG4gIC5yZXBsYWNlKC88XFwvP3N0eWxlXFxiW14+XSo+L2dpLCAnJylcbiAgLnJlcGxhY2UoL0BpbXBvcnRcXHMrW147XSs7Py9naSwgJycpXG4gIC5yZXBsYWNlKC91cmxcXHMqXFwoXFxzKihbJ1wiXT8pamF2YXNjcmlwdDpbXildK1xcKS9naSwgJycpO1xuY29uc3QgaHRtbFRvVGV4dCA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHZhbHVlLnJlcGxhY2UoLzxbXj5dKz4vZywgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xuY29uc3QgY2h1bmsgPSA8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSwgc2l6ZTogbnVtYmVyKTogVFtdW10gPT4ge1xuICBjb25zdCBncm91cHM6IFRbXVtdID0gW107XG4gIGZvcihsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1zLmxlbmd0aDsgaW5kZXggKz0gc2l6ZSkgZ3JvdXBzLnB1c2goaXRlbXMuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2l6ZSkpO1xuICByZXR1cm4gZ3JvdXBzO1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Ym1pdENybUZvcm0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBDcm1Gb3JtU3VibWlzc2lvbklucHV0XG4pOiBQcm9taXNlPENybUZvcm1TdWJtaXNzaW9uVHlwZT4gPT4ge1xuICBpZih0eXBlb2YgaW5wdXQ/Lm1hcmtldGluZ09wdEluICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfbWFya2V0aW5nT3B0SW4nKTtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhpbnB1dC5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByYXdQaG9uZSA9IGNsZWFuU3RyaW5nKGlucHV0LnBob25lLCA4MCk7XG4gIGNvbnN0IHBob25lID0gcmF3UGhvbmUgPyAocGFyc2VQaG9uZShyYXdQaG9uZSkgfHwgcmF3UGhvbmUpIDogJyc7XG4gIGlmKCFlbWFpbCAmJiAhcGhvbmUpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfZW1haWxfb3JfcGhvbmUnKTtcblxuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgYXdhaXQgZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uKGRhdGFiYXNlLCBDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBzb3VyY2UgPSBjbGVhblN0cmluZyhpbnB1dC5zb3VyY2UgfHwgaW5wdXQuZm9ybUlkIHx8ICdmb3JtJywgMTYwKTtcbiAgY29uc3QgdmFsdWVzID0gaW5wdXQudmFsdWVzIHx8IHt9O1xuICBjb25zdCBmaXJzdE5hbWUgPSBjbGVhblN0cmluZyhpbnB1dC5maXJzdE5hbWUgfHwgdmFsdWVzLmZpcnN0TmFtZSwgMTYwKTtcbiAgY29uc3QgbGFzdE5hbWUgPSBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSB8fCB2YWx1ZXMubGFzdE5hbWUsIDE2MCk7XG4gIGNvbnN0IGdlbmVyYXRlZFVzZXJLZXkgPSBjcmVhdGVIYXNoKGVtYWlsIHx8IHBob25lLCBudWxsKTtcbiAgY29uc3QgY29uc2VudCA9IGlucHV0Lm1hcmtldGluZ09wdEluXG4gICAgPyB7bWFya2V0aW5nT3B0SW5BdDogdGltZXN0YW1wLCBtYXJrZXRpbmdPcHRPdXRBdDogbnVsbH1cbiAgICA6IHttYXJrZXRpbmdPcHRPdXRBdDogdGltZXN0YW1wfTtcbiAgY29uc3QgdXNlckluc2VydCA9IHtcbiAgICBfa2V5OiBnZW5lcmF0ZWRVc2VyS2V5LFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgbWFpbGluZ0xpc3Q6IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6IHNvdXJjZSxcbiAgICBtYXJrZXRpbmdPcHRJbjogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwaG9uZSxcbiAgICB0eXBlOiAnY3JtQ29udGFjdCcsXG4gICAgdXNlckFjY2VzczogMCxcbiAgICB1c2VySWQ6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgdmVyaWZpZWRFbWFpbDogZmFsc2UsXG4gICAgdmVyaWZpZWRQaG9uZTogZmFsc2UsXG4gICAgLi4uY29uc2VudFxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIC4uLihlbWFpbCA/IHtlbWFpbH0gOiB7fSksXG4gICAgLi4uKGZpcnN0TmFtZSA/IHtmaXJzdE5hbWV9IDoge30pLFxuICAgIC4uLihsYXN0TmFtZSA/IHtsYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBob25lID8ge3Bob25lfSA6IHt9KSxcbiAgICBtYWlsaW5nTGlzdDogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogc291cmNlLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIC4uLmNvbnNlbnRcbiAgfTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBMRVQgZXhpc3RpbmcgPSBGSVJTVChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiAoJHtlbWFpbH0gIT0gXCJcIiAmJiBMT1dFUih1c2VyLmVtYWlsIHx8IFwiXCIpID09ICR7ZW1haWx9KVxuICAgICAgICAgIHx8ICgke3Bob25lfSAhPSBcIlwiICYmIHVzZXIucGhvbmUgPT0gJHtwaG9uZX0pXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTEVUIHVzZXJLZXkgPSBleGlzdGluZyA/IGV4aXN0aW5nLl9rZXkgOiAke2dlbmVyYXRlZFVzZXJLZXl9XG4gICAgVVBTRVJUIHtfa2V5OiB1c2VyS2V5fVxuICAgIElOU0VSVCBNRVJHRSgke3VzZXJJbnNlcnR9LCB7X2tleTogdXNlcktleSwgdXNlcklkOiB1c2VyS2V5fSlcbiAgICBVUERBVEUgJHt1c2VyVXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gIGNvbnN0IHVzZXJJZCA9IGRvY0tleShTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgZ2VuZXJhdGVkVXNlcktleSkpO1xuXG4gIGNvbnN0IHN1Ym1pc3Npb25JZCA9IGNyZWF0ZUhhc2goYGNybS1zdWJtaXNzaW9uLSR7dGltZXN0YW1wfS0ke2VtYWlsfS0ke3Bob25lfWAsIG51bGwpO1xuICBjb25zdCBzdWJtaXNzaW9uID0ge1xuICAgIF9rZXk6IHN1Ym1pc3Npb25JZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZvcm1JZDogY2xlYW5TdHJpbmcoaW5wdXQuZm9ybUlkLCAxNjApLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHBob25lLFxuICAgIHNvdXJjZSxcbiAgICBzdWJtaXNzaW9uSWQsXG4gICAgdXNlcklkLFxuICAgIHZhbHVlc1xuICB9O1xuICBjb25zdCBzYXZlZCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBJTlNFUlQgJHtzdWJtaXNzaW9ufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICByZXR1cm4gc2F2ZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JtRm9ybVN1Ym1pc3Npb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPENybUZvcm1TdWJtaXNzaW9uVHlwZVtdPiA9PiB7XG4gIHJlcXVpcmVDcm1BZG1pbihjb250ZXh0KTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIGlmKCFhd2FpdCBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKS5leGlzdHMoKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgICBGT1Igc3VibWlzc2lvbiBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpfVxuICAgICAgICBTT1JUIHN1Ym1pc3Npb24uYWRkZWQgREVTQ1xuICAgICAgICBMSU1JVCA1MDBcbiAgICAgICAgUkVUVVJOIHN1Ym1pc3Npb25cbiAgICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0pKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JtQ29udGFjdHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsdGVyOiBDcm1Db250YWN0RmlsdGVyID0ge30pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2ggPSBjbGVhblN0cmluZyhmaWx0ZXIuc2VhcmNoLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGZpZWxkID0gYWxsb3dlZENvbnRhY3RGaWVsZHMuaGFzKGZpbHRlci5maWVsZCB8fCAnJykgPyBTdHJpbmcoZmlsdGVyLmZpZWxkKSA6ICcnO1xuICBjb25zdCB2YWx1ZSA9IGNsZWFuU3RyaW5nKGZpbHRlci52YWx1ZSwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBvcHRlZEluT25seSA9IGZpbHRlci5vcHRlZEluT25seSAhPT0gZmFsc2U7XG4gIGNvbnN0IG9wZXJhdG9yID0gWydjb250YWlucycsICdlcXVhbHMnLCAnZXhpc3RzJ10uaW5jbHVkZXMoZmlsdGVyLm9wZXJhdG9yIHx8ICcnKSA/IGZpbHRlci5vcGVyYXRvciA6ICdjb250YWlucyc7XG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICBGSUxURVIgJHshb3B0ZWRJbk9ubHl9IHx8IHVzZXIubWFya2V0aW5nT3B0SW4gPT0gdHJ1ZVxuICAgICAgRklMVEVSICR7IXNlYXJjaH0gfHwgQ09OVEFJTlMoTE9XRVIoQ09OQ0FUX1NFUEFSQVRPUihcIiBcIiwgdXNlci5maXJzdE5hbWUsIHVzZXIubGFzdE5hbWUsIHVzZXIuZW1haWwsIHVzZXIucGhvbmUpKSwgJHtzZWFyY2h9KVxuICAgICAgRklMVEVSICR7IWZpZWxkfSB8fCAoJHtvcGVyYXRvciA9PT0gJ2V4aXN0cyd9XG4gICAgICAgID8gSEFTKHVzZXIsICR7ZmllbGR9KVxuICAgICAgICA6ICgke29wZXJhdG9yID09PSAnZXF1YWxzJ30gPyBMT1dFUihUT19TVFJJTkcodXNlclske2ZpZWxkfV0pKSA9PSAke3ZhbHVlfSA6IENPTlRBSU5TKExPV0VSKFRPX1NUUklORyh1c2VyWyR7ZmllbGR9XSkpLCAke3ZhbHVlfSkpKVxuICAgICAgU09SVCB1c2VyLmFkZGVkIERFU0NcbiAgICAgIExJTUlUIDEwMDBcbiAgICAgIFJFVFVSTiBNRVJHRSh1c2VyLCB7Y3JtU291cmNlOiB1c2VyLm1hcmtldGluZ0NvbnNlbnRTb3VyY2V9KVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZENybUNhbXBhaWduID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogQ3JtQ2FtcGFpZ25JbnB1dFxuKTogUHJvbWlzZTxDcm1DYW1wYWlnblR5cGU+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBzdWJqZWN0ID0gY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKTtcbiAgY29uc3QgYm9keUh0bWwgPSBzYW5pdGl6ZUh0bWwoaW5wdXQuaHRtbCk7XG4gIGNvbnN0IGNzcyA9IHNhbml0aXplQ3NzKGlucHV0LmNzcyk7XG4gIGlmKCFzdWJqZWN0IHx8ICFib2R5SHRtbCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jYW1wYWlnbl9jb250ZW50Jyk7XG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IGF3YWl0IGdldENybUNvbnRhY3RzKGNvbnRleHQsIHsuLi5pbnB1dC5maWx0ZXIsIG9wdGVkSW5Pbmx5OiB0cnVlfSk7XG4gIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldCgoaW5wdXQudXNlcklkcyB8fCBbXSkubWFwKChpZCkgPT4gZG9jS2V5KGlkKSkpO1xuICBjb25zdCByZWNpcGllbnRzID0gY2FuZGlkYXRlcy5maWx0ZXIoKHVzZXIpID0+XG4gICAgQm9vbGVhbih1c2VyLmVtYWlsKSAmJiAoIXNlbGVjdGVkSWRzLnNpemUgfHwgc2VsZWN0ZWRJZHMuaGFzKGRvY0tleSh1c2VyLnVzZXJJZCB8fCB1c2VyLl9rZXkpKSkpO1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgY2FtcGFpZ25JZCA9IGNyZWF0ZUhhc2goYGNybS1jYW1wYWlnbi0ke3RpbWVzdGFtcH0tJHtzdWJqZWN0fWAsIG51bGwpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgY2FtcGFpZ24gPSB7XG4gICAgX2tleTogY2FtcGFpZ25JZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGNhbXBhaWduSWQsXG4gICAgY3NzLFxuICAgIGZhaWxlZENvdW50OiAwLFxuICAgIGh0bWw6IGJvZHlIdG1sLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcmVjaXBpZW50Q291bnQ6IHJlY2lwaWVudHMubGVuZ3RoLFxuICAgIHNlbnRDb3VudDogMCxcbiAgICBzdGF0dXM6ICdzZW5kaW5nJyxcbiAgICBzdWJqZWN0XG4gIH07XG4gIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBJTlNFUlQgJHtjYW1wYWlnbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9DQU1QQUlHTlMpfWApO1xuXG4gIGxldCBmYWlsZWRDb3VudCA9IDA7XG4gIGxldCBzZW50Q291bnQgPSAwO1xuICBmb3IoY29uc3QgcmVjaXBpZW50c0JhdGNoIG9mIGNodW5rKHJlY2lwaWVudHMsIDUwKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXNTZW5kKHtcbiAgICAgICAgRGVzdGluYXRpb246IHtCY2NBZGRyZXNzZXM6IHJlY2lwaWVudHNCYXRjaC5tYXAoKHJlY2lwaWVudCkgPT4gU3RyaW5nKHJlY2lwaWVudC5lbWFpbCkpfSxcbiAgICAgICAgTWVzc2FnZToge1xuICAgICAgICAgIEJvZHk6IHtIdG1sOiB7RGF0YTogYDxzdHlsZT4ke2Nzc308L3N0eWxlPiR7Ym9keUh0bWx9YH0sIFRleHQ6IHtEYXRhOiBodG1sVG9UZXh0KGJvZHlIdG1sKX19LFxuICAgICAgICAgIFN1YmplY3Q6IHtEYXRhOiBzdWJqZWN0fVxuICAgICAgICB9LFxuICAgICAgICBTb3VyY2U6IGBcIiR7Y29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnROYW1lIHx8ICdSZWFrdG9yJ31cIiA8JHtjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydEVtYWlsIHx8ICdzdXBwb3J0QHJlYWt0b3IuaW8nfT5gXG4gICAgICB9KTtcbiAgICAgIHNlbnRDb3VudCArPSByZWNpcGllbnRzQmF0Y2gubGVuZ3RoO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBmYWlsZWRDb3VudCArPSByZWNpcGllbnRzQmF0Y2gubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXN1bHQgPSB7Li4uY2FtcGFpZ24sIGZhaWxlZENvdW50LCBzZW50QXQ6IG5vdygpLCBzZW50Q291bnQsIHN0YXR1czogZmFpbGVkQ291bnQgPyAoc2VudENvdW50ID8gJ3BhcnRpYWwnIDogJ2ZhaWxlZCcpIDogJ3NlbnQnfTtcbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIFVQREFURSAke2NhbXBhaWduSWR9IFdJVEggJHt7XG4gICAgICBmYWlsZWRDb3VudDogcmVzdWx0LmZhaWxlZENvdW50LFxuICAgICAgbW9kaWZpZWQ6IHJlc3VsdC5zZW50QXQsXG4gICAgICBzZW50QXQ6IHJlc3VsdC5zZW50QXQsXG4gICAgICBzZW50Q291bnQ6IHJlc3VsdC5zZW50Q291bnQsXG4gICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXNcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0NBTVBBSUdOUyl9XG4gIGApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3Qgc2F2ZUVkZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGVkZ2VDb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGVkZ2VLZXk6IHN0cmluZyxcbiAgZnJvbTogc3RyaW5nLFxuICB0bzogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGVkZ2UgPSB7XG4gICAgX2Zyb206IGZyb20sXG4gICAgX2tleTogZWRnZUtleSxcbiAgICBfdG86IHRvLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAuLi5kYXRhXG4gIH07XG4gIGNvbnN0IHF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBVUFNFUlQge19rZXk6ICR7ZWRnZUtleX19XG4gICAgSU5TRVJUICR7ZWRnZX1cbiAgICBVUERBVEUgJHtkYXRhfSBJTiAke2NvbGxlY3Rpb24oZWRnZUNvbGxlY3Rpb24pfVxuICBgO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPE1haWxpbmdMaXN0VHlwZT5cbik6IFByb21pc2U8TWFpbGluZ0xpc3RUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBtYWlsaW5nTGlzdElkID0gZG9jS2V5KFN0cmluZyhpbnB1dD8ubWFpbGluZ0xpc3RJZCB8fCBjcmVhdGVIYXNoKGBtYWlsaW5nLWxpc3QtJHtpbnB1dD8ubmFtZX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgbWFpbGluZ0xpc3QgPSB7XG4gICAgX2tleTogbWFpbGluZ0xpc3RJZCxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGNyZWF0ZWRCeVVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBkZXNjcmlwdGlvbjogY2xlYW5TdHJpbmcoaW5wdXQ/LmRlc2NyaXB0aW9uLCAyMDAwKSxcbiAgICBtYWlsaW5nTGlzdElkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgbmFtZTogY2xlYW5TdHJpbmcoaW5wdXQ/Lm5hbWUsIDE2MCksXG4gICAgc3RhdHVzOiBpbnB1dD8uc3RhdHVzIHx8ICdhY3RpdmUnXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHttYWlsaW5nTGlzdElkfX1cbiAgICBJTlNFUlQgJHttYWlsaW5nTGlzdH1cbiAgICBVUERBVEUgJHt7XG4gICAgICBkZXNjcmlwdGlvbjogbWFpbGluZ0xpc3QuZGVzY3JpcHRpb24sXG4gICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgbmFtZTogbWFpbGluZ0xpc3QubmFtZSxcbiAgICAgIHN0YXR1czogbWFpbGluZ0xpc3Quc3RhdHVzXG4gICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1haWxpbmdMaXN0cyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxNYWlsaW5nTGlzdFR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgbGlzdCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUyl9XG4gICAgICBGSUxURVIgbGlzdC5zdGF0dXMgIT0gXCJhcmNoaXZlZFwiXG4gICAgICBTT1JUIGxpc3QuYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOIGxpc3RcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmcsXG4gIHNvdXJjZSA9ICdtYW51YWwnXG4pOiBQcm9taXNlPE1haWxpbmdMaXN0VHlwZSB8IG51bGw+ID0+IHtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleSh1c2VySWQpO1xuICBjb25zdCBsaXN0S2V5ID0gZG9jS2V5KG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBlZGdlS2V5ID0gY3JlYXRlSGFzaChgaGFzTWFpbGluZ0xpc3QtJHt1c2VyS2V5fS0ke2xpc3RLZXl9YCk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfTUFJTElOR19MSVNULFxuICAgIGVkZ2VLZXksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIGxpc3RLZXkpLFxuICAgIHtcbiAgICAgIGFkZGVkQnlVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgICBzb3VyY2U6IGNsZWFuU3RyaW5nKHNvdXJjZSwgODApLFxuICAgICAgc3RhdHVzOiAnYWN0aXZlJ1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpXG4gICAgLnF1ZXJ5KGFxbGBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBsaXN0S2V5KX0pYClcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVVc2VyRnJvbU1haWxpbmdMaXN0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgbWFpbGluZ0xpc3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleSh1c2VySWQpO1xuICBjb25zdCBsaXN0S2V5ID0gZG9jS2V5KG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBlZGdlS2V5ID0gY3JlYXRlSGFzaChgaGFzTWFpbGluZ0xpc3QtJHt1c2VyS2V5fS0ke2xpc3RLZXl9YCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBtb2RpZmllZDogbm93KCksXG4gICAgcmVtb3ZlZEF0OiBub3coKSxcbiAgICBzdGF0dXM6ICdyZW1vdmVkJ1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBVUERBVEUgJHtlZGdlS2V5fSBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkudGhlbihCb29sZWFuKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYWlsaW5nTGlzdFVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmdcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBsaXN0SWQgPSBkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBtYWlsaW5nTGlzdElkKTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIHVzZXIsIGVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7bGlzdElkfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgICBGSUxURVIgZWRnZS5zdGF0dXMgPT0gXCJhY3RpdmVcIlxuICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgUkVUVVJOIHVzZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlcnNCeVB1cmNoYXNlZFByb2R1Y3QgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHByb2R1Y3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgcHJvZHVjdEtleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXByb2R1Y3QnLCBwcm9kdWN0SWQpO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igb3JkZXIgSU4gMS4uMSBJTkJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUywgcHJvZHVjdEtleSl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfUFVSQ0hBU0VEX1BST0RVQ1QpfVxuICAgICAgRk9SIHVzZXIgSU4gMS4uMSBJTkJPVU5EIG9yZGVyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgICBSRVRVUk4gRElTVElOQ1QgdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGlnaWJsZU1haWxpbmdVc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgb3B0aW9uczoge3JlYWRvbmx5IG1haWxpbmdMaXN0SWQ/OiBzdHJpbmc7IHJlYWRvbmx5IHByb2R1Y3RJZD86IHN0cmluZzsgcmVhZG9ubHkgZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cz86IGJvb2xlYW59ID0ge31cbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzID0gb3B0aW9ucy5leGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzICE9PSBmYWxzZTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgTEVUIGJhc2VVc2VycyA9IChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiB1c2VyLm1hcmtldGluZ09wdEluID09IHRydWVcbiAgICAgICAgRklMVEVSIHVzZXIuZW1haWwgIT0gbnVsbCAmJiB1c2VyLmVtYWlsICE9IFwiXCJcbiAgICAgICAgRklMVEVSIHVzZXIuZW1haWxEZWxpdmVyeVN0YXR1cyA9PSBudWxsIHx8IHVzZXIuZW1haWxEZWxpdmVyeVN0YXR1cyA9PSBcInZhbGlkXCJcbiAgICAgICAgJHtvcHRpb25zLm1haWxpbmdMaXN0SWQgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiBsaXN0IElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19NQUlMSU5HX0xJU1QpfVxuICAgICAgICAgICAgICBGSUxURVIgbGlzdC5fa2V5ID09ICR7ZG9jS2V5KG9wdGlvbnMubWFpbGluZ0xpc3RJZCl9XG4gICAgICAgICAgICAgIFJFVFVSTiBsaXN0XG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICAke29wdGlvbnMucHJvZHVjdElkID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICAgICAgRk9SIHByb2R1Y3QgSU4gMS4uMSBPVVRCT1VORCBvcmRlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19QVVJDSEFTRURfUFJPRFVDVCl9XG4gICAgICAgICAgICAgICAgRklMVEVSIHByb2R1Y3QucHJvZHVjdElkID09ICR7U3RyaW5nKG9wdGlvbnMucHJvZHVjdElkKX1cbiAgICAgICAgICAgICAgICBSRVRVUk4gcHJvZHVjdFxuICAgICAgICAgICkgPiAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgJHtleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1IgdGlja2V0IElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCl9XG4gICAgICAgICAgICAgIEZJTFRFUiB0aWNrZXQuc3RhdHVzIElOIFtcIm9wZW5cIiwgXCJpbl9wcm9ncmVzc1wiLCBcIndhaXRpbmdfb25fY3VzdG9tZXJcIiwgXCJ3YWl0aW5nX29uX2ludGVybmFsXCJdXG4gICAgICAgICAgICAgIEZJTFRFUiB0aWNrZXQucHJpb3JpdHkgSU4gW1wiaGlnaFwiLCBcInVyZ2VudFwiXVxuICAgICAgICAgICAgICBSRVRVUk4gdGlja2V0XG4gICAgICAgICAgKSA9PSAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgRk9SIHVzZXIgSU4gYmFzZVVzZXJzXG4gICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICBSRVRVUk4gRElTVElOQ1QgdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmdlc3RTaG9waWZ5Q3VzdG9tZXJPcmRlciA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFNob3BpZnlDdXN0b21lck9yZGVySW5wdXRcbik6IFByb21pc2U8Q3VzdG9tZXJPcmRlclR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHNob3BpZnlDdXN0b21lcklkID0gY2xlYW5FeHRlcm5hbElkKGlucHV0LnNob3BpZnlDdXN0b21lcklkLCAxNjApO1xuICBjb25zdCBzaG9waWZ5T3JkZXJJZCA9IGNsZWFuRXh0ZXJuYWxJZChpbnB1dC5zaG9waWZ5T3JkZXJJZCwgMTYwKTtcbiAgY29uc3QgY3VzdG9tZXIgPSBpbnB1dC5jdXN0b21lciB8fCB7fTtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhjdXN0b21lci5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBwcm9kdWN0SWRzID0gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi4oaW5wdXQucHJvZHVjdElkcyB8fCBbXSksIC4uLihpbnB1dC5wcm9kdWN0cyB8fCBbXSkubWFwKChwcm9kdWN0KSA9PiBwcm9kdWN0LnByb2R1Y3RJZCldXG4gICAgLm1hcCgocHJvZHVjdElkKSA9PiBjbGVhbkV4dGVybmFsSWQocHJvZHVjdElkLCAzMjApKVxuICAgIC5maWx0ZXIoQm9vbGVhbikpKTtcblxuICBpZighc2hvcGlmeUN1c3RvbWVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3Nob3BpZnlDdXN0b21lcklkJyk7XG4gIH1cbiAgaWYoIXNob3BpZnlPcmRlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zaG9waWZ5T3JkZXJJZCcpO1xuICB9XG4gIGlmKCFlbWFpbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfY3VzdG9tZXJFbWFpbCcpO1xuICB9XG5cbiAgY29uc3QgdXNlcktleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXVzZXInLCBzaG9waWZ5Q3VzdG9tZXJJZCk7XG4gIGNvbnN0IHVzZXJJbnNlcnQgPSB7XG4gICAgX2tleTogdXNlcktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5sYXN0TmFtZSwgMTYwKSxcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiAnc2hvcGlmeScsXG4gICAgbWFya2V0aW5nT3B0SW46IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlLFxuICAgIG1hcmtldGluZ09wdEluQXQ6IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlID8gdGltZXN0YW1wIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWQsXG4gICAgdHlwZTogJ2NybUNvbnRhY3QnLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5sYXN0TmFtZSwgMTYwKSxcbiAgICBsYXN0UHVyY2hhc2VkQXQ6IGlucHV0LnB1cmNoYXNlZEF0IHx8IHRpbWVzdGFtcCxcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiAnc2hvcGlmeScsXG4gICAgbWFya2V0aW5nT3B0SW46IGN1c3RvbWVyLm1hcmtldGluZ09wdEluID09PSB0cnVlLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWRcbiAgfTtcbiAgY29uc3QgdXNlclF1ZXJ5ID0gYXFsYFxuICAgIExFVCBleGlzdGluZyA9IEZJUlNUKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSIHVzZXIuc2hvcGlmeUN1c3RvbWVySWQgPT0gJHtzaG9waWZ5Q3VzdG9tZXJJZH0gfHwgdXNlci5lbWFpbCA9PSAke2VtYWlsfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1c2VyXG4gICAgKVxuICAgIExFVCB1c2VyS2V5ID0gZXhpc3RpbmcgPyBleGlzdGluZy5fa2V5IDogJHt1c2VyS2V5fVxuICAgIFVQU0VSVCB7X2tleTogdXNlcktleX1cbiAgICBJTlNFUlQgTUVSR0UoJHt1c2VySW5zZXJ0fSwge19rZXk6IHVzZXJLZXksIHVzZXJJZDogdXNlcktleX0pXG4gICAgVVBEQVRFICR7dXNlclVwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkodXNlclF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlO1xuICBjb25zdCByZXNvbHZlZFVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IHVzZXJLZXkpKTtcbiAgY29uc3Qgb3JkZXJLZXkgPSBleHRlcm5hbEtleSgnc2hvcGlmeS1vcmRlcicsIHNob3BpZnlPcmRlcklkKTtcbiAgY29uc3Qgb3JkZXIgPSB7XG4gICAgX2tleTogb3JkZXJLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBjdXJyZW5jeTogY2xlYW5TdHJpbmcoaW5wdXQuY3VycmVuY3ksIDMpLnRvVXBwZXJDYXNlKCksXG4gICAgY3VzdG9tZXJPcmRlcklkOiBvcmRlcktleSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHByb2R1Y3RJZHMsXG4gICAgcHVyY2hhc2VkQXQ6IGlucHV0LnB1cmNoYXNlZEF0IHx8IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZCxcbiAgICBzaG9waWZ5T3JkZXJJZCxcbiAgICB0b3RhbFByaWNlOiBOdW1iZXIoaW5wdXQudG90YWxQcmljZSB8fCAwKSxcbiAgICB1c2VySWQ6IHJlc29sdmVkVXNlcktleVxuICB9O1xuICBjb25zdCBvcmRlclF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtvcmRlcktleX19XG4gICAgSU5TRVJUICR7b3JkZXJ9XG4gICAgVVBEQVRFICR7e1xuICAgICAgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5LFxuICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHByb2R1Y3RJZHMsXG4gICAgICBwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXQsXG4gICAgICB0b3RhbFByaWNlOiBvcmRlci50b3RhbFByaWNlLFxuICAgICAgdXNlcklkOiByZXNvbHZlZFVzZXJLZXlcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1VTVE9NRVJfT1JERVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkT3JkZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkob3JkZXJRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBDdXN0b21lck9yZGVyVHlwZTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19DVVNUT01FUl9PUkRFUixcbiAgICBjcmVhdGVIYXNoKGBoYXNDdXN0b21lck9yZGVyLSR7cmVzb2x2ZWRVc2VyS2V5fS0ke29yZGVyS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX09SREVSUywgb3JkZXJLZXkpLFxuICAgIHtwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXQsIHNob3BpZnlDdXN0b21lcklkLCBzaG9waWZ5T3JkZXJJZH1cbiAgKTtcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9kdWN0SWRzLm1hcChhc3luYyAocHJvZHVjdElkKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdCA9IChpbnB1dC5wcm9kdWN0cyB8fCBbXSkuZmluZCgoaXRlbSkgPT4gaXRlbS5wcm9kdWN0SWQgPT09IHByb2R1Y3RJZCkgfHwge3Byb2R1Y3RJZH07XG4gICAgY29uc3QgcHJvZHVjdEtleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LXByb2R1Y3QnLCBwcm9kdWN0SWQpO1xuICAgIGNvbnN0IHByb2R1Y3REb2MgPSB7XG4gICAgICBfa2V5OiBwcm9kdWN0S2V5LFxuICAgICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICB0aXRsZTogY2xlYW5TdHJpbmcocHJvZHVjdC50aXRsZSwgMzIwKSxcbiAgICAgIHZhcmlhbnRJZDogY2xlYW5FeHRlcm5hbElkKHByb2R1Y3QudmFyaWFudElkLCAxNjApXG4gICAgfTtcbiAgICBjb25zdCBwcm9kdWN0UXVlcnkgPSBhcWxgXG4gICAgICBVUFNFUlQge19rZXk6ICR7cHJvZHVjdEtleX19XG4gICAgICBJTlNFUlQgJHtwcm9kdWN0RG9jfVxuICAgICAgVVBEQVRFICR7e1xuICAgICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgICB0aXRsZTogcHJvZHVjdERvYy50aXRsZSxcbiAgICAgICAgdmFyaWFudElkOiBwcm9kdWN0RG9jLnZhcmlhbnRJZFxuICAgICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMpfVxuICAgIGA7XG4gICAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHByb2R1Y3RRdWVyeSk7XG4gICAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgICBjb250ZXh0LFxuICAgICAgRURHRVMuSEFTX1BVUkNIQVNFRF9QUk9EVUNULFxuICAgICAgY3JlYXRlSGFzaChgaGFzUHVyY2hhc2VkUHJvZHVjdC0ke29yZGVyS2V5fS0ke3Byb2R1Y3RLZXl9YCksXG4gICAgICBkb2NJZChDT0xMRUNUSU9OUy5DVVNUT01FUl9PUkRFUlMsIG9yZGVyS2V5KSxcbiAgICAgIGRvY0lkKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMsIHByb2R1Y3RLZXkpLFxuICAgICAge3Byb2R1Y3RJZCwgcHVyY2hhc2VkQXQ6IG9yZGVyLnB1cmNoYXNlZEF0fVxuICAgICk7XG4gIH0pKTtcblxuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIFVQREFURSAke3Jlc29sdmVkVXNlcktleX1cbiAgICBXSVRIIHtcbiAgICAgIGxhc3RQdXJjaGFzZWRBdDogJHtvcmRlci5wdXJjaGFzZWRBdH0sXG4gICAgICB0b3RhbE9yZGVyQ291bnQ6IExFTkdUSChcbiAgICAgICAgRk9SIG9yZGVyIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgcmVzb2x2ZWRVc2VyS2V5KX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICAgICAgUkVUVVJOIG9yZGVyXG4gICAgICApLFxuICAgICAgdG90YWxTcGVuZDogU1VNKFxuICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICBSRVRVUk4gVE9fTlVNQkVSKG9yZGVyLnRvdGFsUHJpY2UpXG4gICAgICApXG4gICAgfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICBgKTtcblxuICByZXR1cm4gc2F2ZWRPcmRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXN0b21lck9yZGVyc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8Q3VzdG9tZXJPcmRlclR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VySWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgIFNPUlQgb3JkZXIucHVyY2hhc2VkQXQgREVTQ1xuICAgICAgUkVUVVJOIG9yZGVyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuY29uc3Qgc2VuZFN1cHBvcnRUaWNrZXRFbWFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGlja2V0OiBTdXBwb3J0VGlja2V0VHlwZURhdGEsXG4gIGRldGFpbHM6IHN0cmluZyxcbiAgaGVhZGluZzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHRpY2tldC51c2VySWQpfSlcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gIGlmKCF1c2VyPy5lbWFpbCkgcmV0dXJuO1xuICBjb25zdCBzdXBwb3J0TmFtZSA9IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0TmFtZSB8fCBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnROYW1lJykgfHwgJ1JlYWt0b3IgU3VwcG9ydCc7XG4gIGNvbnN0IHN1cHBvcnRFbWFpbCA9IGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0RW1haWwgfHwgQ29uZmlnLmdldCgnZGV0YWlscy5zdXBwb3J0RW1haWwnKSB8fCAnc3VwcG9ydEByZWFrdG9yLmlvJztcbiAgY29uc3QgdGlja2V0TnVtYmVyID0gU3RyaW5nKHRpY2tldC50aWNrZXROdW1iZXIgfHwgdGlja2V0LnN1cHBvcnRUaWNrZXRJZCB8fCB0aWNrZXQuX2tleSB8fCAnJyk7XG4gIGNvbnN0IHN0YXR1c1VybCA9IGBodHRwczovL2NybS5yZWFrdG9yLmlvL3N1cHBvcnQvc3RhdHVzP3RpY2tldD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aWNrZXROdW1iZXIpfWA7XG4gIGNvbnN0IHRleHQgPSBgJHtoZWFkaW5nfVxcblxcblRpY2tldDogJHt0aWNrZXROdW1iZXJ9XFxuU3RhdHVzOiAke3RpY2tldC5zdGF0dXMgfHwgJ3N1Ym1pdHRlZCd9XFxuXFxuJHtkZXRhaWxzfVxcblxcblRyYWNrIHRoaXMgdGlja2V0OiAke3N0YXR1c1VybH1gO1xuICBhd2FpdCBzZXNTZW5kKHtcbiAgICBEZXN0aW5hdGlvbjoge1RvQWRkcmVzc2VzOiBbU3RyaW5nKHVzZXIuZW1haWwpXX0sXG4gICAgTWVzc2FnZToge1xuICAgICAgQm9keToge0h0bWw6IHtEYXRhOiBgPGgxPiR7ZXNjYXBlSHRtbChoZWFkaW5nKX08L2gxPjxwPjxzdHJvbmc+VGlja2V0Ojwvc3Ryb25nPiAke2VzY2FwZUh0bWwodGlja2V0TnVtYmVyKX08L3A+PHA+PHN0cm9uZz5TdGF0dXM6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChTdHJpbmcodGlja2V0LnN0YXR1cyB8fCAnc3VibWl0dGVkJykpfTwvcD48cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6aW5oZXJpdFwiPiR7ZXNjYXBlSHRtbChkZXRhaWxzKX08L3ByZT48cD48YSBocmVmPVwiJHtlc2NhcGVIdG1sKHN0YXR1c1VybCl9XCI+VHJhY2sgdGhpcyB0aWNrZXQgb25saW5lPC9hPjwvcD5gfSwgVGV4dDoge0RhdGE6IHRleHR9fSxcbiAgICAgIFN1YmplY3Q6IHtEYXRhOiBgWyR7dGlja2V0TnVtYmVyfV0gJHtoZWFkaW5nfWB9XG4gICAgfSxcbiAgICBTb3VyY2U6IGBcIiR7c3VwcG9ydE5hbWV9XCIgPCR7c3VwcG9ydEVtYWlsfT5gXG4gIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldFR5cGVEYXRhPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCBjcmVhdGVIYXNoKGBzdXBwb3J0LXRpY2tldC0ke3VzZXJLZXl9LSR7dGltZXN0YW1wfWApKSk7XG4gIGNvbnN0IHRpY2tldE51bWJlciA9IGNsZWFuU3RyaW5nKGlucHV0LnRpY2tldE51bWJlciwgODApIHx8IGBSS1QtJHtuZXcgRGF0ZSh0aW1lc3RhbXApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApLnJlcGxhY2UoLy0vZywgJycpfS0ke3RpY2tldEtleS5zbGljZSgwLCA4KS50b1VwcGVyQ2FzZSgpfWA7XG4gIGNvbnN0IHRpY2tldCA9IHtcbiAgICBfa2V5OiB0aWNrZXRLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhc3NpZ25lZFRvVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmFzc2lnbmVkVG9Vc2VySWQgfHwgJycpKSxcbiAgICBkZXNjcmlwdGlvbjogY2xlYW5TdHJpbmcoaW5wdXQuZGVzY3JpcHRpb24sIDQwMDApLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcHJpb3JpdHk6IGlucHV0LnByaW9yaXR5IHx8ICdub3JtYWwnLFxuICAgIHByb2R1Y3RJZDogY2xlYW5FeHRlcm5hbElkKGlucHV0LnByb2R1Y3RJZCwgMzIwKSxcbiAgICBzaG9waWZ5T3JkZXJJZDogY2xlYW5TdHJpbmcoaW5wdXQuc2hvcGlmeU9yZGVySWQsIDE2MCksXG4gICAgc3RhdHVzOiAnc3VibWl0dGVkJyxcbiAgICBzdWJqZWN0OiBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRpY2tldE51bWJlcixcbiAgICB0eXBlOiBpbnB1dC50eXBlIHx8ICdnZW5lcmFsX3N1cHBvcnQnLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBJTlNFUlQgJHt0aWNrZXR9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRUaWNrZXQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldC0ke3VzZXJLZXl9LSR7dGlja2V0S2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VyS2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSksXG4gICAge3ByaW9yaXR5OiB0aWNrZXQucHJpb3JpdHksIHN0YXR1czogdGlja2V0LnN0YXR1cywgdHlwZTogdGlja2V0LnR5cGV9XG4gICk7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRFdmVudChjb250ZXh0LCB7XG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8IHVzZXJLZXkpKSxcbiAgICBldmVudFR5cGU6ICdzdWJtaXR0ZWQnLFxuICAgIG1ldGFkYXRhOiB7ZGV0YWlsczogdGlja2V0LmRlc2NyaXB0aW9ufSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiB0aWNrZXQuc3RhdHVzXG4gIH0pO1xuXG4gIHJldHVybiBzYXZlZFRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBzdWJtaXRQdWJsaWNTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUHVibGljU3VwcG9ydFRpY2tldElucHV0XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGlucHV0LmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gY2xlYW5TdHJpbmcoaW5wdXQuZGVzY3JpcHRpb24sIDQwMDApO1xuICBjb25zdCBzdWJqZWN0ID0gY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKTtcbiAgaWYoIWVtYWlsUGF0dGVybi50ZXN0KGVtYWlsKSkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF92YWxpZF9lbWFpbCcpO1xuICBpZighc3ViamVjdCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zdWJqZWN0Jyk7XG4gIGlmKCFkZXNjcmlwdGlvbikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9kZXNjcmlwdGlvbicpO1xuXG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTLFxuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTLFxuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyxcbiAgICBDT0xMRUNUSU9OUy5VU0VSU1xuICBdLm1hcCgobmFtZSkgPT4gZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uKGRhdGFiYXNlLCBuYW1lKSkpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VULFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRVxuICBdLm1hcCgobmFtZSkgPT4gZW5zdXJlRWRnZUNvbGxlY3Rpb24oZGF0YWJhc2UsIG5hbWUpKSk7XG5cbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGdlbmVyYXRlZFVzZXJLZXkgPSBjcmVhdGVIYXNoKGVtYWlsLCBudWxsKTtcbiAgY29uc3Qgb3B0ZWRJbiA9IGlucHV0Lm1hcmtldGluZ09wdEluID09PSB0cnVlO1xuICBjb25zdCB1c2VySW5zZXJ0ID0ge1xuICAgIF9rZXk6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQuZmlyc3ROYW1lLCAxNjApLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSwgMTYwKSxcbiAgICBtYWlsaW5nTGlzdDogb3B0ZWRJbixcbiAgICBtYXJrZXRpbmdPcHRJbjogb3B0ZWRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHVzZXJJZDogZ2VuZXJhdGVkVXNlcktleVxuICB9O1xuICBjb25zdCB1c2VyVXBkYXRlID0ge1xuICAgIC4uLihvcHRlZEluID8ge21haWxpbmdMaXN0OiB0cnVlLCBtYXJrZXRpbmdPcHRJbjogdHJ1ZSwgbWFya2V0aW5nT3B0SW5BdDogdGltZXN0YW1wfSA6IHt9KSxcbiAgICBmaXJzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0LmZpcnN0TmFtZSwgMTYwKSB8fCB1bmRlZmluZWQsXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lLCAxNjApIHx8IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wXG4gIH07XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgVVBTRVJUIHtlbWFpbDogJHtlbWFpbH19XG4gICAgICBJTlNFUlQgJHt1c2VySW5zZXJ0fVxuICAgICAgVVBEQVRFICR7dXNlclVwZGF0ZX1cbiAgICAgIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICBSRVRVUk4gTkVXXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGU7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IGNyZWF0ZVN1cHBvcnRUaWNrZXQoY29udGV4dCwge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIHByaW9yaXR5OiBzdXBwb3J0UHJpb3JpdGllcy5oYXMoU3RyaW5nKGlucHV0LnByaW9yaXR5KSkgPyBpbnB1dC5wcmlvcml0eSA6ICdub3JtYWwnLFxuICAgIHN1YmplY3QsXG4gICAgdHlwZTogc3VwcG9ydFR5cGVzLmhhcyhTdHJpbmcoaW5wdXQudHlwZSkpID8gaW5wdXQudHlwZSA6ICdnZW5lcmFsX3N1cHBvcnQnLFxuICAgIHVzZXJJZDogU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IGdlbmVyYXRlZFVzZXJLZXkpXG4gIH0pO1xuICBhd2FpdCBzZW5kU3VwcG9ydFRpY2tldEVtYWlsKGNvbnRleHQsIHRpY2tldCwgZGVzY3JpcHRpb24sICdXZSByZWNlaXZlZCB5b3VyIHN1cHBvcnQgdGlja2V0Jyk7XG4gIHJldHVybiB0aWNrZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHVibGljU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGlja2V0TnVtYmVyOiBzdHJpbmcsXG4gIGVtYWlsQWRkcmVzczogc3RyaW5nXG4pOiBQcm9taXNlPFB1YmxpY1N1cHBvcnRUaWNrZXRGZWVkIHwgbnVsbD4gPT4ge1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGVtYWlsQWRkcmVzcywgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBudW1iZXIgPSBjbGVhblN0cmluZyh0aWNrZXROdW1iZXIsIDgwKS50b1VwcGVyQ2FzZSgpO1xuICBpZighZW1haWxQYXR0ZXJuLnRlc3QoZW1haWwpIHx8ICFudW1iZXIpIHJldHVybiBudWxsO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgaWYoIWF3YWl0IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKS5leGlzdHMoKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgRk9SIHRpY2tldCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICAgIEZJTFRFUiBVUFBFUih0aWNrZXQudGlja2V0TnVtYmVyKSA9PSAke251bWJlcn1cbiAgICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJHtDT0xMRUNUSU9OUy5VU0VSU30sIHRpY2tldC51c2VySWQpXG4gICAgICBGSUxURVIgTE9XRVIodXNlci5lbWFpbCkgPT0gJHtlbWFpbH1cbiAgICAgIExFVCBtZXNzYWdlcyA9IChcbiAgICAgICAgRk9SIG1lc3NhZ2UgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTKX1cbiAgICAgICAgICBGSUxURVIgbWVzc2FnZS5zdXBwb3J0VGlja2V0SWQgPT0gdGlja2V0Ll9rZXkgQU5EIG1lc3NhZ2UudmlzaWJpbGl0eSA9PSBcImN1c3RvbWVyXCJcbiAgICAgICAgICBTT1JUIG1lc3NhZ2UuYWRkZWQgQVNDXG4gICAgICAgICAgUkVUVVJOIG1lc3NhZ2VcbiAgICAgIClcbiAgICAgIExFVCBldmVudHMgPSAoXG4gICAgICAgIEZPUiBldmVudCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTKX1cbiAgICAgICAgICBGSUxURVIgZXZlbnQuc3VwcG9ydFRpY2tldElkID09IHRpY2tldC5fa2V5XG4gICAgICAgICAgU09SVCBldmVudC5hZGRlZCBBU0NcbiAgICAgICAgICBSRVRVUk4gZXZlbnRcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiB7dGlja2V0LCBtZXNzYWdlcywgZXZlbnRzfVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFByb21pc2U8UHVibGljU3VwcG9ydFRpY2tldEZlZWQgfCBudWxsPjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0cyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZmlsdGVyczoge3JlYWRvbmx5IHN0YXR1cz86IHN0cmluZzsgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nfSA9IHt9XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YVtdPiA9PiB7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICBpZighYXdhaXQgZGF0YWJhc2UuY29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpLmV4aXN0cygpKSByZXR1cm4gW107XG4gICAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdGlja2V0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgICAgICAke2ZpbHRlcnMuc3RhdHVzID8gYXFsYEZJTFRFUiB0aWNrZXQuc3RhdHVzID09ICR7ZmlsdGVycy5zdGF0dXN9YCA6IGFxbGBgfVxuICAgICAgICAke2ZpbHRlcnMudXNlcklkID8gYXFsYEZJTFRFUiB0aWNrZXQudXNlcklkID09ICR7ZG9jS2V5KGZpbHRlcnMudXNlcklkKX1gIDogYXFsYGB9XG4gICAgICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJHtDT0xMRUNUSU9OUy5VU0VSU30sIHRpY2tldC51c2VySWQpXG4gICAgICAgIFNPUlQgdGlja2V0LmFkZGVkIERFU0NcbiAgICAgICAgUkVUVVJOIE1FUkdFKHRpY2tldCwge3VzZXJ9KVxuICAgIGA7XG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gIH0pKCk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlU3VwcG9ydFRpY2tldFN0YXR1cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmcsXG4gIHN0YXR1czogU3VwcG9ydFRpY2tldFN0YXR1cyxcbiAgcmVzb2x1dGlvblN1bW1hcnkgPSAnJ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KHN1cHBvcnRUaWNrZXRJZCk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKVxuICAgIC5xdWVyeShhcWxgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpfSlgKVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFN1cHBvcnRUaWNrZXRUeXBlRGF0YSB8IG51bGw7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAuLi4oc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiB7Y29tcGxldGVkQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdkb25lJyAmJiB7ZG9uZUF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAncmVzb2x2ZWQnICYmIHtyZXNvbHZlZEF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAnY2xvc2VkJyAmJiB7Y2xvc2VkQXQ6IHRpbWVzdGFtcH0pLFxuICAgIGxhc3RVcGRhdGVEZXRhaWxzOiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzdGF0dXNcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7dGlja2V0S2V5fSBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBTdXBwb3J0VGlja2V0VHlwZURhdGE7XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgZWRnZSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgICAgIEZJTFRFUiBlZGdlLl90byA9PSAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KX1cbiAgICAgIFVQREFURSBlZGdlIFdJVEggJHt7XG4gICAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICAgIHJlc29sdmVkQXQ6IHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzXG4gICAgICB9fSBJTiAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgYCk7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRFdmVudChjb250ZXh0LCB7XG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgZXZlbnRUeXBlOiAnc3RhdHVzX2NoYW5nZWQnLFxuICAgIGZyb21WYWx1ZTogcHJldmlvdXM/LnN0YXR1cyxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiBzdGF0dXNcbiAgfSk7XG5cbiAgaWYoc3RhdHVzID09PSAncmVzb2x2ZWQnKSB7XG4gICAgYXdhaXQgY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24oY29udGV4dCwge1xuICAgICAgYm9keTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnkgfHwgJ1lvdXIgc3VwcG9ydCB0aWNrZXQgaGFzIGJlZW4gcmVzb2x2ZWQuJywgNDAwMCksXG4gICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgc3ViamVjdDogYFJlc29sdmVkOiAke3RpY2tldC5zdWJqZWN0IHx8ICdTdXBwb3J0IHRpY2tldCd9YCxcbiAgICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgICAgdHlwZTogJ3N1cHBvcnRfdGlja2V0X3Jlc29sdmVkJyxcbiAgICAgIHVzZXJJZDogdGlja2V0LnVzZXJJZFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTdXBwb3J0VGlja2V0UHJvZ3Jlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nLFxuICBzdGF0dXM6IFN1cHBvcnRUaWNrZXRTdGF0dXMsXG4gIGRldGFpbHM6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBpZighc3VwcG9ydFN0YXR1c2VzLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWRfc3VwcG9ydF90aWNrZXRfc3RhdHVzJyk7XG4gIGNvbnN0IG1hcmtkb3duID0gY2xlYW5TdHJpbmcoZGV0YWlscywgNDAwMCk7XG4gIGlmKCFtYXJrZG93bikgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF91cGRhdGVfZGV0YWlscycpO1xuICBjb25zdCB0aWNrZXQgPSBhd2FpdCB1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzKGNvbnRleHQsIHN1cHBvcnRUaWNrZXRJZCwgc3RhdHVzLCBtYXJrZG93bik7XG4gIGF3YWl0IGFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlKGNvbnRleHQsIHtcbiAgICBhdXRob3JVc2VySWQ6IFN0cmluZyhjb250ZXh0LnNlc3Npb24/LnVzZXJJZCB8fCAnJyksXG4gICAgYm9keTogbWFya2Rvd24sXG4gICAgc3VwcG9ydFRpY2tldElkLFxuICAgIHZpc2liaWxpdHk6ICdjdXN0b21lcidcbiAgfSk7XG4gIGF3YWl0IGNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uKGNvbnRleHQsIHtcbiAgICBib2R5OiBtYXJrZG93bixcbiAgICBzdGF0dXM6ICdzZW50JyxcbiAgICBzdWJqZWN0OiBgVGlja2V0ICR7dGlja2V0LnRpY2tldE51bWJlciB8fCBzdXBwb3J0VGlja2V0SWR9OiAke3N0YXR1cy5yZXBsYWNlKC9fL2csICcgJyl9YCxcbiAgICBzdXBwb3J0VGlja2V0SWQsXG4gICAgdHlwZTogJ3N1cHBvcnRfdGlja2V0X3Byb2dyZXNzJyxcbiAgICB1c2VySWQ6IHRpY2tldC51c2VySWRcbiAgfSk7XG4gIGF3YWl0IHNlbmRTdXBwb3J0VGlja2V0RW1haWwoY29udGV4dCwgdGlja2V0LCBtYXJrZG93biwgYFN1cHBvcnQgdGlja2V0ICR7c3RhdHVzLnJlcGxhY2UoL18vZywgJyAnKX1gKTtcbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTdXBwb3J0VGlja2V0TWVzc2FnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8ICcnKSk7XG4gIGNvbnN0IG1lc3NhZ2VLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRNZXNzYWdlSWQgfHwgY3JlYXRlSGFzaChgc3VwcG9ydC10aWNrZXQtbWVzc2FnZS0ke3RpY2tldEtleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICBfa2V5OiBtZXNzYWdlS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYXV0aG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmF1dGhvclVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBib2R5OiBjbGVhblN0cmluZyhpbnB1dC5ib2R5LCA0MDAwKSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHN1cHBvcnRUaWNrZXRNZXNzYWdlSWQ6IG1lc3NhZ2VLZXksXG4gICAgdmlzaWJpbGl0eTogaW5wdXQudmlzaWJpbGl0eSB8fCAnY3VzdG9tZXInXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke21lc3NhZ2V9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZE1lc3NhZ2UgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRSxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0TWVzc2FnZS0ke3RpY2tldEtleX0tJHttZXNzYWdlS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUywgbWVzc2FnZUtleSksXG4gICAge2F1dGhvclVzZXJJZDogbWVzc2FnZS5hdXRob3JVc2VySWQsIHZpc2liaWxpdHk6IG1lc3NhZ2UudmlzaWJpbGl0eX1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWRNZXNzYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRNZXNzYWdlcyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmdcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG1lc3NhZ2UgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgc3VwcG9ydFRpY2tldElkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFKX1cbiAgICAgIFNPUlQgbWVzc2FnZS5hZGRlZCBBU0NcbiAgICAgIFJFVFVSTiBtZXNzYWdlXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFN1cHBvcnRUaWNrZXRFdmVudCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8U3VwcG9ydFRpY2tldEV2ZW50VHlwZT5cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldEV2ZW50VHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgJycpKTtcbiAgY29uc3QgZXZlbnRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRFdmVudElkIHx8IGNyZWF0ZUhhc2goYHN1cHBvcnQtdGlja2V0LWV2ZW50LSR7dGlja2V0S2V5fS0ke3RpbWVzdGFtcH0tJHtpbnB1dC5ldmVudFR5cGV9YCkpKTtcbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgX2tleTogZXZlbnRLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhpbnB1dC5hY3RvclVzZXJJZCB8fCAnJykpLFxuICAgIGV2ZW50VHlwZTogY2xlYW5TdHJpbmcoaW5wdXQuZXZlbnRUeXBlLCAxNjApLFxuICAgIGZyb21WYWx1ZTogY2xlYW5TdHJpbmcoaW5wdXQuZnJvbVZhbHVlLCAzMjApLFxuICAgIG1ldGFkYXRhOiBpbnB1dC5tZXRhZGF0YSB8fCB7fSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN1cHBvcnRUaWNrZXRFdmVudElkOiBldmVudEtleSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0b1ZhbHVlOiBjbGVhblN0cmluZyhpbnB1dC50b1ZhbHVlLCAzMjApXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke2V2ZW50fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkRXZlbnQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldEV2ZW50LSR7dGlja2V0S2V5fS0ke2V2ZW50S2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMsIGV2ZW50S2V5KSxcbiAgICB7YWN0b3JVc2VySWQ6IGV2ZW50LmFjdG9yVXNlcklkLCBldmVudFR5cGU6IGV2ZW50LmV2ZW50VHlwZX1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWRFdmVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0RXZlbnRzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0RXZlbnRUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIGV2ZW50IElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHN1cHBvcnRUaWNrZXRJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQpfVxuICAgICAgU09SVCBldmVudC5hZGRlZCBBU0NcbiAgICAgIFJFVFVSTiBldmVudFxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlPlxuKTogUHJvbWlzZTxDdXN0b21lck5vdGlmaWNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBub3RpZmljYXRpb25LZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LmN1c3RvbWVyTm90aWZpY2F0aW9uSWQgfHwgY3JlYXRlSGFzaChgY3VzdG9tZXItbm90aWZpY2F0aW9uLSR7dXNlcktleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xuICAgIF9rZXk6IG5vdGlmaWNhdGlvbktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGJvZHk6IGNsZWFuU3RyaW5nKGlucHV0LmJvZHksIDQwMDApLFxuICAgIGN1c3RvbWVyTm90aWZpY2F0aW9uSWQ6IG5vdGlmaWNhdGlvbktleSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHNlbnRBdDogaW5wdXQuc2VudEF0LFxuICAgIHN0YXR1czogaW5wdXQuc3RhdHVzIHx8ICdxdWV1ZWQnLFxuICAgIHN1YmplY3Q6IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCksXG4gICAgc3VwcG9ydFRpY2tldElkOiBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCAnJykpLFxuICAgIHR5cGU6IGNsZWFuU3RyaW5nKGlucHV0LnR5cGUsIDE2MCksXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke25vdGlmaWNhdGlvbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNVU1RPTUVSX05PVElGSUNBVElPTlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWROb3RpZmljYXRpb24gPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OLFxuICAgIGNyZWF0ZUhhc2goYGhhc0N1c3RvbWVyTm90aWZpY2F0aW9uLSR7dXNlcktleX0tJHtub3RpZmljYXRpb25LZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX05PVElGSUNBVElPTlMsIG5vdGlmaWNhdGlvbktleSksXG4gICAge1xuICAgICAgc3RhdHVzOiBub3RpZmljYXRpb24uc3RhdHVzLFxuICAgICAgc3VwcG9ydFRpY2tldElkOiBub3RpZmljYXRpb24uc3VwcG9ydFRpY2tldElkLFxuICAgICAgdHlwZTogbm90aWZpY2F0aW9uLnR5cGVcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIHNhdmVkTm90aWZpY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbWVyTm90aWZpY2F0aW9uc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG5vdGlmaWNhdGlvbiBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OKX1cbiAgICAgIFNPUlQgbm90aWZpY2F0aW9uLmFkZGVkIERFU0NcbiAgICAgIFJFVFVSTiBub3RpZmljYXRpb25cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwicGFyc2VQaG9uZSIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJDb25maWciLCJ1c2VEYiIsImlzQWRtaW5Vc2VyIiwic2VzU2VuZCIsIm5vdyIsIkRhdGUiLCJjb2xsZWN0aW9uIiwibmFtZSIsImRvY0tleSIsInZhbHVlIiwiU3RyaW5nIiwiZG9jSWQiLCJjb2xsZWN0aW9uTmFtZSIsImtleSIsImV4dGVybmFsS2V5IiwicHJlZml4IiwiaWQiLCJjbGVhblN0cmluZyIsImxlbmd0aCIsImNsZWFuRXh0ZXJuYWxJZCIsInRyaW0iLCJzbGljZSIsImVuc3VyZURvY3VtZW50Q29sbGVjdGlvbiIsImRhdGFiYXNlIiwidGFyZ2V0IiwiZXhpc3RzIiwiY3JlYXRlQ29sbGVjdGlvbiIsImVycm9yIiwiZW5zdXJlRWRnZUNvbGxlY3Rpb24iLCJjcmVhdGVFZGdlQ29sbGVjdGlvbiIsInJlcXVpcmVDcm1BZG1pbiIsImNvbnRleHQiLCJzZXNzaW9uIiwiRXJyb3IiLCJyZXF1aXJlQ3JtQWRtaW5pc3RyYXRvciIsImFsbG93ZWRDb250YWN0RmllbGRzIiwiU2V0Iiwic3VwcG9ydFByaW9yaXRpZXMiLCJzdXBwb3J0U3RhdHVzZXMiLCJzdXBwb3J0VHlwZXMiLCJlbWFpbFBhdHRlcm4iLCJlc2NhcGVIdG1sIiwicmVwbGFjZSIsInNhbml0aXplSHRtbCIsInNhbml0aXplQ3NzIiwiaHRtbFRvVGV4dCIsImNodW5rIiwiaXRlbXMiLCJzaXplIiwiZ3JvdXBzIiwiaW5kZXgiLCJwdXNoIiwic3VibWl0Q3JtRm9ybSIsImlucHV0IiwibWFya2V0aW5nT3B0SW4iLCJlbWFpbCIsInRvTG93ZXJDYXNlIiwicmF3UGhvbmUiLCJwaG9uZSIsImRhdGFiYXNlTmFtZSIsIkNSTV9GT1JNX1NVQk1JU1NJT05TIiwidGltZXN0YW1wIiwic291cmNlIiwiZm9ybUlkIiwidmFsdWVzIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJnZW5lcmF0ZWRVc2VyS2V5IiwiY29uc2VudCIsIm1hcmtldGluZ09wdEluQXQiLCJtYXJrZXRpbmdPcHRPdXRBdCIsInVzZXJJbnNlcnQiLCJfa2V5IiwiYWN0aXZlIiwiYWRkZWQiLCJtYWlsaW5nTGlzdCIsIm1hcmtldGluZ0NvbnNlbnRTb3VyY2UiLCJtb2RpZmllZCIsInR5cGUiLCJ1c2VyQWNjZXNzIiwidXNlcklkIiwidmVyaWZpZWRFbWFpbCIsInZlcmlmaWVkUGhvbmUiLCJ1c2VyVXBkYXRlIiwidXNlciIsInF1ZXJ5IiwiVVNFUlMiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsInN1Ym1pc3Npb25JZCIsInN1Ym1pc3Npb24iLCJzYXZlZCIsImdldENybUZvcm1TdWJtaXNzaW9ucyIsImFsbCIsImdldENybUNvbnRhY3RzIiwiZmlsdGVyIiwic2VhcmNoIiwiZmllbGQiLCJoYXMiLCJvcHRlZEluT25seSIsIm9wZXJhdG9yIiwiaW5jbHVkZXMiLCJzZW5kQ3JtQ2FtcGFpZ24iLCJzdWJqZWN0IiwiYm9keUh0bWwiLCJodG1sIiwiY3NzIiwiY2FuZGlkYXRlcyIsInNlbGVjdGVkSWRzIiwidXNlcklkcyIsIm1hcCIsInJlY2lwaWVudHMiLCJCb29sZWFuIiwiY2FtcGFpZ25JZCIsImNhbXBhaWduIiwiZmFpbGVkQ291bnQiLCJyZWNpcGllbnRDb3VudCIsInNlbnRDb3VudCIsInN0YXR1cyIsIkNSTV9DQU1QQUlHTlMiLCJyZWNpcGllbnRzQmF0Y2giLCJEZXN0aW5hdGlvbiIsIkJjY0FkZHJlc3NlcyIsInJlY2lwaWVudCIsIk1lc3NhZ2UiLCJCb2R5IiwiSHRtbCIsIkRhdGEiLCJUZXh0IiwiU3ViamVjdCIsIlNvdXJjZSIsImNvbmZpZyIsImRldGFpbHMiLCJzdXBwb3J0TmFtZSIsInN1cHBvcnRFbWFpbCIsIl9lcnJvciIsInJlc3VsdCIsInNlbnRBdCIsInNhdmVFZGdlIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlS2V5IiwiZnJvbSIsInRvIiwiZGF0YSIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNyZWF0ZU1haWxpbmdMaXN0IiwibWFpbGluZ0xpc3RJZCIsImNyZWF0ZWRCeVVzZXJJZCIsImRlc2NyaXB0aW9uIiwiTUFJTElOR19MSVNUUyIsImdldE1haWxpbmdMaXN0cyIsImFkZFVzZXJUb01haWxpbmdMaXN0IiwidXNlcktleSIsImxpc3RLZXkiLCJIQVNfTUFJTElOR19MSVNUIiwiYWRkZWRCeVVzZXJJZCIsInJlbW92ZVVzZXJGcm9tTWFpbGluZ0xpc3QiLCJ1cGRhdGUiLCJyZW1vdmVkQXQiLCJnZXRNYWlsaW5nTGlzdFVzZXJzIiwibGlzdElkIiwiZ2V0VXNlcnNCeVB1cmNoYXNlZFByb2R1Y3QiLCJwcm9kdWN0SWQiLCJwcm9kdWN0S2V5IiwiU0hPUElGWV9QUk9EVUNUUyIsIkhBU19QVVJDSEFTRURfUFJPRFVDVCIsIkhBU19DVVNUT01FUl9PUkRFUiIsImdldEVsaWdpYmxlTWFpbGluZ1VzZXJzIiwib3B0aW9ucyIsImV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMiLCJIQVNfU1VQUE9SVF9USUNLRVQiLCJpbmdlc3RTaG9waWZ5Q3VzdG9tZXJPcmRlciIsInNob3BpZnlDdXN0b21lcklkIiwic2hvcGlmeU9yZGVySWQiLCJjdXN0b21lciIsInByb2R1Y3RJZHMiLCJBcnJheSIsInByb2R1Y3RzIiwicHJvZHVjdCIsInVuZGVmaW5lZCIsImxhc3RQdXJjaGFzZWRBdCIsInB1cmNoYXNlZEF0IiwidXNlclF1ZXJ5IiwicmVzb2x2ZWRVc2VyS2V5Iiwib3JkZXJLZXkiLCJvcmRlciIsImN1cnJlbmN5IiwidG9VcHBlckNhc2UiLCJjdXN0b21lck9yZGVySWQiLCJ0b3RhbFByaWNlIiwiTnVtYmVyIiwib3JkZXJRdWVyeSIsIkNVU1RPTUVSX09SREVSUyIsInNhdmVkT3JkZXIiLCJQcm9taXNlIiwiZmluZCIsIml0ZW0iLCJwcm9kdWN0RG9jIiwidGl0bGUiLCJ2YXJpYW50SWQiLCJwcm9kdWN0UXVlcnkiLCJnZXRDdXN0b21lck9yZGVyc0J5VXNlciIsInNlbmRTdXBwb3J0VGlja2V0RW1haWwiLCJ0aWNrZXQiLCJoZWFkaW5nIiwiZ2V0IiwidGlja2V0TnVtYmVyIiwic3VwcG9ydFRpY2tldElkIiwic3RhdHVzVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidGV4dCIsIlRvQWRkcmVzc2VzIiwiY2F0Y2giLCJjcmVhdGVTdXBwb3J0VGlja2V0IiwidGlja2V0S2V5IiwidG9JU09TdHJpbmciLCJhc3NpZ25lZFRvVXNlcklkIiwicHJpb3JpdHkiLCJTVVBQT1JUX1RJQ0tFVFMiLCJzYXZlZFRpY2tldCIsImFkZFN1cHBvcnRUaWNrZXRFdmVudCIsImFjdG9yVXNlcklkIiwiZXZlbnRUeXBlIiwibWV0YWRhdGEiLCJ0b1ZhbHVlIiwic3VibWl0UHVibGljU3VwcG9ydFRpY2tldCIsInRlc3QiLCJTVVBQT1JUX1RJQ0tFVF9FVkVOVFMiLCJTVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyIsIkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCIsIkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFIiwib3B0ZWRJbiIsImdldFB1YmxpY1N1cHBvcnRUaWNrZXQiLCJlbWFpbEFkZHJlc3MiLCJudW1iZXIiLCJnZXRTdXBwb3J0VGlja2V0cyIsImZpbHRlcnMiLCJ1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzIiwicmVzb2x1dGlvblN1bW1hcnkiLCJwcmV2aW91cyIsImNvbXBsZXRlZEF0IiwiZG9uZUF0IiwicmVzb2x2ZWRBdCIsImNsb3NlZEF0IiwibGFzdFVwZGF0ZURldGFpbHMiLCJmcm9tVmFsdWUiLCJjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbiIsImJvZHkiLCJ1cGRhdGVTdXBwb3J0VGlja2V0UHJvZ3Jlc3MiLCJtYXJrZG93biIsImFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlIiwiYXV0aG9yVXNlcklkIiwidmlzaWJpbGl0eSIsIm1lc3NhZ2VLZXkiLCJzdXBwb3J0VGlja2V0TWVzc2FnZUlkIiwibWVzc2FnZSIsInNhdmVkTWVzc2FnZSIsImdldFN1cHBvcnRUaWNrZXRNZXNzYWdlcyIsImV2ZW50S2V5Iiwic3VwcG9ydFRpY2tldEV2ZW50SWQiLCJldmVudCIsInNhdmVkRXZlbnQiLCJnZXRTdXBwb3J0VGlja2V0RXZlbnRzIiwibm90aWZpY2F0aW9uS2V5IiwiY3VzdG9tZXJOb3RpZmljYXRpb25JZCIsIm5vdGlmaWNhdGlvbiIsIkNVU1RPTUVSX05PVElGSUNBVElPTlMiLCJzYXZlZE5vdGlmaWNhdGlvbiIsIkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04iLCJnZXRDdXN0b21lck5vdGlmaWNhdGlvbnNCeVVzZXIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDMUYsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFFckMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsV0FBVyxRQUFPLDJCQUEyQjtBQUNyRCxTQUFRQyxPQUFPLFFBQU8sYUFBYTtBQXVCbkMsTUFBTUMsTUFBTSxJQUFjQyxLQUFLRCxHQUFHO0FBQ2xDLE1BQU1FLGFBQWEsQ0FBQ0MsT0FBaUJWLFFBQVFVO0FBQzdDLE1BQU1DLFNBQVMsQ0FBQ0MsUUFBUSxFQUFFLEdBQWFoQixRQUFRaUIsT0FBT0Q7QUFDdEQsTUFBTUUsUUFBUSxDQUFDQyxnQkFBd0JDLE1BQU0sRUFBRSxHQUFhLEdBQUdELGVBQWUsQ0FBQyxFQUFFSixPQUFPSyxNQUFNO0FBQzlGLE1BQU1DLGNBQWMsQ0FBQ0MsUUFBZ0JDLEtBQUssRUFBRSxHQUFheEIsV0FBVyxHQUFHdUIsT0FBTyxDQUFDLEVBQUVMLE9BQU9NLEtBQUssRUFBRTtBQUMvRixNQUFNQyxjQUFjLENBQUNSLE9BQWdCUyxTQUFTLEdBQUcsR0FBYXZCLFlBQVllLE9BQU9ELFNBQVMsS0FBS1M7QUFDL0YsTUFBTUMsa0JBQWtCLENBQUNWLE9BQWdCUyxTQUFTLEdBQUcsR0FBYVIsT0FBT0QsU0FBUyxJQUFJVyxJQUFJLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUN0RyxNQUFNSSwyQkFBMkIsT0FB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
|