@envive-ai/react-hooks 0.2.6-alpha-7 → 0.2.6-alpha-9
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/dist/{AmplitudeOperations-DjqOM3uE.js → AmplitudeOperations-D2r56Ptr.js} +2 -2
- package/dist/{AmplitudeOperations-DbUiR0N_.cjs → AmplitudeOperations-SkndCrhj.cjs} +2 -2
- package/dist/{NewOrgConfig-C_1T1iOt.js → NewOrgConfig-C9aQqGsb.js} +2 -2
- package/dist/{NewOrgConfig-D2Kvqa1z.cjs → NewOrgConfig-CHkHRqHx.cjs} +2 -2
- package/dist/{TrackComponentVisibleEvent-BxOhr9Da.js → TrackComponentVisibleEvent-BIGvzk4f.js} +2 -2
- package/dist/{TrackComponentVisibleEvent-CDbecFPM.cjs → TrackComponentVisibleEvent-DjZUt7LR.cjs} +2 -2
- package/dist/amplitudeContext-B3DsV6IO.cjs +248 -0
- package/dist/amplitudeContext-S3JYCxr4.js +232 -0
- package/dist/{app-Bs2KxG_8.js → app-BT3g-mDp.js} +5 -5
- package/dist/{app-DSnDDqcW.cjs → app-DxwdFQlv.cjs} +5 -5
- package/dist/application/utils/index.cjs +4 -4
- package/dist/application/utils/index.d.cts +2 -2
- package/dist/application/utils/index.js +4 -4
- package/dist/{atomStore-CfzCqWB9.js → atomStore-BuopbV9k.js} +1 -1
- package/dist/{atomStore-BQVO5haU.cjs → atomStore-CZKe3itM.cjs} +1 -1
- package/dist/atoms/app/index.cjs +9 -9
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/index.js +9 -9
- package/dist/atoms/atomStore/index.cjs +1 -1
- package/dist/atoms/atomStore/index.d.ts +1 -1
- package/dist/atoms/atomStore/index.js +1 -1
- package/dist/atoms/chat/index.cjs +10 -10
- package/dist/atoms/chat/index.d.cts +32 -32
- package/dist/atoms/chat/index.d.ts +32 -32
- package/dist/atoms/chat/index.js +10 -10
- package/dist/atoms/globalSearch/index.d.cts +6 -6
- package/dist/atoms/globalSearch/index.d.ts +6 -6
- package/dist/atoms/org/index.cjs +2 -2
- package/dist/atoms/org/index.d.cts +15 -15
- package/dist/atoms/org/index.d.ts +16 -16
- package/dist/atoms/org/index.js +2 -2
- package/dist/atoms/search/index.cjs +3 -3
- package/dist/atoms/search/index.d.cts +15 -15
- package/dist/atoms/search/index.d.ts +14 -14
- package/dist/atoms/search/index.js +3 -3
- package/dist/atoms/search/utils.d.cts +1 -1
- package/dist/cdnContext-i5iYA8ig.cjs +53 -0
- package/dist/cdnContext-td-gAam0.js +38 -0
- package/dist/{chat-EJbfGWRr.js → chat-ClvJ9xEj.js} +1 -1
- package/dist/{chat-CJ9D8n7g.cjs → chat-DCGriB7h.cjs} +1 -1
- package/dist/{chat-C5afTKUY.js → chat-ZaY3KY-R.js} +3 -3
- package/dist/{chat-CCjM6fS_.cjs → chat-rhEjVfrd.cjs} +3 -3
- package/dist/{common-CuwWqIJ1.cjs → common-DQPvV_S_.cjs} +1 -1
- package/dist/{common-Df2bwzd2.js → common-c_4eX0qn.js} +1 -1
- package/dist/{components-QGCWJ26c.js → components-CDpaMUjK.js} +1 -1
- package/dist/{components-BCfFLf9X.cjs → components-DKwVHIjq.cjs} +1 -1
- package/dist/config/index.cjs +4 -4
- package/dist/config/index.js +4 -4
- package/dist/config/locators/components/chat/index.cjs +1 -1
- package/dist/config/locators/components/chat/index.js +1 -1
- package/dist/config/locators/components/common/index.cjs +1 -1
- package/dist/config/locators/components/common/index.js +1 -1
- package/dist/config/locators/components/index.cjs +1 -1
- package/dist/config/locators/components/index.js +1 -1
- package/dist/config/locators/index.cjs +4 -4
- package/dist/config/locators/index.js +4 -4
- package/dist/contexts/amplitudeContext/index.cjs +12 -12
- package/dist/contexts/amplitudeContext/index.d.cts +1 -1
- package/dist/contexts/amplitudeContext/index.js +12 -12
- package/dist/contexts/cdnContext/index.cjs +2 -2
- package/dist/contexts/cdnContext/index.d.cts +1 -1
- package/dist/contexts/cdnContext/index.d.ts +1 -1
- package/dist/contexts/cdnContext/index.js +2 -2
- package/dist/contexts/enviveConfigContext/index.cjs +2 -2
- package/dist/contexts/enviveConfigContext/index.d.cts +1 -1
- package/dist/contexts/enviveConfigContext/index.js +2 -2
- package/dist/contexts/enviveCssContext/index.cjs +6 -6
- package/dist/contexts/enviveCssContext/index.js +6 -6
- package/dist/contexts/featureFlagContext/index.cjs +2 -2
- package/dist/contexts/featureFlagContext/index.js +2 -2
- package/dist/contexts/graphqlContext/index.cjs +2 -2
- package/dist/contexts/graphqlContext/index.js +2 -2
- package/dist/contexts/localStorageContext/index.d.cts +1 -1
- package/dist/contexts/newOrgConfigContext/index.cjs +5 -5
- package/dist/contexts/newOrgConfigContext/index.js +5 -5
- package/dist/contexts/searchContext/index.cjs +14 -14
- package/dist/contexts/searchContext/index.js +14 -14
- package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
- package/dist/contexts/shopifyUrlContext/index.d.cts +1 -1
- package/dist/contexts/shopifyUrlContext/index.js +2 -2
- package/dist/contexts/systemSettingsContext/index.cjs +2 -2
- package/dist/contexts/systemSettingsContext/index.d.cts +1 -1
- package/dist/contexts/systemSettingsContext/index.d.ts +2 -2
- package/dist/contexts/systemSettingsContext/index.js +2 -2
- package/dist/contexts/userIdentityContext/index.cjs +9 -9
- package/dist/contexts/userIdentityContext/index.js +9 -9
- package/dist/{domObserver-DNeeSh1F.js → domObserver-CVhsCSkS.js} +1 -1
- package/dist/{domObserver-C2oQO8vi.cjs → domObserver-LCBj1xw4.cjs} +1 -1
- package/dist/{enviveConfig-Dp80h9yu.cjs → enviveConfig-CQ_8mT-g.cjs} +1 -1
- package/dist/{enviveConfig-Ciq4ASoV.js → enviveConfig-Cwlp7-Qz.js} +1 -1
- package/dist/{enviveConfigContext-CCjJUmwp.js → enviveConfigContext-BZbGEgOW.js} +2 -2
- package/dist/{enviveConfigContext-DoYP8KSw.cjs → enviveConfigContext-BinpxTCy.cjs} +2 -2
- package/dist/events/index.cjs +1 -1
- package/dist/events/index.js +1 -1
- package/dist/{events-DBin1Z7o.cjs → events-CgFGtanE.cjs} +1 -1
- package/dist/{events-CXiS1aTc.js → events-WOOrnUAx.js} +1 -1
- package/dist/exceptions/index.d.ts +1 -1
- package/dist/{graphqlContext-ChXlE8Ul.cjs → graphqlContext-B8wuRZcp.cjs} +2 -2
- package/dist/{graphqlContext-0cg9fEUw.js → graphqlContext-CpHMbKoX.js} +2 -2
- package/dist/hooks/AmplitudeOperations/index.cjs +13 -13
- package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
- package/dist/hooks/AmplitudeOperations/index.js +13 -13
- package/dist/hooks/AppDetails/index.cjs +12 -12
- package/dist/hooks/AppDetails/index.d.cts +1 -1
- package/dist/hooks/AppDetails/index.js +12 -12
- package/dist/hooks/BlockBackButton/index.d.cts +1 -1
- package/dist/hooks/CdnOperations/index.cjs +2 -2
- package/dist/hooks/CdnOperations/index.d.ts +1 -1
- package/dist/hooks/CdnOperations/index.js +2 -2
- package/dist/hooks/ChatToggle/index.cjs +13 -13
- package/dist/hooks/ChatToggle/index.d.cts +1 -1
- package/dist/hooks/ChatToggle/index.js +13 -13
- package/dist/hooks/ChatToggleAnalytics/index.cjs +13 -13
- package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
- package/dist/hooks/ChatToggleAnalytics/index.js +13 -13
- package/dist/hooks/Debounce/index.d.cts +1 -1
- package/dist/hooks/ElementObserver/index.cjs +1 -1
- package/dist/hooks/ElementObserver/index.js +1 -1
- package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
- package/dist/hooks/GraphQLConfig/index.cjs +3 -3
- package/dist/hooks/GraphQLConfig/index.d.cts +1 -1
- package/dist/hooks/GraphQLConfig/index.js +3 -3
- package/dist/hooks/IdentifyUser/index.cjs +9 -9
- package/dist/hooks/IdentifyUser/index.d.cts +1 -1
- package/dist/hooks/IdentifyUser/index.js +9 -9
- package/dist/hooks/ImageResolver/index.cjs +1 -1
- package/dist/hooks/ImageResolver/index.d.cts +1 -1
- package/dist/hooks/ImageResolver/index.js +1 -1
- package/dist/hooks/LocalStorageOperations/index.d.cts +1 -1
- package/dist/hooks/MessageFilter/index.d.cts +1 -1
- package/dist/hooks/MessageScrollObserver/index.d.cts +1 -1
- package/dist/hooks/NewOrgConfig/index.cjs +6 -6
- package/dist/hooks/NewOrgConfig/index.d.cts +2 -2
- package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
- package/dist/hooks/NewOrgConfig/index.js +6 -6
- package/dist/hooks/Search/index.cjs +15 -15
- package/dist/hooks/Search/index.js +15 -15
- package/dist/hooks/SearchOperations/index.cjs +14 -14
- package/dist/hooks/SearchOperations/index.js +14 -14
- package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
- package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
- package/dist/hooks/SystemSettingsContext/index.cjs +2 -2
- package/dist/hooks/SystemSettingsContext/index.d.cts +3 -3
- package/dist/hooks/SystemSettingsContext/index.d.ts +4 -4
- package/dist/hooks/SystemSettingsContext/index.js +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/index.cjs +13 -13
- package/dist/hooks/TrackComponentVisibleEvent/index.js +13 -13
- package/dist/hooks/UpdateAnalyticsProps/index.cjs +12 -12
- package/dist/hooks/UpdateAnalyticsProps/index.js +12 -12
- package/dist/hooks/utils.cjs +1 -1
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/hooks/utils.js +1 -1
- package/dist/index-CMZcE7pk.d.cts +1 -1
- package/dist/index-ChiZg0yw.d.cts +1 -1
- package/dist/index-CsmO1rDH.d.ts +1 -1
- package/dist/index-DtzPIcQp.d.ts +1 -1
- package/dist/index-bEjLKG_Q.d.ts +1 -1
- package/dist/index-mv7KvWDq.d.ts +1 -1
- package/dist/{locators-C2fWd-74.js → locators-BMQGmGLq.js} +1 -1
- package/dist/{locators-Cx3q6Z_h.cjs → locators-DxYdak1F.cjs} +1 -1
- package/dist/{newOrgConfigAtom-BuQE_zPK.js → newOrgConfigAtom-C8h3w_Ji.js} +1 -1
- package/dist/{newOrgConfigAtom-rrYHmp1b.cjs → newOrgConfigAtom-CDttTiuu.cjs} +1 -1
- package/dist/{newOrgConfigContext-d3RHl430.cjs → newOrgConfigContext-Brsggue9.cjs} +4 -4
- package/dist/{newOrgConfigContext-D-gU5ppl.js → newOrgConfigContext-Dt_W-wlK.js} +4 -4
- package/dist/{org-CIFgIcO4.cjs → org-BNs_maoW.cjs} +1 -1
- package/dist/{org-15F128Ah.js → org-CScQqL4k.js} +1 -1
- package/dist/{search-Ch6LKNh4.cjs → search-CWkDtqQV.cjs} +2 -2
- package/dist/{search--80x6CfL.js → search-OWKKaQQj.js} +2 -2
- package/dist/{searchContext-BkPoTq1o.js → searchContext-B-rEZixl.js} +4 -4
- package/dist/{searchContext-B0qEUoKb.cjs → searchContext-JCUBg-lA.cjs} +4 -4
- package/dist/{shopifyUrlContext-Bw1kAZ2P.cjs → shopifyUrlContext-COc1eDR_.cjs} +2 -2
- package/dist/{shopifyUrlContext-DnJiUmMA.js → shopifyUrlContext-CToAt_98.js} +2 -2
- package/dist/{systemSettingsContext-DPdDfVhj.js → systemSettingsContext-D9iNGz5v.js} +2 -2
- package/dist/{systemSettingsContext-068vQuP2.cjs → systemSettingsContext-DdV7Yte8.cjs} +2 -2
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.js +1 -1
- package/dist/{types-B8HZYWV3.cjs → types-1iJ_FnQQ.cjs} +1 -1
- package/dist/{types-y3mhxOUA.js → types-D5du68Vp.js} +1 -1
- package/dist/{urlsParser-bb8ciRFg.cjs → urlsParser-Dax4iVNC.cjs} +1 -1
- package/dist/{urlsParser-v_1DKvyf.js → urlsParser-NAp2LwWP.js} +1 -1
- package/dist/{useAppDetails-eP2hBuid.cjs → useAppDetails-D3T6kJY_.cjs} +4 -4
- package/dist/{useAppDetails-BPXln8UE.js → useAppDetails-xPVs6fW7.js} +4 -4
- package/dist/{useGraphQLConfig-v9veUbvJ.cjs → useGraphQLConfig-B1DaVvFx.cjs} +2 -2
- package/dist/{useGraphQLConfig-Btszi6cG.js → useGraphQLConfig-BtPxjtxw.js} +2 -2
- package/dist/{utils-D_nGHczN.js → utils-BZT_oZ3n.js} +1 -1
- package/dist/{utils-SjlIHajO.cjs → utils-D3MjNkd3.cjs} +2 -2
- package/dist/{utils-CWzuvlOR.js → utils-DMwh3QbT.js} +2 -2
- package/dist/{utils-CJk5iwQI.cjs → utils-qtHPLFby.cjs} +1 -1
- package/package.json +1 -1
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +11 -3
- package/src/contexts/cdnContext/cdnContext.tsx +11 -9
- package/dist/amplitudeContext-BWmXliMI.cjs +0 -243
- package/dist/amplitudeContext-BjMlg5RV.js +0 -227
- package/dist/cdnContext-CJ2BNLAD.js +0 -38
- package/dist/cdnContext-lkC-AE6A.cjs +0 -53
- package/dist/src/application/commerce-api.js +0 -408
- package/dist/src/application/logging/logger.js +0 -16
- package/dist/src/application/models/graphql/index.js +0 -3
- package/dist/src/application/models/graphql/queries/getMerchantColorsQuery.js +0 -13
- package/dist/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.js +0 -13
- package/dist/src/application/models/graphql/queries/getMerchantOrgIdQuery.js +0 -10
- package/dist/src/application/models/guards/api/index.js +0 -12
- package/dist/src/application/models/guards/api/isApiFormResponse.js +0 -59
- package/dist/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +0 -22
- package/dist/src/application/models/guards/api/isApiOrderResponseAttributes.js +0 -91
- package/dist/src/application/models/guards/api/isApiOrgConfigResults.js +0 -188
- package/dist/src/application/models/guards/api/isApiOrganizationConfig.js +0 -115
- package/dist/src/application/models/guards/api/isApiPDPEventAttributes.js +0 -16
- package/dist/src/application/models/guards/api/isApiPLPEventAttributes.js +0 -26
- package/dist/src/application/models/guards/api/isApiPageResponseAttributes.js +0 -15
- package/dist/src/application/models/guards/api/isApiProductResponseAttributes.js +0 -65
- package/dist/src/application/models/guards/api/isApiProductSearchAttributes.js +0 -15
- package/dist/src/application/models/guards/api/isApiProductSearchFilterAttributes.js +0 -10
- package/dist/src/application/models/guards/api/isApiQueryTypedEventAttributes.js +0 -4
- package/dist/src/application/models/guards/api/isApiResponse.js +0 -33
- package/dist/src/application/models/guards/api/isApiReviewResponseAttributes.js +0 -22
- package/dist/src/application/models/guards/api/isApiReviewRichInformation.js +0 -23
- package/dist/src/application/models/guards/api/isApiSearchEventAttributes.js +0 -20
- package/dist/src/application/models/guards/api/isApiSuggestion.js +0 -24
- package/dist/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.js +0 -4
- package/dist/src/application/models/guards/api/isApiTextResponseAttributes.js +0 -4
- package/dist/src/application/models/guards/api/isApiUserEvent.js +0 -18
- package/dist/src/application/models/guards/graphQL/isGraphQLColorsConfig.js +0 -41
- package/dist/src/application/models/guards/isBaseEcommerceEvent.js +0 -14
- package/dist/src/application/models/guards/isGA4EcommerceEvent.js +0 -14
- package/dist/src/application/models/guards/isLegacyUAEcommerceEvent.js +0 -14
- package/dist/src/application/models/guards/isMobilePLPChatPlacementParameter.js +0 -4
- package/dist/src/application/models/guards/isSpanxTakeAQuizCtaParameter.js +0 -1
- package/dist/src/application/models/guards/isVariantInfo.js +0 -28
- package/dist/src/application/models/guards/utils.js +0 -34
- package/dist/src/application/models/index.js +0 -34
- package/dist/src/application/models/utils/snakeToCamelTransformer.js +0 -71
- package/dist/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.js +0 -65
- package/dist/src/application/models/validators/validateGraphQLColorsConfig.js +0 -9
- package/dist/src/application/models/validators/validateGraphQLFrontendConfig.js +0 -420
- package/dist/src/application/models/validators/validateGraphQLOrgId.js +0 -6
- package/dist/src/application/models/validators/validateMobilePLPChatPlacementParameter.js +0 -9
- package/dist/src/application/models/validators/validateOrgConfigResults.js +0 -44
- package/dist/src/application/models/validators/validateOrganizationConfig.js +0 -34
- package/dist/src/application/models/validators/validateResponse.js +0 -173
- package/dist/src/application/models/validators/validateSuggestion.js +0 -13
- package/dist/src/application/models/validators/validateUserEvent.js +0 -91
- package/dist/src/application/utils/analyticsUtils.js +0 -95
- package/dist/src/application/utils/coreContextToApiContext.js +0 -8
- package/dist/src/application/utils/coreUserEventToApiUserEvent.js +0 -90
- package/dist/src/application/utils/divideArray.js +0 -7
- package/dist/src/application/utils/domObserver.js +0 -85
- package/dist/src/application/utils/elementObserver.js +0 -186
- package/dist/src/application/utils/imageFilter.js +0 -11
- package/dist/src/application/utils/index.js +0 -21
- package/dist/src/application/utils/merchantUtils.js +0 -15
- package/dist/src/application/utils/messageFromFormSubmittedEvent.js +0 -19
- package/dist/src/application/utils/messageFromQueryEvent.js +0 -35
- package/dist/src/application/utils/messageFromResponse.js +0 -123
- package/dist/src/application/utils/messageFromSuggestionEvent.js +0 -27
- package/dist/src/application/utils/mouseEventTypes.js +0 -1
- package/dist/src/application/utils/mutationHelper.js +0 -33
- package/dist/src/application/utils/nextMessageRequestToApiRequest.js +0 -29
- package/dist/src/application/utils/nodeSelector.js +0 -101
- package/dist/src/application/utils/overrides.js +0 -144
- package/dist/src/application/utils/stringUtils.js +0 -47
- package/dist/src/application/utils/supportedEventRequestToApiRequest.js +0 -7
- package/dist/src/application/utils/urlsParser.js +0 -33
- package/dist/src/application/utils/validation.js +0 -5
- package/dist/src/atoms/amplitude/amplitudeTrackEventAtom.js +0 -4
- package/dist/src/atoms/app/index.js +0 -23
- package/dist/src/atoms/app/variant.js +0 -102
- package/dist/src/atoms/atomStore/atomStore.js +0 -28
- package/dist/src/atoms/atomStore/index.js +0 -1
- package/dist/src/atoms/chat/chatState.js +0 -32
- package/dist/src/atoms/chat/form.js +0 -16
- package/dist/src/atoms/chat/index.js +0 -23
- package/dist/src/atoms/chat/lastMessage.js +0 -10
- package/dist/src/atoms/chat/messageQueue.js +0 -68
- package/dist/src/atoms/chat/performanceMetrics.js +0 -70
- package/dist/src/atoms/chat/renderedWidgetRefs.js +0 -24
- package/dist/src/atoms/chat/replies.js +0 -42
- package/dist/src/atoms/chat/suggestions.js +0 -29
- package/dist/src/atoms/envive/enviveConfig.js +0 -67
- package/dist/src/atoms/globalSearch/globalSearch.js +0 -8
- package/dist/src/atoms/globalSearch/index.js +0 -1
- package/dist/src/atoms/org/customerService.js +0 -6
- package/dist/src/atoms/org/graphqlConfig.js +0 -8
- package/dist/src/atoms/org/index.js +0 -4
- package/dist/src/atoms/org/newOrgConfigAtom.js +0 -2
- package/dist/src/atoms/org/orgAnalyticsConfig.js +0 -8
- package/dist/src/atoms/search/index.js +0 -1
- package/dist/src/atoms/search/productFilters.js +0 -163
- package/dist/src/atoms/search/productRetrievalAPI.js +0 -50
- package/dist/src/atoms/search/productRetrievalAdapter.js +0 -14
- package/dist/src/atoms/search/productSorter.js +0 -13
- package/dist/src/atoms/search/searchAPI.js +0 -140
- package/dist/src/atoms/search/searchServiceAdapter.js +0 -14
- package/dist/src/atoms/search/utils.js +0 -15
- package/dist/src/config/index.js +0 -1
- package/dist/src/config/locators/components/chat/entrypoints.js +0 -10
- package/dist/src/config/locators/components/chat/index.js +0 -21
- package/dist/src/config/locators/components/chat/preview.js +0 -11
- package/dist/src/config/locators/components/chat/variants/index.js +0 -12
- package/dist/src/config/locators/components/common/buttons.js +0 -6
- package/dist/src/config/locators/components/common/cards.js +0 -17
- package/dist/src/config/locators/components/common/index.js +0 -4
- package/dist/src/config/locators/components/common/links.js +0 -1
- package/dist/src/config/locators/components/common/tables.js +0 -1
- package/dist/src/config/locators/components/floating-button.js +0 -2
- package/dist/src/config/locators/components/index.js +0 -3
- package/dist/src/config/locators/components/report-issue.js +0 -13
- package/dist/src/config/locators/components/search/index.js +0 -5
- package/dist/src/config/locators/components/shadow-dom.js +0 -1
- package/dist/src/config/locators/embedded.js +0 -20
- package/dist/src/config/locators/index.js +0 -4
- package/dist/src/contexts/amplitudeContext/amplitudeContext.js +0 -271
- package/dist/src/contexts/amplitudeContext/index.js +0 -1
- package/dist/src/contexts/cdnContext/cdnContext.js +0 -28
- package/dist/src/contexts/cdnContext/index.js +0 -1
- package/dist/src/contexts/enviveConfigContext/enviveConfigContext.js +0 -37
- package/dist/src/contexts/enviveConfigContext/index.js +0 -1
- package/dist/src/contexts/enviveCssContext/enviveCssContext.js +0 -31
- package/dist/src/contexts/enviveCssContext/index.js +0 -1
- package/dist/src/contexts/featureFlagContext/featureFlagContext.js +0 -109
- package/dist/src/contexts/featureFlagContext/index.js +0 -1
- package/dist/src/contexts/featureFlagServiceContext/featureFlagServiceContext.js +0 -47
- package/dist/src/contexts/featureFlagServiceContext/index.js +0 -1
- package/dist/src/contexts/graphqlContext/graphqlContext.js +0 -87
- package/dist/src/contexts/graphqlContext/index.js +0 -1
- package/dist/src/contexts/localStorageContext/index.js +0 -1
- package/dist/src/contexts/localStorageContext/localStorageContext.js +0 -95
- package/dist/src/contexts/newOrgConfigContext/index.js +0 -1
- package/dist/src/contexts/newOrgConfigContext/newOrgConfigContext.js +0 -33
- package/dist/src/contexts/searchContext/index.js +0 -1
- package/dist/src/contexts/searchContext/searchContext.js +0 -131
- package/dist/src/contexts/sessionStorageContext/index.js +0 -1
- package/dist/src/contexts/sessionStorageContext/sessionStorageContext.js +0 -43
- package/dist/src/contexts/shopifyUrlContext/index.js +0 -1
- package/dist/src/contexts/shopifyUrlContext/shopifyUrlContext.js +0 -62
- package/dist/src/contexts/systemSettingsContext/index.js +0 -1
- package/dist/src/contexts/systemSettingsContext/systemSettingsContext.js +0 -29
- package/dist/src/contexts/userIdentityContext/index.js +0 -1
- package/dist/src/contexts/userIdentityContext/userIdentityContext.js +0 -118
- package/dist/src/events/index.js +0 -51
- package/dist/src/events/registerAnalyticsListeners.js +0 -32
- package/dist/src/exceptions/index.js +0 -2
- package/dist/src/exceptions/sessionExceptions.js +0 -6
- package/dist/src/exceptions/unsupportedProductExceptions.js +0 -6
- package/dist/src/hooks/AmplitudeOperations/index.js +0 -1
- package/dist/src/hooks/AmplitudeOperations/useAmplitudeOperations.js +0 -24
- package/dist/src/hooks/AppDetails/index.js +0 -1
- package/dist/src/hooks/AppDetails/useAppDetails.js +0 -26
- package/dist/src/hooks/BlockBackButton/index.js +0 -1
- package/dist/src/hooks/BlockBackButton/useBlockBackButton.js +0 -23
- package/dist/src/hooks/CdnOperations/index.js +0 -1
- package/dist/src/hooks/CdnOperations/useCdnOperations.js +0 -13
- package/dist/src/hooks/ChatToggle/index.js +0 -1
- package/dist/src/hooks/ChatToggle/useChatToggle.js +0 -50
- package/dist/src/hooks/ChatToggleAnalytics/index.js +0 -1
- package/dist/src/hooks/ChatToggleAnalytics/useChatToggleAnalytics.js +0 -11
- package/dist/src/hooks/CustomerSupportHandoff/index.js +0 -1
- package/dist/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.js +0 -32
- package/dist/src/hooks/Debounce/index.js +0 -1
- package/dist/src/hooks/Debounce/useDebounce.js +0 -13
- package/dist/src/hooks/ElementObserver/index.js +0 -1
- package/dist/src/hooks/ElementObserver/useElementObserver.js +0 -208
- package/dist/src/hooks/GrabAndScroll/index.js +0 -1
- package/dist/src/hooks/GrabAndScroll/useGrabAndScroll.js +0 -105
- package/dist/src/hooks/GraphQLConfig/index.js +0 -1
- package/dist/src/hooks/GraphQLConfig/useGraphQLConfig.js +0 -54
- package/dist/src/hooks/IdentifyUser/index.js +0 -1
- package/dist/src/hooks/IdentifyUser/useIdentifyUser.js +0 -28
- package/dist/src/hooks/ImageResolver/index.js +0 -1
- package/dist/src/hooks/ImageResolver/useImageResolver.js +0 -45
- package/dist/src/hooks/Intersection/index.js +0 -1
- package/dist/src/hooks/Intersection/useIntersection.js +0 -20
- package/dist/src/hooks/IsSmallScreen/index.js +0 -1
- package/dist/src/hooks/IsSmallScreen/useIsSmallScreen.js +0 -16
- package/dist/src/hooks/LocalStorageOperations/index.js +0 -1
- package/dist/src/hooks/LocalStorageOperations/useLocalStorageOperations.js +0 -64
- package/dist/src/hooks/MessageFilter/index.js +0 -1
- package/dist/src/hooks/MessageFilter/useMessageFilter.js +0 -37
- package/dist/src/hooks/MessageScrollObserver/index.js +0 -1
- package/dist/src/hooks/MessageScrollObserver/useMessageScrollObserver.js +0 -35
- package/dist/src/hooks/NewOrgConfig/index.js +0 -1
- package/dist/src/hooks/NewOrgConfig/useNewOrgConfig.js +0 -5
- package/dist/src/hooks/Search/index.js +0 -1
- package/dist/src/hooks/Search/useRecommendedProducts.js +0 -35
- package/dist/src/hooks/Search/useSearch.js +0 -224
- package/dist/src/hooks/Search/useSearchInput.js +0 -192
- package/dist/src/hooks/SearchOperations/index.js +0 -1
- package/dist/src/hooks/SearchOperations/useSearchOperations.js +0 -78
- package/dist/src/hooks/SessionStorageOperations/index.js +0 -1
- package/dist/src/hooks/SessionStorageOperations/useSessionStorageOperations.js +0 -20
- package/dist/src/hooks/ShopifyUrlOperations/index.js +0 -1
- package/dist/src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.js +0 -34
- package/dist/src/hooks/SnapCalculator/index.js +0 -1
- package/dist/src/hooks/SnapCalculator/useSnapCalculator.js +0 -22
- package/dist/src/hooks/SystemSettingsContext/index.js +0 -1
- package/dist/src/hooks/SystemSettingsContext/useSystemSettingsContext.js +0 -9
- package/dist/src/hooks/TrackComponentVisibleEvent/index.js +0 -1
- package/dist/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +0 -45
- package/dist/src/hooks/UpdateAnalyticsProps/index.js +0 -1
- package/dist/src/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.js +0 -43
- package/dist/src/hooks/utils.js +0 -116
- package/dist/src/interceptors/index.js +0 -1
- package/dist/src/interceptors/useMessageInterceptor.js +0 -24
- package/dist/src/types/ApiResponse.js +0 -1
- package/dist/src/types/FilterAttribute.js +0 -3
- package/dist/src/types/Message.js +0 -24
- package/dist/src/types/Suggestion.js +0 -3
- package/dist/src/types/index.js +0 -4
- package/dist/src/util/colorVar.js +0 -3
- package/dist/src/util/configVersion.js +0 -4
- package/dist/src/util/domInsertion.js +0 -16
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MessageRole as MessageRole$1, MessageType as MessageType$1, SpiffyMetricsEventName } from "./dist-C38adNK1.js";
|
|
2
|
-
import { MessageRole, MessageType } from "./types-
|
|
2
|
+
import { MessageRole, MessageType } from "./types-D5du68Vp.js";
|
|
3
3
|
import { isBaseEcommerceEvent, isGA4EcommerceEvent, isLegacyUAEcommerceEvent } from "./models-Cw0QcbQv.js";
|
|
4
4
|
import { logger_default } from "./logger-BMVdhQOV.js";
|
|
5
5
|
import { PLPAttributeCategory, ResponseCategory, UserEventCategory } from "@spiffy-ai/commerce-api-client";
|
|
@@ -604,4 +604,4 @@ const validateEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
|
604
604
|
|
|
605
605
|
//#endregion
|
|
606
606
|
export { NodeSelector, SelectorFactory, StringUtils, applyOverrides, coreContextToApiContext, coreSupportedEventRequestToApiRequest, coreUserEventToApiUserEvent, divideArray, getRecentProductImageUrls, initAmplitude, initDataLayerWrapper, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest, prepareMerchantPage, validateEmail };
|
|
607
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ1d6dXZsT1IuanMiLCJuYW1lcyI6WyJldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIk1lc3NhZ2VUeXBlIiwiTWVzc2FnZVJvbGUiLCJNZXNzYWdlVHlwZSIsIk1lc3NhZ2VSb2xlIiwiTWVzc2FnZVR5cGUiLCJub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCIsIm91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvYW5hbHl0aWNzVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZUNvbnRleHRUb0FwaUNvbnRleHQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2RpdmlkZUFycmF5LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2ltYWdlRmlsdGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lcmNoYW50VXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21RdWVyeUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25vZGVTZWxlY3Rvci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9vdmVycmlkZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3RyaW5nVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQsXG4gIGlzR0E0RWNvbW1lcmNlRXZlbnQsXG4gIGlzQmFzZUVjb21tZXJjZUV2ZW50LFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgQmFzZUVjb21tZXJjZUV2ZW50LCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcIkBlbnZpdmUtYWkvdHlwZXNcIjtcblxuY29uc3QgTk9STUFMSVpFRF9BRERfVE9fQ0FSVF9FVkVOVF9OQU1FUyA9IFtcImFkZHRvY2FydFwiLCBcImFkZGVkdG9jYXJ0XCJdO1xuY29uc3QgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTID0gMTA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgR29vZ2xlIEFuYWx5dGljcyBldmVudCBpcyBhbiBhZGRfdG9fY2FydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNBZGRUb0NhcnRFdmVudCA9IChldmVudDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFdmVudCA9IGV2ZW50LnJlcGxhY2UoL1stX10vZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMuc29tZSgobmFtZSkgPT5cbiAgICBub3JtYWxpemVkRXZlbnQuaW5jbHVkZXMobmFtZSlcbiAgKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIGFuIGFkZF90b19jYXJ0IGV2ZW50IGluIEFtcGxpdHVkZS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHRyYWNrLlxuICovXG5jb25zdCBoYW5kbGVBZGRUb0NhcnRFdmVudCA9IChcbiAgZXZlbnQ6IEJhc2VFY29tbWVyY2VFdmVudCxcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAoaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50KGV2ZW50KSkge1xuICAgIGV2ZW50UHJvcHMgPSB7XG4gICAgICBpdGVtczogZXZlbnQuZWNvbW1lcmNlLmFkZC5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBwcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICBwcmljZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3QucXVhbnRpdHksXG4gICAgICB9KSksXG4gICAgICBjdXJyZW5jeTogZXZlbnQuZWNvbW1lcmNlLmFkZC5jdXJyZW5jeUNvZGUsXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJsZWdhY3lfdW5pdmVyc2FsX2FuYWx5dGljc1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNHQTRFY29tbWVyY2VFdmVudChldmVudCkpIHtcbiAgICBldmVudFByb3BzID0ge1xuICAgICAgaXRlbXM6IGV2ZW50LmVjb21tZXJjZS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0uaXRlbV9jYXRlZ29yeSxcbiAgICAgICAgcHJpY2U6IGl0ZW0ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgfSkpLFxuICAgICAgY3VycmVuY3k6IGV2ZW50LmVjb21tZXJjZS5jdXJyZW5jeSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcImdvb2dsZV9hbmFseXRpY3NfNFwiLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRQcm9wcyA9IHtcbiAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHsgLi4uZXZlbnQgfSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcInVua25vd25cIixcbiAgICB9O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5BZGRUb0NhcnRDbGlja2VkLCB7XG4gICAgZXZlbnRQcm9wcyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSB3aW5kb3cuZGF0YUxheWVyLnB1c2ggbWV0aG9kIHRvIGludGVyY2VwdCBhZGRfdG9fY2FydCBldmVudHMgYW5kIHNlbmQgdGhlbSB0byBBbXBsaXR1ZGUuXG4gKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIGRhdGFMYXllciBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0RGF0YUxheWVyV3JhcHBlciA9IChcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgLy8gY3VycmVudGx5LCBvdXIgYnVuZGxlIGlzIGFsd2F5cyBsb2FkZWQgYWZ0ZXIgR1RNIGhhcyBpbml0aWFsaXplZCBHQS9kYXRhTGF5ZXJcbiAgLy8gd2UnbGwgbmVlZCB0aGlzIGNoZWNrIGhlcmUgaWYvd2hlbiB3ZSBsb2FkIHNwaWZmeSBiZWZvcmUvb3V0c2lkZSBvZiBHVE1cbiAgY29uc3QgY2hlY2tBbmRJbml0aWFsaXplID0gKCkgPT4ge1xuICAgIGlmICghd2luZG93LmRhdGFMYXllciB8fCAhKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55KS5wdXNoKSB7XG4gICAgICBhdHRlbXB0cyArPSAxO1xuXG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gQ0hFQ0tfREFUQV9MQVlFUl9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICAgIGBbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgbm90IGF2YWlsYWJsZSBhZnRlciAke0NIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTfSBhdHRlbXB0c2BcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGNoZWNrQW5kSW5pdGlhbGl6ZSwgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgXCJbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgaXMgYXZhaWxhYmxlLCB3cmFwcGluZyBwdXNoIGZ1bmN0aW9uLi4uXCJcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpbmFsUHVzaCA9IHdpbmRvdy5kYXRhTGF5ZXIucHVzaDtcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2ggPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzQmFzZUVjb21tZXJjZUV2ZW50KGFyZ3NbMF0pICYmXG4gICAgICAgIGlzQWRkVG9DYXJ0RXZlbnQoKGFyZ3NbMF0gYXMgYW55KS5ldmVudClcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVBZGRUb0NhcnRFdmVudChhcmdzWzBdIGFzIEJhc2VFY29tbWVyY2VFdmVudCwgdHJhY2spO1xuICAgICAgfVxuXG4gICAgICAvLyBJTVBPUlRBTlQ6IGNhbGwgdGhlIG9yaWdpbmFsIHB1c2ggbWV0aG9kIHNvIHRoYXQgdGhlIGV2ZW50IGlzIHN0aWxsIGxvZ2dlZCB0byBHQVxuICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaC5hcHBseSh3aW5kb3cuZGF0YUxheWVyLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIGNoZWNrQW5kSW5pdGlhbGl6ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRBbXBsaXR1ZGUgPSAoXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBuZWVkZWQgYW55bW9yZSBpZiBBbXBsaXR1ZGUgaXMgaW5pdGlhbGl6ZWQgdmlhIGNvbnRleHQuXG4gIC8vIEZvciBub3csIHdlJ2xsIGtlZXAgaXQgYW5kIHBhc3MgdGhlIHRyYWNrIGZ1bmN0aW9uLlxuICAvLyBJZiBpdCdzIHRydWx5IHJlZHVuZGFudCwgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIuXG4gIHRyYWNrKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkKTsgLy8gRXhhbXBsZSB1c2FnZSwgYWRqdXN0IGFzIG5lZWRlZFxufTtcbiIsImltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dCBhcyBBcGlDb250ZXh0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuaW50ZXJmYWNlIENvcmVDb250ZXh0IGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaUNvbnRleHQ+IHt9XG5cbmV4cG9ydCBjb25zdCBjb3JlQ29udGV4dFRvQXBpQ29udGV4dCA9IChjb250ZXh0OiBDb3JlQ29udGV4dCk6IEFwaUNvbnRleHQgPT4gKHtcbiAgY2hhdF9pZDogY29udGV4dC5jaGF0SWQsXG4gIG9yZ19pZDogY29udGV4dC5vcmdJZCxcbiAgdXNlcl9pZDogY29udGV4dC51c2VySWQsXG4gIG9yZ19zaG9ydF9uYW1lOiBjb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgc291cmNlOiBjb250ZXh0LnNvdXJjZSxcbiAgZW52OiBjb250ZXh0LmVudixcbn0pO1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQge1xuICBVc2VyRXZlbnQgYXMgQXBpVXNlckV2ZW50LFxuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgUExQSWRBdHRyaWJ1dGVzLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCA9IChkYXRhOiBVc2VyRXZlbnQpOiBBcGlVc2VyRXZlbnQgPT4ge1xuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgfHxcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5BZGRUb0NhcnRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0X2lkOiBkYXRhLmF0dHJpYnV0ZXMucHJvZHVjdElkLFxuICAgICAgICBwYXJlbnRfcHJvZHVjdF9pZDogZGF0YS5hdHRyaWJ1dGVzLnBhcmVudFByb2R1Y3RJZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjYXRlZ29yeTogUExQQXR0cmlidXRlQ2F0ZWdvcnkuSWQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAvLyB3ZSdyZSBvbmx5IGhhbmRsaW5nIGlkIGF0dHJpYnV0ZXMgZm9yIG5vd1xuICAgICAgICAgIGlkOiAoZGF0YS5hdHRyaWJ1dGVzLmF0dHJpYnV0ZXMgYXMgUExQSWRBdHRyaWJ1dGVzKS5pZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc2VhcmNoX3Rlcm06IGRhdGEuYXR0cmlidXRlcy5zZWFyY2hUZXJtLFxuICAgICAgICBzZWxlY3RlZF9maWx0ZXJzOiBkYXRhLmF0dHJpYnV0ZXMuc2VsZWN0ZWRGaWx0ZXJzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzdWdnZXN0aW9uX2lkOiBkYXRhLmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgICBwYWdlX3Zpc2l0X2NhdGVnb3J5OiBkYXRhLmF0dHJpYnV0ZXMucGFnZVZpc2l0Q2F0ZWdvcnksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsbGVkX3NjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hIH0sXG4gICAgICAgIGZvcm1fcmVzcG9uc2VfaWQ6IGRhdGEuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCxcbiAgICAgICAgZm9ybV90eXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybVR5cGUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGFwcF9sb2FkZWQgZXZlbnQsIHdoZW4gd2Ugc3RhcnQgdG8gdXNlIGFwcF91bmxvYWRlZCB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBoZXJlXG4gIHJldHVybiB7XG4gICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgfTtcbn07XG4iLCJleHBvcnQgY29uc3QgZGl2aWRlQXJyYXkgPSA8VD4oYXJyYXk6IFRbXSwgc2l6ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHJvd3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDEpIHtcbiAgICByb3dzLnB1c2goYXJyYXkuZmlsdGVyKChfOiBULCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCAlIHNpemUgPT09IGkpKTtcbiAgfVxuICByZXR1cm4gcm93cztcbn07XG4iLCJpbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlVHlwZSwgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjZW50UHJvZHVjdEltYWdlVXJscyA9IChcbiAgbGFzdE1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gIGN1cnJlbnRQcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbikgPT4ge1xuICBjb25zdCBwcm9kdWN0TWVzc2FnZXMgPSBsYXN0TWVzc2FnZXNcbiAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YT8uaW1hZ2VVcmwpXG4gICAgLm1hcCgobSkgPT4gbSBhcyBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhKTtcbiAgLy8gcHV0IGFkZGVkIHByb2R1Y3QgaW1hZ2UgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdFxuICByZXR1cm4gW1xuICAgIC4uLnByb2R1Y3RNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ubWV0YWRhdGE/LmlkID09PSBjdXJyZW50UHJvZHVjdElkKSxcbiAgICAuLi5wcm9kdWN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLm1ldGFkYXRhPy5pZCAhPT0gY3VycmVudFByb2R1Y3RJZCksXG4gIF0ubWFwKChtKSA9PiBtLm1ldGFkYXRhIS5pbWFnZVVybCEpO1xufTtcbiIsImV4cG9ydCBjb25zdCBwcmVwYXJlTWVyY2hhbnRQYWdlID0gKCkgPT4ge1xuICBsZXQgbWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0ndmlld3BvcnQnXVwiKTtcbiAgaWYgKG1ldGFWaWV3cG9ydCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtZXRhVmlld3BvcnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgIGNvbnN0IGhhc01heGltdW1TY2FsZSA9IGNvbnRlbnQ/LmluY2x1ZGVzKFwibWF4aW11bS1zY2FsZT0xXCIpXG4gICAgaWYgKCFoYXNNYXhpbXVtU2NhbGUpIHtcbiAgICAgIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIGAke2NvbnRlbnR9LCBtYXhpbXVtLXNjYWxlPTFgKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xuICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpXG4gIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MVwiKVxuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFWaWV3cG9ydCk7XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQge1xuICBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCA9IChcbiAgZXZlbnQ6IFVzZXJFdmVudCxcbiAgZm9ybVJlc3BvbnNlQXR0cmlidXRlczogRm9ybVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddLFxuKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSAhPT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmb3JtU3RyaW5nQ29udGVudHMgPSBPYmplY3QuZW50cmllcyhmb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7dmFsdWUudGl0bGV9OiAke2V2ZW50LmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hW2tleV19YClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGNvbnRlbnQ6IGZvcm1TdHJpbmdDb250ZW50cyxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgVXNlckV2ZW50IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHF1ZXJ5IFVzZXJFdmVudCBvYmplY3QgaW50byBhIE1lc3NhZ2Ugb2JqZWN0IGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSB1c2VyIGV2ZW50IG9iamVjdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgcXVlcnkgZXZlbnQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VGcm9tUXVlcnlFdmVudCA9IChldmVudDogVXNlckV2ZW50KTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBjb250ZW50OiBldmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzZWFyY2hUZXJtOiBldmVudC5hdHRyaWJ1dGVzLnNlYXJjaFRlcm0gfHwgJycsXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZXZlbnQuYXR0cmlidXRlcy5zZWxlY3RlZEZpbHRlcnMgfHwgW10sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlUm9sZSwgQXBpUmVzcG9uc2UgfSBmcm9tIFwic3JjL3R5cGVzXCI7XG5pbXBvcnQgeyBSZXNwb25zZUNhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBzZXJ2ZXIgUmVzcG9uc2Ugb2JqZWN0IGludG8gYSBNZXNzYWdlIG9iamVjdCBmb3IgcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBjb250YWluaW5nIG1vZGVsIGdlbmVyYXRlZCBjb250ZW50XG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBrbm93biBhdHRyaWJ1dGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbVJlc3BvbnNlID0gKFxuICByZXNwb25zZT86IEFwaVJlc3BvbnNlXG4pOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY29udGVudDogcmVzcG9uc2UuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXcsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICByZXZpZXc6IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmV2aWV3LFxuICAgICAgICByZXZpZXdlcjogcmVzcG9uc2UuYXR0cmlidXRlcy5yZXZpZXdlcixcbiAgICAgICAgc3RhcnM6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHRpdGxlOiByZXNwb25zZS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByaWNoSW5mb3JtYXRpb246IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcixcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlBhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5yZXNwb25zZS5hdHRyaWJ1dGVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZm9ybVR5cGU6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5Py5mb3JtVHlwZSxcbiAgICAgICAgZmllbGRzOiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKS5tYXAoXG4gICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS50aXRsZSxcbiAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICBmb3JtYXQ6IHZhbHVlLmZvcm1hdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiByZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5yZXF1aXJlZC5pbmNsdWRlcyhrZXkpLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5PcmRlcixcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgU3VnZ2VzdGlvbiB9IGZyb20gXCJzcmMvdHlwZXNcIjtcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgVXNlckV2ZW50IG9iamVjdCBpbnRvIGEgTWVzc2FnZSBvYmplY3QgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIFVzZXJFdmVudCBvYmplY3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbnMgQSBsaXN0IG9mIGdlbmVyYXRlZCBzdWdnZXN0aW9ucyB0byBtYXRjaCB0aGUgZXZlbnQgdG9cbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgc3VnZ2VzdGlvbiBjbGljayBldmVudCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQgPSAoXG4gIGV2ZW50OiBVc2VyRXZlbnQsXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW11cbik6IE1lc3NhZ2UgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgY29uc3QgeyBzdWdnZXN0aW9uSWQgfSA9IGV2ZW50LmF0dHJpYnV0ZXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBjcmVhdGVkQXQ6IGV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbkNvbnRlbnQ6XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZmluZCgocykgPT4gcy5pZCA9PT0gc3VnZ2VzdGlvbklkKT8uY29udGVudCA/PyBcIlwiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QgYXMgQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCB9IGZyb20gJy4vY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QgPSAoXG4gIGRhdGE6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IEFwaU5leHRNZXNzYWdlUmVxdWVzdCA9PiAoe1xuICBjb250ZXh0OiB7XG4gICAgY2hhdF9pZDogZGF0YS5jb250ZXh0LmNoYXRJZCxcbiAgICBvcmdfaWQ6IGRhdGEuY29udGV4dC5vcmdJZCxcbiAgICBvcmdfc2hvcnRfbmFtZTogZGF0YS5jb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgICB1c2VyX2lkOiBkYXRhLmNvbnRleHQudXNlcklkLFxuICAgIHNvdXJjZTogZGF0YS5jb250ZXh0LnNvdXJjZSxcbiAgICBlbnY6IGRhdGEuY29udGV4dC5lbnYsXG4gIH0sXG4gIGlkOiBkYXRhLmlkLFxuICBmZWF0dXJlX2ZsYWdzOiBkYXRhLmZlYXR1cmVGbGFncyxcbiAgdXNlcl9ldmVudHM6IGRhdGEudXNlckV2ZW50cz8ubWFwKCh1c2VyRXZlbnQpID0+IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCh1c2VyRXZlbnQpKSxcbiAgZ2VuZXJhdGlvbl9wYXJhbXM6IHtcbiAgICBtb2RlbDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5tb2RlbCxcbiAgICBtYXhfdG9rZW5zOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm1heFRva2VucyxcbiAgICBzdG9wOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0b3AsXG4gICAgc3RyZWFtOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0cmVhbSxcbiAgICB0ZW1wZXJhdHVyZTogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50ZW1wZXJhdHVyZSxcbiAgICB0b3BfcDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50b3BQLFxuICAgIG51bV9zdWdnZXN0aW9uczogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5udW1TdWdnZXN0aW9ucyxcbiAgICByZXNwb25zZV9zeXN0ZW1fcHJvbXB0OiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnJlc3BvbnNlU3lzdGVtUHJvbXB0LFxuICAgIHN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5zdWdnZXN0aW9uU3lzdGVtUHJvbXB0LFxuICAgIHJlc3BvbnNlX2NhY2hpbmc6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ucmVzcG9uc2VDYWNoaW5nLFxuICB9LFxufSk7XG4iLCJleHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVNlbGVjdG9yIHtcbiAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgcm9vdDogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcbiAgICB0aGlzLnJvb3QgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGdldFBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0dGVybjtcbiAgfVxuXG4gIHNldFJvb3Qocm9vdDogRG9jdW1lbnQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICB9XG5cbiAgZ2V0Um9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290O1xuICB9XG5cbiAgYWJzdHJhY3QgcGFyc2UoKTogTm9kZSB8IG51bGw7XG59XG5cbmNsYXNzIFF1ZXJ5U2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRQYXR0ZXJuKCkpO1xuICB9XG59XG5cbmNsYXNzIElEU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UGF0dGVybigpKSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIFhwYXRoU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpPy5ldmFsdWF0ZShcbiAgICAgIHRoaXMuZ2V0UGF0dGVybigpLFxuICAgICAgdGhpcy5nZXRSb290KCksXG4gICAgICBudWxsLFxuICAgICAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUsXG4gICAgICBudWxsLFxuICAgICk/LnNpbmdsZU5vZGVWYWx1ZSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIENoYWluU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHNlbGVjdG9ySW5kZXggPSAwO1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMuZ2V0UGF0dGVybigpLnNwbGl0KCdAJyk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc2VsZWN0b3JzLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBwYXJzZUNoYWluID0gKHBhdHRlcm46IHN0cmluZywgcHJldk5vZGU/OiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JGYWN0b3J5LnBhcnNlKHBhdHRlcm4pO1xuXG4gICAgICBpZiAocHJldk5vZGUpIHtcbiAgICAgICAgc2VsZWN0b3Iuc2V0Um9vdChwcmV2Tm9kZSBhcyBEb2N1bWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gc2VsZWN0b3IucGFyc2UoKTtcbiAgICAgIGlmIChzZWxlY3RvckluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICBsZXQgbm9kZTogTm9kZSB8IG51bGwgfCB1bmRlZmluZWQgPSBjdXJyZW50Tm9kZSB8fCBkb2N1bWVudDtcbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpPy5zaGFkb3dSb290KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpLnNoYWRvd1Jvb3Q7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpPy5jb250ZW50V2luZG93KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbKytzZWxlY3RvckluZGV4XS50cmltKCksIG5vZGUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbc2VsZWN0b3JJbmRleF0udHJpbSgpKTtcbiAgfVxufVxuXG5jbGFzcyBFbXB0eSBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCcnKTtcbiAgfVxuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBwYXJzZShjb21wb3NlZFNlbGVjdG9yPzogc3RyaW5nKSB7XG4gICAgaWYgKCFjb21wb3NlZFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gbmV3IEVtcHR5KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXQgPSBjb21wb3NlZFNlbGVjdG9yLnNwbGl0KCd8Jyk7XG4gICAgY29uc3QgdHlwZSA9IHNwbGl0WzBdO1xuICAgIGNvbnN0IHNlbGVjdG9yID0gc3BsaXRbMV07XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2lkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQoc2VsZWN0b3IpO1xuICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XG4gICAgICBjYXNlICd4cGF0aCc6XG4gICAgICAgIHJldHVybiB0aGlzLnhwYXRoKHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgRW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2soc2VsZWN0b3I/OiBOb2RlU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPz8gbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgY2hhaW4ocGF0dGVybj86IHN0cmluZykge1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IENoYWluU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZChwYXR0ZXJuPzogc3RyaW5nKTogTm9kZVNlbGVjdG9yIHtcbiAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBJRFNlbGVjdG9yKHBhdHRlcm4pIDogbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgcXVlcnkocGF0dGVybj86IHN0cmluZyk6IE5vZGVTZWxlY3RvciB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUXVlcnlTZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG5cbiAgc3RhdGljIHhwYXRoKHBhdHRlcm4/OiBzdHJpbmcpOiBOb2RlU2VsZWN0b3Ige1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IFhwYXRoU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRGVsZXRlT3AsIE1lcmdlT3B0aW9ucywgTm9JbmZlciwgT3ZlcnJpZGUsIFJlcGxhY2VPcCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHg6IHVua25vd24pOiB4IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICAhIXggJiZcbiAgICB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh4KSAmJlxuICAgICEoeCBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgISh4IGluc3RhbmNlb2YgUmVnRXhwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1JlcGxhY2UoeDogdW5rbm93bik6IHggaXMgUmVwbGFjZU9wPHVua25vd24+IHtcbiAgcmV0dXJuICEheCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgJyRyZXBsYWNlJyBpbiAoeCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59XG5mdW5jdGlvbiBpc0RlbGV0ZSh4OiB1bmtub3duKTogeCBpcyBEZWxldGVPcCB7XG4gIHJldHVybiAhIXggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICh4IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS4kZGVsZXRlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB4O1xuICByZXR1cm4gKFxuICAgIHggPT09IG51bGwgfHxcbiAgICB0ID09PSAnc3RyaW5nJyB8fFxuICAgIHQgPT09ICdudW1iZXInIHx8XG4gICAgdCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdCA9PT0gJ2JpZ2ludCcgfHxcbiAgICB0ID09PSAnc3ltYm9sJyB8fFxuICAgIHQgPT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZlByaW1pdGl2ZXMoYXJyOiB1bmtub3duW10pOiBib29sZWFuIHtcbiAgaWYgKGFyci5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsgLy8gYW1iaWd1b3VzLCBkZWZhdWx0IHRvIG1lcmdlLWJ5LWluZGV4IG9uIGVtcHR5XG4gIC8vIElmIGV2ZXJ5IGRlZmluZWQgZWxlbWVudCBpcyBwcmltaXRpdmUsIHRyZWF0IGFzIHByaW1pdGl2ZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB2ID0gYXJyW2ldO1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgIWlzUHJpbWl0aXZlVmFsdWUodikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VBbnkoYmFzZUFueTogdW5rbm93biwgcGF0Y2hBbnk6IHVua25vd24sIG9wdHM6IE1lcmdlT3B0aW9ucyk6IHVua25vd24ge1xuICBpZiAoaXNSZXBsYWNlKHBhdGNoQW55KSkgcmV0dXJuIHBhdGNoQW55LiRyZXBsYWNlIGFzIHVua25vd247XG4gIGlmIChpc0RlbGV0ZShwYXRjaEFueSkpIHJldHVybiB1bmRlZmluZWQ7IC8vIGNhbGxlciBkZWxldGVzIHRoZSBrZXlcblxuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlQW55KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGNoQW55KSkge1xuICAgICAgY29uc3QgYmFzZUFyciA9IGJhc2VBbnkgYXMgdW5rbm93bltdO1xuICAgICAgY29uc3QgcGF0Y2hBcnIgPSBwYXRjaEFueSBhcyB1bmtub3duW107XG4gICAgICBjb25zdCBzaG91bGRSZXBsYWNlID1cbiAgICAgICAgb3B0cy5hcnJheVN0cmF0ZWd5ID09PSAncmVwbGFjZScgfHxcbiAgICAgICAgaXNBcnJheU9mUHJpbWl0aXZlcyhiYXNlQXJyKSB8fFxuICAgICAgICBpc0FycmF5T2ZQcmltaXRpdmVzKHBhdGNoQXJyKTtcbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKSByZXR1cm4gcGF0Y2hBbnkgYXMgdW5rbm93bjtcbiAgICAgIGNvbnN0IG91dCA9IGJhc2VBcnIuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG91dC5sZW5ndGgsIHBhdGNoQXJyLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHBWYWwgPSBwYXRjaEFycltpXTtcbiAgICAgICAgaWYgKHBWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dFtpXSA9IG1lcmdlQW55KG91dFtpXSwgcFZhbCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQgYXMgdW5rbm93bjtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VBbnkgYXMgdW5rbm93bjtcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KGJhc2VBbnkpICYmIGlzUGxhaW5PYmplY3QocGF0Y2hBbnkpKSB7XG4gICAgY29uc3QgYmFzZU9iaiA9IGJhc2VBbnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcGF0Y2hPYmogPSBwYXRjaEFueSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5iYXNlT2JqIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2hPYmopKSB7XG4gICAgICBjb25zdCBwVmFsID0gcGF0Y2hPYmpba2V5XTtcbiAgICAgIGlmIChwVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbGVhdmUgYXMtaXNcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5udWxsRGVsZXRlcyAmJiBwVmFsID09PSBudWxsKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlKHBWYWwpKSB7XG4gICAgICAgIG91dFtrZXldID0gcFZhbC4kcmVwbGFjZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWxldGUocFZhbCkpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUFueShiYXNlT2JqPy5ba2V5XSwgcFZhbCwgb3B0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgdW5rbm93bjtcbiAgfVxuXG4gIHJldHVybiAocGF0Y2hBbnkgYXMgdW5rbm93bikgPz8gYmFzZUFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3ZlcnJpZGVzPFQ+KFxuICBiYXNlOiBULFxuICBwYXRjaDogT3ZlcnJpZGU8Tm9JbmZlcjxUPj4sXG4gIG9wdHM6IE1lcmdlT3B0aW9ucyA9IHt9LFxuKTogVCB7XG4gIGNvbnN0IHsgYXJyYXlTdHJhdGVneSA9ICdtZXJnZUJ5SW5kZXgnLCBudWxsRGVsZXRlcyA9IGZhbHNlIH0gPSBvcHRzO1xuXG4gIC8vIEhhbmRsZSB3aG9sZS1ub2RlIGNvbnRyb2wgb3BlcmF0b3JzIG9uIHBhdGNoIGl0c2VsZlxuICBpZiAoaXNSZXBsYWNlKHBhdGNoKSkgcmV0dXJuIHBhdGNoLiRyZXBsYWNlIGFzIFQ7XG4gIGlmIChpc0RlbGV0ZShwYXRjaCkpIHJldHVybiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUO1xuXG4gIC8vIEFycmF5c1xuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlKSkge1xuICAgIGlmIChpc1JlcGxhY2UocGF0Y2gpKSByZXR1cm4gcGF0Y2guJHJlcGxhY2UgYXMgVDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICAgIGlmIChhcnJheVN0cmF0ZWd5ID09PSAncmVwbGFjZScpIHJldHVybiBwYXRjaCBhcyB1bmtub3duIGFzIFQ7XG4gICAgICAvLyBtZXJnZSBieSBpbmRleFxuICAgICAgY29uc3Qgb3V0ID0gKGJhc2UgYXMgdW5rbm93bltdKS5zbGljZSgpO1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgob3V0Lmxlbmd0aCwgcGF0Y2gubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4OyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgcFZhbCA9IChwYXRjaCBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICBpZiAocFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3V0W2ldID0gbWVyZ2VBbnkob3V0W2ldLCBwVmFsLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG91dCBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIC8vIGludmFsaWQgcGF0Y2ggdHlwZSBmb3IgYW4gYXJyYXkg4oaSIGlnbm9yZSBhbmQgcmV0dXJuIGJhc2VcbiAgICByZXR1cm4gYmFzZSBhcyBUO1xuICB9XG5cbiAgLy8gUGxhaW4gb2JqZWN0c1xuICBpZiAoaXNQbGFpbk9iamVjdChiYXNlKSAmJiBpc1BsYWluT2JqZWN0KHBhdGNoKSkge1xuICAgIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLihiYXNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAgIGNvbnN0IHBhdGNoT2JqID0gcGF0Y2ggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2hPYmopKSB7XG4gICAgICBjb25zdCBwVmFsID0gcGF0Y2hPYmpba2V5XTtcbiAgICAgIGlmIChwVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbGVhdmUgZXhpc3RpbmcgdmFsdWVcbiAgICAgIH0gZWxzZSBpZiAobnVsbERlbGV0ZXMgJiYgcFZhbCA9PT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZShwVmFsKSkge1xuICAgICAgICBvdXRba2V5XSA9IHBWYWwuJHJlcGxhY2U7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVsZXRlKHBWYWwpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJWYWwgPSAoYmFzZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUFueShiVmFsLCBwVmFsLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dCBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvLyBGb3IgcHJpbWl0aXZlcyBvciB3aGVuIHBhdGNoIGlzIHByaW1pdGl2ZSwgcGF0Y2ggd2lucyBpZiBkZWZpbmVkXG4gIHJldHVybiAoKHBhdGNoIGFzIHVua25vd24pID8/IGJhc2UpIGFzIFQ7XG59XG4iLCJcbmNsYXNzIFN0cmluZ1V0aWxzIHtcbiAgc3RhdGljIGlzTnVsbE9yRW1wdHkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWVUcmltbWVkID09PSAnJztcbiAgfVxuXG4gIHN0YXRpYyB0cmltVG9OdWxsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gICAgcmV0dXJuIFN0cmluZ1V0aWxzLmlzTnVsbE9yRW1wdHkodmFsdWVUcmltbWVkKSA/IHVuZGVmaW5lZCA6IHZhbHVlVHJpbW1lZDtcbiAgfVxuXG4gIHN0YXRpYyBjYXBpdGFsaXplKHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgZmlyc3QgcGF0dGVybiBpbiBhbiBhcnJheSB0aGF0IG1hdGNoZXMgYSBnaXZlbiBVUkwuXG4gICAqIFBhdHRlcm5zIGNhbiBpbmNsdWRlIGEgc2luZ2xlIHdpbGRjYXJkICcqJyB3aGljaCBtYXRjaGVzIGFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybnNcbiAgICogQHBhcmFtIHVybFRvVGVzdFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGZpbmRNYXRjaGluZ1BhdHRlcm4ocGF0dGVybnM6IHN0cmluZ1tdLCB1cmxUb1Rlc3Q6IExvY2F0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXVybFRvVGVzdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIC8vIFRlc3Qgb25seSBpZiBhIHBhdGhuYW1lIGlzIHByZXNlbnQuXG4gICAgICBpZiAodXJsVG9UZXN0LnBhdGhuYW1lICE9PSAnLycpIHtcbiAgICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVyblxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjaGFyYWN0ZXJzIGxpa2UgJy4nLCAnKycsICc/JywgJygnLCBldGMuLCBpbiB0aGUgcGF0dGVybiBhcmUgdHJlYXRlZCBsaXRlcmFsbHkuXG4gICAgICAgIGNvbnN0IGVzY2FwZWRQYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9bLis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgd2lsZGNhcmQgJyonIHdpdGggaXRzIHJlZ2V4IGVxdWl2YWxlbnQgJy4qJyAobWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHplcm8gb3IgbW9yZSB0aW1lcylcbiAgICAgICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gZXNjYXBlZFBhdHRlcm4ucmVwbGFjZSgvXFwqL2csICcuKicpO1xuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXR0ZXJufSRgKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodXJsVG9UZXN0LnBhdGhuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5zdGFydHNXaXRoKHVybFRvVGVzdC5ob3N0bmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFN0cmluZ1V0aWxzIH07XG4iLCJpbXBvcnQgeyBTdXBwb3J0ZWRFdmVudFJlcXVlc3QgYXMgQXBpU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50IH0gZnJvbSAnLi9jb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQnO1xuaW1wb3J0IHsgY29yZUNvbnRleHRUb0FwaUNvbnRleHQgfSBmcm9tICcuL2NvcmVDb250ZXh0VG9BcGlDb250ZXh0JztcblxudHlwZSBDb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0O1xuXG5leHBvcnQgY29uc3QgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCA9IChcbiAgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdDogQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCxcbik6IEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9PiAoe1xuICBpZDogY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5pZCxcbiAgdXNlcl9ldmVudDogY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QudXNlckV2ZW50KSxcbiAgY29udGV4dDogY29yZUNvbnRleHRUb0FwaUNvbnRleHQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5jb250ZXh0KSxcbn0pO1xuIiwiLy8gVGhpcyBlbWFpbCB2YWxpZGF0ZXMgdGhhdCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGBAYCBzeW1ib2wsXG4vLyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGBAYCBzeW1ib2wgYW5kIHRoZSBgLmAgc3ltYm9sLFxuLy8gYW5kIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGAuYCBzeW1ib2xcbi8vIEl0IGRvZXMgTk9UIHZhbGlkYXRlIGFsbCBwb3NzaWJsZSBlbWFpbCBmb3JtYXRzLCBidXQgaXQgaXMgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLE1BQU0scUNBQXFDLENBQUMsYUFBYSxjQUFjO0FBQ3ZFLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sZ0NBQWdDOzs7Ozs7OztBQVN0QyxNQUFNLG9CQUFvQixVQUEyQjtDQUNuRCxNQUFNLGtCQUFrQixNQUFNLFFBQVEsU0FBUyxHQUFHLENBQUMsYUFBYTtBQUNoRSxRQUFPLG1DQUFtQyxNQUFNLFNBQzlDLGdCQUFnQixTQUFTLEtBQUssQ0FDL0I7Ozs7Ozs7QUFRSCxNQUFNLHdCQUNKLE9BQ0EsVUFJRztDQUNILElBQUlBO0FBRUosS0FBSSx5QkFBeUIsTUFBTSxDQUNqQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsSUFBSSxTQUFTLEtBQUssYUFBYTtHQUNwRCxXQUFXLFFBQVE7R0FDbkIsZUFBZSxRQUFRO0dBQ3ZCLE9BQU8sUUFBUTtHQUNmLFVBQVUsUUFBUTtHQUNuQixFQUFFO0VBQ0gsVUFBVSxNQUFNLFVBQVUsSUFBSTtFQUM5QixzQkFBc0I7RUFDdkI7VUFDUSxvQkFBb0IsTUFBTSxDQUNuQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVU7R0FDMUMsV0FBVyxLQUFLO0dBQ2hCLGVBQWUsS0FBSztHQUNwQixPQUFPLEtBQUs7R0FDWixVQUFVLEtBQUs7R0FDaEIsRUFBRTtFQUNILFVBQVUsTUFBTSxV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
|
|
607
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtRE13aDNRYlQuanMiLCJuYW1lcyI6WyJldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIk1lc3NhZ2VUeXBlIiwiTWVzc2FnZVJvbGUiLCJNZXNzYWdlVHlwZSIsIk1lc3NhZ2VSb2xlIiwiTWVzc2FnZVR5cGUiLCJub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCIsIm91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvYW5hbHl0aWNzVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZUNvbnRleHRUb0FwaUNvbnRleHQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2RpdmlkZUFycmF5LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2ltYWdlRmlsdGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lcmNoYW50VXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21RdWVyeUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25vZGVTZWxlY3Rvci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9vdmVycmlkZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3RyaW5nVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQsXG4gIGlzR0E0RWNvbW1lcmNlRXZlbnQsXG4gIGlzQmFzZUVjb21tZXJjZUV2ZW50LFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgQmFzZUVjb21tZXJjZUV2ZW50LCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcIkBlbnZpdmUtYWkvdHlwZXNcIjtcblxuY29uc3QgTk9STUFMSVpFRF9BRERfVE9fQ0FSVF9FVkVOVF9OQU1FUyA9IFtcImFkZHRvY2FydFwiLCBcImFkZGVkdG9jYXJ0XCJdO1xuY29uc3QgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTID0gMTA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgR29vZ2xlIEFuYWx5dGljcyBldmVudCBpcyBhbiBhZGRfdG9fY2FydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNBZGRUb0NhcnRFdmVudCA9IChldmVudDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFdmVudCA9IGV2ZW50LnJlcGxhY2UoL1stX10vZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMuc29tZSgobmFtZSkgPT5cbiAgICBub3JtYWxpemVkRXZlbnQuaW5jbHVkZXMobmFtZSlcbiAgKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIGFuIGFkZF90b19jYXJ0IGV2ZW50IGluIEFtcGxpdHVkZS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHRyYWNrLlxuICovXG5jb25zdCBoYW5kbGVBZGRUb0NhcnRFdmVudCA9IChcbiAgZXZlbnQ6IEJhc2VFY29tbWVyY2VFdmVudCxcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAoaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50KGV2ZW50KSkge1xuICAgIGV2ZW50UHJvcHMgPSB7XG4gICAgICBpdGVtczogZXZlbnQuZWNvbW1lcmNlLmFkZC5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBwcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICBwcmljZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3QucXVhbnRpdHksXG4gICAgICB9KSksXG4gICAgICBjdXJyZW5jeTogZXZlbnQuZWNvbW1lcmNlLmFkZC5jdXJyZW5jeUNvZGUsXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJsZWdhY3lfdW5pdmVyc2FsX2FuYWx5dGljc1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNHQTRFY29tbWVyY2VFdmVudChldmVudCkpIHtcbiAgICBldmVudFByb3BzID0ge1xuICAgICAgaXRlbXM6IGV2ZW50LmVjb21tZXJjZS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0uaXRlbV9jYXRlZ29yeSxcbiAgICAgICAgcHJpY2U6IGl0ZW0ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgfSkpLFxuICAgICAgY3VycmVuY3k6IGV2ZW50LmVjb21tZXJjZS5jdXJyZW5jeSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcImdvb2dsZV9hbmFseXRpY3NfNFwiLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRQcm9wcyA9IHtcbiAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHsgLi4uZXZlbnQgfSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcInVua25vd25cIixcbiAgICB9O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5BZGRUb0NhcnRDbGlja2VkLCB7XG4gICAgZXZlbnRQcm9wcyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSB3aW5kb3cuZGF0YUxheWVyLnB1c2ggbWV0aG9kIHRvIGludGVyY2VwdCBhZGRfdG9fY2FydCBldmVudHMgYW5kIHNlbmQgdGhlbSB0byBBbXBsaXR1ZGUuXG4gKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIGRhdGFMYXllciBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0RGF0YUxheWVyV3JhcHBlciA9IChcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgLy8gY3VycmVudGx5LCBvdXIgYnVuZGxlIGlzIGFsd2F5cyBsb2FkZWQgYWZ0ZXIgR1RNIGhhcyBpbml0aWFsaXplZCBHQS9kYXRhTGF5ZXJcbiAgLy8gd2UnbGwgbmVlZCB0aGlzIGNoZWNrIGhlcmUgaWYvd2hlbiB3ZSBsb2FkIHNwaWZmeSBiZWZvcmUvb3V0c2lkZSBvZiBHVE1cbiAgY29uc3QgY2hlY2tBbmRJbml0aWFsaXplID0gKCkgPT4ge1xuICAgIGlmICghd2luZG93LmRhdGFMYXllciB8fCAhKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55KS5wdXNoKSB7XG4gICAgICBhdHRlbXB0cyArPSAxO1xuXG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gQ0hFQ0tfREFUQV9MQVlFUl9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICAgIGBbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgbm90IGF2YWlsYWJsZSBhZnRlciAke0NIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTfSBhdHRlbXB0c2BcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGNoZWNrQW5kSW5pdGlhbGl6ZSwgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgXCJbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgaXMgYXZhaWxhYmxlLCB3cmFwcGluZyBwdXNoIGZ1bmN0aW9uLi4uXCJcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpbmFsUHVzaCA9IHdpbmRvdy5kYXRhTGF5ZXIucHVzaDtcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2ggPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzQmFzZUVjb21tZXJjZUV2ZW50KGFyZ3NbMF0pICYmXG4gICAgICAgIGlzQWRkVG9DYXJ0RXZlbnQoKGFyZ3NbMF0gYXMgYW55KS5ldmVudClcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVBZGRUb0NhcnRFdmVudChhcmdzWzBdIGFzIEJhc2VFY29tbWVyY2VFdmVudCwgdHJhY2spO1xuICAgICAgfVxuXG4gICAgICAvLyBJTVBPUlRBTlQ6IGNhbGwgdGhlIG9yaWdpbmFsIHB1c2ggbWV0aG9kIHNvIHRoYXQgdGhlIGV2ZW50IGlzIHN0aWxsIGxvZ2dlZCB0byBHQVxuICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaC5hcHBseSh3aW5kb3cuZGF0YUxheWVyLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIGNoZWNrQW5kSW5pdGlhbGl6ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRBbXBsaXR1ZGUgPSAoXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBuZWVkZWQgYW55bW9yZSBpZiBBbXBsaXR1ZGUgaXMgaW5pdGlhbGl6ZWQgdmlhIGNvbnRleHQuXG4gIC8vIEZvciBub3csIHdlJ2xsIGtlZXAgaXQgYW5kIHBhc3MgdGhlIHRyYWNrIGZ1bmN0aW9uLlxuICAvLyBJZiBpdCdzIHRydWx5IHJlZHVuZGFudCwgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIuXG4gIHRyYWNrKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkKTsgLy8gRXhhbXBsZSB1c2FnZSwgYWRqdXN0IGFzIG5lZWRlZFxufTtcbiIsImltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dCBhcyBBcGlDb250ZXh0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuaW50ZXJmYWNlIENvcmVDb250ZXh0IGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaUNvbnRleHQ+IHt9XG5cbmV4cG9ydCBjb25zdCBjb3JlQ29udGV4dFRvQXBpQ29udGV4dCA9IChjb250ZXh0OiBDb3JlQ29udGV4dCk6IEFwaUNvbnRleHQgPT4gKHtcbiAgY2hhdF9pZDogY29udGV4dC5jaGF0SWQsXG4gIG9yZ19pZDogY29udGV4dC5vcmdJZCxcbiAgdXNlcl9pZDogY29udGV4dC51c2VySWQsXG4gIG9yZ19zaG9ydF9uYW1lOiBjb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgc291cmNlOiBjb250ZXh0LnNvdXJjZSxcbiAgZW52OiBjb250ZXh0LmVudixcbn0pO1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQge1xuICBVc2VyRXZlbnQgYXMgQXBpVXNlckV2ZW50LFxuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgUExQSWRBdHRyaWJ1dGVzLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCA9IChkYXRhOiBVc2VyRXZlbnQpOiBBcGlVc2VyRXZlbnQgPT4ge1xuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgfHxcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5BZGRUb0NhcnRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0X2lkOiBkYXRhLmF0dHJpYnV0ZXMucHJvZHVjdElkLFxuICAgICAgICBwYXJlbnRfcHJvZHVjdF9pZDogZGF0YS5hdHRyaWJ1dGVzLnBhcmVudFByb2R1Y3RJZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjYXRlZ29yeTogUExQQXR0cmlidXRlQ2F0ZWdvcnkuSWQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAvLyB3ZSdyZSBvbmx5IGhhbmRsaW5nIGlkIGF0dHJpYnV0ZXMgZm9yIG5vd1xuICAgICAgICAgIGlkOiAoZGF0YS5hdHRyaWJ1dGVzLmF0dHJpYnV0ZXMgYXMgUExQSWRBdHRyaWJ1dGVzKS5pZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc2VhcmNoX3Rlcm06IGRhdGEuYXR0cmlidXRlcy5zZWFyY2hUZXJtLFxuICAgICAgICBzZWxlY3RlZF9maWx0ZXJzOiBkYXRhLmF0dHJpYnV0ZXMuc2VsZWN0ZWRGaWx0ZXJzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzdWdnZXN0aW9uX2lkOiBkYXRhLmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgICBwYWdlX3Zpc2l0X2NhdGVnb3J5OiBkYXRhLmF0dHJpYnV0ZXMucGFnZVZpc2l0Q2F0ZWdvcnksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsbGVkX3NjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hIH0sXG4gICAgICAgIGZvcm1fcmVzcG9uc2VfaWQ6IGRhdGEuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCxcbiAgICAgICAgZm9ybV90eXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybVR5cGUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGFwcF9sb2FkZWQgZXZlbnQsIHdoZW4gd2Ugc3RhcnQgdG8gdXNlIGFwcF91bmxvYWRlZCB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBoZXJlXG4gIHJldHVybiB7XG4gICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgfTtcbn07XG4iLCJleHBvcnQgY29uc3QgZGl2aWRlQXJyYXkgPSA8VD4oYXJyYXk6IFRbXSwgc2l6ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHJvd3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDEpIHtcbiAgICByb3dzLnB1c2goYXJyYXkuZmlsdGVyKChfOiBULCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCAlIHNpemUgPT09IGkpKTtcbiAgfVxuICByZXR1cm4gcm93cztcbn07XG4iLCJpbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlVHlwZSwgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjZW50UHJvZHVjdEltYWdlVXJscyA9IChcbiAgbGFzdE1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gIGN1cnJlbnRQcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbikgPT4ge1xuICBjb25zdCBwcm9kdWN0TWVzc2FnZXMgPSBsYXN0TWVzc2FnZXNcbiAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YT8uaW1hZ2VVcmwpXG4gICAgLm1hcCgobSkgPT4gbSBhcyBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhKTtcbiAgLy8gcHV0IGFkZGVkIHByb2R1Y3QgaW1hZ2UgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdFxuICByZXR1cm4gW1xuICAgIC4uLnByb2R1Y3RNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ubWV0YWRhdGE/LmlkID09PSBjdXJyZW50UHJvZHVjdElkKSxcbiAgICAuLi5wcm9kdWN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLm1ldGFkYXRhPy5pZCAhPT0gY3VycmVudFByb2R1Y3RJZCksXG4gIF0ubWFwKChtKSA9PiBtLm1ldGFkYXRhIS5pbWFnZVVybCEpO1xufTtcbiIsImV4cG9ydCBjb25zdCBwcmVwYXJlTWVyY2hhbnRQYWdlID0gKCkgPT4ge1xuICBsZXQgbWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0ndmlld3BvcnQnXVwiKTtcbiAgaWYgKG1ldGFWaWV3cG9ydCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtZXRhVmlld3BvcnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgIGNvbnN0IGhhc01heGltdW1TY2FsZSA9IGNvbnRlbnQ/LmluY2x1ZGVzKFwibWF4aW11bS1zY2FsZT0xXCIpXG4gICAgaWYgKCFoYXNNYXhpbXVtU2NhbGUpIHtcbiAgICAgIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIGAke2NvbnRlbnR9LCBtYXhpbXVtLXNjYWxlPTFgKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xuICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpXG4gIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MVwiKVxuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFWaWV3cG9ydCk7XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQge1xuICBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCA9IChcbiAgZXZlbnQ6IFVzZXJFdmVudCxcbiAgZm9ybVJlc3BvbnNlQXR0cmlidXRlczogRm9ybVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddLFxuKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSAhPT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmb3JtU3RyaW5nQ29udGVudHMgPSBPYmplY3QuZW50cmllcyhmb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7dmFsdWUudGl0bGV9OiAke2V2ZW50LmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hW2tleV19YClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGNvbnRlbnQ6IGZvcm1TdHJpbmdDb250ZW50cyxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgVXNlckV2ZW50IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHF1ZXJ5IFVzZXJFdmVudCBvYmplY3QgaW50byBhIE1lc3NhZ2Ugb2JqZWN0IGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSB1c2VyIGV2ZW50IG9iamVjdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgcXVlcnkgZXZlbnQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VGcm9tUXVlcnlFdmVudCA9IChldmVudDogVXNlckV2ZW50KTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBjb250ZW50OiBldmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzZWFyY2hUZXJtOiBldmVudC5hdHRyaWJ1dGVzLnNlYXJjaFRlcm0gfHwgJycsXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZXZlbnQuYXR0cmlidXRlcy5zZWxlY3RlZEZpbHRlcnMgfHwgW10sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlUm9sZSwgQXBpUmVzcG9uc2UgfSBmcm9tIFwic3JjL3R5cGVzXCI7XG5pbXBvcnQgeyBSZXNwb25zZUNhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBzZXJ2ZXIgUmVzcG9uc2Ugb2JqZWN0IGludG8gYSBNZXNzYWdlIG9iamVjdCBmb3IgcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBjb250YWluaW5nIG1vZGVsIGdlbmVyYXRlZCBjb250ZW50XG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBrbm93biBhdHRyaWJ1dGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbVJlc3BvbnNlID0gKFxuICByZXNwb25zZT86IEFwaVJlc3BvbnNlXG4pOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY29udGVudDogcmVzcG9uc2UuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXcsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICByZXZpZXc6IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmV2aWV3LFxuICAgICAgICByZXZpZXdlcjogcmVzcG9uc2UuYXR0cmlidXRlcy5yZXZpZXdlcixcbiAgICAgICAgc3RhcnM6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHRpdGxlOiByZXNwb25zZS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByaWNoSW5mb3JtYXRpb246IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcixcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlBhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5yZXNwb25zZS5hdHRyaWJ1dGVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZm9ybVR5cGU6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5Py5mb3JtVHlwZSxcbiAgICAgICAgZmllbGRzOiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKS5tYXAoXG4gICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS50aXRsZSxcbiAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICBmb3JtYXQ6IHZhbHVlLmZvcm1hdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiByZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5yZXF1aXJlZC5pbmNsdWRlcyhrZXkpLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5PcmRlcixcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgU3VnZ2VzdGlvbiB9IGZyb20gXCJzcmMvdHlwZXNcIjtcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgVXNlckV2ZW50IG9iamVjdCBpbnRvIGEgTWVzc2FnZSBvYmplY3QgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIFVzZXJFdmVudCBvYmplY3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbnMgQSBsaXN0IG9mIGdlbmVyYXRlZCBzdWdnZXN0aW9ucyB0byBtYXRjaCB0aGUgZXZlbnQgdG9cbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgc3VnZ2VzdGlvbiBjbGljayBldmVudCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQgPSAoXG4gIGV2ZW50OiBVc2VyRXZlbnQsXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW11cbik6IE1lc3NhZ2UgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgY29uc3QgeyBzdWdnZXN0aW9uSWQgfSA9IGV2ZW50LmF0dHJpYnV0ZXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBjcmVhdGVkQXQ6IGV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbkNvbnRlbnQ6XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZmluZCgocykgPT4gcy5pZCA9PT0gc3VnZ2VzdGlvbklkKT8uY29udGVudCA/PyBcIlwiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QgYXMgQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCB9IGZyb20gJy4vY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QgPSAoXG4gIGRhdGE6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IEFwaU5leHRNZXNzYWdlUmVxdWVzdCA9PiAoe1xuICBjb250ZXh0OiB7XG4gICAgY2hhdF9pZDogZGF0YS5jb250ZXh0LmNoYXRJZCxcbiAgICBvcmdfaWQ6IGRhdGEuY29udGV4dC5vcmdJZCxcbiAgICBvcmdfc2hvcnRfbmFtZTogZGF0YS5jb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgICB1c2VyX2lkOiBkYXRhLmNvbnRleHQudXNlcklkLFxuICAgIHNvdXJjZTogZGF0YS5jb250ZXh0LnNvdXJjZSxcbiAgICBlbnY6IGRhdGEuY29udGV4dC5lbnYsXG4gIH0sXG4gIGlkOiBkYXRhLmlkLFxuICBmZWF0dXJlX2ZsYWdzOiBkYXRhLmZlYXR1cmVGbGFncyxcbiAgdXNlcl9ldmVudHM6IGRhdGEudXNlckV2ZW50cz8ubWFwKCh1c2VyRXZlbnQpID0+IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCh1c2VyRXZlbnQpKSxcbiAgZ2VuZXJhdGlvbl9wYXJhbXM6IHtcbiAgICBtb2RlbDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5tb2RlbCxcbiAgICBtYXhfdG9rZW5zOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm1heFRva2VucyxcbiAgICBzdG9wOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0b3AsXG4gICAgc3RyZWFtOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0cmVhbSxcbiAgICB0ZW1wZXJhdHVyZTogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50ZW1wZXJhdHVyZSxcbiAgICB0b3BfcDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50b3BQLFxuICAgIG51bV9zdWdnZXN0aW9uczogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5udW1TdWdnZXN0aW9ucyxcbiAgICByZXNwb25zZV9zeXN0ZW1fcHJvbXB0OiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnJlc3BvbnNlU3lzdGVtUHJvbXB0LFxuICAgIHN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5zdWdnZXN0aW9uU3lzdGVtUHJvbXB0LFxuICAgIHJlc3BvbnNlX2NhY2hpbmc6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ucmVzcG9uc2VDYWNoaW5nLFxuICB9LFxufSk7XG4iLCJleHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVNlbGVjdG9yIHtcbiAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgcm9vdDogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcbiAgICB0aGlzLnJvb3QgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGdldFBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0dGVybjtcbiAgfVxuXG4gIHNldFJvb3Qocm9vdDogRG9jdW1lbnQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICB9XG5cbiAgZ2V0Um9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290O1xuICB9XG5cbiAgYWJzdHJhY3QgcGFyc2UoKTogTm9kZSB8IG51bGw7XG59XG5cbmNsYXNzIFF1ZXJ5U2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRQYXR0ZXJuKCkpO1xuICB9XG59XG5cbmNsYXNzIElEU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UGF0dGVybigpKSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIFhwYXRoU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpPy5ldmFsdWF0ZShcbiAgICAgIHRoaXMuZ2V0UGF0dGVybigpLFxuICAgICAgdGhpcy5nZXRSb290KCksXG4gICAgICBudWxsLFxuICAgICAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUsXG4gICAgICBudWxsLFxuICAgICk/LnNpbmdsZU5vZGVWYWx1ZSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIENoYWluU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHNlbGVjdG9ySW5kZXggPSAwO1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMuZ2V0UGF0dGVybigpLnNwbGl0KCdAJyk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc2VsZWN0b3JzLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBwYXJzZUNoYWluID0gKHBhdHRlcm46IHN0cmluZywgcHJldk5vZGU/OiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JGYWN0b3J5LnBhcnNlKHBhdHRlcm4pO1xuXG4gICAgICBpZiAocHJldk5vZGUpIHtcbiAgICAgICAgc2VsZWN0b3Iuc2V0Um9vdChwcmV2Tm9kZSBhcyBEb2N1bWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gc2VsZWN0b3IucGFyc2UoKTtcbiAgICAgIGlmIChzZWxlY3RvckluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICBsZXQgbm9kZTogTm9kZSB8IG51bGwgfCB1bmRlZmluZWQgPSBjdXJyZW50Tm9kZSB8fCBkb2N1bWVudDtcbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpPy5zaGFkb3dSb290KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpLnNoYWRvd1Jvb3Q7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpPy5jb250ZW50V2luZG93KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbKytzZWxlY3RvckluZGV4XS50cmltKCksIG5vZGUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbc2VsZWN0b3JJbmRleF0udHJpbSgpKTtcbiAgfVxufVxuXG5jbGFzcyBFbXB0eSBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCcnKTtcbiAgfVxuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBwYXJzZShjb21wb3NlZFNlbGVjdG9yPzogc3RyaW5nKSB7XG4gICAgaWYgKCFjb21wb3NlZFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gbmV3IEVtcHR5KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXQgPSBjb21wb3NlZFNlbGVjdG9yLnNwbGl0KCd8Jyk7XG4gICAgY29uc3QgdHlwZSA9IHNwbGl0WzBdO1xuICAgIGNvbnN0IHNlbGVjdG9yID0gc3BsaXRbMV07XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2lkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQoc2VsZWN0b3IpO1xuICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XG4gICAgICBjYXNlICd4cGF0aCc6XG4gICAgICAgIHJldHVybiB0aGlzLnhwYXRoKHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgRW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2soc2VsZWN0b3I/OiBOb2RlU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPz8gbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgY2hhaW4ocGF0dGVybj86IHN0cmluZykge1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IENoYWluU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZChwYXR0ZXJuPzogc3RyaW5nKTogTm9kZVNlbGVjdG9yIHtcbiAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBJRFNlbGVjdG9yKHBhdHRlcm4pIDogbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgcXVlcnkocGF0dGVybj86IHN0cmluZyk6IE5vZGVTZWxlY3RvciB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUXVlcnlTZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG5cbiAgc3RhdGljIHhwYXRoKHBhdHRlcm4/OiBzdHJpbmcpOiBOb2RlU2VsZWN0b3Ige1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IFhwYXRoU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRGVsZXRlT3AsIE1lcmdlT3B0aW9ucywgTm9JbmZlciwgT3ZlcnJpZGUsIFJlcGxhY2VPcCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHg6IHVua25vd24pOiB4IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICAhIXggJiZcbiAgICB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh4KSAmJlxuICAgICEoeCBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgISh4IGluc3RhbmNlb2YgUmVnRXhwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1JlcGxhY2UoeDogdW5rbm93bik6IHggaXMgUmVwbGFjZU9wPHVua25vd24+IHtcbiAgcmV0dXJuICEheCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgJyRyZXBsYWNlJyBpbiAoeCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59XG5mdW5jdGlvbiBpc0RlbGV0ZSh4OiB1bmtub3duKTogeCBpcyBEZWxldGVPcCB7XG4gIHJldHVybiAhIXggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICh4IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS4kZGVsZXRlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB4O1xuICByZXR1cm4gKFxuICAgIHggPT09IG51bGwgfHxcbiAgICB0ID09PSAnc3RyaW5nJyB8fFxuICAgIHQgPT09ICdudW1iZXInIHx8XG4gICAgdCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdCA9PT0gJ2JpZ2ludCcgfHxcbiAgICB0ID09PSAnc3ltYm9sJyB8fFxuICAgIHQgPT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZlByaW1pdGl2ZXMoYXJyOiB1bmtub3duW10pOiBib29sZWFuIHtcbiAgaWYgKGFyci5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsgLy8gYW1iaWd1b3VzLCBkZWZhdWx0IHRvIG1lcmdlLWJ5LWluZGV4IG9uIGVtcHR5XG4gIC8vIElmIGV2ZXJ5IGRlZmluZWQgZWxlbWVudCBpcyBwcmltaXRpdmUsIHRyZWF0IGFzIHByaW1pdGl2ZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB2ID0gYXJyW2ldO1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgIWlzUHJpbWl0aXZlVmFsdWUodikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VBbnkoYmFzZUFueTogdW5rbm93biwgcGF0Y2hBbnk6IHVua25vd24sIG9wdHM6IE1lcmdlT3B0aW9ucyk6IHVua25vd24ge1xuICBpZiAoaXNSZXBsYWNlKHBhdGNoQW55KSkgcmV0dXJuIHBhdGNoQW55LiRyZXBsYWNlIGFzIHVua25vd247XG4gIGlmIChpc0RlbGV0ZShwYXRjaEFueSkpIHJldHVybiB1bmRlZmluZWQ7IC8vIGNhbGxlciBkZWxldGVzIHRoZSBrZXlcblxuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlQW55KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGNoQW55KSkge1xuICAgICAgY29uc3QgYmFzZUFyciA9IGJhc2VBbnkgYXMgdW5rbm93bltdO1xuICAgICAgY29uc3QgcGF0Y2hBcnIgPSBwYXRjaEFueSBhcyB1bmtub3duW107XG4gICAgICBjb25zdCBzaG91bGRSZXBsYWNlID1cbiAgICAgICAgb3B0cy5hcnJheVN0cmF0ZWd5ID09PSAncmVwbGFjZScgfHxcbiAgICAgICAgaXNBcnJheU9mUHJpbWl0aXZlcyhiYXNlQXJyKSB8fFxuICAgICAgICBpc0FycmF5T2ZQcmltaXRpdmVzKHBhdGNoQXJyKTtcbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKSByZXR1cm4gcGF0Y2hBbnkgYXMgdW5rbm93bjtcbiAgICAgIGNvbnN0IG91dCA9IGJhc2VBcnIuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG91dC5sZW5ndGgsIHBhdGNoQXJyLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHBWYWwgPSBwYXRjaEFycltpXTtcbiAgICAgICAgaWYgKHBWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dFtpXSA9IG1lcmdlQW55KG91dFtpXSwgcFZhbCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQgYXMgdW5rbm93bjtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VBbnkgYXMgdW5rbm93bjtcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KGJhc2VBbnkpICYmIGlzUGxhaW5PYmplY3QocGF0Y2hBbnkpKSB7XG4gICAgY29uc3QgYmFzZU9iaiA9IGJhc2VBbnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcGF0Y2hPYmogPSBwYXRjaEFueSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5iYXNlT2JqIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2hPYmopKSB7XG4gICAgICBjb25zdCBwVmFsID0gcGF0Y2hPYmpba2V5XTtcbiAgICAgIGlmIChwVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbGVhdmUgYXMtaXNcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5udWxsRGVsZXRlcyAmJiBwVmFsID09PSBudWxsKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlKHBWYWwpKSB7XG4gICAgICAgIG91dFtrZXldID0gcFZhbC4kcmVwbGFjZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWxldGUocFZhbCkpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUFueShiYXNlT2JqPy5ba2V5XSwgcFZhbCwgb3B0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgdW5rbm93bjtcbiAgfVxuXG4gIHJldHVybiAocGF0Y2hBbnkgYXMgdW5rbm93bikgPz8gYmFzZUFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3ZlcnJpZGVzPFQ+KFxuICBiYXNlOiBULFxuICBwYXRjaDogT3ZlcnJpZGU8Tm9JbmZlcjxUPj4sXG4gIG9wdHM6IE1lcmdlT3B0aW9ucyA9IHt9LFxuKTogVCB7XG4gIGNvbnN0IHsgYXJyYXlTdHJhdGVneSA9ICdtZXJnZUJ5SW5kZXgnLCBudWxsRGVsZXRlcyA9IGZhbHNlIH0gPSBvcHRzO1xuXG4gIC8vIEhhbmRsZSB3aG9sZS1ub2RlIGNvbnRyb2wgb3BlcmF0b3JzIG9uIHBhdGNoIGl0c2VsZlxuICBpZiAoaXNSZXBsYWNlKHBhdGNoKSkgcmV0dXJuIHBhdGNoLiRyZXBsYWNlIGFzIFQ7XG4gIGlmIChpc0RlbGV0ZShwYXRjaCkpIHJldHVybiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUO1xuXG4gIC8vIEFycmF5c1xuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlKSkge1xuICAgIGlmIChpc1JlcGxhY2UocGF0Y2gpKSByZXR1cm4gcGF0Y2guJHJlcGxhY2UgYXMgVDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICAgIGlmIChhcnJheVN0cmF0ZWd5ID09PSAncmVwbGFjZScpIHJldHVybiBwYXRjaCBhcyB1bmtub3duIGFzIFQ7XG4gICAgICAvLyBtZXJnZSBieSBpbmRleFxuICAgICAgY29uc3Qgb3V0ID0gKGJhc2UgYXMgdW5rbm93bltdKS5zbGljZSgpO1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgob3V0Lmxlbmd0aCwgcGF0Y2gubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4OyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgcFZhbCA9IChwYXRjaCBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICBpZiAocFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3V0W2ldID0gbWVyZ2VBbnkob3V0W2ldLCBwVmFsLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG91dCBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIC8vIGludmFsaWQgcGF0Y2ggdHlwZSBmb3IgYW4gYXJyYXkg4oaSIGlnbm9yZSBhbmQgcmV0dXJuIGJhc2VcbiAgICByZXR1cm4gYmFzZSBhcyBUO1xuICB9XG5cbiAgLy8gUGxhaW4gb2JqZWN0c1xuICBpZiAoaXNQbGFpbk9iamVjdChiYXNlKSAmJiBpc1BsYWluT2JqZWN0KHBhdGNoKSkge1xuICAgIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLihiYXNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAgIGNvbnN0IHBhdGNoT2JqID0gcGF0Y2ggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2hPYmopKSB7XG4gICAgICBjb25zdCBwVmFsID0gcGF0Y2hPYmpba2V5XTtcbiAgICAgIGlmIChwVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbGVhdmUgZXhpc3RpbmcgdmFsdWVcbiAgICAgIH0gZWxzZSBpZiAobnVsbERlbGV0ZXMgJiYgcFZhbCA9PT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZShwVmFsKSkge1xuICAgICAgICBvdXRba2V5XSA9IHBWYWwuJHJlcGxhY2U7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVsZXRlKHBWYWwpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJWYWwgPSAoYmFzZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUFueShiVmFsLCBwVmFsLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dCBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvLyBGb3IgcHJpbWl0aXZlcyBvciB3aGVuIHBhdGNoIGlzIHByaW1pdGl2ZSwgcGF0Y2ggd2lucyBpZiBkZWZpbmVkXG4gIHJldHVybiAoKHBhdGNoIGFzIHVua25vd24pID8/IGJhc2UpIGFzIFQ7XG59XG4iLCJcbmNsYXNzIFN0cmluZ1V0aWxzIHtcbiAgc3RhdGljIGlzTnVsbE9yRW1wdHkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWVUcmltbWVkID09PSAnJztcbiAgfVxuXG4gIHN0YXRpYyB0cmltVG9OdWxsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gICAgcmV0dXJuIFN0cmluZ1V0aWxzLmlzTnVsbE9yRW1wdHkodmFsdWVUcmltbWVkKSA/IHVuZGVmaW5lZCA6IHZhbHVlVHJpbW1lZDtcbiAgfVxuXG4gIHN0YXRpYyBjYXBpdGFsaXplKHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgZmlyc3QgcGF0dGVybiBpbiBhbiBhcnJheSB0aGF0IG1hdGNoZXMgYSBnaXZlbiBVUkwuXG4gICAqIFBhdHRlcm5zIGNhbiBpbmNsdWRlIGEgc2luZ2xlIHdpbGRjYXJkICcqJyB3aGljaCBtYXRjaGVzIGFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybnNcbiAgICogQHBhcmFtIHVybFRvVGVzdFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGZpbmRNYXRjaGluZ1BhdHRlcm4ocGF0dGVybnM6IHN0cmluZ1tdLCB1cmxUb1Rlc3Q6IExvY2F0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXVybFRvVGVzdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIC8vIFRlc3Qgb25seSBpZiBhIHBhdGhuYW1lIGlzIHByZXNlbnQuXG4gICAgICBpZiAodXJsVG9UZXN0LnBhdGhuYW1lICE9PSAnLycpIHtcbiAgICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVyblxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjaGFyYWN0ZXJzIGxpa2UgJy4nLCAnKycsICc/JywgJygnLCBldGMuLCBpbiB0aGUgcGF0dGVybiBhcmUgdHJlYXRlZCBsaXRlcmFsbHkuXG4gICAgICAgIGNvbnN0IGVzY2FwZWRQYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9bLis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgd2lsZGNhcmQgJyonIHdpdGggaXRzIHJlZ2V4IGVxdWl2YWxlbnQgJy4qJyAobWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHplcm8gb3IgbW9yZSB0aW1lcylcbiAgICAgICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gZXNjYXBlZFBhdHRlcm4ucmVwbGFjZSgvXFwqL2csICcuKicpO1xuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXR0ZXJufSRgKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodXJsVG9UZXN0LnBhdGhuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5zdGFydHNXaXRoKHVybFRvVGVzdC5ob3N0bmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFN0cmluZ1V0aWxzIH07XG4iLCJpbXBvcnQgeyBTdXBwb3J0ZWRFdmVudFJlcXVlc3QgYXMgQXBpU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50IH0gZnJvbSAnLi9jb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQnO1xuaW1wb3J0IHsgY29yZUNvbnRleHRUb0FwaUNvbnRleHQgfSBmcm9tICcuL2NvcmVDb250ZXh0VG9BcGlDb250ZXh0JztcblxudHlwZSBDb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0O1xuXG5leHBvcnQgY29uc3QgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCA9IChcbiAgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdDogQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCxcbik6IEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9PiAoe1xuICBpZDogY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5pZCxcbiAgdXNlcl9ldmVudDogY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QudXNlckV2ZW50KSxcbiAgY29udGV4dDogY29yZUNvbnRleHRUb0FwaUNvbnRleHQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5jb250ZXh0KSxcbn0pO1xuIiwiLy8gVGhpcyBlbWFpbCB2YWxpZGF0ZXMgdGhhdCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGBAYCBzeW1ib2wsXG4vLyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGBAYCBzeW1ib2wgYW5kIHRoZSBgLmAgc3ltYm9sLFxuLy8gYW5kIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGAuYCBzeW1ib2xcbi8vIEl0IGRvZXMgTk9UIHZhbGlkYXRlIGFsbCBwb3NzaWJsZSBlbWFpbCBmb3JtYXRzLCBidXQgaXQgaXMgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLE1BQU0scUNBQXFDLENBQUMsYUFBYSxjQUFjO0FBQ3ZFLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sZ0NBQWdDOzs7Ozs7OztBQVN0QyxNQUFNLG9CQUFvQixVQUEyQjtDQUNuRCxNQUFNLGtCQUFrQixNQUFNLFFBQVEsU0FBUyxHQUFHLENBQUMsYUFBYTtBQUNoRSxRQUFPLG1DQUFtQyxNQUFNLFNBQzlDLGdCQUFnQixTQUFTLEtBQUssQ0FDL0I7Ozs7Ozs7QUFRSCxNQUFNLHdCQUNKLE9BQ0EsVUFJRztDQUNILElBQUlBO0FBRUosS0FBSSx5QkFBeUIsTUFBTSxDQUNqQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsSUFBSSxTQUFTLEtBQUssYUFBYTtHQUNwRCxXQUFXLFFBQVE7R0FDbkIsZUFBZSxRQUFRO0dBQ3ZCLE9BQU8sUUFBUTtHQUNmLFVBQVUsUUFBUTtHQUNuQixFQUFFO0VBQ0gsVUFBVSxNQUFNLFVBQVUsSUFBSTtFQUM5QixzQkFBc0I7RUFDdkI7VUFDUSxvQkFBb0IsTUFBTSxDQUNuQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVU7R0FDMUMsV0FBVyxLQUFLO0dBQ2hCLGVBQWUsS0FBSztHQUNwQixPQUFPLEtBQUs7R0FDWixVQUFVLEtBQUs7R0FDaEIsRUFBRTtFQUNILFVBQVUsTUFBTSxV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
|
|
@@ -127,4 +127,4 @@ Object.defineProperty(exports, 'isWithinBusinessHours', {
|
|
|
127
127
|
return isWithinBusinessHours;
|
|
128
128
|
}
|
|
129
129
|
});
|
|
130
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
130
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtcXRIUExGYnkuY2pzIiwibmFtZXMiOlsiVXNlckV2ZW50Q2F0ZWdvcnkiLCJQTFBBdHRyaWJ1dGVDYXRlZ29yeSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9ob29rcy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQTFBBdHRyaWJ1dGVDYXRlZ29yeSwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgVXNlckV2ZW50LCBWYXJpYW50SW5mbywgU2VhcmNoUmVzdWx0IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRQYXJ0aWFsbHlWaXNpYmxlID0gKGVsPzogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgY29uc3QgdmVydGljYWxseVZpc2libGUgPSBNYXRoLnJvdW5kKHJlY3QudG9wKSA8IHdpbmRvd0hlaWdodCAmJiBNYXRoLnJvdW5kKHJlY3QuYm90dG9tKSA+IDA7XG4gIGNvbnN0IGhvcml6b250YWxseVZpc2libGUgPSBNYXRoLnJvdW5kKHJlY3QubGVmdCkgPCB3aW5kb3dXaWR0aCAmJiBNYXRoLnJvdW5kKHJlY3QucmlnaHQpID4gMDtcbiAgcmV0dXJuIHZlcnRpY2FsbHlWaXNpYmxlICYmIGhvcml6b250YWxseVZpc2libGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQXBwTG9hZGVkRXZlbnQgPSAoKTogVXNlckV2ZW50ID0+ICh7XG4gIGV2ZW50SWQ6IHV1aWQoKSxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpc2l0VXNlckV2ZW50ID0gKHtcbiAgdmFyaWFudEluZm8sXG59OiB7XG4gIHZhcmlhbnRJbmZvOiBWYXJpYW50SW5mbztcbn0pOiBVc2VyRXZlbnQgfCB1bmRlZmluZWQgPT4ge1xuICAvLyB0aGlzIGlzIGEgcGRwIHZpc2l0IGV2ZW50XG4gIGlmICh2YXJpYW50SW5mby52YXJpYW50ID09PSAncGRwJyAmJiB2YXJpYW50SW5mby5wcm9kdWN0SWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiB1dWlkKCksXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QZHBWaXNpdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgcHJvZHVjdElkOiB2YXJpYW50SW5mby5wcm9kdWN0SWQsXG4gICAgICAgIHBhcmVudFByb2R1Y3RJZDogdmFyaWFudEluZm8ucGFyZW50UHJvZHVjdElkID8/ICcnLFxuICAgICAgICB1cmw6IHZhcmlhbnRJbmZvLnVybCA/PyAnJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHRoaXMgaXMgYSBwbHAgdmlzaXQgZXZlbnRcbiAgaWYgKHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09ICdwbHAnICYmIHZhcmlhbnRJbmZvLnBscElkICE9IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogdXVpZCgpLFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNhdGVnb3J5OiBQTFBBdHRyaWJ1dGVDYXRlZ29yeS5JZCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGlkOiB2YXJpYW50SW5mby5wbHBJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmICh2YXJpYW50SW5mby52YXJpYW50ID09PSAncGFnZV92aXNpdCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogdXVpZCgpLFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB1cmw6IHZhcmlhbnRJbmZvLnVybCxcbiAgICAgICAgcGFnZVZpc2l0Q2F0ZWdvcnk6IHZhcmlhbnRJbmZvLnBhZ2VWaXNpdENhdGVnb3J5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBwYXJzZVRpbWUgPSAodGltZTogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHRpbWVzID0gdGltZS5tYXRjaCgvXihbMC0xXT9cXGQpOihbMC01XVxcZCkoQU18UE0pJC9pKTtcbiAgY29uc3QgaG91cnMgPSB0aW1lcz8uWzFdO1xuICBjb25zdCBtaW51dGVzID0gdGltZXM/LlsyXTtcbiAgY29uc3QgcGVyaW9kID0gdGltZXM/LlszXTtcblxuICBpZiAoaG91cnMgJiYgbWludXRlcyAmJiBwZXJpb2QpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8vIEFkanVzdCBob3VycyBmb3IgQU0vUE1cbiAgICBsZXQgYWRqdXN0ZWRIb3VycyA9IDA7XG4gICAgaWYgKHBlcmlvZC50b1VwcGVyQ2FzZSgpID09PSAnUE0nICYmIGhvdXJzICE9PSAnMTInKSB7XG4gICAgICBhZGp1c3RlZEhvdXJzID0gcGFyc2VJbnQoaG91cnMpICsgMTI7XG4gICAgfVxuXG4gICAgaWYgKHBlcmlvZC50b1VwcGVyQ2FzZSgpID09PSAnQU0nICYmIGhvdXJzICE9PSAnMTInKSB7XG4gICAgICBhZGp1c3RlZEhvdXJzID0gcGFyc2VJbnQoaG91cnMpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZGF0ZSBzdHJpbmcgd2l0aCB0aW1lIHpvbmVcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19VCR7U3RyaW5nKGFkanVzdGVkSG91cnMpLnBhZFN0YXJ0KFxuICAgICAgMixcbiAgICAgICcwJyxcbiAgICApfToke21pbnV0ZXN9OjAwYDtcbiAgICByZXR1cm4gbmV3IERhdGUoYCR7Zm9ybWF0dGVkRGF0ZX0ke3RpbWVab25lfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNXaXRoaW5CdXNpbmVzc0hvdXJzID0gKHN0YXJ0VGltZTogc3RyaW5nLCBlbmRUaW1lOiBzdHJpbmcsIHRpbWVab25lOiBzdHJpbmcpID0+IHtcbiAgLy8gUGFyc2Ugc3RhcnQgYW5kIGVuZCB0aW1lc1xuICBjb25zdCBzdGFydCA9IHBhcnNlVGltZShzdGFydFRpbWUsIHRpbWVab25lKTtcbiAgbGV0IGVuZCA9IHBhcnNlVGltZShlbmRUaW1lLCB0aW1lWm9uZSk7XG5cbiAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgLy8gSWYgdGhlIGVuZCBkYXRlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3RhcnQgZGF0ZSwgYWRkIGEgZGF5IHRvIGJvdGggb2YgdGhlbVxuICAvLyBUaGlzIGhhbmRsZXMgY29uZmlndXJhdGlvbnMgc3VjaCBhcyBzdGFydFRpbWUgPSAxMDowMFBNIGFuZCBlbmRUaW1lID0gNzowMEFNXG4gIGlmIChlbmQgPCBzdGFydCkge1xuICAgIGVuZCA9IG5ldyBEYXRlKGVuZC5nZXRUaW1lKCkgKyAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICBub3cgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gIH1cblxuICAvLyBJZiB0aGUgZGF0ZSBjb252ZXJzaW9uIHNoaWZ0cyB0aGUgZW5kIGRhdGUgdG8gdGhlIG5leHQgZGF5LCBjb25zaWRlciBjb21wYXJpbmcgaXQgYWNyb3NzIG1pZG5pZ2h0XG4gIGlmIChlbmQuZ2V0VVRDRGF0ZSgpID4gc3RhcnQuZ2V0VVRDRGF0ZSgpKSB7XG4gICAgY29uc3QgY3Jvc3NpbmdNaWRuaWdodCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICByZXR1cm4gc3RhcnQgPD0gbm93IHx8IGNyb3NzaW5nTWlkbmlnaHQgPD0gZW5kO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGltZSBmYWxscyBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmRcbiAgcmV0dXJuIG5vdyA+PSBzdGFydCAmJiBub3cgPD0gZW5kO1xufTtcblxuZXhwb3J0IGVudW0gU2VhcmNoUmVzdWx0c1N0YXRlIHtcbiAgTG9hZGluZyxcbiAgUmVzdWx0cyxcbiAgTm9SZXN1bHRzLFxufVxuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUmVzdWx0c1N0YXRlID0gKFxuICBpc0xvYWRpbmdTZWFyY2g6IGJvb2xlYW4sXG4gIHNlYXJjaERhdGE6IFNlYXJjaFJlc3VsdCB8IG51bGwsXG4pOiBTZWFyY2hSZXN1bHRzU3RhdGUgPT4ge1xuICBpZiAoaXNMb2FkaW5nU2VhcmNoKSB7XG4gICAgcmV0dXJuIFNlYXJjaFJlc3VsdHNTdGF0ZS5Mb2FkaW5nO1xuICB9XG4gIGlmIChzZWFyY2hEYXRhKSB7XG4gICAgcmV0dXJuIFNlYXJjaFJlc3VsdHNTdGF0ZS5SZXN1bHRzO1xuICB9XG4gIHJldHVybiBTZWFyY2hSZXN1bHRzU3RhdGUuTm9SZXN1bHRzO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLE1BQWEsNkJBQTZCLE9BQStCO0FBQ3ZFLEtBQUksQ0FBQyxHQUFJLFFBQU87Q0FFaEIsTUFBTSxPQUFPLEdBQUcsdUJBQXVCO0NBQ3ZDLE1BQU0sZUFBZSxPQUFPLGVBQWUsU0FBUyxnQkFBZ0I7Q0FDcEUsTUFBTSxjQUFjLE9BQU8sY0FBYyxTQUFTLGdCQUFnQjtDQUNsRSxNQUFNLG9CQUFvQixLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLE9BQU8sR0FBRztDQUMzRixNQUFNLHNCQUFzQixLQUFLLE1BQU0sS0FBSyxLQUFLLEdBQUcsZUFBZSxLQUFLLE1BQU0sS0FBSyxNQUFNLEdBQUc7QUFDNUYsUUFBTyxxQkFBcUI7O0FBRzlCLE1BQWEsOEJBQXlDO0NBQ3BELHVCQUFlO0NBQ2YsNEJBQVcsSUFBSSxNQUFNLEVBQUMsYUFBYTtDQUNuQyxVQUFVQSxrREFBa0I7Q0FDN0I7QUFFRCxNQUFhLHdCQUF3QixFQUNuQyxrQkFHMkI7QUFFM0IsS0FBSSxZQUFZLFlBQVksU0FBUyxZQUFZLGFBQWEsS0FDNUQsUUFBTztFQUNMLHVCQUFlO0VBQ2YsNEJBQVcsSUFBSSxNQUFNLEVBQUMsYUFBYTtFQUNuQyxVQUFVQSxrREFBa0I7RUFDNUIsWUFBWTtHQUNWLFdBQVcsWUFBWTtHQUN2QixpQkFBaUIsWUFBWSxtQkFBbUI7R0FDaEQsS0FBSyxZQUFZLE9BQU87R0FDekI7RUFDRjtBQUlILEtBQUksWUFBWSxZQUFZLFNBQVMsWUFBWSxTQUFTLEtBQ3hELFFBQU87RUFDTCx1QkFBZTtFQUNmLDRCQUFXLElBQUksTUFBTSxFQUFDLGFBQWE7RUFDbkMsVUFBVUEsa0RBQWtCO0VBQzVCLFlBQVk7R0FDVixVQUFVQyxxREFBcUI7R0FDL0IsWUFBWSxFQUNWLElBQUksWUFBWSxPQUNqQjtHQUNGO0VBQ0Y7QUFHSCxLQUFJLFlBQVksWUFBWSxhQUMxQixRQUFPO0VBQ0wsdUJBQWU7RUFDZiw0QkFBVyxJQUFJLE1BQU0sRUFBQyxhQUFhO0VBQ25DLFVBQVVELGtEQUFrQjtFQUM1QixZQUFZO0dBQ1YsS0FBSyxZQUFZO0dBQ2pCLG1CQUFtQixZQUFZO0dBQ2hDO0VBQ0Y7O0FBS0wsTUFBTSxhQUFhLE1BQWMsYUFBcUI7Q0FDcEQsTUFBTSxRQUFRLEtBQUssTUFBTSxpQ0FBaUM7Q0FDMUQsTUFBTSxRQUFRLFFBQVE7Q0FDdEIsTUFBTSxVQUFVLFFBQVE7Q0FDeEIsTUFBTSxTQUFTLFFBQVE7QUFFdkIsS0FBSSxTQUFTLFdBQVcsUUFBUTtFQUM5QixNQUFNLHVCQUFPLElBQUksTUFBTTtFQUd2QixJQUFJLGdCQUFnQjtBQUNwQixNQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsVUFBVSxLQUM3QyxpQkFBZ0IsU0FBUyxNQUFNLEdBQUc7QUFHcEMsTUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLFVBQVUsS0FDN0MsaUJBQWdCLFNBQVMsTUFBTTtFQUlqQyxNQUFNLGdCQUFnQixHQUFHLEtBQUssYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLGNBQWMsQ0FBQyxTQUNqRixHQUNBLElBQ0QsQ0FBQyxHQUFHLFFBQVE7QUFDYix5QkFBTyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsV0FBVzs7O0FBSWxELE1BQWEseUJBQXlCLFdBQW1CLFNBQWlCLGFBQXFCO0NBRTdGLE1BQU0sUUFBUSxVQUFVLFdBQVcsU0FBUztDQUM1QyxJQUFJLE1BQU0sVUFBVSxTQUFTLFNBQVM7QUFFdEMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUNiLFFBQU87Q0FHVCxJQUFJLHNCQUFNLElBQUksTUFBTTtBQUlwQixLQUFJLE1BQU0sT0FBTztBQUNmLFFBQU0sSUFBSSxLQUFLLElBQUksU0FBUyxHQUFHLE9BQVUsS0FBSyxJQUFLO0FBQ25ELFFBQU0sSUFBSSxLQUFLLElBQUksU0FBUyxHQUFHLE9BQVUsS0FBSyxJQUFLOztBQUlyRCxLQUFJLElBQUksWUFBWSxHQUFHLE1BQU0sWUFBWSxFQUFFO0VBQ3pDLE1BQU0sbUJBQW1CLElBQUksS0FBSyxJQUFJLFNBQVMsR0FBRyxPQUFVLEtBQUssSUFBSztBQUN0RSxTQUFPLFNBQVMsT0FBTyxvQkFBb0I7O0FBSTdDLFFBQU8sT0FBTyxTQUFTLE9BQU87O0FBR2hDLElBQVksb0VBQUw7QUFDTDtBQUNBO0FBQ0E7OztBQUdGLE1BQWEseUJBQ1gsaUJBQ0EsZUFDdUI7QUFDdkIsS0FBSSxnQkFDRixRQUFPLG1CQUFtQjtBQUU1QixLQUFJLFdBQ0YsUUFBTyxtQkFBbUI7QUFFNUIsUUFBTyxtQkFBbUIifQ==
|
package/package.json
CHANGED
|
@@ -65,6 +65,8 @@ export const AmplitudeProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
|
65
65
|
const [amplitudeClient, setAmplitudeClient] = React.useState<
|
|
66
66
|
BrowserClient | undefined
|
|
67
67
|
>(undefined);
|
|
68
|
+
const [internalEventTrackingEnrichment, setInternalEventTrackingEnrichment] =
|
|
69
|
+
React.useState<EnrichmentPlugin | undefined>(undefined);
|
|
68
70
|
const [supplementalDefaultProps, setSupplementalDefaultProps] =
|
|
69
71
|
React.useState<Record<string, unknown>>({});
|
|
70
72
|
|
|
@@ -161,7 +163,11 @@ export const AmplitudeProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
|
161
163
|
}
|
|
162
164
|
}, [orgShortName, featureFlagService]);
|
|
163
165
|
|
|
164
|
-
const
|
|
166
|
+
const getEventTrackingEnrichment = useCallback((): EnrichmentPlugin => {
|
|
167
|
+
if (internalEventTrackingEnrichment !== undefined) {
|
|
168
|
+
return internalEventTrackingEnrichment;
|
|
169
|
+
}
|
|
170
|
+
|
|
165
171
|
const enrichment: EnrichmentPlugin = {
|
|
166
172
|
name: "page-view-tracking-enrichment",
|
|
167
173
|
type: "enrichment",
|
|
@@ -232,8 +238,10 @@ export const AmplitudeProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
|
232
238
|
return enrichedEvent;
|
|
233
239
|
},
|
|
234
240
|
};
|
|
241
|
+
setInternalEventTrackingEnrichment(enrichment);
|
|
235
242
|
return enrichment;
|
|
236
243
|
}, [
|
|
244
|
+
internalEventTrackingEnrichment,
|
|
237
245
|
getDefaultTrackingProps,
|
|
238
246
|
featureFlagService,
|
|
239
247
|
publicKey,
|
|
@@ -247,7 +255,7 @@ export const AmplitudeProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
|
247
255
|
if (isReady && !amplitudeClient) {
|
|
248
256
|
const currentAmplitudeInstance: BrowserClient = createInstance();
|
|
249
257
|
const isSessionsEnabled = amplitudeSessionReplayInit();
|
|
250
|
-
currentAmplitudeInstance.add(
|
|
258
|
+
currentAmplitudeInstance.add(getEventTrackingEnrichment());
|
|
251
259
|
currentAmplitudeInstance.init(amplitudeApiKey!, userId!, {
|
|
252
260
|
serverZone: dataResidency as ServerZoneType,
|
|
253
261
|
trackingOptions: {
|
|
@@ -272,7 +280,7 @@ export const AmplitudeProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
|
272
280
|
userId,
|
|
273
281
|
dataResidency,
|
|
274
282
|
amplitudeSessionReplayInit,
|
|
275
|
-
|
|
283
|
+
getEventTrackingEnrichment,
|
|
276
284
|
]);
|
|
277
285
|
|
|
278
286
|
const trackEvent = useCallback(
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import React, { createContext, useContext, useCallback, useMemo } from
|
|
2
|
-
import { useAtomValue } from
|
|
3
|
-
import { cdnUrlAtom } from
|
|
4
|
-
import { CdnContextType } from
|
|
1
|
+
import React, { createContext, useContext, useCallback, useMemo } from "react";
|
|
2
|
+
import { useAtomValue } from "jotai";
|
|
3
|
+
import { cdnUrlAtom } from "../../atoms/envive/enviveConfig";
|
|
4
|
+
import { CdnContextType } from "@envive-ai/types";
|
|
5
5
|
|
|
6
6
|
const CdnContext = createContext<CdnContextType | null>(null);
|
|
7
7
|
|
|
8
|
-
export const CdnProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
8
|
+
export const CdnProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
9
|
+
children,
|
|
10
|
+
}) => {
|
|
9
11
|
const cdnUrlAtomValue = useAtomValue(cdnUrlAtom);
|
|
10
|
-
const cdnUrl = cdnUrlAtomValue ||
|
|
12
|
+
const cdnUrl = cdnUrlAtomValue || "https://cdn.spiffy.ai/other";
|
|
11
13
|
|
|
12
14
|
const getCdnBasePath = useCallback(() => {
|
|
13
15
|
return cdnUrl;
|
|
@@ -17,7 +19,7 @@ export const CdnProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
|
|
17
19
|
(assetName: string, orgShortName: string) => {
|
|
18
20
|
return `${getCdnBasePath()}/assets/${orgShortName}/${assetName}`;
|
|
19
21
|
},
|
|
20
|
-
[getCdnBasePath]
|
|
22
|
+
[getCdnBasePath]
|
|
21
23
|
);
|
|
22
24
|
|
|
23
25
|
const value = useMemo(
|
|
@@ -26,7 +28,7 @@ export const CdnProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
|
|
26
28
|
getCdnBasePath,
|
|
27
29
|
getAssetURL,
|
|
28
30
|
}),
|
|
29
|
-
[cdnUrl, getCdnBasePath, getAssetURL]
|
|
31
|
+
[cdnUrl, getCdnBasePath, getAssetURL]
|
|
30
32
|
);
|
|
31
33
|
|
|
32
34
|
return <CdnContext.Provider value={value}>{children}</CdnContext.Provider>;
|
|
@@ -35,7 +37,7 @@ export const CdnProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
|
|
35
37
|
export const useCdn = () => {
|
|
36
38
|
const context = useContext(CdnContext);
|
|
37
39
|
if (!context) {
|
|
38
|
-
throw new Error(
|
|
40
|
+
throw new Error("useCdn must be used within a CdnProvider");
|
|
39
41
|
}
|
|
40
42
|
return context;
|
|
41
43
|
};
|