@nlabs/reaktor 1.4.1 → 1.5.1
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/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/apps.d.ts +1 -2
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/connections.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/content.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/conversations.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/actions/crm.d.ts +28 -0
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/crud.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/dynamodb.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/email.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/files.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/groups.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/images.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/index.d.ts +2 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/ios.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/locations.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/messages.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/notifications.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/payments.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/personas.d.ts +1 -2
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/posts.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/query.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/reactions.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/actions/rum.d.ts +3 -0
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/s3.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/search.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/sms.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/statistics.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/subscriptions.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/tags.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/users.d.ts +2 -3
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/videos.d.ts +0 -1
- package/lib/{actions → Users/nitrog7/Development/reaktor/src/actions}/websockets.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/arangoAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/contentAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/fileAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/imageAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/index.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/messageAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/postAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/reaktorAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/tagAdapter.d.ts +0 -1
- package/lib/{adapters → Users/nitrog7/Development/reaktor/src/adapters}/userAdapter.d.ts +0 -1
- package/lib/{config.d.ts → Users/nitrog7/Development/reaktor/src/config.d.ts} +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/constants/collections.d.ts +86 -0
- package/lib/{handlers → Users/nitrog7/Development/reaktor/src/handlers}/graphqlHandler.d.ts +0 -1
- package/lib/{index.d.ts → Users/nitrog7/Development/reaktor/src/index.d.ts} +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/actions/websockets.d.ts +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/authorizer.d.ts +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/connection.d.ts +4 -5
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/utils/message.d.ts +0 -1
- package/lib/{lambdas → Users/nitrog7/Development/reaktor/src/lambdas}/utils/websocket.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/conversation.d.ts +1 -2
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/file.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/group.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/image.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/post.d.ts +1 -2
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/tag.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/user.d.ts +0 -1
- package/lib/{mocks → Users/nitrog7/Development/reaktor/src/mocks}/video.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/content/content.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/mutations/crm/crm.d.ts +1 -0
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/events/events.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/groups/groups.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/images/images.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/index.d.ts +3 -2
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/locations/locations.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/messages/messages.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/personas/personas.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/posts/posts.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/reactions/reactions.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/mutations/rum/rum.d.ts +1 -0
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/statistics/statistics.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/subscriptions/subscriptions.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/tags/tags.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/users/users.d.ts +0 -1
- package/lib/{mutations → Users/nitrog7/Development/reaktor/src/mutations}/videos/videos.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/app.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/bankAccount.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/connection.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/content.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/conversation.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/creditCard.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/objectTypes/crm.d.ts +12 -0
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/document.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/error.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/event.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/external.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/file.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/filter.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/group.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/iapSubscription.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/image.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/index.d.ts +2 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/location.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/message.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/passcode.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/persona.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/plan.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/post.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/query.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/reaction.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/relation.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/objectTypes/rum.d.ts +3 -0
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/search.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/statistics.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/subscription.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/tag.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/user.d.ts +0 -1
- package/lib/{objectTypes → Users/nitrog7/Development/reaktor/src/objectTypes}/video.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/content/content.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/queries/crm/crm.d.ts +1 -0
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/events/events.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/groups/groups.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/images/images.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/index.d.ts +2 -2
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/locations/locations.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/messages/messages.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/personas/personas.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/posts/posts.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/query/query.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/reactions/reactions.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/statistics/statistics.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/subscriptions/subscriptions.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/tags/tags.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/users/users.d.ts +0 -1
- package/lib/{queries → Users/nitrog7/Development/reaktor/src/queries}/videos/videos.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/layout.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordForgot.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/verifyEmail.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/email/welcome.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/Users/nitrog7/Development/reaktor/src/templates/sms/welcome.d.ts +2 -0
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/apps.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/arangodb.types.d.ts +1 -2
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/auth.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/connections.types.d.ts +2 -3
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/content.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/conversations.types.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/types/crm.types.d.ts +89 -0
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/email.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/error.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/files.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/google.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/groups.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/images.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/index.d.ts +2 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/locations.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/messages.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/notifications.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/payments.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/personas.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/posts.types.d.ts +0 -1
- package/lib/Users/nitrog7/Development/reaktor/src/types/rum.types.d.ts +23 -0
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/statistics.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/tags.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/users.types.d.ts +20 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/videos.types.d.ts +0 -1
- package/lib/{types → Users/nitrog7/Development/reaktor/src/types}/websockets.types.d.ts +0 -1
- package/lib/{upload.d.ts → Users/nitrog7/Development/reaktor/src/upload.d.ts} +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/adapterUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/analyticsUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/aqlHelpers.d.ts +4 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/arangodbUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/authUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/awsUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/collectionRegistry.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/contextUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/dbI18n.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/dbI18n.example.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/googleTranslate.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/graphqlUtils.d.ts +1 -2
- package/lib/Users/nitrog7/Development/reaktor/src/utils/imageUtils.d.ts +1 -0
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/index.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/languageDetection.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/localeUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/localeUtils.example.d.ts +1 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/middlewareUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/queryBuilder.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/schemaUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/sessionUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/stripeUtils.d.ts +1 -2
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/templateUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/testUtils.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/translationQueue.d.ts +0 -1
- package/lib/{utils → Users/nitrog7/Development/reaktor/src/utils}/translationQueue.example.d.ts +0 -1
- package/lib/{videoProcessing.d.ts → Users/nitrog7/Development/reaktor/src/videoProcessing.d.ts} +2 -3
- package/lib/actions/apps.js +2 -2
- package/lib/actions/content.js +1 -2
- package/lib/actions/crm.js +498 -0
- package/lib/actions/crud.js +1 -1
- package/lib/actions/groups.js +2 -2
- package/lib/actions/images.js +3 -10
- package/lib/actions/index.js +3 -1
- package/lib/actions/locations.js +1 -2
- package/lib/actions/posts.js +3 -3
- package/lib/actions/rum.js +66 -0
- package/lib/actions/search.js +30 -53
- package/lib/actions/users.js +124 -160
- package/lib/adapters/messageAdapter.js +7 -5
- package/lib/adapters/userAdapter.js +42 -2
- package/lib/constants/collections.js +17 -1
- package/lib/mocks/image.js +3 -3
- package/lib/mocks/video.js +3 -3
- package/lib/mutations/crm/crm.js +67 -0
- package/lib/mutations/index.js +12 -2
- package/lib/mutations/rum/rum.js +20 -0
- package/lib/objectTypes/crm.js +188 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/persona.js +3 -2
- package/lib/objectTypes/rum.js +33 -0
- package/lib/objectTypes/user.js +83 -2
- package/lib/queries/crm/crm.js +77 -0
- package/lib/queries/index.js +7 -2
- package/lib/queries/videos/videos.js +1 -1
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/crm.types.js +6 -0
- package/lib/types/index.js +3 -1
- package/lib/types/rum.types.js +6 -0
- package/lib/types/users.types.js +1 -1
- package/lib/utils/aqlHelpers.js +13 -2
- package/lib/utils/collectionRegistry.js +18 -1
- package/lib/utils/imageUtils.js +6 -0
- package/lib/utils/localeUtils.example.js +3 -4
- package/lib/utils/stripeUtils.js +2 -2
- package/package.json +53 -39
- package/lib/actions/apps.d.ts.map +0 -1
- package/lib/actions/connections.d.ts.map +0 -1
- package/lib/actions/content.d.ts.map +0 -1
- package/lib/actions/conversations.d.ts.map +0 -1
- package/lib/actions/crud.d.ts.map +0 -1
- package/lib/actions/dynamodb.d.ts.map +0 -1
- package/lib/actions/email.d.ts.map +0 -1
- package/lib/actions/files.d.ts.map +0 -1
- package/lib/actions/groups.d.ts.map +0 -1
- package/lib/actions/images.d.ts.map +0 -1
- package/lib/actions/index.d.ts.map +0 -1
- package/lib/actions/ios.d.ts.map +0 -1
- package/lib/actions/locations.d.ts.map +0 -1
- package/lib/actions/messages.d.ts.map +0 -1
- package/lib/actions/notifications.d.ts.map +0 -1
- package/lib/actions/payments.d.ts.map +0 -1
- package/lib/actions/personas.d.ts.map +0 -1
- package/lib/actions/posts.d.ts.map +0 -1
- package/lib/actions/query.d.ts.map +0 -1
- package/lib/actions/reactions.d.ts.map +0 -1
- package/lib/actions/s3.d.ts.map +0 -1
- package/lib/actions/search.d.ts.map +0 -1
- package/lib/actions/sms.d.ts.map +0 -1
- package/lib/actions/statistics.d.ts.map +0 -1
- package/lib/actions/subscriptions.d.ts.map +0 -1
- package/lib/actions/tags.d.ts.map +0 -1
- package/lib/actions/users.d.ts.map +0 -1
- package/lib/actions/videos.d.ts.map +0 -1
- package/lib/actions/websockets.d.ts.map +0 -1
- package/lib/adapters/arangoAdapter.d.ts.map +0 -1
- package/lib/adapters/contentAdapter.d.ts.map +0 -1
- package/lib/adapters/fileAdapter.d.ts.map +0 -1
- package/lib/adapters/imageAdapter.d.ts.map +0 -1
- package/lib/adapters/index.d.ts.map +0 -1
- package/lib/adapters/messageAdapter.d.ts.map +0 -1
- package/lib/adapters/postAdapter.d.ts.map +0 -1
- package/lib/adapters/reaktorAdapter.d.ts.map +0 -1
- package/lib/adapters/tagAdapter.d.ts.map +0 -1
- package/lib/adapters/userAdapter.d.ts.map +0 -1
- package/lib/config.d.ts.map +0 -1
- package/lib/constants/collections.d.ts +0 -71
- package/lib/constants/collections.d.ts.map +0 -1
- package/lib/handlers/graphqlHandler.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/lambdas/actions/websockets.d.ts.map +0 -1
- package/lib/lambdas/authorizer.d.ts.map +0 -1
- package/lib/lambdas/connection.d.ts.map +0 -1
- package/lib/lambdas/utils/message.d.ts.map +0 -1
- package/lib/lambdas/utils/websocket.d.ts.map +0 -1
- package/lib/mocks/conversation.d.ts.map +0 -1
- package/lib/mocks/file.d.ts.map +0 -1
- package/lib/mocks/group.d.ts.map +0 -1
- package/lib/mocks/image.d.ts.map +0 -1
- package/lib/mocks/post.d.ts.map +0 -1
- package/lib/mocks/tag.d.ts.map +0 -1
- package/lib/mocks/user.d.ts.map +0 -1
- package/lib/mocks/video.d.ts.map +0 -1
- package/lib/mutations/content/content.d.ts.map +0 -1
- package/lib/mutations/events/events.d.ts.map +0 -1
- package/lib/mutations/groups/groups.d.ts.map +0 -1
- package/lib/mutations/images/images.d.ts.map +0 -1
- package/lib/mutations/index.d.ts.map +0 -1
- package/lib/mutations/locations/locations.d.ts.map +0 -1
- package/lib/mutations/messages/messages.d.ts.map +0 -1
- package/lib/mutations/personas/personas.d.ts.map +0 -1
- package/lib/mutations/posts/posts.d.ts.map +0 -1
- package/lib/mutations/reactions/reactions.d.ts.map +0 -1
- package/lib/mutations/statistics/statistics.d.ts.map +0 -1
- package/lib/mutations/subscriptions/subscriptions.d.ts.map +0 -1
- package/lib/mutations/tags/tags.d.ts.map +0 -1
- package/lib/mutations/users/users.d.ts.map +0 -1
- package/lib/mutations/videos/videos.d.ts.map +0 -1
- package/lib/objectTypes/app.d.ts.map +0 -1
- package/lib/objectTypes/bankAccount.d.ts.map +0 -1
- package/lib/objectTypes/connection.d.ts.map +0 -1
- package/lib/objectTypes/content.d.ts.map +0 -1
- package/lib/objectTypes/conversation.d.ts.map +0 -1
- package/lib/objectTypes/creditCard.d.ts.map +0 -1
- package/lib/objectTypes/document.d.ts.map +0 -1
- package/lib/objectTypes/error.d.ts.map +0 -1
- package/lib/objectTypes/event.d.ts.map +0 -1
- package/lib/objectTypes/external.d.ts.map +0 -1
- package/lib/objectTypes/file.d.ts.map +0 -1
- package/lib/objectTypes/filter.d.ts.map +0 -1
- package/lib/objectTypes/group.d.ts.map +0 -1
- package/lib/objectTypes/iapSubscription.d.ts.map +0 -1
- package/lib/objectTypes/image.d.ts.map +0 -1
- package/lib/objectTypes/index.d.ts.map +0 -1
- package/lib/objectTypes/location.d.ts.map +0 -1
- package/lib/objectTypes/message.d.ts.map +0 -1
- package/lib/objectTypes/passcode.d.ts.map +0 -1
- package/lib/objectTypes/persona.d.ts.map +0 -1
- package/lib/objectTypes/plan.d.ts.map +0 -1
- package/lib/objectTypes/post.d.ts.map +0 -1
- package/lib/objectTypes/query.d.ts.map +0 -1
- package/lib/objectTypes/reaction.d.ts.map +0 -1
- package/lib/objectTypes/relation.d.ts.map +0 -1
- package/lib/objectTypes/search.d.ts.map +0 -1
- package/lib/objectTypes/statistics.d.ts.map +0 -1
- package/lib/objectTypes/subscription.d.ts.map +0 -1
- package/lib/objectTypes/tag.d.ts.map +0 -1
- package/lib/objectTypes/user.d.ts.map +0 -1
- package/lib/objectTypes/video.d.ts.map +0 -1
- package/lib/queries/content/content.d.ts.map +0 -1
- package/lib/queries/events/events.d.ts.map +0 -1
- package/lib/queries/groups/groups.d.ts.map +0 -1
- package/lib/queries/images/images.d.ts.map +0 -1
- package/lib/queries/index.d.ts.map +0 -1
- package/lib/queries/locations/locations.d.ts.map +0 -1
- package/lib/queries/messages/messages.d.ts.map +0 -1
- package/lib/queries/personas/personas.d.ts.map +0 -1
- package/lib/queries/posts/posts.d.ts.map +0 -1
- package/lib/queries/query/query.d.ts.map +0 -1
- package/lib/queries/reactions/reactions.d.ts.map +0 -1
- package/lib/queries/statistics/statistics.d.ts.map +0 -1
- package/lib/queries/subscriptions/subscriptions.d.ts.map +0 -1
- package/lib/queries/tags/tags.d.ts.map +0 -1
- package/lib/queries/users/users.d.ts.map +0 -1
- package/lib/queries/videos/videos.d.ts.map +0 -1
- package/lib/templates/email/layout.d.ts +0 -3
- package/lib/templates/email/layout.d.ts.map +0 -1
- package/lib/templates/email/passwordForgot.d.ts +0 -3
- package/lib/templates/email/passwordForgot.d.ts.map +0 -1
- package/lib/templates/email/passwordRecovery.d.ts +0 -3
- package/lib/templates/email/passwordRecovery.d.ts.map +0 -1
- package/lib/templates/email/verifyEmail.d.ts +0 -3
- package/lib/templates/email/verifyEmail.d.ts.map +0 -1
- package/lib/templates/email/welcome.d.ts +0 -3
- package/lib/templates/email/welcome.d.ts.map +0 -1
- package/lib/templates/sms/passwordForgot.d.ts +0 -3
- package/lib/templates/sms/passwordForgot.d.ts.map +0 -1
- package/lib/templates/sms/passwordRecovery.d.ts +0 -3
- package/lib/templates/sms/passwordRecovery.d.ts.map +0 -1
- package/lib/templates/sms/verifyEmail.d.ts +0 -3
- package/lib/templates/sms/verifyEmail.d.ts.map +0 -1
- package/lib/templates/sms/verifyPhone.d.ts +0 -3
- package/lib/templates/sms/verifyPhone.d.ts.map +0 -1
- package/lib/templates/sms/welcome.d.ts +0 -3
- package/lib/templates/sms/welcome.d.ts.map +0 -1
- package/lib/types/apps.types.d.ts.map +0 -1
- package/lib/types/arangodb.types.d.ts.map +0 -1
- package/lib/types/auth.types.d.ts.map +0 -1
- package/lib/types/connections.types.d.ts.map +0 -1
- package/lib/types/content.types.d.ts.map +0 -1
- package/lib/types/conversations.types.d.ts.map +0 -1
- package/lib/types/email.types.d.ts.map +0 -1
- package/lib/types/error.types.d.ts.map +0 -1
- package/lib/types/files.types.d.ts.map +0 -1
- package/lib/types/google.types.d.ts.map +0 -1
- package/lib/types/groups.types.d.ts.map +0 -1
- package/lib/types/images.types.d.ts.map +0 -1
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/locations.types.d.ts.map +0 -1
- package/lib/types/messages.types.d.ts.map +0 -1
- package/lib/types/notifications.types.d.ts.map +0 -1
- package/lib/types/payments.types.d.ts.map +0 -1
- package/lib/types/personas.types.d.ts.map +0 -1
- package/lib/types/posts.types.d.ts.map +0 -1
- package/lib/types/statistics.types.d.ts.map +0 -1
- package/lib/types/tags.types.d.ts.map +0 -1
- package/lib/types/users.types.d.ts.map +0 -1
- package/lib/types/videos.types.d.ts.map +0 -1
- package/lib/types/websockets.types.d.ts.map +0 -1
- package/lib/upload.d.ts.map +0 -1
- package/lib/utils/adapterUtils.d.ts.map +0 -1
- package/lib/utils/analyticsUtils.d.ts.map +0 -1
- package/lib/utils/aqlHelpers.d.ts.map +0 -1
- package/lib/utils/arangodbUtils.d.ts.map +0 -1
- package/lib/utils/authUtils.d.ts.map +0 -1
- package/lib/utils/awsUtils.d.ts.map +0 -1
- package/lib/utils/collectionRegistry.d.ts.map +0 -1
- package/lib/utils/contextUtils.d.ts.map +0 -1
- package/lib/utils/dbI18n.d.ts.map +0 -1
- package/lib/utils/dbI18n.example.d.ts.map +0 -1
- package/lib/utils/googleTranslate.d.ts.map +0 -1
- package/lib/utils/graphqlUtils.d.ts.map +0 -1
- package/lib/utils/index.d.ts.map +0 -1
- package/lib/utils/languageDetection.d.ts.map +0 -1
- package/lib/utils/localeUtils.d.ts.map +0 -1
- package/lib/utils/localeUtils.example.d.ts.map +0 -1
- package/lib/utils/middlewareUtils.d.ts.map +0 -1
- package/lib/utils/queryBuilder.d.ts.map +0 -1
- package/lib/utils/schemaUtils.d.ts.map +0 -1
- package/lib/utils/sessionUtils.d.ts.map +0 -1
- package/lib/utils/stripeUtils.d.ts.map +0 -1
- package/lib/utils/templateUtils.d.ts.map +0 -1
- package/lib/utils/testUtils.d.ts.map +0 -1
- package/lib/utils/translationQueue.d.ts.map +0 -1
- package/lib/utils/translationQueue.example.d.ts.map +0 -1
- package/lib/videoProcessing.d.ts.map +0 -1
package/lib/actions/images.js
CHANGED
|
@@ -14,6 +14,7 @@ import { COLLECTIONS, EDGES } from '../constants/collections.js';
|
|
|
14
14
|
import { ErrorTypes } from '../types/error.types.js';
|
|
15
15
|
import { logError, logException } from '../utils/analyticsUtils.js';
|
|
16
16
|
import { getDocId, getLimit, selectReactionCountByType, useDb } from '../utils/arangodbUtils.js';
|
|
17
|
+
import { getImageExtension } from '../utils/imageUtils.js';
|
|
17
18
|
import { addItem, deleteItem, getItemBy, getListBy, updateItem } from './crud.js';
|
|
18
19
|
import { getGroupDetails, isGrouped } from './groups.js';
|
|
19
20
|
import { getPersonaRelationshipState } from './personas.js';
|
|
@@ -483,15 +484,7 @@ export const getImageById = (context, imageId)=>{
|
|
|
483
484
|
return getItemBy(context, 'images', filters);
|
|
484
485
|
};
|
|
485
486
|
export const getUserImagePath = (userId, imageId, imageType, dir = 'images')=>{
|
|
486
|
-
|
|
487
|
-
switch(imageType){
|
|
488
|
-
case 'image/png':
|
|
489
|
-
filename = `${imageId}.png`;
|
|
490
|
-
break;
|
|
491
|
-
default:
|
|
492
|
-
filename = `${imageId}.jpg`;
|
|
493
|
-
break;
|
|
494
|
-
}
|
|
487
|
+
const filename = `${imageId}.${getImageExtension(imageType)}`;
|
|
495
488
|
return `users/${userId}/${dir}/${filename}`;
|
|
496
489
|
};
|
|
497
490
|
export const getAppImageUrl = ({ bucket, directory = 'images', imageId, imageType = 'jpg', isThumb = false, type, typeId })=>{
|
|
@@ -939,4 +932,4 @@ export const deleteImage = async (context, imageId)=>{
|
|
|
939
932
|
}
|
|
940
933
|
};
|
|
941
934
|
|
|
942
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0RlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsIFB1dE9iamVjdENvbW1hbmRJbnB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtsb3dlckNhc2VLZXlzfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9vYmplY3RzJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBnbSBmcm9tICdnbSc7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldEdyb3VwRGV0YWlscywgaXNHcm91cGVkfSBmcm9tICcuL2dyb3Vwcy5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZX0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge3MzRGVsZXRlTGlzdCwgczNHZXRTaWduZWRVcmwsIHMzUHV0fSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7UXVlcnlGaWx0ZXJ9IGZyb20gJy4uL3R5cGVzL2FwcHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ltYWdlRWRnZVR5cGUsIEltYWdlSWRlbnRpZnlUeXBlLCBJbWFnZU9wdGlvbnMsIEltYWdlVHlwZSwgSW1hZ2VVcmxEYXRhfSBmcm9tICcuLi90eXBlcy9pbWFnZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcblxuLy8gRGVmaW5lIGludGVyZmFjZSBmb3IgSFRUUCByZXNwb25zZSB3aXRoIGJ1ZmZlciBtZXRob2RcbmludGVyZmFjZSBIdHRwUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG4gIGJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XG59XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnaW1hZ2VzJztcbmNvbnN0IGhhc1JlYWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKTtcbmNvbnN0IGhhc01lZGlhQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX01FRElBKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuZ20uc3ViQ2xhc3Moe2ltYWdlTWFnaWNrOiAnNysnfSk7XG5cbmNvbnN0IE1FRElBX0lURU1fQ09MTEVDVElPTlM6IHJlYWRvbmx5IEFyYW5nb0RiQ29sbGVjdGlvbltdID0gW1xuICBDT0xMRUNUSU9OUy5QRVJTT05BUyxcbiAgQ09MTEVDVElPTlMuVVNFUlMsXG4gIENPTExFQ1RJT05TLlBPU1RTLFxuICBDT0xMRUNUSU9OUy5HUk9VUFNcbl07XG5cbmNvbnN0IGdldE1lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU/OiBBcmFuZ29EYkNvbGxlY3Rpb24pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGRvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKGRvY0lkKSB7XG4gICAgcmV0dXJuIFtkb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYoaXRlbVR5cGUgJiYgTUVESUFfSVRFTV9DT0xMRUNUSU9OUy5pbmNsdWRlcyhpdGVtVHlwZSkpIHtcbiAgICByZXR1cm4gW2Ake2l0ZW1UeXBlfS8ke2l0ZW1LZXl9YF07XG4gIH1cblxuICByZXR1cm4gTUVESUFfSVRFTV9DT0xMRUNUSU9OUy5tYXAoKGNvbGxlY3Rpb24pID0+IGAke2NvbGxlY3Rpb259LyR7aXRlbUtleX1gKTtcbn07XG5cbmNvbnN0IGlzTWlzc2luZ0dyYXBoaWNzQmluYXJ5ID0gKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciB8fCAnJyk7XG4gIHJldHVybiBtZXNzYWdlLmluY2x1ZGVzKCdnbS9jb252ZXJ0IGJpbmFyaWVzIGNhblxcJ3QgYmUgZm91bmQnKTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld0ltYWdlID0gKFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKGltYWdlPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VJbWFnZU9wdGlvbnMgPSAob3B0aW9uczogSW1hZ2VPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgcmV0dXJuIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUoJ2ltYWdlcycsICdpJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICBGT1IgaW1hZ2UsIHIgSU4gSU5CT1VORCBpLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhZ3MnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdGFncyA9IChcbiAgICAgICAgICBGT1IgdCwgcGwgSU4gSU5CT1VORCBpLl9pZCBpc1RhZ2dlZFxuICAgICAgICAgIFJFVFVSTiB0XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoXG4gICAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgaS51c2VySWQgPT0gdS5fa2V5XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3VzZXJzOnVzZXJzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywge3VzZXJJZDogZm9ybWF0VXNlcklkfSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgY3VzdG9tUXVlcmllczogW1xuICAgICAgYExFVCB1c2VyID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHUuX2tleSA9PSBkb2MudXNlcklkIExJTUlUIDEgUkVUVVJOIHUpYFxuICAgIF0sXG4gICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2Zyb20sIHRvLCB1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VDb3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUNvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIGkgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBpLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIGkudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aXRlbUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICBvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IG9wdGlvbnM/Lml0ZW1UeXBlID8gcGFyc2VDaGFyKFN0cmluZyhvcHRpb25zLml0ZW1UeXBlIHx8ICcnKSwgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uIDogdW5kZWZpbmVkO1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCwgZm9ybWF0SXRlbVR5cGUpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICBMRVQgaSA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKGkpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgnaScpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSk7XG5cbiAgICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICAgIGNvbnN0IGlzT3duZXIgPSAhIXNlc3Npb25Vc2VySWQgJiYgISFvd25lclVzZXJJZCAmJiBzZXNzaW9uVXNlcklkID09PSBvd25lclVzZXJJZDtcblxuICAgIGlmKGlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGltYWdlKSA9PiBub3JtYWxpemVJbWFnZVByaXZhY3koaW1hZ2U/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gICAgbGV0IGNhblZpZXdWaXAgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZygobGlzdFswXSBhcyBJbWFnZVR5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZ30pPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgICBjb25zdCBtZWRpYUl0ZW1UeXBlID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30pPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgICBpZihtZWRpYUl0ZW1UeXBlID09PSBDT0xMRUNUSU9OUy5QRVJTT05BUyAmJiBtZWRpYUl0ZW1LZXkpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgICBjYW5WaWV3VmlwID0gYXdhaXQgaGFzU3Vic2NyaXB0aW9uVG9JdGVtKGNvbnRleHQsIG1lZGlhSXRlbUtleSwgQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IGNhblZpZXdJbWFnZShpbWFnZSwgc2Vzc2lvblVzZXJJZCwge2NhblZpZXdGcmllbmRzLCBjYW5WaWV3VmlwLCBpc093bmVyfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2l0ZW1JZCwgb3B0aW9uczogey4uLm9wdGlvbnMsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZX19LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlHcm91cCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGFyYW1zOiB7ZmlsdGVyczogUXVlcnlGaWx0ZXJbXSwgZ3JvdXBJZDogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUdyb3VwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZmlsdGVycywgZ3JvdXBJZCwgZnJvbSwgdG99ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtYXRHcm91cElkID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG5cbiAgZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWV9ID0gZmlsdGVyO1xuICAgICAgbGV0IGZvcm1hdENvbmQgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZvcm1hdENvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGBwLmFkZGVkICR7Zm9ybWF0Q29uZH0gJHtwYXJzZU51bSh2YWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIGdldEdyb3VwRGV0YWlscyhjb250ZXh0LCBmb3JtYXRHcm91cElkKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBpZihncm91cC5wcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBmb3JtYXRHcm91cElkfSk7XG4gICAgICAgIGNvbnN0IGZpbHRlclN0ciA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgIEZPUiBpIElOIEZMQVRURU4oXG4gICAgICAgICAgICBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlclN0cil9XG4gICAgICAgICAgICAgIExFVCBpbWFnZXMgPSAoXG4gICAgICAgICAgICAgICAgRk9SIGksIGUgSU4gT1VUQk9VTkQgcC5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgICAgICAgICBGSUxURVIgZS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICBSRVRVUk4gaW1hZ2VzXG4gICAgICAgICAgKVxuICAgICAgICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgYDtcblxuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7ZmlsdGVycywgZnJvbSwgZ3JvdXBJZCwgdG99LFxuICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzR3JvdXBlZChjb250ZXh0LCBzZXNzaW9uSWQsIGdyb3VwSWQpXG4gICAgICAgIC50aGVuKChncm91cGVkOiBHcm91cFVzZXIpID0+IHtcbiAgICAgICAgICBpZihncm91cGVkLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGdyb3VwZWQuZ3JvdXBJZH0pO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgICAgRk9SIHAgSU4gcG9zdFxuICAgICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyTGlzdCl9XG4gICAgICAgICAgICAgICAgRk9SIGYgSU4gcC5maWxlc1xuICAgICAgICAgICAgICAgICAgRklMVEVSIGYudHlwZSA9PSBcImltYWdlL2pwZWdcIiB8fCBmLnR5cGUgPT0gXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICAgICAgUkVUVVJOIGZcbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRJbWFnZU9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3IudHlwZSA9PSBcImltYWdlc1wiJyxcbiAgICBgUE9TSVRJT04oJHtKU09OLnN0cmluZ2lmeShmb3JtYXRSZWFjdGlvbnMpfSwgTE9XRVIoci5uYW1lKSlgXTtcblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9IGhhc1JlYWN0aW9uXG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGwgSU4gSU5CT1VORCBpLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbC50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIG1lZGlhLml0ZW1LZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJCeS5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0UGVyc29uYURvY0lkID0gKHBlcnNvbmFJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gcGFyc2VBcmFuZ29JZChwZXJzb25hSWQpO1xuXG4gIGlmKHBlcnNvbmFEb2NJZCkge1xuICAgIHJldHVybiBwZXJzb25hRG9jSWQ7XG4gIH1cblxuICBjb25zdCBwZXJzb25hS2V5ID0gcGFyc2VJZChwZXJzb25hSWQpO1xuICByZXR1cm4gcGVyc29uYUtleSA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BlcnNvbmFLZXl9YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJyxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogSW1hZ2VPcHRpb25zXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMnO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJyk7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGdldFBlcnNvbmFEb2NJZChwZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCk7XG4gIGNvbnN0IHJlYWN0aW9uTmFtZXMgPSBBcnJheS5pc0FycmF5KHJlYWN0aW9ucylcbiAgICA/IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29sZWFuKVxuICAgIDogW107XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcblxuICBpZighcGVyc29uYURvY0lkIHx8ICFyZWFjdGlvbk5hbWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGltYWdlLCByZWFjdGlvbiBJTiBPVVRCT1VORCAke3BlcnNvbmFEb2NJZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGxpbmsgSU4gSU5CT1VORCBpbWFnZS5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGxpbmsudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobGluay5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGxpbmsuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7cGVyc29uYXNDb2xsZWN0aW9ufSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICBGSUxURVIgTE9XRVIocmVhY3Rpb24udHlwZSB8fCBcIlwiKSBJTiBbXCJpbWFnZVwiLCBcImltYWdlc1wiXVxuICAgICAgRklMVEVSIFBPU0lUSU9OKCR7cmVhY3Rpb25OYW1lc30sIExPV0VSKHJlYWN0aW9uLm5hbWUgfHwgcmVhY3Rpb24udmFsdWUgfHwgXCJcIikpXG4gICAgICBTT1JUIHJlYWN0aW9uLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKGltYWdlLCB7XG4gICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgIH0pXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcGVyc29uYUlkLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIG9wZXJhdG9yOiAnQU5EJyxcbiAgICBmaWx0ZXJzOiBbe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0SW1hZ2VJZH1dXG4gIH0gYXMgYW55O1xuXG4gIHJldHVybiBnZXRJdGVtQnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckltYWdlUGF0aCA9ICh1c2VySWQ6IHN0cmluZywgaW1hZ2VJZDogc3RyaW5nLCBpbWFnZVR5cGU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAnaW1hZ2VzJyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZSA9IGltYWdlSWQ7XG5cbiAgc3dpdGNoKGltYWdlVHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke2ltYWdlSWR9LnBuZ2A7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmlsZW5hbWUgPSBgJHtpbWFnZUlkfS5qcGdgO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcEltYWdlVXJsID0gKHtcbiAgYnVja2V0LFxuICBkaXJlY3RvcnkgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkXG59OiBJbWFnZVVybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgaWYoaW1hZ2VUeXBlID09PSAncGVyc29uYScpIHtcbiAgICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX2JrLmpwZ2A7XG4gICAgfVxuICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX3doLmpwZ2A7XG4gIH1cblxuICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0IHx8IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIGNvbnN0IGltYWdlTmFtZSA9IGlzVGh1bWIgPyBgJHtpbWFnZUlkfS10aC4ke2ltYWdlVHlwZX1gIDogYCR7aW1hZ2VJZH0uJHtpbWFnZVR5cGUgPT09ICdwZXJzb25hJyB8fCBpbWFnZVR5cGUgPT09ICdvdGhlcicgPyAnanBnJyA6IGltYWdlVHlwZX1gO1xuICBjb25zdCBpbWFnZVVybCA9IENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWA7XG5cbiAgaWYodHlwZSA9PT0gJ2FwcHMnKSB7XG4gICAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7ZGlyZWN0b3J5fS8ke2ltYWdlTmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7dHlwZUlkfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVVybCA9IGFzeW5jICh7XG4gIGJ1Y2tldCxcbiAgaW1hZ2VEaXIgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB1cmxUeXBlID0gJ3B1YmxpYydcbn06IEltYWdlVXJsRGF0YSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBjb25maWd1cmVkSW1hZ2VVcmwgPSBTdHJpbmcoQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgJycpO1xuICBjb25zdCBjb25maWd1cmVkQXBwVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2FwcC51cmwnKSB8fCAnJyk7XG4gIGNvbnN0IHB1YmxpY0Jhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9ib3guJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG4gIGNvbnN0IGRldkJhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rldi4ke2NvbmZpZ3VyZWRBcHBVcmx9YFxuICAgIDogKGNvbmZpZ3VyZWRJbWFnZVVybCB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gKTtcblxuICAvLyBBbHdheXMgdXNlIHNpZ25lZCBVUkxzIGZvciB0aHVtYm5haWxzXG4gIGlmKGlzVGh1bWIpIHtcbiAgICB1cmxUeXBlID0gJ3NpZ25lZCc7XG4gIH1cblxuICBjb25zdCB0aHVtYlN1ZmZpeCA9IGlzVGh1bWIgPyAnLXRoJyA6ICcnO1xuICBjb25zdCBpbWFnZUtleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2ltYWdlRGlyfS8ke2ltYWdlSWR9JHt0aHVtYlN1ZmZpeH0uJHtpbWFnZVR5cGV9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXROYW1lLCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IGltYWdlS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgJHtwdWJsaWNCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGNhc2UgJ2Rldic6IHtcbiAgICAgIHJldHVybiBgJHtkZXZCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNpemVBbmRTYXZlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZycsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3Jlc2l6ZVNhdmVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGltZ1cgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdTaXplJyk7XG4gIGNvbnN0IGltZ1EgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdRdWFsaXR5Jyk7XG4gIGNvbnN0IGZvcm1hdCA9IChmaWxlVHlwZS5zcGxpdCgnLycpKVsxXTtcbiAgbGV0IGltYWdlT3B0aW1pemVkQnVmZmVyOiBCdWZmZXIgPSBidWZmZXI7XG4gIGxldCB0aHVtYk9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgaW1hZ2VJZGVudGl0eTogSW1hZ2VUeXBlID0ge1xuICAgIGZpbGVTaXplOiBidWZmZXIubGVuZ3RoLFxuICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgaW1hZ2VJZFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaW1hZ2VPcHRpbWl6ZWRCdWZmZXIgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBnbShidWZmZXIsICdpbWcnKVxuICAgICAgICAuc2V0Rm9ybWF0KGZvcm1hdClcbiAgICAgICAgLnF1YWxpdHkoaW1nUSlcbiAgICAgICAgLmF1dG9PcmllbnQoKVxuICAgICAgICAucmVzaXplKGltZ1csIGltZ1csICc+JylcbiAgICAgICAgLnN0cmVhbSgoc3RyZWFtRXJyb3I6IEVycm9yLCBzdGRvdXQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZihzdHJlYW1FcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KHN0cmVhbUVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbmV4dEltYWdlQnVmZmVyOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSgnJyk7XG5cbiAgICAgICAgICBzdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbmV4dEltYWdlQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbbmV4dEltYWdlQnVmZmVyLCBkYXRhXSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdGRvdXQub24oJ2VuZCcsICgpID0+IHJlc29sdmUobmV4dEltYWdlQnVmZmVyKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoIWlzTWlzc2luZ0dyYXBoaWNzQmluYXJ5KGVycm9yKSkge1xuICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKCdyZXNpemVBbmRTYXZlSW1hZ2U6OmdtVW5hdmFpbGFibGU6OnVzaW5nT3JpZ2luYWxCdWZmZXInLCB7ZmlsZVR5cGUsIGltYWdlSWR9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2VPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IGltYWdlT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ2ltYWdlcycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dChpbWFnZU9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpbWFnZUlkZW50aXR5ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZ20oaW1hZ2VPcHRpbWl6ZWRCdWZmZXIsICdpbWcnKVxuICAgICAgICAuaWRlbnRpZnkoe2J1ZmZlclN0cmVhbTogdHJ1ZX0sIChlcnJvcjogRXJyb3IsIGltYWdlRGF0YTogSW1hZ2VJZGVudGlmeVR5cGUgPSB7fSkgPT4ge1xuICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZvcm1hdFZhbHVlcyA9IGxvd2VyQ2FzZUtleXMoaW1hZ2VEYXRhKTtcbiAgICAgICAgICBjb25zdCB7bWFrZTogY2FtZXJhTWFrZSwgbW9kZWw6IGNhbWVyYU1vZGVsLCBkYXRldGltZW9yaWdpbmFsOiB0YWtlbn06IEltYWdlSWRlbnRpZnlUeXBlID0gZm9ybWF0VmFsdWVzO1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gZm9ybWF0VmFsdWVzWydjaGFubmVsIHN0YXRpc3RpY3MnXTtcbiAgICAgICAgICBsZXQgY29sb3I6IHN0cmluZztcblxuICAgICAgICAgIGlmKHN0YXRzKSB7XG4gICAgICAgICAgICBsZXQge3JlZCwgZ3JlZW4sIGJsdWUsIG1lYW59ID0gc3RhdHM7XG5cbiAgICAgICAgICAgIGlmKHJlZCkge1xuICAgICAgICAgICAgICBtZWFuID0gcmVkWydzdGFuZGFyZCBkZXZpYXRpb24nXSB8fCByZWQubWVhbjtcbiAgICAgICAgICAgICAgcmVkID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWQgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihncmVlbikge1xuICAgICAgICAgICAgICBtZWFuID0gZ3JlZW5bJ3N0YW5kYXJkIGRldmlhdGlvbiddIHx8IGdyZWVuLm1lYW47XG4gICAgICAgICAgICAgIGdyZWVuID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBncmVlbiA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGJsdWUpIHtcbiAgICAgICAgICAgICAgbWVhbiA9IGJsdWVbJ3N0YW5kYXJkIGRldmlhdGlvbiddIHx8IGJsdWUubWVhbjtcbiAgICAgICAgICAgICAgYmx1ZSA9IG1lYW4gPyArKChtZWFuLnNwbGl0KCcgJylbMF0pLnN1YnN0cmluZygwLCAzKSkgOiAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYmx1ZSA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGJsdWUgfCAoZ3JlZW4gPDwgOCkgfCAocmVkIDw8IDE2KTtcbiAgICAgICAgICAgIGNvbnN0IHJnYkNvbG9yID0gcmdiLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgIGNvbG9yID0gcmdiQ29sb3IgPT09ICcwJyA/ICcwMDAwMDAnIDogcmdiQ29sb3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgJ0pQRUctUXVhbGl0eSc6IHF1YWxpdHksXG4gICAgICAgICAgICBPcmllbnRhdGlvbjogb3JpZW50YXRpb25EYXRhLFxuICAgICAgICAgICAgUmVzb2x1dGlvbjogcmVzb2x1dGlvbkRhdGEsXG4gICAgICAgICAgICBzaXplXG4gICAgICAgICAgfSA9IGltYWdlRGF0YTtcbiAgICAgICAgICBsZXQgcmVzb2x1dGlvbjtcblxuICAgICAgICAgIGlmKHJlc29sdXRpb25EYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBbcmVzb2x1dGlvbk51bWJlciwgcmVzb2x1dGlvblVuaXRdID0gcmVzb2x1dGlvbkRhdGEuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25WYWx1ZSA9IHJlc29sdXRpb25OdW1iZXIuc3BsaXQoJ3gnKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25Vbml0VmFsdWUgPSByZXNvbHV0aW9uVW5pdCA9PT0gJ3BpeGVscy9pbmNoJyA/ICdwcGknIDogJyc7XG4gICAgICAgICAgICByZXNvbHV0aW9uID0gYCR7cmVzb2x1dGlvblZhbHVlfSAke3Jlc29sdXRpb25Vbml0VmFsdWV9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICBjb2xvcixcbiAgICAgICAgICAgIGZpbGVTaXplOiBpbWFnZU9wdGltaXplZEJ1ZmZlci5sZW5ndGgsXG4gICAgICAgICAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplPy5oZWlnaHQgfHwgMCxcbiAgICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgICBtYWtlOiBjYW1lcmFNYWtlLFxuICAgICAgICAgICAgbW9kZWw6IGNhbWVyYU1vZGVsLFxuICAgICAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uRGF0YSA9PT0gJ1Vua25vd24nID8gdW5kZWZpbmVkIDogb3JpZW50YXRpb25EYXRhPy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgcXVhbGl0eTogcXVhbGl0eSA/ICtxdWFsaXR5IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICAgIHRha2VuOiB0YWtlbiA/IERhdGVUaW1lLmZyb21NaWxsaXModGFrZW4pLm1pbGxpc2Vjb25kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2lkdGg6IHNpemU/LndpZHRoIHx8IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aHVtYk9wdGltaXplZEJ1ZmZlciA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRobVcgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1TaXplJyk7XG4gICAgICBjb25zdCB0aG1RID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtUXVhbGl0eScpO1xuXG4gICAgICBnbShpbWFnZU9wdGltaXplZEJ1ZmZlciwgJ2ltZycpXG4gICAgICAgIC5zZXRGb3JtYXQoZm9ybWF0KVxuICAgICAgICAuZ3Jhdml0eSgnQ2VudGVyJylcbiAgICAgICAgLnJlc2l6ZSh0aG1XLCB0aG1XLCAnXicpXG4gICAgICAgIC5leHRlbnQodGhtVywgdGhtVylcbiAgICAgICAgLnF1YWxpdHkodGhtUSlcbiAgICAgICAgLnN0cmVhbSgoc3RyZWFtRXJyb3I6IEVycm9yLCB0aHVtYlN0ZG91dCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmKHN0cmVhbUVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3RyZWFtRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCB0aHVtYkJ1ZmZlcjogQnVmZmVyID0gQnVmZmVyLmZyb20oJycpO1xuXG4gICAgICAgICAgdGh1bWJTdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGh1bWJCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFt0aHVtYkJ1ZmZlciwgZGF0YV0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGh1bWJTdGRvdXQub24oJ2VuZCcsICgpID0+IHJlc29sdmUodGh1bWJCdWZmZXIpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZighaXNNaXNzaW5nR3JhcGhpY3NCaW5hcnkoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oJ3Jlc2l6ZUFuZFNhdmVJbWFnZTo6Z21NZXRhZGF0YVVuYXZhaWxhYmxlOjp1c2luZ09yaWdpbmFsVGh1bWInLCB7ZmlsZVR5cGUsIGltYWdlSWR9KTtcbiAgICB0aHVtYk9wdGltaXplZEJ1ZmZlciA9IGltYWdlT3B0aW1pemVkQnVmZmVyO1xuICAgIGltYWdlSWRlbnRpdHkgPSB7XG4gICAgICBmaWxlU2l6ZTogaW1hZ2VPcHRpbWl6ZWRCdWZmZXIubGVuZ3RoLFxuICAgICAgZmlsZVR5cGU6IGZvcm1hdCxcbiAgICAgIGltYWdlSWRcbiAgICB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0aHVtYk9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQm9keTogdGh1bWJPcHRpbWl6ZWRCdWZmZXIsXG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgICAuLi4oczNPcHRpb25zIHx8IHt9KSxcbiAgICAgIEtleTogZ2V0VXNlckltYWdlUGF0aChzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAndGh1bWJzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KHRodW1iT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW1hZ2VJZGVudGl0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRJbWFnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgZGVzY3JpcHRpb24sIGJ1ZmZlciwgZmlsZVR5cGUsIGl0ZW1JZCwgaXRlbVR5cGUsIHByaXZhY3kgPSAncHVibGljJ30gPSBpbWFnZTtcblxuICByZXR1cm4gcmVzaXplQW5kU2F2ZUltYWdlKGNvbnRleHQsIGltYWdlSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigocmVzaXplZEltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogSW1hZ2VUeXBlID0ge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGltYWdlSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgaW5zZXJ0KVxuICAgICAgICAudGhlbigoc2F2ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiBhZGRJbWFnZUVkZ2UoY29udGV4dCwge1xuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbUlkOiBpdGVtSWQgfHwgc2Vzc2lvbklkLFxuICAgICAgICAgIGl0ZW1UeXBlOiBwYXJzZVN0cmluZyhpdGVtVHlwZSB8fCAndXNlcnMnLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24sXG4gICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICB9KS50aGVuKCgpID0+IHNhdmVkSW1hZ2UpKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFU0laRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2VFZGdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSk6IFByb21pc2U8b2JqZWN0PiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJbWFnZUVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpbWFnZUlkLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGltYWdlRWRnZTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTWVkaWEtaW1hZ2UtJHtpbWFnZUlkfS0ke2l0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGl0ZW1Eb2NJZCA9IGdldERvY0lkKGZvcm1hdEl0ZW1UeXBlLCB7X2tleTogZm9ybWF0SXRlbUlkfSk7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBmaWxlRG9jSWQgPSBgaW1hZ2VzLyR7Zm9ybWF0SW1hZ2VJZH1gO1xuXG4gIGNvbnN0IGVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7XG4gICAgX2Zyb206IGl0ZW1Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmaWxlRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBpdGVtVHlwZSxcbiAgICB0eXBlOiAnaW1hZ2UnXG4gIH07XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGVkZ2UsXG4gICAgICAgICAgZmlsZURvY0lkLFxuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbURvY0lkLFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBpdGVtVHlwZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IGltYWdlQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQsXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIGZpbGVUeXBlLFxuICAgIHByaXZhY3ksXG4gICAgdXJsID0gJydcbiAgfSA9IGltYWdlO1xuXG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBpbWFnZUlkIHx8IGNyZWF0ZUhhc2goYGltYWdlLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgY3VzdG9tUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICBwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcblxuICBpZihiYXNlNjQgfHwgaW1hZ2VCdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSBpbWFnZUJ1ZmZlcjtcblxuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG5cbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGZpbGVUeXBlOiB1cGRhdGVkRmlsZVR5cGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgICAgICAgICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICAgICAgICAgIGl0ZW1JZDogZm9ybWF0SXRlbUlkLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLFxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigocmVzOiBIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFUVVFU1RcbiAgICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IChyZXMgYXMgSHR0cFJlc3BvbnNlKS5idWZmZXIoKSlcbiAgICAgIC50aGVuKChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGZpbGVUeXBlOiBjb250ZW50VHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigoaW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAnaW1hZ2UnfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6ICdmZXRjaF9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZihpbWFnZUlkKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7ZGVzY3JpcHRpb259IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSl9IDoge30pXG4gICAgfTtcblxuICAgIHJldHVybiB1cGRhdGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHVwZGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVJbWFnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGRlbGV0ZUl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZm9ybWF0SW1hZ2VJZCwge1xuICAgICAgY2FzY2FkZTogW0VER0VTLkhBU19NRURJQV0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKCFpbWFnZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIFMzIGZpbGVzXG4gICAgY29uc3Qge19rZXk6IGltYWdlS2V5fSA9IGltYWdlO1xuICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS9pbWFnZXMvJHtpbWFnZUtleX0uanBnYH0sXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS90aHVtYnMvJHtpbWFnZUtleX0uanBnYH1cbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicGFyc2VOdW0iLCJsb3dlckNhc2VLZXlzIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiZ20iLCJEYXRlVGltZSIsIkNvbmZpZyIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJnZXREb2NJZCIsImdldExpbWl0Iiwic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsInVzZURiIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiZ2V0R3JvdXBEZXRhaWxzIiwiaXNHcm91cGVkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiczNEZWxldGVMaXN0IiwiczNHZXRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNSZWFjdGlvbkNvbGxlY3Rpb24iLCJIQVNfUkVBQ1RJT04iLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJwZXJzb25hc0NvbGxlY3Rpb24iLCJQRVJTT05BUyIsInN1YkNsYXNzIiwiaW1hZ2VNYWdpY2siLCJNRURJQV9JVEVNX0NPTExFQ1RJT05TIiwiVVNFUlMiLCJQT1NUUyIsIkdST1VQUyIsImdldE1lZGlhSXRlbURvY0lkcyIsIml0ZW1JZCIsIml0ZW1UeXBlIiwiZG9jSWQiLCJpdGVtS2V5IiwiaW5jbHVkZXMiLCJtYXAiLCJjb2xsZWN0aW9uIiwiaXNNaXNzaW5nR3JhcGhpY3NCaW5hcnkiLCJlcnJvciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsIm5vcm1hbGl6ZUltYWdlUHJpdmFjeSIsInByaXZhY3kiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3SW1hZ2UiLCJpbWFnZSIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJwYXJzZUltYWdlT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJ0eXBlIiwibGltaXQiLCJnZXRJbWFnZU9wdGlvbmFsRmllbGRzIiwiZmllbGRzIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwiZ2V0SW1hZ2VMaXN0QnlVc2VyIiwiY29udGV4dCIsImFjdGlvbiIsImZvcm1hdFVzZXJJZCIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImNhdGNoIiwiY2F0ZWdvcnkiLCJwYXJhbXMiLCJ2YWx1ZSIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0SW1hZ2VDb3VudEJ5SXRlbSIsImRhdGFiYXNlTmFtZSIsIml0ZW1Eb2NJZHMiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY291bnQiLCJnZXRJbWFnZUxpc3RCeUl0ZW0iLCJzZXNzaW9uIiwic2Vzc2lvblVzZXJJZCIsImZvcm1hdEl0ZW1UeXBlIiwidW5kZWZpbmVkIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJqb2luIiwibGVuZ3RoIiwibGlzdCIsImFsbCIsIm93bmVyVXNlcklkIiwiZmlsdGVyIiwibWVkaWFJdGVtS2V5IiwiX21lZGlhSXRlbUtleSIsIm1lZGlhSXRlbVR5cGUiLCJfbWVkaWFJdGVtVHlwZSIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwiZ2V0SW1hZ2VMaXN0QnlHcm91cCIsInNlc3Npb25JZCIsImZpbHRlcnMiLCJncm91cElkIiwiZm9ybWF0R3JvdXBJZCIsImNvbmRpdGlvbmFsIiwibmFtZSIsImZvcm1hdENvbmQiLCJncm91cCIsImZpbHRlclN0ciIsImdyb3VwZWQiLCJpc1ZhbGlkIiwiZmlsdGVyTGlzdCIsImdldEltYWdlTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lIiwiZmlsdGVyQnkiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0UGVyc29uYURvY0lkIiwicGVyc29uYUlkIiwicGVyc29uYURvY0lkIiwicGVyc29uYUtleSIsImdldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyIsInNlc3Npb25QZXJzb25hSWQiLCJyZWFjdGlvbk5hbWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiQm9vbGVhbiIsImdldEltYWdlQnlJZCIsImltYWdlSWQiLCJmb3JtYXRJbWFnZUlkIiwib3BlcmF0b3IiLCJnZXRVc2VySW1hZ2VQYXRoIiwiaW1hZ2VUeXBlIiwiZGlyIiwiZmlsZW5hbWUiLCJnZXRBcHBJbWFnZVVybCIsImJ1Y2tldCIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlSWQiLCJidWNrZXROYW1lIiwiaW1hZ2VOYW1lIiwiaW1hZ2VVcmwiLCJnZXRJbWFnZVVybCIsImltYWdlRGlyIiwidXJsVHlwZSIsImNvbmZpZ3VyZWRJbWFnZVVybCIsImNvbmZpZ3VyZWRBcHBVcmwiLCJwdWJsaWNCYXNlVXJsIiwiZGV2QmFzZVVybCIsInRodW1iU3VmZml4IiwiaW1hZ2VLZXkiLCJCdWNrZXQiLCJFeHBpcmVzIiwiS2V5IiwicmVzaXplQW5kU2F2ZUltYWdlIiwiYnVmZmVyIiwiZmlsZVR5cGUiLCJzM09wdGlvbnMiLCJpbWdXIiwiaW1nUSIsImZvcm1hdCIsInNwbGl0IiwiaW1hZ2VPcHRpbWl6ZWRCdWZmZXIiLCJ0aHVtYk9wdGltaXplZEJ1ZmZlciIsImltYWdlSWRlbnRpdHkiLCJmaWxlU2l6ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2V0Rm9ybWF0IiwicXVhbGl0eSIsImF1dG9PcmllbnQiLCJyZXNpemUiLCJzdHJlYW0iLCJzdHJlYW1FcnJvciIsInN0ZG91dCIsIm5leHRJbWFnZUJ1ZmZlciIsIkJ1ZmZlciIsIm9uIiwiZGF0YSIsImNvbmNhdCIsIklNQUdFX1NBVkUiLCJjb25zb2xlIiwid2FybiIsImltYWdlT2JqIiwiQm9keSIsIkNvbnRlbnRUeXBlIiwiaWRlbnRpZnkiLCJidWZmZXJTdHJlYW0iLCJpbWFnZURhdGEiLCJmb3JtYXRWYWx1ZXMiLCJtYWtlIiwiY2FtZXJhTWFrZSIsIm1vZGVsIiwiY2FtZXJhTW9kZWwiLCJkYXRldGltZW9yaWdpbmFsIiwidGFrZW4iLCJzdGF0cyIsImNvbG9yIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwibWVhbiIsInN1YnN0cmluZyIsInJnYiIsInJnYkNvbG9yIiwidG9TdHJpbmciLCJPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uRGF0YSIsIlJlc29sdXRpb24iLCJyZXNvbHV0aW9uRGF0YSIsInNpemUiLCJyZXNvbHV0aW9uIiwicmVzb2x1dGlvbk51bWJlciIsInJlc29sdXRpb25Vbml0IiwicmVzb2x1dGlvblZhbHVlIiwicmVzb2x1dGlvblVuaXRWYWx1ZSIsImhlaWdodCIsIm9yaWVudGF0aW9uIiwiZnJvbU1pbGxpcyIsIm1pbGxpc2Vjb25kIiwid2lkdGgiLCJ0aG1XIiwidGhtUSIsImdyYXZpdHkiLCJleHRlbnQiLCJ0aHVtYlN0ZG91dCIsInRodW1iQnVmZmVyIiwidGh1bWJPYmoiLCJhZGRJbWFnZSIsImRlc2NyaXB0aW9uIiwicmVzaXplZEltYWdlIiwiaW5zZXJ0IiwiX2tleSIsInNhdmVkSW1hZ2UiLCJhZGRJbWFnZUVkZ2UiLCJJTUFHRV9SRVNJWkUiLCJpbWFnZUVkZ2UiLCJub3ciLCJEYXRlIiwiZWRnZUlkIiwiZm9ybWF0SXRlbUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZUltYWdlIiwiYmFzZTY0IiwiaW1hZ2VCdWZmZXIiLCJ1cmwiLCJjdXN0b21QYXJhbXMiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwidXBkYXRlZEZpbGVUeXBlIiwiZmlsZVR5cGVGcm9tQnVmZmVyIiwibWltZSIsImltZ1BhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJkZWxldGVJbWFnZSIsImNhc2NhZGUiLCJvd25lcnNoaXAiLCJEZWxldGUiLCJPYmplY3RzIiwiUXVpZXQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxH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
|
|
935
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0RlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsIFB1dE9iamVjdENvbW1hbmRJbnB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtsb3dlckNhc2VLZXlzfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9vYmplY3RzJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBnbSBmcm9tICdnbSc7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0SW1hZ2VFeHRlbnNpb259IGZyb20gJy4uL3V0aWxzL2ltYWdlVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0R3JvdXBEZXRhaWxzLCBpc0dyb3VwZWR9IGZyb20gJy4vZ3JvdXBzLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7czNEZWxldGVMaXN0LCBzM0dldFNpZ25lZFVybCwgczNQdXR9IGZyb20gJy4vczMuanMnO1xuaW1wb3J0IHtoYXNTdWJzY3JpcHRpb25Ub0l0ZW19IGZyb20gJy4vc3Vic2NyaXB0aW9ucy5qcyc7XG5cbmltcG9ydCB0eXBlIHtRdWVyeUZpbHRlcn0gZnJvbSAnLi4vdHlwZXMvYXBwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7R3JvdXBUeXBlLCBHcm91cFVzZXJ9IGZyb20gJy4uL3R5cGVzL2dyb3Vwcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VFZGdlVHlwZSwgSW1hZ2VJZGVudGlmeVR5cGUsIEltYWdlT3B0aW9ucywgSW1hZ2VUeXBlLCBJbWFnZVVybERhdGF9IGZyb20gJy4uL3R5cGVzL2ltYWdlcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuXG4vLyBEZWZpbmUgaW50ZXJmYWNlIGZvciBIVFRQIHJlc3BvbnNlIHdpdGggYnVmZmVyIG1ldGhvZFxuaW50ZXJmYWNlIEh0dHBSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHtcbiAgYnVmZmVyKCk6IFByb21pc2U8QnVmZmVyPjtcbn1cblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdpbWFnZXMnO1xuY29uc3QgaGFzUmVhY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfUkVBQ1RJT04pO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgcGVyc29uYXNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG5nbS5zdWJDbGFzcyh7aW1hZ2VNYWdpY2s6ICc3Kyd9KTtcblxuY29uc3QgTUVESUFfSVRFTV9DT0xMRUNUSU9OUzogcmVhZG9ubHkgQXJhbmdvRGJDb2xsZWN0aW9uW10gPSBbXG4gIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgQ09MTEVDVElPTlMuUE9TVFMsXG4gIENPTExFQ1RJT05TLkdST1VQU1xuXTtcblxuY29uc3QgZ2V0TWVkaWFJdGVtRG9jSWRzID0gKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbik6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgZG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYoZG9jSWQpIHtcbiAgICByZXR1cm4gW2RvY0lkXTtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1LZXkgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgaWYoIWl0ZW1LZXkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZihpdGVtVHlwZSAmJiBNRURJQV9JVEVNX0NPTExFQ1RJT05TLmluY2x1ZGVzKGl0ZW1UeXBlKSkge1xuICAgIHJldHVybiBbYCR7aXRlbVR5cGV9LyR7aXRlbUtleX1gXTtcbiAgfVxuXG4gIHJldHVybiBNRURJQV9JVEVNX0NPTExFQ1RJT05TLm1hcCgoY29sbGVjdGlvbikgPT4gYCR7Y29sbGVjdGlvbn0vJHtpdGVtS2V5fWApO1xufTtcblxuY29uc3QgaXNNaXNzaW5nR3JhcGhpY3NCaW5hcnkgPSAoZXJyb3I6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yIHx8ICcnKTtcbiAgcmV0dXJuIG1lc3NhZ2UuaW5jbHVkZXMoJ2dtL2NvbnZlcnQgYmluYXJpZXMgY2FuXFwndCBiZSBmb3VuZCcpO1xufTtcblxuY29uc3Qgbm9ybWFsaXplSW1hZ2VQcml2YWN5ID0gKHByaXZhY3k6IHVua25vd24pOiAnZnJpZW5kcycgfCAncHJpdmF0ZScgfCAncHVibGljJyB8ICd2aXAnID0+IHtcbiAgc3dpdGNoKFN0cmluZyhwcml2YWN5IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuICdmcmllbmRzJztcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiAncHJpdmF0ZSc7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiAndmlwJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdwdWJsaWMnO1xuICB9XG59O1xuXG5jb25zdCBjYW5WaWV3SW1hZ2UgPSAoXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHZpZXdlclVzZXJJZDogc3RyaW5nLFxuICBhY2Nlc3M6IHtcbiAgICByZWFkb25seSBjYW5WaWV3RnJpZW5kczogYm9vbGVhbjtcbiAgICByZWFkb25seSBjYW5WaWV3VmlwOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGlzT3duZXI6IGJvb2xlYW47XG4gIH1cbikgPT4ge1xuICBjb25zdCBwcml2YWN5ID0gbm9ybWFsaXplSW1hZ2VQcml2YWN5KGltYWdlPy5wcml2YWN5KTtcblxuICBpZihhY2Nlc3MuaXNPd25lciB8fCBTdHJpbmcoaW1hZ2U/LnVzZXJJZCB8fCAnJykgPT09IHZpZXdlclVzZXJJZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3dpdGNoKHByaXZhY3kpIHtcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld0ZyaWVuZHM7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld1ZpcDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUltYWdlT3B0aW9ucyA9IChvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZU9wdGlvbmFsRmllbGRzID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnaW1hZ2VzJywgJ2knLCBmaWVsZCwgc2VsZWN0cyk7XG4gICAgfVxuXG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBpbWFnZSwgciBJTiBJTkJPVU5EIGkuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB0YWdzID0gKFxuICAgICAgICAgIEZPUiB0LCBwbCBJTiBJTkJPVU5EIGkuX2lkIGlzVGFnZ2VkXG4gICAgICAgICAgUkVUVVJOIHRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChcbiAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgIEZJTFRFUiBpLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgIH1cbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyID0gMCxcbiAgdG86IG51bWJlciA9IDMwXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeVVzZXInO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCB7dXNlcklkOiBmb3JtYXRVc2VySWR9LCB7XG4gICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnREVTQyd9XSxcbiAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICBjdXN0b21RdWVyaWVzOiBbXG4gICAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gICAgXSxcbiAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7ZnJvbSwgdG8sIHVzZXJJZH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUNvdW50QnlJdGVtID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlQ291bnRCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRNZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgaSBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIGkuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgaS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpdGVtSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEltYWdlT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlID0gb3B0aW9ucz8uaXRlbVR5cGUgPyBwYXJzZUNoYXIoU3RyaW5nKG9wdGlvbnMuaXRlbVR5cGUgfHwgJycpLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRNZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkLCBmb3JtYXRJdGVtVHlwZSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcImltYWdlXCJcbiAgICAgIExFVCBpID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwoaSlcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIGkuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcblxuICAgIGNvbnN0IG93bmVyVXNlcklkID0gU3RyaW5nKGxpc3RbMF0/LnVzZXJJZCB8fCAnJyk7XG4gICAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gICAgaWYoaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICBsZXQgY2FuVmlld0ZyaWVuZHMgPSBmYWxzZTtcbiAgICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWVkaWFJdGVtS2V5ID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nfSk/Ll9tZWRpYUl0ZW1LZXkgfHwgJycpO1xuICAgIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcoKGxpc3RbMF0gYXMgSW1hZ2VUeXBlICYge19tZWRpYUl0ZW1UeXBlPzogc3RyaW5nfSk/Ll9tZWRpYUl0ZW1UeXBlIHx8ICcnKTtcblxuICAgIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgICBjYW5WaWV3RnJpZW5kcyA9ICEhcmVsYXRpb25zaGlwPy5pc0ZyaWVuZDtcbiAgICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChpbWFnZSkgPT4gY2FuVmlld0ltYWdlKGltYWdlLCBzZXNzaW9uVXNlcklkLCB7Y2FuVmlld0ZyaWVuZHMsIGNhblZpZXdWaXAsIGlzT3duZXJ9KSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7aXRlbUlkLCBvcHRpb25zOiB7Li4ub3B0aW9ucywgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlfX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUdyb3VwID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwYXJhbXM6IHtmaWx0ZXJzOiBRdWVyeUZpbHRlcltdLCBncm91cElkOiBzdHJpbmcsIGZyb206IG51bWJlciwgdG86IG51bWJlcn1cbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlc0J5R3JvdXAnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtmaWx0ZXJzLCBncm91cElkLCBmcm9tLCB0b30gPSBwYXJhbXM7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICBmaWx0ZXJzXG4gICAgLm1hcCgoZmlsdGVyOiBRdWVyeUZpbHRlcikgPT4ge1xuICAgICAgY29uc3Qge2NvbmRpdGlvbmFsLCBuYW1lLCB2YWx1ZX0gPSBmaWx0ZXI7XG4gICAgICBsZXQgZm9ybWF0Q29uZCA9IGNvbmRpdGlvbmFsO1xuXG4gICAgICBpZihjb25kaXRpb25hbCAhPT0gJz49JyAmJiBjb25kaXRpb25hbCAhPT0gJzw9JyAmJiBjb25kaXRpb25hbCAhPT0gJz4nICYmIGNvbmRpdGlvbmFsICE9PSAnPCcpIHtcbiAgICAgICAgZm9ybWF0Q29uZCA9ICc9PSc7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICByZXR1cm4gYHAuYWRkZWQgJHtmb3JtYXRDb25kfSAke3BhcnNlTnVtKHZhbHVlKX1gO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gZ2V0R3JvdXBEZXRhaWxzKGNvbnRleHQsIGZvcm1hdEdyb3VwSWQpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIGlmKGdyb3VwLnByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGZvcm1hdEdyb3VwSWR9KTtcbiAgICAgICAgY29uc3QgZmlsdGVyU3RyID0gZmlsdGVycy5qb2luKCcgJiYgJyk7XG4gICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgRk9SIGkgSU4gRkxBVFRFTihcbiAgICAgICAgICAgIEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyU3RyKX1cbiAgICAgICAgICAgICAgTEVUIGltYWdlcyA9IChcbiAgICAgICAgICAgICAgICBGT1IgaSwgZSBJTiBPVVRCT1VORCBwLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICAgIFJFVFVSTiBpbWFnZXNcbiAgICAgICAgICApXG4gICAgICAgICAgICBTT1JUIGkuYWRkZWQgREVTQ1xuICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICBgO1xuXG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNHcm91cGVkKGNvbnRleHQsIHNlc3Npb25JZCwgZ3JvdXBJZClcbiAgICAgICAgLnRoZW4oKGdyb3VwZWQ6IEdyb3VwVXNlcikgPT4ge1xuICAgICAgICAgIGlmKGdyb3VwZWQuaXNWYWxpZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtjb25kaXRpb25hbDogJz09JywgbmFtZTogJ2dyb3VwSWQnLCB2YWx1ZTogZ3JvdXBlZC5ncm91cElkfSk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJMaXN0ID0gZmlsdGVycy5qb2luKCcgJiYgJyk7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgICAgICBGT1IgcCBJTiBwb3N0XG4gICAgICAgICAgICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJMaXN0KX1cbiAgICAgICAgICAgICAgICBGT1IgZiBJTiBwLmZpbGVzXG4gICAgICAgICAgICAgICAgICBGSUxURVIgZi50eXBlID09IFwiaW1hZ2UvanBlZ1wiIHx8IGYudHlwZSA9PSBcImltYWdlL3BuZ1wiXG4gICAgICAgICAgICAgICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgICAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICAgICAgICBSRVRVUk4gZlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge2ZpbHRlcnMsIGZyb20sIGdyb3VwSWQsIHRvfSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IEltYWdlT3B0aW9uc1xuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwiaW1hZ2VzXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBdO1xuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaSwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIGkuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShpLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ2knKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXRQZXJzb25hRG9jSWQgPSAocGVyc29uYUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBwYXJzZUFyYW5nb0lkKHBlcnNvbmFJZCk7XG5cbiAgaWYocGVyc29uYURvY0lkKSB7XG4gICAgcmV0dXJuIHBlcnNvbmFEb2NJZDtcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmFLZXkgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG4gIHJldHVybiBwZXJzb25hS2V5ID8gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7cGVyc29uYUtleX1gIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hSWQ6IHN0cmluZyA9ICcnLFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyc7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKTtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gZ2V0UGVyc29uYURvY0lkKHBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkKTtcbiAgY29uc3QgcmVhY3Rpb25OYW1lcyA9IEFycmF5LmlzQXJyYXkocmVhY3Rpb25zKVxuICAgID8gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikudG9Mb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gIGlmKCFwZXJzb25hRG9jSWQgfHwgIXJlYWN0aW9uTmFtZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaW1hZ2UsIHJlYWN0aW9uIElOIE9VVEJPVU5EICR7cGVyc29uYURvY0lkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbGluayBJTiBJTkJPVU5EIGltYWdlLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbGluay50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbGluay5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGxpbmsuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtwZXJzb25hc0NvbGxlY3Rpb259LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgIEZJTFRFUiBMT1dFUihyZWFjdGlvbi50eXBlIHx8IFwiXCIpIElOIFtcImltYWdlXCIsIFwiaW1hZ2VzXCJdXG4gICAgICBGSUxURVIgUE9TSVRJT04oJHtyZWFjdGlvbk5hbWVzfSwgTE9XRVIocmVhY3Rpb24ubmFtZSB8fCByZWFjdGlvbi52YWx1ZSB8fCBcIlwiKSlcbiAgICAgIFNPUlQgcmVhY3Rpb24uYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoaW1hZ2UsIHtcbiAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgfSlcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCBwZXJzb25hSWQsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyR3JvdXAgPSB7XG4gICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgIGZpbHRlcnM6IFt7ZmllbGQ6ICdfa2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRJbWFnZUlkfV1cbiAgfSBhcyBhbnk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmaWx0ZXJzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VySW1hZ2VQYXRoID0gKHVzZXJJZDogc3RyaW5nLCBpbWFnZUlkOiBzdHJpbmcsIGltYWdlVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICdpbWFnZXMnKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBgJHtpbWFnZUlkfS4ke2dldEltYWdlRXh0ZW5zaW9uKGltYWdlVHlwZSl9YDtcblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcEltYWdlVXJsID0gKHtcbiAgYnVja2V0LFxuICBkaXJlY3RvcnkgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkXG59OiBJbWFnZVVybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgaWYoaW1hZ2VUeXBlID09PSAncGVyc29uYScpIHtcbiAgICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX2JrLmpwZ2A7XG4gICAgfVxuICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX3doLmpwZ2A7XG4gIH1cblxuICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0IHx8IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIGNvbnN0IGltYWdlTmFtZSA9IGlzVGh1bWIgPyBgJHtpbWFnZUlkfS10aC4ke2ltYWdlVHlwZX1gIDogYCR7aW1hZ2VJZH0uJHtpbWFnZVR5cGUgPT09ICdwZXJzb25hJyB8fCBpbWFnZVR5cGUgPT09ICdvdGhlcicgPyAnanBnJyA6IGltYWdlVHlwZX1gO1xuICBjb25zdCBpbWFnZVVybCA9IENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWA7XG5cbiAgaWYodHlwZSA9PT0gJ2FwcHMnKSB7XG4gICAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7ZGlyZWN0b3J5fS8ke2ltYWdlTmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7dHlwZUlkfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVVybCA9IGFzeW5jICh7XG4gIGJ1Y2tldCxcbiAgaW1hZ2VEaXIgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB1cmxUeXBlID0gJ3B1YmxpYydcbn06IEltYWdlVXJsRGF0YSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBjb25maWd1cmVkSW1hZ2VVcmwgPSBTdHJpbmcoQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgJycpO1xuICBjb25zdCBjb25maWd1cmVkQXBwVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2FwcC51cmwnKSB8fCAnJyk7XG4gIGNvbnN0IHB1YmxpY0Jhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9ib3guJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG4gIGNvbnN0IGRldkJhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rldi4ke2NvbmZpZ3VyZWRBcHBVcmx9YFxuICAgIDogKGNvbmZpZ3VyZWRJbWFnZVVybCB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gKTtcblxuICAvLyBBbHdheXMgdXNlIHNpZ25lZCBVUkxzIGZvciB0aHVtYm5haWxzXG4gIGlmKGlzVGh1bWIpIHtcbiAgICB1cmxUeXBlID0gJ3NpZ25lZCc7XG4gIH1cblxuICBjb25zdCB0aHVtYlN1ZmZpeCA9IGlzVGh1bWIgPyAnLXRoJyA6ICcnO1xuICBjb25zdCBpbWFnZUtleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2ltYWdlRGlyfS8ke2ltYWdlSWR9JHt0aHVtYlN1ZmZpeH0uJHtpbWFnZVR5cGV9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXROYW1lLCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IGltYWdlS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgJHtwdWJsaWNCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGNhc2UgJ2Rldic6IHtcbiAgICAgIHJldHVybiBgJHtkZXZCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNpemVBbmRTYXZlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZycsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3Jlc2l6ZVNhdmVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGltZ1cgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdTaXplJyk7XG4gIGNvbnN0IGltZ1EgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdRdWFsaXR5Jyk7XG4gIGNvbnN0IGZvcm1hdCA9IChmaWxlVHlwZS5zcGxpdCgnLycpKVsxXTtcbiAgbGV0IGltYWdlT3B0aW1pemVkQnVmZmVyOiBCdWZmZXIgPSBidWZmZXI7XG4gIGxldCB0aHVtYk9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgaW1hZ2VJZGVudGl0eTogSW1hZ2VUeXBlID0ge1xuICAgIGZpbGVTaXplOiBidWZmZXIubGVuZ3RoLFxuICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgaW1hZ2VJZFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaW1hZ2VPcHRpbWl6ZWRCdWZmZXIgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBnbShidWZmZXIsICdpbWcnKVxuICAgICAgICAuc2V0Rm9ybWF0KGZvcm1hdClcbiAgICAgICAgLnF1YWxpdHkoaW1nUSlcbiAgICAgICAgLmF1dG9PcmllbnQoKVxuICAgICAgICAucmVzaXplKGltZ1csIGltZ1csICc+JylcbiAgICAgICAgLnN0cmVhbSgoc3RyZWFtRXJyb3I6IEVycm9yLCBzdGRvdXQpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZihzdHJlYW1FcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KHN0cmVhbUVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbmV4dEltYWdlQnVmZmVyOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSgnJyk7XG5cbiAgICAgICAgICBzdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbmV4dEltYWdlQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbbmV4dEltYWdlQnVmZmVyLCBkYXRhXSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdGRvdXQub24oJ2VuZCcsICgpID0+IHJlc29sdmUobmV4dEltYWdlQnVmZmVyKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoIWlzTWlzc2luZ0dyYXBoaWNzQmluYXJ5KGVycm9yKSkge1xuICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKCdyZXNpemVBbmRTYXZlSW1hZ2U6OmdtVW5hdmFpbGFibGU6OnVzaW5nT3JpZ2luYWxCdWZmZXInLCB7ZmlsZVR5cGUsIGltYWdlSWR9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2VPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IGltYWdlT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ2ltYWdlcycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dChpbWFnZU9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpbWFnZUlkZW50aXR5ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZ20oaW1hZ2VPcHRpbWl6ZWRCdWZmZXIsICdpbWcnKVxuICAgICAgICAuaWRlbnRpZnkoe2J1ZmZlclN0cmVhbTogdHJ1ZX0sIChlcnJvcjogRXJyb3IsIGltYWdlRGF0YTogSW1hZ2VJZGVudGlmeVR5cGUgPSB7fSkgPT4ge1xuICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZvcm1hdFZhbHVlcyA9IGxvd2VyQ2FzZUtleXMoaW1hZ2VEYXRhKTtcbiAgICAgICAgICBjb25zdCB7bWFrZTogY2FtZXJhTWFrZSwgbW9kZWw6IGNhbWVyYU1vZGVsLCBkYXRldGltZW9yaWdpbmFsOiB0YWtlbn06IEltYWdlSWRlbnRpZnlUeXBlID0gZm9ybWF0VmFsdWVzO1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gZm9ybWF0VmFsdWVzWydjaGFubmVsIHN0YXRpc3RpY3MnXTtcbiAgICAgICAgICBsZXQgY29sb3I6IHN0cmluZztcblxuICAgICAgICAgIGlmKHN0YXRzKSB7XG4gICAgICAgICAgICBsZXQge3JlZCwgZ3JlZW4sIGJsdWUsIG1lYW59ID0gc3RhdHM7XG5cbiAgICAgICAgICAgIGlmKHJlZCkge1xuICAgICAgICAgICAgICBtZWFuID0gcmVkWydzdGFuZGFyZCBkZXZpYXRpb24nXSB8fCByZWQubWVhbjtcbiAgICAgICAgICAgICAgcmVkID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWQgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihncmVlbikge1xuICAgICAgICAgICAgICBtZWFuID0gZ3JlZW5bJ3N0YW5kYXJkIGRldmlhdGlvbiddIHx8IGdyZWVuLm1lYW47XG4gICAgICAgICAgICAgIGdyZWVuID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBncmVlbiA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGJsdWUpIHtcbiAgICAgICAgICAgICAgbWVhbiA9IGJsdWVbJ3N0YW5kYXJkIGRldmlhdGlvbiddIHx8IGJsdWUubWVhbjtcbiAgICAgICAgICAgICAgYmx1ZSA9IG1lYW4gPyArKChtZWFuLnNwbGl0KCcgJylbMF0pLnN1YnN0cmluZygwLCAzKSkgOiAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYmx1ZSA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJnYiA9IGJsdWUgfCAoZ3JlZW4gPDwgOCkgfCAocmVkIDw8IDE2KTtcbiAgICAgICAgICAgIGNvbnN0IHJnYkNvbG9yID0gcmdiLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgIGNvbG9yID0gcmdiQ29sb3IgPT09ICcwJyA/ICcwMDAwMDAnIDogcmdiQ29sb3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgJ0pQRUctUXVhbGl0eSc6IHF1YWxpdHksXG4gICAgICAgICAgICBPcmllbnRhdGlvbjogb3JpZW50YXRpb25EYXRhLFxuICAgICAgICAgICAgUmVzb2x1dGlvbjogcmVzb2x1dGlvbkRhdGEsXG4gICAgICAgICAgICBzaXplXG4gICAgICAgICAgfSA9IGltYWdlRGF0YTtcbiAgICAgICAgICBsZXQgcmVzb2x1dGlvbjtcblxuICAgICAgICAgIGlmKHJlc29sdXRpb25EYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBbcmVzb2x1dGlvbk51bWJlciwgcmVzb2x1dGlvblVuaXRdID0gcmVzb2x1dGlvbkRhdGEuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25WYWx1ZSA9IHJlc29sdXRpb25OdW1iZXIuc3BsaXQoJ3gnKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25Vbml0VmFsdWUgPSByZXNvbHV0aW9uVW5pdCA9PT0gJ3BpeGVscy9pbmNoJyA/ICdwcGknIDogJyc7XG4gICAgICAgICAgICByZXNvbHV0aW9uID0gYCR7cmVzb2x1dGlvblZhbHVlfSAke3Jlc29sdXRpb25Vbml0VmFsdWV9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICBjb2xvcixcbiAgICAgICAgICAgIGZpbGVTaXplOiBpbWFnZU9wdGltaXplZEJ1ZmZlci5sZW5ndGgsXG4gICAgICAgICAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplPy5oZWlnaHQgfHwgMCxcbiAgICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgICBtYWtlOiBjYW1lcmFNYWtlLFxuICAgICAgICAgICAgbW9kZWw6IGNhbWVyYU1vZGVsLFxuICAgICAgICAgICAgb3JpZW50YXRpb246IG9yaWVudGF0aW9uRGF0YSA9PT0gJ1Vua25vd24nID8gdW5kZWZpbmVkIDogb3JpZW50YXRpb25EYXRhPy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgcXVhbGl0eTogcXVhbGl0eSA/ICtxdWFsaXR5IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICAgIHRha2VuOiB0YWtlbiA/IERhdGVUaW1lLmZyb21NaWxsaXModGFrZW4pLm1pbGxpc2Vjb25kIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2lkdGg6IHNpemU/LndpZHRoIHx8IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aHVtYk9wdGltaXplZEJ1ZmZlciA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRobVcgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1TaXplJyk7XG4gICAgICBjb25zdCB0aG1RID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtUXVhbGl0eScpO1xuXG4gICAgICBnbShpbWFnZU9wdGltaXplZEJ1ZmZlciwgJ2ltZycpXG4gICAgICAgIC5zZXRGb3JtYXQoZm9ybWF0KVxuICAgICAgICAuZ3Jhdml0eSgnQ2VudGVyJylcbiAgICAgICAgLnJlc2l6ZSh0aG1XLCB0aG1XLCAnXicpXG4gICAgICAgIC5leHRlbnQodGhtVywgdGhtVylcbiAgICAgICAgLnF1YWxpdHkodGhtUSlcbiAgICAgICAgLnN0cmVhbSgoc3RyZWFtRXJyb3I6IEVycm9yLCB0aHVtYlN0ZG91dCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmKHN0cmVhbUVycm9yKSB7XG4gICAgICAgICAgICByZWplY3Qoc3RyZWFtRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCB0aHVtYkJ1ZmZlcjogQnVmZmVyID0gQnVmZmVyLmZyb20oJycpO1xuXG4gICAgICAgICAgdGh1bWJTdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGh1bWJCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFt0aHVtYkJ1ZmZlciwgZGF0YV0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGh1bWJTdGRvdXQub24oJ2VuZCcsICgpID0+IHJlc29sdmUodGh1bWJCdWZmZXIpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZighaXNNaXNzaW5nR3JhcGhpY3NCaW5hcnkoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oJ3Jlc2l6ZUFuZFNhdmVJbWFnZTo6Z21NZXRhZGF0YVVuYXZhaWxhYmxlOjp1c2luZ09yaWdpbmFsVGh1bWInLCB7ZmlsZVR5cGUsIGltYWdlSWR9KTtcbiAgICB0aHVtYk9wdGltaXplZEJ1ZmZlciA9IGltYWdlT3B0aW1pemVkQnVmZmVyO1xuICAgIGltYWdlSWRlbnRpdHkgPSB7XG4gICAgICBmaWxlU2l6ZTogaW1hZ2VPcHRpbWl6ZWRCdWZmZXIubGVuZ3RoLFxuICAgICAgZmlsZVR5cGU6IGZvcm1hdCxcbiAgICAgIGltYWdlSWRcbiAgICB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0aHVtYk9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQm9keTogdGh1bWJPcHRpbWl6ZWRCdWZmZXIsXG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgICAuLi4oczNPcHRpb25zIHx8IHt9KSxcbiAgICAgIEtleTogZ2V0VXNlckltYWdlUGF0aChzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAndGh1bWJzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KHRodW1iT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW1hZ2VJZGVudGl0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRJbWFnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgZGVzY3JpcHRpb24sIGJ1ZmZlciwgZmlsZVR5cGUsIGl0ZW1JZCwgaXRlbVR5cGUsIHByaXZhY3kgPSAncHVibGljJ30gPSBpbWFnZTtcblxuICByZXR1cm4gcmVzaXplQW5kU2F2ZUltYWdlKGNvbnRleHQsIGltYWdlSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigocmVzaXplZEltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogSW1hZ2VUeXBlID0ge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGltYWdlSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgaW5zZXJ0KVxuICAgICAgICAudGhlbigoc2F2ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiBhZGRJbWFnZUVkZ2UoY29udGV4dCwge1xuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbUlkOiBpdGVtSWQgfHwgc2Vzc2lvbklkLFxuICAgICAgICAgIGl0ZW1UeXBlOiBwYXJzZVN0cmluZyhpdGVtVHlwZSB8fCAndXNlcnMnLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24sXG4gICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICB9KS50aGVuKCgpID0+IHNhdmVkSW1hZ2UpKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFU0laRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2VFZGdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSk6IFByb21pc2U8b2JqZWN0PiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJbWFnZUVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpbWFnZUlkLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGltYWdlRWRnZTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTWVkaWEtaW1hZ2UtJHtpbWFnZUlkfS0ke2l0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGl0ZW1Eb2NJZCA9IGdldERvY0lkKGZvcm1hdEl0ZW1UeXBlLCB7X2tleTogZm9ybWF0SXRlbUlkfSk7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBmaWxlRG9jSWQgPSBgaW1hZ2VzLyR7Zm9ybWF0SW1hZ2VJZH1gO1xuXG4gIGNvbnN0IGVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7XG4gICAgX2Zyb206IGl0ZW1Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmaWxlRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBpdGVtVHlwZSxcbiAgICB0eXBlOiAnaW1hZ2UnXG4gIH07XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGVkZ2UsXG4gICAgICAgICAgZmlsZURvY0lkLFxuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbURvY0lkLFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBpdGVtVHlwZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IGltYWdlQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQsXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIGZpbGVUeXBlLFxuICAgIHByaXZhY3ksXG4gICAgdXJsID0gJydcbiAgfSA9IGltYWdlO1xuXG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBpbWFnZUlkIHx8IGNyZWF0ZUhhc2goYGltYWdlLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgY3VzdG9tUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICBwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcblxuICBpZihiYXNlNjQgfHwgaW1hZ2VCdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSBpbWFnZUJ1ZmZlcjtcblxuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG5cbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGZpbGVUeXBlOiB1cGRhdGVkRmlsZVR5cGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgICAgICAgICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICAgICAgICAgIGl0ZW1JZDogZm9ybWF0SXRlbUlkLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLFxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigocmVzOiBIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFUVVFU1RcbiAgICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IChyZXMgYXMgSHR0cFJlc3BvbnNlKS5idWZmZXIoKSlcbiAgICAgIC50aGVuKChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGZpbGVUeXBlOiBjb250ZW50VHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigoaW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAnaW1hZ2UnfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6ICdmZXRjaF9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZihpbWFnZUlkKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7ZGVzY3JpcHRpb259IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSl9IDoge30pXG4gICAgfTtcblxuICAgIHJldHVybiB1cGRhdGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHVwZGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVJbWFnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGRlbGV0ZUl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZm9ybWF0SW1hZ2VJZCwge1xuICAgICAgY2FzY2FkZTogW0VER0VTLkhBU19NRURJQV0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKCFpbWFnZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIFMzIGZpbGVzXG4gICAgY29uc3Qge19rZXk6IGltYWdlS2V5fSA9IGltYWdlO1xuICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS9pbWFnZXMvJHtpbWFnZUtleX0uanBnYH0sXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS90aHVtYnMvJHtpbWFnZUtleX0uanBnYH1cbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicGFyc2VOdW0iLCJsb3dlckNhc2VLZXlzIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiZ20iLCJEYXRlVGltZSIsIkNvbmZpZyIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJnZXREb2NJZCIsImdldExpbWl0Iiwic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsInVzZURiIiwiZ2V0SW1hZ2VFeHRlbnNpb24iLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJnZXRHcm91cERldGFpbHMiLCJpc0dyb3VwZWQiLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJzM0RlbGV0ZUxpc3QiLCJzM0dldFNpZ25lZFVybCIsInMzUHV0IiwiaGFzU3Vic2NyaXB0aW9uVG9JdGVtIiwiZXZlbnRDYXRlZ29yeSIsImhhc1JlYWN0aW9uQ29sbGVjdGlvbiIsIkhBU19SRUFDVElPTiIsImhhc01lZGlhQ29sbGVjdGlvbiIsIkhBU19NRURJQSIsInBlcnNvbmFzQ29sbGVjdGlvbiIsIlBFUlNPTkFTIiwic3ViQ2xhc3MiLCJpbWFnZU1hZ2ljayIsIk1FRElBX0lURU1fQ09MTEVDVElPTlMiLCJVU0VSUyIsIlBPU1RTIiwiR1JPVVBTIiwiZ2V0TWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJkb2NJZCIsIml0ZW1LZXkiLCJpbmNsdWRlcyIsIm1hcCIsImNvbGxlY3Rpb24iLCJpc01pc3NpbmdHcmFwaGljc0JpbmFyeSIsImVycm9yIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwibm9ybWFsaXplSW1hZ2VQcml2YWN5IiwicHJpdmFjeSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdJbWFnZSIsImltYWdlIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInBhcnNlSW1hZ2VPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldEltYWdlT3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJnZXRJbWFnZUxpc3RCeVVzZXIiLCJjb250ZXh0IiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbVF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJjYXRlZ29yeSIsInBhcmFtcyIsInZhbHVlIiwiREFUQUJBU0VfRVJST1IiLCJnZXRJbWFnZUNvdW50QnlJdGVtIiwiZGF0YWJhc2VOYW1lIiwiaXRlbURvY0lkcyIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJjb3VudCIsImdldEltYWdlTGlzdEJ5SXRlbSIsInNlc3Npb24iLCJzZXNzaW9uVXNlcklkIiwiZm9ybWF0SXRlbVR5cGUiLCJ1bmRlZmluZWQiLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImpvaW4iLCJsZW5ndGgiLCJsaXN0IiwiYWxsIiwib3duZXJVc2VySWQiLCJmaWx0ZXIiLCJtZWRpYUl0ZW1LZXkiLCJfbWVkaWFJdGVtS2V5IiwibWVkaWFJdGVtVHlwZSIsIl9tZWRpYUl0ZW1UeXBlIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJnZXRJbWFnZUxpc3RCeUdyb3VwIiwic2Vzc2lvbklkIiwiZmlsdGVycyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY29uZGl0aW9uYWwiLCJuYW1lIiwiZm9ybWF0Q29uZCIsImdyb3VwIiwiZmlsdGVyU3RyIiwiZ3JvdXBlZCIsImlzVmFsaWQiLCJmaWx0ZXJMaXN0IiwiZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRQZXJzb25hRG9jSWQiLCJwZXJzb25hSWQiLCJwZXJzb25hRG9jSWQiLCJwZXJzb25hS2V5IiwiZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInJlYWN0aW9uTmFtZXMiLCJBcnJheSIsImlzQXJyYXkiLCJCb29sZWFuIiwiZ2V0SW1hZ2VCeUlkIiwiaW1hZ2VJZCIsImZvcm1hdEltYWdlSWQiLCJvcGVyYXRvciIsImdldFVzZXJJbWFnZVBhdGgiLCJpbWFnZVR5cGUiLCJkaXIiLCJmaWxlbmFtZSIsImdldEFwcEltYWdlVXJsIiwiYnVja2V0IiwiZGlyZWN0b3J5IiwiaXNUaHVtYiIsInR5cGVJZCIsImJ1Y2tldE5hbWUiLCJpbWFnZU5hbWUiLCJpbWFnZVVybCIsImdldEltYWdlVXJsIiwiaW1hZ2VEaXIiLCJ1cmxUeXBlIiwiY29uZmlndXJlZEltYWdlVXJsIiwiY29uZmlndXJlZEFwcFVybCIsInB1YmxpY0Jhc2VVcmwiLCJkZXZCYXNlVXJsIiwidGh1bWJTdWZmaXgiLCJpbWFnZUtleSIsIkJ1Y2tldCIsIkV4cGlyZXMiLCJLZXkiLCJyZXNpemVBbmRTYXZlSW1hZ2UiLCJidWZmZXIiLCJmaWxlVHlwZSIsInMzT3B0aW9ucyIsImltZ1ciLCJpbWdRIiwiZm9ybWF0Iiwic3BsaXQiLCJpbWFnZU9wdGltaXplZEJ1ZmZlciIsInRodW1iT3B0aW1pemVkQnVmZmVyIiwiaW1hZ2VJZGVudGl0eSIsImZpbGVTaXplIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRGb3JtYXQiLCJxdWFsaXR5IiwiYXV0b09yaWVudCIsInJlc2l6ZSIsInN0cmVhbSIsInN0cmVhbUVycm9yIiwic3Rkb3V0IiwibmV4dEltYWdlQnVmZmVyIiwiQnVmZmVyIiwib24iLCJkYXRhIiwiY29uY2F0IiwiSU1BR0VfU0FWRSIsImNvbnNvbGUiLCJ3YXJuIiwiaW1hZ2VPYmoiLCJCb2R5IiwiQ29udGVudFR5cGUiLCJpZGVudGlmeSIsImJ1ZmZlclN0cmVhbSIsImltYWdlRGF0YSIsImZvcm1hdFZhbHVlcyIsIm1ha2UiLCJjYW1lcmFNYWtlIiwibW9kZWwiLCJjYW1lcmFNb2RlbCIsImRhdGV0aW1lb3JpZ2luYWwiLCJ0YWtlbiIsInN0YXRzIiwiY29sb3IiLCJyZWQiLCJncmVlbiIsImJsdWUiLCJtZWFuIiwic3Vic3RyaW5nIiwicmdiIiwicmdiQ29sb3IiLCJ0b1N0cmluZyIsIk9yaWVudGF0aW9uIiwib3JpZW50YXRpb25EYXRhIiwiUmVzb2x1dGlvbiIsInJlc29sdXRpb25EYXRhIiwic2l6ZSIsInJlc29sdXRpb24iLCJyZXNvbHV0aW9uTnVtYmVyIiwicmVzb2x1dGlvblVuaXQiLCJyZXNvbHV0aW9uVmFsdWUiLCJyZXNvbHV0aW9uVW5pdFZhbHVlIiwiaGVpZ2h0Iiwib3JpZW50YXRpb24iLCJmcm9tTWlsbGlzIiwibWlsbGlzZWNvbmQiLCJ3aWR0aCIsInRobVciLCJ0aG1RIiwiZ3Jhdml0eSIsImV4dGVudCIsInRodW1iU3Rkb3V0IiwidGh1bWJCdWZmZXIiLCJ0aHVtYk9iaiIsImFkZEltYWdlIiwiZGVzY3JpcHRpb24iLCJyZXNpemVkSW1hZ2UiLCJpbnNlcnQiLCJfa2V5Iiwic2F2ZWRJbWFnZSIsImFkZEltYWdlRWRnZSIsIklNQUdFX1JFU0laRSIsImltYWdlRWRnZSIsIm5vdyIsIkRhdGUiLCJlZGdlSWQiLCJmb3JtYXRJdGVtSWQiLCJpdGVtRG9jSWQiLCJmaWxlRG9jSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJhZGRlZCIsInNhdmUiLCJyZXR1cm5OZXciLCJmaWxlRWRnZSIsImRvY3VtZW50IiwidXBkYXRlSW1hZ2UiLCJiYXNlNjQiLCJpbWFnZUJ1ZmZlciIsInVybCIsImN1c3RvbVBhcmFtcyIsImZvcm1hdEJhc2U2NCIsInN1YnN0ciIsImluZGV4T2YiLCJ1cGRhdGVkRmlsZVR5cGUiLCJmaWxlVHlwZUZyb21CdWZmZXIiLCJtaW1lIiwiaW1nUGFyYW1zIiwiY29udGVudFR5cGUiLCJyZXMiLCJzdGF0dXMiLCJJTUFHRV9SRVFVRVNUIiwiaGVhZGVycyIsInVwZGF0ZSIsImRlbGV0ZUltYWdlIiwiY2FzY2FkZSIsIm93bmVyc2hpcCIsIkRlbGV0ZSIsIk9iamVjdHMiLCJRdWlldCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsU0FBUUEsT0FBT0MsT0FBTyxRQUFPLG9CQUFvQjtBQUNqRCxTQUFRQyxRQUFR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
|
package/lib/actions/index.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/ export * from './apps.js';
|
|
5
5
|
export * from './connections.js';
|
|
6
6
|
export * from './conversations.js';
|
|
7
|
+
export * from './crm.js';
|
|
7
8
|
export * from './dynamodb.js';
|
|
8
9
|
export * from './email.js';
|
|
9
10
|
export * from './files.js';
|
|
@@ -17,6 +18,7 @@ export * from './payments.js';
|
|
|
17
18
|
export * from './posts.js';
|
|
18
19
|
export * from './personas.js';
|
|
19
20
|
export * from './reactions.js';
|
|
21
|
+
export * from './rum.js';
|
|
20
22
|
export * from './s3.js';
|
|
21
23
|
export * from './search.js';
|
|
22
24
|
export * from './sms.js';
|
|
@@ -27,4 +29,4 @@ export * from './users.js';
|
|
|
27
29
|
export * from './videos.js';
|
|
28
30
|
export * from './websockets.js';
|
|
29
31
|
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vYXBwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Nvbm5lY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udmVyc2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NybS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtb2RiLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZW1haWwuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2lvcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BheW1lbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zdHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3J1bS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3MzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc21zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGlzdGljcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90YWdzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi92aWRlb3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWJzb2NrZXRzLmpzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxjQUFjLFlBQVk7QUFDMUIsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsY0FBYztBQUM1QixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsV0FBVztBQUN6QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsY0FBYztBQUM1QixjQUFjLGtCQUFrQiJ9
|
package/lib/actions/locations.js
CHANGED
|
@@ -53,7 +53,6 @@ export const addLocation = (context, location)=>{
|
|
|
53
53
|
const { results = [], status = '' } = json;
|
|
54
54
|
if (status === 'OK' && results.length) {
|
|
55
55
|
const geodata = results[0];
|
|
56
|
-
const addressComponents = geodata?.address_components || [];
|
|
57
56
|
// Item
|
|
58
57
|
const formatItemType = parseChar(itemType).toLowerCase();
|
|
59
58
|
const formatItemId = parseId(itemId);
|
|
@@ -142,4 +141,4 @@ export const autoCompleteLocation = (context, address)=>{
|
|
|
142
141
|
});
|
|
143
142
|
};
|
|
144
143
|
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvbG9jYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2dldCBhcyBodHRwR2V0LCBxdWVyeVN0cmluZ30gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUNoYXIsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7R29vZ2xlTWFwc0FkZHJlc3NUeXBlLCBHb29nbGVNYXBzUmVzdWx0VHlwZX0gZnJvbSAnLi4vdHlwZXMvZ29vZ2xlLnR5cGVzLmpzJztcbmltcG9ydCB7TG9jYXRpb25UeXBlfSBmcm9tICcuLi90eXBlcy9sb2NhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGdldEl0ZW1CeX0gZnJvbSAnLi9jcnVkLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7RWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdsb2NhdGlvbnMnO1xuXG5jb25zdCBtYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uID0gKGdlb2RhdGE6IEdvb2dsZU1hcHNSZXN1bHRUeXBlKTogTG9jYXRpb25UeXBlID0+IHtcbiAgY29uc3QgYWRkcmVzc0NvbXBvbmVudHM6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZVtdID0gZ2VvZGF0YT8uYWRkcmVzc19jb21wb25lbnRzIHx8IFtdO1xuICBjb25zdCBzdHJlZXROdW1iZXIgPSBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3N0cmVldF9udW1iZXInKTtcbiAgY29uc3Qgcm91dGUgPSBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3JvdXRlJyk7XG4gIGNvbnN0IGdvb2dsZUlkID0gZ2VvZGF0YT8ucGxhY2VfaWQgfHwgJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiBnZW9kYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICBjaXR5OiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ2xvY2FsaXR5JyksXG4gICAgY291bnRyeTogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdjb3VudHJ5JyksXG4gICAgZm9ybWF0dGVkOiBnZW9kYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICBnb29nbGVJZCxcbiAgICBpZDogZ29vZ2xlSWQsXG4gICAgbGF0aXR1ZGU6IGdlb2RhdGE/Lmdlb21ldHJ5LmxvY2F0aW9uLmxhdCxcbiAgICBsb2NhdGlvbjogZ2VvZGF0YT8uZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgbG9uZ2l0dWRlOiBnZW9kYXRhPy5nZW9tZXRyeS5sb2NhdGlvbi5sbmcsXG4gICAgc3RhdGU6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xJyksXG4gICAgc3RyZWV0OiBbc3RyZWV0TnVtYmVyLCByb3V0ZV0uZmlsdGVyKChvYmopID0+IG9iaikuam9pbignICcpLFxuICAgIHppcDogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdwb3N0YWxfY29kZScpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRWYWwgPSAoYWRkcmVzc0NvbXBvbmVudHM6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZVtdLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7c2hvcnRfbmFtZTogc2hvcnROYW1lID0gJyd9ID0gYWRkcmVzc0NvbXBvbmVudHMuZmluZCgoYWRkcmVzc0ZpZWxkOiBHb29nbGVNYXBzQWRkcmVzc1R5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlcyA9IGFkZHJlc3NGaWVsZC50eXBlcyB8fCBbXTtcbiAgICByZXR1cm4gdHlwZXMuZmluZEluZGV4KChmaWVsZFR5cGU6IHN0cmluZykgPT4gZmllbGRUeXBlID09PSBuYW1lKSA+PSAwO1xuICB9KSB8fCB7fTtcblxuICByZXR1cm4gc2hvcnROYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uOiBMb2NhdGlvblR5cGUpOiBQcm9taXNlPExvY2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YWRkcmVzcywgaXRlbUlkLCBpdGVtVHlwZX0gPSBsb2NhdGlvbjtcbiAgY29uc3QgZ2VvY29kZVVybCA9IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLnVybCcpO1xuICBjb25zdCBwYXJhbXM6IG9iamVjdCA9IHtcbiAgICBhZGRyZXNzLFxuICAgIGtleTogQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUua2V5JylcbiAgfTtcbiAgY29uc3QgdXJsID0gYCR7Z2VvY29kZVVybH0/JHtxdWVyeVN0cmluZyhwYXJhbXMpfWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgIC50aGVuKGFzeW5jIChqc29uKSA9PiB7XG4gICAgICBjb25zdCB7cmVzdWx0cyA9IFtdLCBzdGF0dXMgPSAnJ30gPSBqc29uO1xuXG4gICAgICBpZihzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZ2VvZGF0YTogR29vZ2xlTWFwc1Jlc3VsdFR5cGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBjb25zdCBhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10gPSBnZW9kYXRhPy5hZGRyZXNzX2NvbXBvbmVudHMgfHwgW107XG5cbiAgICAgICAgLy8gSXRlbVxuICAgICAgICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICAgICAgICBjb25zdCBnb29nbGVJZCA9IGdlb2RhdGE/LnBsYWNlX2lkIHx8ICcnO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTG9jYXRpb24gPSBhd2FpdCBnZXRJdGVtQnk8TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywge2dvb2dsZUlkfSk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRMb2NhdGlvbjogTG9jYXRpb25UeXBlO1xuICAgICAgICBpZihleGlzdGluZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgLy8gTG9jYXRpb24gZXhpc3RzLCB1c2UgaXRcbiAgICAgICAgICB1cGRhdGVkTG9jYXRpb24gPSBleGlzdGluZ0xvY2F0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgbG9jYXRpb25cbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IExvY2F0aW9uVHlwZSA9IHtcbiAgICAgICAgICAgIC4uLm1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24oZ2VvZGF0YSksXG4gICAgICAgICAgICBfa2V5OiBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHVwZGF0ZWRMb2NhdGlvbiA9IGF3YWl0IGFkZEl0ZW08TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywgaW5zZXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtfa2V5OiB1cGRhdGVkTG9jYXRpb25LZXl9ID0gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgICBsZXQgaXRlbURvY0lkOiBzdHJpbmc7XG5cbiAgICAgICAgc3dpdGNoKGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncG9zdHMnOlxuICAgICAgICAgICAgaXRlbURvY0lkID0gYHBvc3RzLyR7Zm9ybWF0SXRlbUlkfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaXRlbURvY0lkID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHZhbGlkIGl0ZW0gZG9jIGlkLCBjcmVhdGUgYW4gZWRnZVxuICAgICAgICBpZihpdGVtRG9jSWQpIHtcbiAgICAgICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0xvY2F0aW9uJyk7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb25JZCA9IHVwZGF0ZWRMb2NhdGlvbktleTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbkRvY0lkID0gYGxvY2F0aW9ucy8ke2xvY2F0aW9uSWR9YDtcbiAgICAgICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNMb2NhdGlvbi0ke2xvY2F0aW9uSWR9LSR7c2Vzc2lvbklkfWApO1xuICAgICAgICAgIGNvbnN0IGVkZ2U6IEVkZ2VUeXBlID0ge19mcm9tOiBpdGVtRG9jSWQsIF9rZXk6IGVkZ2VJZCwgX3RvOiBsb2NhdGlvbkRvY0lkfTtcblxuICAgICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IHVwZGF0ZWRMb2NhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UganVzdCByZXR1cm4gdGhlIG5ldyBsb2NhdGlvblxuICAgICAgICByZXR1cm4gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChsb2NhdGlvbklkKTtcbiAgcmV0dXJuIGdldEl0ZW1CeTxMb2NhdGlvblR5cGU+KGNvbnRleHQsICdsb2NhdGlvbnMnLCB7X2tleTogZm9ybWF0SWR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhdXRvQ29tcGxldGVMb2NhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPExvY2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhdXRvQ29tcGxldGVMb2NhdGlvbic7XG4gIGNvbnN0IGdlb2NvZGVVcmwgPSBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS51cmwnKTtcbiAgY29uc3QgZ2VvY29kZUtleSA9IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLmtleScpO1xuXG4gIGlmKCFhZGRyZXNzIHx8ICFnZW9jb2RlVXJsIHx8ICFnZW9jb2RlS2V5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cblxuICBjb25zdCBwYXJhbXM6IG9iamVjdCA9IHtcbiAgICBhZGRyZXNzLFxuICAgIGtleTogZ2VvY29kZUtleVxuICB9O1xuICBjb25zdCB1cmwgPSBgJHtnZW9jb2RlVXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcblxuICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgIGNvbnN0IHtyZXN1bHRzID0gW10sIHN0YXR1cyA9ICcnfSA9IGpzb247XG5cbiAgICAgIGlmKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogR29vZ2xlTWFwc1Jlc3VsdFR5cGUpID0+IG1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24ocmVzdWx0KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0xvY2F0aW9uIGF1dG9jb21wbGV0ZSBmYWlsZWQ6Jywge1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicXVlcnlTdHJpbmciLCJjcmVhdGVIYXNoIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsInVzZURiIiwiYWRkSXRlbSIsImdldEl0ZW1CeSIsImV2ZW50Q2F0ZWdvcnkiLCJtYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uIiwiZ2VvZGF0YSIsImFkZHJlc3NDb21wb25lbnRzIiwiYWRkcmVzc19jb21wb25lbnRzIiwic3RyZWV0TnVtYmVyIiwiZ2V0RmllbGRWYWwiLCJyb3V0ZSIsImdvb2dsZUlkIiwicGxhY2VfaWQiLCJhZGRyZXNzIiwiZm9ybWF0dGVkX2FkZHJlc3MiLCJjaXR5IiwiY291bnRyeSIsImZvcm1hdHRlZCIsImlkIiwibGF0aXR1ZGUiLCJnZW9tZXRyeSIsImxvY2F0aW9uIiwibGF0IiwibG9uZ2l0dWRlIiwibG5nIiwic3RhdGUiLCJzdHJlZXQiLCJmaWx0ZXIiLCJvYmoiLCJqb2luIiwiemlwIiwibmFtZSIsInNob3J0X25hbWUiLCJzaG9ydE5hbWUiLCJmaW5kIiwiYWRkcmVzc0ZpZWxkIiwidHlwZXMiLCJmaW5kSW5kZXgiLCJmaWVsZFR5cGUiLCJhZGRMb2NhdGlvbiIsImNvbnRleHQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJnZW9jb2RlVXJsIiwicGFyYW1zIiwia2V5IiwidXJsIiwidGhlbiIsImpzb24iLCJyZXN1bHRzIiwic3RhdHVzIiwibGVuZ3RoIiwiZm9ybWF0SXRlbVR5cGUiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdEl0ZW1JZCIsImV4aXN0aW5nTG9jYXRpb24iLCJ1cGRhdGVkTG9jYXRpb24iLCJpbnNlcnQiLCJfa2V5IiwidXBkYXRlZExvY2F0aW9uS2V5IiwiaXRlbURvY0lkIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwibG9jYXRpb25JZCIsImxvY2F0aW9uRG9jSWQiLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJzYXZlIiwicmV0dXJuTmV3IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldExvY2F0aW9uIiwiZm9ybWF0SWQiLCJhdXRvQ29tcGxldGVMb2NhdGlvbiIsImdlb2NvZGVLZXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlc3VsdCIsImNvbnNvbGUiLCJ3YXJuIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsT0FBT0MsT0FBTyxFQUFFQyxXQUFXLFFBQU8sb0JBQW9CO0FBQzlELFNBQVFDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBRTVFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBRXBDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFHbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLE9BQU8sRUFBRUMsU0FBUyxRQUFPLFlBQVk7QUFLN0MsTUFBTUMsZ0JBQWdCO0FBRXRCLE1BQU1DLDRCQUE0QixDQUFDQztJQUNqQyxNQUFNQyxvQkFBNkNELFNBQVNFLHNCQUFzQixFQUFFO0lBQ3BGLE1BQU1DLGVBQWVDLFlBQVlILG1CQUFtQjtJQUNwRCxNQUFNSSxRQUFRRCxZQUFZSCxtQkFBbUI7SUFDN0MsTUFBTUssV0FBV04sU0FBU08sWUFBWTtJQUV0QyxPQUFPO1FBQ0xDLFNBQVNSLFNBQVNTO1FBQ2xCQyxNQUFNTixZQUFZSCxtQkFBbUI7UUFDckNVLFNBQVNQLFlBQVlILG1CQUFtQjtRQUN4Q1csV0FBV1osU0FBU1M7UUFDcEJIO1FBQ0FPLElBQUlQO1FBQ0pRLFVBQVVkLFNBQVNlLFNBQVNDLFNBQVNDO1FBQ3JDRCxVQUFVaEIsU0FBU1M7UUFDbkJTLFdBQVdsQixTQUFTZSxTQUFTQyxTQUFTRztRQUN0Q0MsT0FBT2hCLFlBQVlILG1CQUFtQjtRQUN0Q29CLFFBQVE7WUFBQ2xCO1lBQWNFO1NBQU0sQ0FBQ2lCLE1BQU0sQ0FBQyxDQUFDQyxNQUFRQSxLQUFLQyxJQUFJLENB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
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvbG9jYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2dldCBhcyBodHRwR2V0LCBxdWVyeVN0cmluZ30gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUNoYXIsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7R29vZ2xlTWFwc0FkZHJlc3NUeXBlLCBHb29nbGVNYXBzUmVzdWx0VHlwZX0gZnJvbSAnLi4vdHlwZXMvZ29vZ2xlLnR5cGVzLmpzJztcbmltcG9ydCB7TG9jYXRpb25UeXBlfSBmcm9tICcuLi90eXBlcy9sb2NhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGdldEl0ZW1CeX0gZnJvbSAnLi9jcnVkLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7RWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdsb2NhdGlvbnMnO1xuXG5jb25zdCBtYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uID0gKGdlb2RhdGE6IEdvb2dsZU1hcHNSZXN1bHRUeXBlKTogTG9jYXRpb25UeXBlID0+IHtcbiAgY29uc3QgYWRkcmVzc0NvbXBvbmVudHM6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZVtdID0gZ2VvZGF0YT8uYWRkcmVzc19jb21wb25lbnRzIHx8IFtdO1xuICBjb25zdCBzdHJlZXROdW1iZXIgPSBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3N0cmVldF9udW1iZXInKTtcbiAgY29uc3Qgcm91dGUgPSBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3JvdXRlJyk7XG4gIGNvbnN0IGdvb2dsZUlkID0gZ2VvZGF0YT8ucGxhY2VfaWQgfHwgJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiBnZW9kYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICBjaXR5OiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ2xvY2FsaXR5JyksXG4gICAgY291bnRyeTogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdjb3VudHJ5JyksXG4gICAgZm9ybWF0dGVkOiBnZW9kYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICBnb29nbGVJZCxcbiAgICBpZDogZ29vZ2xlSWQsXG4gICAgbGF0aXR1ZGU6IGdlb2RhdGE/Lmdlb21ldHJ5LmxvY2F0aW9uLmxhdCxcbiAgICBsb2NhdGlvbjogZ2VvZGF0YT8uZm9ybWF0dGVkX2FkZHJlc3MsXG4gICAgbG9uZ2l0dWRlOiBnZW9kYXRhPy5nZW9tZXRyeS5sb2NhdGlvbi5sbmcsXG4gICAgc3RhdGU6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xJyksXG4gICAgc3RyZWV0OiBbc3RyZWV0TnVtYmVyLCByb3V0ZV0uZmlsdGVyKChvYmopID0+IG9iaikuam9pbignICcpLFxuICAgIHppcDogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdwb3N0YWxfY29kZScpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRWYWwgPSAoYWRkcmVzc0NvbXBvbmVudHM6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZVtdLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7c2hvcnRfbmFtZTogc2hvcnROYW1lID0gJyd9ID0gYWRkcmVzc0NvbXBvbmVudHMuZmluZCgoYWRkcmVzc0ZpZWxkOiBHb29nbGVNYXBzQWRkcmVzc1R5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlcyA9IGFkZHJlc3NGaWVsZC50eXBlcyB8fCBbXTtcbiAgICByZXR1cm4gdHlwZXMuZmluZEluZGV4KChmaWVsZFR5cGU6IHN0cmluZykgPT4gZmllbGRUeXBlID09PSBuYW1lKSA+PSAwO1xuICB9KSB8fCB7fTtcblxuICByZXR1cm4gc2hvcnROYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uOiBMb2NhdGlvblR5cGUpOiBQcm9taXNlPExvY2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YWRkcmVzcywgaXRlbUlkLCBpdGVtVHlwZX0gPSBsb2NhdGlvbjtcbiAgY29uc3QgZ2VvY29kZVVybCA9IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLnVybCcpO1xuICBjb25zdCBwYXJhbXM6IG9iamVjdCA9IHtcbiAgICBhZGRyZXNzLFxuICAgIGtleTogQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUua2V5JylcbiAgfTtcbiAgY29uc3QgdXJsID0gYCR7Z2VvY29kZVVybH0/JHtxdWVyeVN0cmluZyhwYXJhbXMpfWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgIC50aGVuKGFzeW5jIChqc29uKSA9PiB7XG4gICAgICBjb25zdCB7cmVzdWx0cyA9IFtdLCBzdGF0dXMgPSAnJ30gPSBqc29uO1xuXG4gICAgICBpZihzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZ2VvZGF0YTogR29vZ2xlTWFwc1Jlc3VsdFR5cGUgPSByZXN1bHRzWzBdO1xuXG4gICAgICAgIC8vIEl0ZW1cbiAgICAgICAgY29uc3QgZm9ybWF0SXRlbVR5cGUgPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgICAgICAgY29uc3QgZ29vZ2xlSWQgPSBnZW9kYXRhPy5wbGFjZV9pZCB8fCAnJztcblxuICAgICAgICAvLyBDaGVjayBpZiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0c1xuICAgICAgICBjb25zdCBleGlzdGluZ0xvY2F0aW9uID0gYXdhaXQgZ2V0SXRlbUJ5PExvY2F0aW9uVHlwZT4oY29udGV4dCwgJ2xvY2F0aW9ucycsIHtnb29nbGVJZH0pO1xuXG4gICAgICAgIGxldCB1cGRhdGVkTG9jYXRpb246IExvY2F0aW9uVHlwZTtcbiAgICAgICAgaWYoZXhpc3RpbmdMb2NhdGlvbikge1xuICAgICAgICAgIC8vIExvY2F0aW9uIGV4aXN0cywgdXNlIGl0XG4gICAgICAgICAgdXBkYXRlZExvY2F0aW9uID0gZXhpc3RpbmdMb2NhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDcmVhdGUgbmV3IGxvY2F0aW9uXG4gICAgICAgICAgY29uc3QgaW5zZXJ0OiBMb2NhdGlvblR5cGUgPSB7XG4gICAgICAgICAgICAuLi5tYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uKGdlb2RhdGEpLFxuICAgICAgICAgICAgX2tleTogY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB1cGRhdGVkTG9jYXRpb24gPSBhd2FpdCBhZGRJdGVtPExvY2F0aW9uVHlwZT4oY29udGV4dCwgJ2xvY2F0aW9ucycsIGluc2VydCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7X2tleTogdXBkYXRlZExvY2F0aW9uS2V5fSA9IHVwZGF0ZWRMb2NhdGlvbjtcbiAgICAgICAgbGV0IGl0ZW1Eb2NJZDogc3RyaW5nO1xuXG4gICAgICAgIHN3aXRjaChmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ3Bvc3RzJzpcbiAgICAgICAgICAgIGl0ZW1Eb2NJZCA9IGBwb3N0cy8ke2Zvcm1hdEl0ZW1JZH1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGl0ZW1Eb2NJZCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSB2YWxpZCBpdGVtIGRvYyBpZCwgY3JlYXRlIGFuIGVkZ2VcbiAgICAgICAgaWYoaXRlbURvY0lkKSB7XG4gICAgICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNMb2NhdGlvbicpO1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uSWQgPSB1cGRhdGVkTG9jYXRpb25LZXk7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb25Eb2NJZCA9IGBsb2NhdGlvbnMvJHtsb2NhdGlvbklkfWA7XG4gICAgICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTG9jYXRpb24tJHtsb2NhdGlvbklkfS0ke3Nlc3Npb25JZH1gKTtcbiAgICAgICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtfZnJvbTogaXRlbURvY0lkLCBfa2V5OiBlZGdlSWQsIF90bzogbG9jYXRpb25Eb2NJZH07XG5cbiAgICAgICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiB1cGRhdGVkTG9jYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBuZXcgbG9jYXRpb25cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRMb2NhdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBsb2NhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPExvY2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRJZCA9IHBhcnNlSWQobG9jYXRpb25JZCk7XG4gIHJldHVybiBnZXRJdGVtQnk8TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywge19rZXk6IGZvcm1hdElkfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXV0b0NvbXBsZXRlTG9jYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxMb2NhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYXV0b0NvbXBsZXRlTG9jYXRpb24nO1xuICBjb25zdCBnZW9jb2RlVXJsID0gQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUudXJsJyk7XG4gIGNvbnN0IGdlb2NvZGVLZXkgPSBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS5rZXknKTtcblxuICBpZighYWRkcmVzcyB8fCAhZ2VvY29kZVVybCB8fCAhZ2VvY29kZUtleSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG5cbiAgY29uc3QgcGFyYW1zOiBvYmplY3QgPSB7XG4gICAgYWRkcmVzcyxcbiAgICBrZXk6IGdlb2NvZGVLZXlcbiAgfTtcbiAgY29uc3QgdXJsID0gYCR7Z2VvY29kZVVybH0/JHtxdWVyeVN0cmluZyhwYXJhbXMpfWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICBjb25zdCB7cmVzdWx0cyA9IFtdLCBzdGF0dXMgPSAnJ30gPSBqc29uO1xuXG4gICAgICBpZihzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQ6IEdvb2dsZU1hcHNSZXN1bHRUeXBlKSA9PiBtYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uKHJlc3VsdCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgY29uc29sZS53YXJuKCdMb2NhdGlvbiBhdXRvY29tcGxldGUgZmFpbGVkOicsIHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsiZ2V0IiwiaHR0cEdldCIsInF1ZXJ5U3RyaW5nIiwiY3JlYXRlSGFzaCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJDb25maWciLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImFkZEl0ZW0iLCJnZXRJdGVtQnkiLCJldmVudENhdGVnb3J5IiwibWFwR29vZ2xlUmVzdWx0VG9Mb2NhdGlvbiIsImdlb2RhdGEiLCJhZGRyZXNzQ29tcG9uZW50cyIsImFkZHJlc3NfY29tcG9uZW50cyIsInN0cmVldE51bWJlciIsImdldEZpZWxkVmFsIiwicm91dGUiLCJnb29nbGVJZCIsInBsYWNlX2lkIiwiYWRkcmVzcyIsImZvcm1hdHRlZF9hZGRyZXNzIiwiY2l0eSIsImNvdW50cnkiLCJmb3JtYXR0ZWQiLCJpZCIsImxhdGl0dWRlIiwiZ2VvbWV0cnkiLCJsb2NhdGlvbiIsImxhdCIsImxvbmdpdHVkZSIsImxuZyIsInN0YXRlIiwic3RyZWV0IiwiZmlsdGVyIiwib2JqIiwiam9pbiIsInppcCIsIm5hbWUiLCJzaG9ydF9uYW1lIiwic2hvcnROYW1lIiwiZmluZCIsImFkZHJlc3NGaWVsZCIsInR5cGVzIiwiZmluZEluZGV4IiwiZmllbGRUeXBlIiwiYWRkTG9jYXRpb24iLCJjb250ZXh0IiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwic2Vzc2lvbiIsInVzZXJJZCIsInNlc3Npb25JZCIsIml0ZW1JZCIsIml0ZW1UeXBlIiwiZ2VvY29kZVVybCIsInBhcmFtcyIsImtleSIsInVybCIsInRoZW4iLCJqc29uIiwicmVzdWx0cyIsInN0YXR1cyIsImxlbmd0aCIsImZvcm1hdEl0ZW1UeXBlIiwidG9Mb3dlckNhc2UiLCJmb3JtYXRJdGVtSWQiLCJleGlzdGluZ0xvY2F0aW9uIiwidXBkYXRlZExvY2F0aW9uIiwiaW5zZXJ0IiwiX2tleSIsInVwZGF0ZWRMb2NhdGlvbktleSIsIml0ZW1Eb2NJZCIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImxvY2F0aW9uSWQiLCJsb2NhdGlvbkRvY0lkIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwic2F2ZSIsInJldHVybk5ldyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXRMb2NhdGlvbiIsImZvcm1hdElkIiwiYXV0b0NvbXBsZXRlTG9jYXRpb24iLCJnZW9jb2RlS2V5IiwiUHJv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
|