@sapui5/sap.fe.core 1.136.1 → 1.138.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +76 -28
- package/src/sap/fe/core/ActionRuntime.ts +106 -30
- package/src/sap/fe/core/AppComponent.js +11 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -2
- package/src/sap/fe/core/AppStateHandler.ts +8 -2
- package/src/sap/fe/core/CommonUtils.js +15 -3
- package/src/sap/fe/core/CommonUtils.ts +13 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
- package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
- package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
- package/src/sap/fe/core/controls/DataWatcher.js +2 -2
- package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
- package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
- package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
- package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
- package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
- package/src/sap/fe/core/library.js +33 -4
- package/src/sap/fe/core/library.ts +33 -2
- package/src/sap/fe/core/messagebundle.properties +18 -2
- package/src/sap/fe/core/messagebundle_ar.properties +3 -2
- package/src/sap/fe/core/messagebundle_bg.properties +2 -1
- package/src/sap/fe/core/messagebundle_ca.properties +2 -1
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
- package/src/sap/fe/core/messagebundle_cs.properties +4 -3
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +8 -7
- package/src/sap/fe/core/messagebundle_el.properties +2 -1
- package/src/sap/fe/core/messagebundle_en.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
- package/src/sap/fe/core/messagebundle_es.properties +5 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -1
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -1
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +2 -1
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +2 -1
- package/src/sap/fe/core/messagebundle_mk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +3 -2
- package/src/sap/fe/core/messagebundle_pl.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +2 -1
- package/src/sap/fe/core/messagebundle_ru.properties +2 -1
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sr.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +2 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
- package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
|
@@ -505,12 +505,12 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
505
505
|
const getBindingForTimezone = function (propertyDataModelPath, propertyBindingExpression) {
|
|
506
506
|
const propertyDefinition = propertyDataModelPath.targetObject;
|
|
507
507
|
propertyBindingExpression = formatWithTypeInformation(propertyDefinition, propertyBindingExpression);
|
|
508
|
-
propertyBindingExpression.type = "any";
|
|
509
508
|
const complexType = "sap.ui.model.odata.type.DateTimeWithTimezone";
|
|
510
509
|
const formatOptions = {
|
|
511
510
|
showTime: false,
|
|
512
511
|
showDate: false,
|
|
513
|
-
showTimezone: true
|
|
512
|
+
showTimezone: true,
|
|
513
|
+
parseKeepsEmptyString: true
|
|
514
514
|
};
|
|
515
515
|
|
|
516
516
|
// null is required by formatter when there is just a timezone
|
|
@@ -739,4 +739,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelCo
|
|
|
739
739
|
_exports.isQuickViewFacetVisible = isQuickViewFacetVisible;
|
|
740
740
|
return _exports;
|
|
741
741
|
}, false);
|
|
742
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJfZXhwb3J0cyIsImdldERpc3BsYXlNb2RlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJEaXNwbGF5TW9kZUZvcm1hdHRlciIsInRhcmdldE9iamVjdCIsImdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0Iiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJpc0VkaXRhYmxlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiVUkiLCJJc0VkaXRhYmxlIiwiY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb24iLCJiQXNPYmplY3QiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlzUHJvcGVydHkiLCJpZkVsc2UiLCJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJmb3JtYXR0ZXIiLCJvYmplY3RQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFjdGl2aXR5RXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwia2V5cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJtZWFzdXJlUmVhZE9ubHkiLCJhc09iamVjdCIsImRhdGFGaWVsZENvbnZlcnRlZCIsIiRUeXBlIiwicHJvcGVydHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1VuaXRSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvck1lYXN1cmVVbml0IiwiY3VycmVuY3kiLCJtZWFzdXJlIiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNUZXh0QW5ub3RhdGlvbiIsIkNvbW1vbiIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0Q29uc3RyYWludE9wdGlvbnMiLCJEb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkiLCJ2YWx1ZU9mIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwiZm9yRGlzcGxheU1vZGUiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0Iiwic2hvd01lYXN1cmUiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoUGVyY2VudGFnZSIsImNvbXBsZXhUeXBlIiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RyYWludE9wdGlvbnMiLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsIm1pbkRhdGUiLCIkRGF0ZSIsIm1heERhdGUiLCJtaW5FeHByZXNzaW9uIiwibWF4RXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93TnVtYmVyIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsImhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZmllbGRGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInN0eWxlIiwiRGF0ZVRpbWVTdHlsZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZGF0ZVRpbWVTdHlsZSIsImRhdGVUaW1lUGF0dGVybiIsInBhdHRlcm4iLCJzaG93VGltZSIsInNob3dEYXRlIiwic2hvd1RpbWV6b25lIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJwcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCIsInRvU3RyaW5nIiwiZ2V0QmluZGluZ0ZvclRpbWV6b25lIiwicHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNBbGlnbkRpc3BsYXkiLCJzQWxpZ25FZGl0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsImNvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInJlcXVpcmVzSUNvbnRleHQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJvRGF0YU1vZGVsUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiaGFzT25lVG9NYW55TmF2aWdhdGlvbiIsImZpbmRJbmRleCIsIm9OYXYiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5Iiwib0NvbnRleHROYXYiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCIsImZvcmNlRWRpdE1vZGUiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJvUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwiZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJlZGl0TW9kZSIsImluY2x1ZGVzIiwiSXNDcmVhdGVNb2RlIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzVmlzaWJsZSIsIkhpZGRlbiIsImlzTXVsdGlMaW5lIiwiaXNNdWx0aUxpbmVUZXh0IiwiZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24iLCJhY3Rpb25UYXJnZXQiLCJwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInRlcm0iLCJwcmVmaXgiLCJzb3VyY2VFbnRpdHlUeXBlIiwibmF2aWdhdGlvbnMiLCJzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm5hdiIsImpvaW4iLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJpc0JvdW5kIiwicGFyYW1ldGVycyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiaXNRdWlja1ZpZXdGYWNldFZpc2libGUiLCJmYWNldE1vZGVsUGF0aCIsInRhcmdldFZpc2libGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uUGFyYW1ldGVyLCBDb252ZXJ0ZWRNZXRhZGF0YSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHsgVW5pdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvTWVhc3VyZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb25uZWN0ZWRGaWVsZHNUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyxcblx0Rm5cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IsIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNNdWx0aUxpbmVUZXh0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0RhdGFQb2ludFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbi8vIEltcG9ydC1leHBvcnQgbWV0aG9kIHVzZWQgYnkgdGhlIGNvbnZlcnRlciB0byB1c2UgdGhlbSBpbiB0aGUgdGVtcGxhdGluZyB0aHJvdWdoIHRoZSBVSUZvcm1hdHRlcnMuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZSA9IERpc3BsYXlNb2RlRm9ybWF0dGVyLkRpc3BsYXlNb2RlO1xuXG5leHBvcnQgdHlwZSBGaWVsZEVkaXRTdHlsZSA9IFwiUmFkaW9CdXR0b25zXCI7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiB1bmtub3duW107XG5cdCQkdmFsdWVBc1Byb21pc2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRlVGltZVN0eWxlID0gXCJzaG9ydFwiIHwgXCJtZWRpdW1cIiB8IFwibG9uZ1wiIHwgXCJmdWxsXCI7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0ID0gRmllbGRGb3JtYXRPcHRpb25zIHwgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucztcblxuZXhwb3J0IGNvbnN0IEZpZWxkRWRpdE1vZGUgPSB7XG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzYWJsZWQgbW9kZVxuXHQgKi9cblx0RGlzYWJsZWQ6IFwiRGlzYWJsZWRcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNwbGF5IG1vZGVcblx0ICovXG5cdERpc3BsYXk6IFwiRGlzcGxheVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGVkaXRhYmxlIG1vZGVcblx0ICovXG5cdEVkaXRhYmxlOiBcIkVkaXRhYmxlXCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgaW4gZGlzcGxheSBtb2RlLlxuXHQgKi9cblx0RWRpdGFibGVEaXNwbGF5OiBcIkVkaXRhYmxlRGlzcGxheVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIHJlYWQtb25seS5cblx0ICovXG5cdEVkaXRhYmxlUmVhZE9ubHk6IFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIHJlYWQtb25seSBtb2RlXG5cdCAqL1xuXHRSZWFkT25seTogXCJSZWFkT25seVwiXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFZGl0YWJsZUV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5UGF0aCxcblx0XHRvRGF0YUZpZWxkQ29udmVydGVkLFxuXHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRydWUsXG5cdFx0aXNFZGl0YWJsZSxcblx0XHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uc1xuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdGFibGVcIiBCb29sZWFuIHZhbHVlLlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIG9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIHRoaXMgcHJvcGVydHkgb2JqZWN0XG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcGFyYW0gY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgV2hldGhlciB3ZSB3YW50IHRvIHRha2UgaW50byBhY2NvdW50IFVwZGF0ZVJlc3RyaWN0aW9ucyB0byBjb21wdXRlIHRoZSBlZGl0YWJsZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVkaXRhYmxlIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBpc0VkaXRhYmxlKTtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpc0VkaXRhYmxlO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogb1Byb3BlcnR5UGF0aCxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIG9EYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRpZiAoY29tcGlsZUV4cHJlc3Npb24oaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIiAmJiBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBiQXNPYmplY3QgPyBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIDogXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9XG5cdFx0b1Byb3BlcnR5ICE9PSB1bmRlZmluZWRcblx0XHRcdD8gaWZFbHNlKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKG5vdChpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMpLFxuXHRcdFx0XHRcdFx0aXNDb21wdXRlZChvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNLZXkob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzSW1tdXRhYmxlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGlmRWxzZShvcihpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksIGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSksIGZhbHNlLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdFx0XHRcdGlzRWRpdGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gPFQ+KFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0Zm9ybWF0dGVyOiBGbjxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFjdGl2aXR5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGAvY29sbGFib3JhdGlvbi9hY3Rpdml0aWVzJHtvYmplY3RQYXRofWAsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGtleXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoPy5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0gbWVhc3VyZVJlYWRPbmx5IFdoZXRoZXIgd2Ugc2hvdWxkIHNldCBVb00gLyBjdXJyZW5jeSBmaWVsZCBtb2RlIHRvIHJlYWQgb25seVxuICogQHBhcmFtIGFzT2JqZWN0IFdoZXRoZXIgd2Ugc2hvdWxkIHJldHVybiB0aGlzIGFzIGFuIGV4cHJlc3Npb24gb3IgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGRhdGFGaWVsZCBvYmplY3RcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGVkaXQgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGVkaXRNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGUgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRtZWFzdXJlUmVhZE9ubHkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZSxcblx0ZGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoXG5cdFx0IXByb3BlcnR5UGF0aCB8fFxuXHRcdHR5cGVvZiBwcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIgfHxcblx0XHQoIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSAmJiBkYXRhRmllbGRDb252ZXJ0ZWQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpXG5cdCkge1xuXHRcdHJldHVybiBGaWVsZEVkaXRNb2RlLkRpc3BsYXk7XG5cdH1cblx0Y29uc3QgcHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVBhdGgpID8gcHJvcGVydHlQYXRoLiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGg7XG5cdGlmICghaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gRmllbGRFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUoZGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHksXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdC8vIHdlIGdldCB0aGUgZWRpdGFibGUgRXhwcmVzc2lvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHVwZGF0ZSBSZXN0cmljdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIGlzRWRpdGFibGUsIGZhbHNlKTtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgaXNVbml0UmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdG9yKGlzVW5pdFJlYWRPbmx5LCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGFuZChpc0ltbXV0YWJsZSh1bml0UHJvcGVydHkpLCBub3QoVUkuSXNUcmFuc2llbnRCaW5kaW5nKSksIG1lYXN1cmVSZWFkT25seSksXG5cdFx0XHRpZkVsc2UoIWlzQ29uc3RhbnQoaXNVbml0UmVhZE9ubHkpICYmIGlzVW5pdFJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KSxcblx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGVcblx0XHQpO1xuXHR9XG5cdGlmICghdW5pdFByb3BlcnR5ICYmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdC8vIG5vIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCBtZWFucyB0aGlzIGlzIGEgc3RhdGljIHVuaXRcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpO1xuXHR9XG5cdGxldCByZWFkT25seUV4cHJlc3Npb247XG5cdGlmIChkYXRhRmllbGRDb252ZXJ0ZWQgIT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBvcihpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgaXNSZWFkT25seUV4cHJlc3Npb24oZGF0YUZpZWxkQ29udmVydGVkKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdH1cblxuXHQvLyBpZiB0aGVyZSBhcmUgdXBkYXRlIFJlc3RyaWN0aW9ucyBpdCBpcyBhbHdheXMgZGlzcGxheSBtb2RlXG5cdGNvbnN0IGVkaXRNb2RlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdGlmRWxzZShcblx0XHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIGlzRWRpdGFibGUpLFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRpZkVsc2UoaXNFZGl0YWJsZSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdCksXG5cdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdCk7XG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdHJldHVybiBvUHJvcGVydHlEZWZpbml0aW9uICYmIGdldEV4cHJlc3Npb25Gb3JNZWFzdXJlVW5pdChvUHJvcGVydHlEZWZpbml0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTWVhc3VyZVVuaXQgPSBmdW5jdGlvbiAob1Byb3BlcnR5RGVmaW5pdGlvbjogUHJvcGVydHkpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChtZWFzdXJlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKGlzVHJ1dGh5KGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihtZWFzdXJlKSksIG5vdChVSS5Jc1RvdGFsKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZERpc3BsYXkuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uc3RyYWludE9wdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkgJiZcblx0XHRwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJLkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eT8udmFsdWVPZigpXG5cdFx0PyB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfVxuXHRcdDoge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdGVtcHR5U3RyaW5nPzogc3RyaW5nIHwgbnVtYmVyO1xuXHR9LFxuXHRmb3JEaXNwbGF5TW9kZT86IGJvb2xlYW4sXG5cdHNob3dPbmx5VW5pdERlY2ltYWxzPzogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pKSB7XG5cdFx0aWYgKGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbiksIGlnbm9yZVVuaXRDb25zdHJhaW50KVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGxldCBjb25zdHJhaW50T3B0aW9uczogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbXBsZXhUeXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIikge1xuXHRcdGlmIChmb3JEaXNwbGF5TW9kZSAmJiAhc2hvd09ubHlVbml0RGVjaW1hbHMpIHtcblx0XHRcdGNvbnN0cmFpbnRPcHRpb25zID0geyBza2lwRGVjaW1hbHNWYWxpZGF0aW9uOiB0cnVlIH07XG5cdFx0fSBlbHNlIGlmICghZm9yRGlzcGxheU1vZGUpIHtcblx0XHRcdC8vIENvbnNpZGVyIGFubm90YXRpb24gb25seSBpbiBlZGl0IG1vZGVcblx0XHRcdGNvbnN0cmFpbnRPcHRpb25zID0gZ2V0Q29uc3RyYWludE9wdGlvbnMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpO1xuXHRcdH1cblx0fVxuXHRpZiAoZm9yRGlzcGxheU1vZGUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCBlbXB0eVN0cmluZzogXCJcIiB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludE9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgcGlja2VyIHdpdGggbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSBwcmVzZW50LlxuICogQHBhcmFtIG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBwcm9wZXJ0eSB3aXRoIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgZm9yIHRoZSBzYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzPixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge307XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlXCI7XG5cdGNvbnN0IG1pbkRhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW07XG5cdGNvbnN0IG1heERhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW07XG5cdGNvbnN0IG1pbkV4cHJlc3Npb24gPVxuXHRcdG1pbkRhdGUgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWluRGF0ZSlcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0sIHJlbGF0aXZlTG9jYXRpb24pXG5cdFx0XHQgIClcblx0XHRcdDogbWluRGF0ZTtcblx0Y29uc3QgbWF4RXhwcmVzc2lvbiA9XG5cdFx0bWF4RGF0ZSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtYXhEYXRlKVxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtLFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSwgcmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdCAgKVxuXHRcdFx0OiBtYXhEYXRlO1xuXG5cdHJldHVybiAoXG5cdFx0KG1pbkV4cHJlc3Npb24gfHwgbWF4RXhwcmVzc2lvbikgJiZcblx0XHRhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIG1pbkV4cHJlc3Npb24sIG1heEV4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGZvckRpc3BsYXlNb2RlOiBib29sZWFuLFxuXHRzaG93T25seVVuaXREZWNpbWFsczogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmcge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRpZiAoIW9Qcm9wZXJ0eURlZmluaXRpb24pIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChvUHJvcGVydHlEZWZpbml0aW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChcIiVcIik7XG5cdH1cblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxQYXRoKVxuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB0cnVlKTtcblx0bGV0IGNvbnN0cmFpbnRPcHRpb25zOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29tcGxleFR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0aWYgKGZvckRpc3BsYXlNb2RlICYmICFzaG93T25seVVuaXREZWNpbWFscykge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfTtcblx0XHR9IGVsc2UgaWYgKCFmb3JEaXNwbGF5TW9kZSkge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSBnZXRDb25zdHJhaW50T3B0aW9ucyhvUHJvcGVydHlEZWZpbml0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihcblx0XHRbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSxcblx0XHRjb21wbGV4VHlwZSxcblx0XHR1bmRlZmluZWQsXG5cdFx0e1xuXHRcdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdFx0c2hvd051bWJlcjogZmFsc2Vcblx0XHR9LFxuXHRcdGNvbnN0cmFpbnRPcHRpb25zXG5cdCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGltZXpvbmUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZmllbGRGb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgdGltZXpvbmUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXHRjb25zdCBzdHlsZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlO1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0aW1lem9uZSkgJiYgdGltZXpvbmUuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdCh0aW1lem9uZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248dW5rbm93bj4pLiR0YXJnZXQgYXMgUHJvcGVydHksXG5cdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKSxcblx0XHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdFx0ICApXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGxldCBmb3JtYXRPcHRpb25zID0ge307XG5cdGlmIChoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcykge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlczogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdC8vIGlmIHN0eWxlIG9yIHBhdHRlcm4gaXMgYWxzbyBzZXRcblx0aWYgKHN0eWxlKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzdHlsZTogc3R5bGUgfSB9O1xuXHR9IGVsc2UgaWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzdHlsZTogZmllbGRGb3JtYXRPcHRpb25zLmRhdGVUaW1lU3R5bGUgfSB9O1xuXHR9XG5cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHBhdHRlcm46IGZpZWxkRm9ybWF0T3B0aW9ucy5kYXRlVGltZVBhdHRlcm4gfSB9O1xuXHR9XG5cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93VGltZSB9IH07XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd0RhdGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd0RhdGU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSB9IH07XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZmllbGRGb3JtYXRPcHRpb25zLnNob3dUaW1lem9uZSB9IH07XG5cdH1cblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZGF0ZSBmb3JtYXQgb2YgYSBkYXRlLCB0aW1lIG9yIGRhdGVUaW1lLlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsUGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gQmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCBGb3JtYXQgb3B0aW9ucyB3aGljaCBjb250YWluIHRoZSBzdHlsZSBvciBwYXR0ZXJuIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGRhdGUsIHRpbWUsIG9yIGRhdGUtdGltZSwgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybiBvciBzdHlsZSBwcm9wZXJ0eVxuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD86IEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCBwYXR0ZXJuID0gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/LmRhdGVUaW1lUGF0dGVybjtcblx0Y29uc3Qgc3R5bGUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uRGF0ZVRpbWVTdHlsZSA/PyBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD8uZGF0ZVRpbWVTdHlsZTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24udHlwZSA9IEVETV9UWVBFX01BUFBJTkdbb1Byb3BlcnR5RGVmaW5pdGlvbi50eXBlXS50eXBlO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0Li4uKHN0eWxlICYmIHsgc3R5bGU6IHN0eWxlLnRvU3RyaW5nKCkgfSksXG5cdFx0Li4uKHBhdHRlcm4gJiYgeyBwYXR0ZXJuOiBwYXR0ZXJuIH0pXG5cdH07XG5cblx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcImFueVwiO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHsgc2hvd1RpbWU6IGZhbHNlLCBzaG93RGF0ZTogZmFsc2UsIHNob3dUaW1lem9uZTogdHJ1ZSB9O1xuXG5cdC8vIG51bGwgaXMgcmVxdWlyZWQgYnkgZm9ybWF0dGVyIHdoZW4gdGhlcmUgaXMganVzdCBhIHRpbWV6b25lXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW251bGwsIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXkgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQgPSBcIkJlZ2luXCJcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIG1ldGFtb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDb252ZXJ0ZXJDb250ZXh0IHJlcHJlc2VudGluZyB0aGF0IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogb2JqZWN0IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvSW50ZXJmYWNlLmNvbnRleHQpIGFzIG9iamVjdDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgT0RhdGFNZXRhTW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlbnRpdHlzZXRzIGFuZCBuYXZwcm9wZXJ0aWVzIHRoYXQgYXJlIGludm9sdmVkIHRvIGdldCB0byBhIHNwZWNpZmljIG9iamVjdCBpbiB0aGUgbWV0YW1vZGVsXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoID0gZnVuY3Rpb24gPFQ+KFxuXHRvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCxcblx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ludGVyZmFjZS5jb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXREYXRhTW9kZWxPYmplY3RQYXRoLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcmVmZXJlbmNlZCBwcm9wZXJ0eSBpcyBwYXJ0IG9mIGEgMS4ubiBuYXZpZ2F0aW9uLlxuICogQHBhcmFtIG9EYXRhTW9kZWxQYXRoIFRoZSBkYXRhIG1vZGVsIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZUZpZWxkID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2KSA9PiB7XG5cdFx0XHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG9OYXYpKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdikgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgZm9yY2VFZGl0TW9kZSwgdHJ1ZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0Zm9yY2VFZGl0TW9kZSA9IGZhbHNlLFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b1JlcXVpcmVkUHJvcGVydGllczoge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/OiB1bmtub3duW107XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0fSA9IHt9LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChiQXNPYmplY3QpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudChmYWxzZSkpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHQvLyBGb3IgdGhlIGRhdGFmaWVsZCBleHByZXNzaW9uIHdlIHNob3VsZCBub3QgIGNvbnNpZGVyIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0ZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdH1cblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IGVkaXRNb2RlID0gZm9yY2VFZGl0TW9kZSB8fCBVSS5Jc0VkaXRhYmxlO1xuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IFVJLklzQ3JlYXRlTW9kZTtcblx0fVxuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChVSS5Jc0VkaXRhYmxlLCBub3QoVUkuSXNDcmVhdGVNb2RlKSk7XG5cdH1cblx0Y29uc3QgcmV0dXJuRXhwcmVzc2lvbiA9IG9yKFxuXHRcdGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSxcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmV0dXJuRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEFubm90YXRpb25QYXRoPENvbm5lY3RlZEZpZWxkc1R5cGU+PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPiA9IChkYXRhRmllbGRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LkRhdGEgPz8ge30pIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuXHQ+O1xuXHRjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdGNvbnN0IGRhdGFGaWVsZHMgPSBbXTtcblx0bGV0IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb25zOiAoQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pW10gfCB1bmRlZmluZWQgPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmIChkYXRhW2tleV0/LltcIiRUeXBlXCJdICYmIGRhdGFba2V5XVtcIiRUeXBlXCJdPy5pbmNsdWRlcyhcIkRhdGFGaWVsZFwiKSkge1xuXHRcdFx0ZGF0YUZpZWxkcy5wdXNoKGRhdGFba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGRhdGFGaWVsZHMpIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZT4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBbXG5cdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZVxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHRcdGlzUmVxdWlyZWRFeHByZXNzaW9ucy5wdXNoKGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkLCBmYWxzZSkpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvciguLi4oaXNSZXF1aXJlZEV4cHJlc3Npb25zIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBoZWFkZXIgZmFjZXQgb3IgYWN0aW9uIGlzIHZpc2libGUuXG4gKiBAcGFyYW0gdGFyZ2V0T2JqZWN0IEhlYWRlciBmYWNldHMgb3IgQWN0aW9uc1xuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc2libGUoXG5cdHRhcmdldE9iamVjdDpcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlc1xuXHRcdHwgUmVmZXJlbmNlRmFjZXRcblx0XHR8IENvbGxlY3Rpb25GYWNldFxuXHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcblx0XHR8IEZpZWxkR3JvdXBcblx0XHR8IFByb3BlcnR5XG5cdFx0fCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25Qcm9wZXJ0aWVzPzogc3RyaW5nW11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sIG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSwgdHJ1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFjdGlvbiBwYXJhbWV0ZXIgaXMgc3VwcG9ydHMgbXVsdGkgbGluZSBpbnB1dC5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuICogQHJldHVybnMgQm9vbGVhblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aUxpbmUgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBY3Rpb25QYXJhbWV0ZXI+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc011bHRpTGluZVRleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWN0aW9uIGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IEFjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIENvbnZlcnRlZE1ldGFkYXRhXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aEZyb21Db250ZXh0TG9jYXRpb24gQm9vbGVhblxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbihcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24sXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24/OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCA9XG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udGVybSA9PT0gQ29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGU7XG5cblx0aWYgKCFvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCkge1xuXHRcdC8vIE9wZXJhdGlvbkF2YWlsYWJsZSB0ZXJtIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBhY3Rpb25cblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRsZXQgcHJlZml4ID0gXCJcIjtcblx0aWYgKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID09PSB0cnVlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi50YXJnZXRFbnRpdHlUeXBlICE9PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZVxuXHQpIHtcblx0XHRjb25zdCBuYXZpZ2F0aW9ucyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKTtcblx0XHQvL1N0YXJ0IGZyb20gY29udGV4dExvY2F0aW9uIGFuZCBuYXZpZ2F0ZSB1bnRpbCB0aGUgc291cmNlIGVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbiB0byBnZXQgdGhlIHJpZ2h0IHByZWZpeFxuXHRcdGZvciAoY29uc3QgbmF2IG9mIG5hdmlnYXRpb25zKSB7XG5cdFx0XHRzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QsIG5hdik7XG5cdFx0XHRpZiAoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldEVudGl0eVR5cGUgPT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHByZWZpeCA9IGAke2dldFJlbGF0aXZlUGF0aHMoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0KS5qb2luKFwiL1wiKX0vYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5pc0JvdW5kID8gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0/LmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHQocGF0aDogc3RyaW5nKSA9PiBgJHtwcmVmaXh9JHtiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlZFR5cGVzLCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpfWBcblx0KTtcblxuXHRyZXR1cm4gZXF1YWwob3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiwgdHJ1ZSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBxdWlja1ZpZXcgZmFjZXQgaXMgdmlzaWJsZS5cbiAqIEBwYXJhbSBmYWNldE1vZGVsUGF0aFxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUXVpY2tWaWV3RmFjZXRWaXNpYmxlKGZhY2V0TW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFJlZmVyZW5jZUZhY2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHRhcmdldFZpc2libGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHR0YXJnZXRWaXNpYmxlID0gaXNWaXNpYmxlKGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGlzVmlzaWJsZShmYWNldE1vZGVsUGF0aC50YXJnZXRPYmplY3Qp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
|
|
742
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJfZXhwb3J0cyIsImdldERpc3BsYXlNb2RlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJEaXNwbGF5TW9kZUZvcm1hdHRlciIsInRhcmdldE9iamVjdCIsImdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0Iiwib1Byb3BlcnR5UGF0aCIsIm9EYXRhRmllbGRDb252ZXJ0ZWQiLCJpc0VkaXRhYmxlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiVUkiLCJJc0VkaXRhYmxlIiwiY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb24iLCJiQXNPYmplY3QiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlzUHJvcGVydHkiLCJpZkVsc2UiLCJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiJHRhcmdldCIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsInVucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJmb3JtYXR0ZXIiLCJvYmplY3RQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImFjdGl2aXR5RXhwcmVzc2lvbiIsInBhdGhJbk1vZGVsIiwia2V5cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJrZXlzRXhwcmVzc2lvbnMiLCJmb3JFYWNoIiwia2V5Iiwia2V5RXhwcmVzc2lvbiIsIm5hbWUiLCJwdXNoIiwiZm9ybWF0UmVzdWx0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCIsImdldEVuYWJsZWRFeHByZXNzaW9uIiwiZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsImVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0RWRpdE1vZGUiLCJtZWFzdXJlUmVhZE9ubHkiLCJhc09iamVjdCIsImRhdGFGaWVsZENvbnZlcnRlZCIsIiRUeXBlIiwicHJvcGVydHkiLCJhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsInJlc3VsdEV4cHJlc3Npb24iLCJpc1VuaXRSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNDb25zdGFudCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJyZWFkT25seUV4cHJlc3Npb24iLCJlZGl0TW9kZUV4cHJlc3Npb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvck1lYXN1cmVVbml0IiwiY3VycmVuY3kiLCJtZWFzdXJlIiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNUZXh0QW5ub3RhdGlvbiIsIkNvbW1vbiIsIlRleHQiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0Q29uc3RyYWludE9wdGlvbnMiLCJEb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkiLCJ2YWx1ZU9mIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwiZm9yRGlzcGxheU1vZGUiLCJzaG93T25seVVuaXREZWNpbWFscyIsInVuaXQiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbiIsImhhc1N0YXRpY1BlcmNlbnRVbml0Iiwic2hvd01lYXN1cmUiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoUGVyY2VudGFnZSIsImNvbXBsZXhUeXBlIiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RyYWludE9wdGlvbnMiLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciIsIm1pbkRhdGUiLCIkRGF0ZSIsIm1heERhdGUiLCJtaW5FeHByZXNzaW9uIiwibWF4RXhwcmVzc2lvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93TnVtYmVyIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsImhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZmllbGRGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInN0eWxlIiwiRGF0ZVRpbWVTdHlsZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZGF0ZVRpbWVTdHlsZSIsImRhdGVUaW1lUGF0dGVybiIsInBhdHRlcm4iLCJzaG93VGltZSIsInNob3dEYXRlIiwic2hvd1RpbWV6b25lIiwiZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQiLCJwcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCIsInRvU3RyaW5nIiwiZ2V0QmluZGluZ0ZvclRpbWV6b25lIiwicHJvcGVydHlEZWZpbml0aW9uIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNBbGlnbkRpc3BsYXkiLCJzQWxpZ25FZGl0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsImNvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInJlcXVpcmVzSUNvbnRleHQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJvRGF0YU1vZGVsUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiaGFzT25lVG9NYW55TmF2aWdhdGlvbiIsImZpbmRJbmRleCIsIm9OYXYiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5Iiwib0NvbnRleHROYXYiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCIsImZvcmNlRWRpdE1vZGUiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJvUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwiYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMiLCJyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwiZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24iLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJlZGl0TW9kZSIsImluY2x1ZGVzIiwiSXNDcmVhdGVNb2RlIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzVmlzaWJsZSIsIkhpZGRlbiIsImlzTXVsdGlMaW5lIiwiaXNNdWx0aUxpbmVUZXh0IiwiZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24iLCJhY3Rpb25UYXJnZXQiLCJwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInRlcm0iLCJwcmVmaXgiLCJzb3VyY2VFbnRpdHlUeXBlIiwibmF2aWdhdGlvbnMiLCJzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm5hdiIsImpvaW4iLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJpc0JvdW5kIiwicGFyYW1ldGVycyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24iLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiaXNRdWlja1ZpZXdGYWNldFZpc2libGUiLCJmYWNldE1vZGVsUGF0aCIsInRhcmdldFZpc2libGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uUGFyYW1ldGVyLCBDb252ZXJ0ZWRNZXRhZGF0YSwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHsgVW5pdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvTWVhc3VyZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkZhY2V0LFxuXHRDb25uZWN0ZWRGaWVsZHNUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Q29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyxcblx0Rm5cbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHR1bnJlc29sdmFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IsIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNNdWx0aUxpbmVUZXh0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFQb2ludEZvcm1hdE9wdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0RhdGFQb2ludFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbi8vIEltcG9ydC1leHBvcnQgbWV0aG9kIHVzZWQgYnkgdGhlIGNvbnZlcnRlciB0byB1c2UgdGhlbSBpbiB0aGUgdGVtcGxhdGluZyB0aHJvdWdoIHRoZSBVSUZvcm1hdHRlcnMuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZSA9IERpc3BsYXlNb2RlRm9ybWF0dGVyLkRpc3BsYXlNb2RlO1xuXG5leHBvcnQgdHlwZSBGaWVsZEVkaXRTdHlsZSA9IFwiUmFkaW9CdXR0b25zXCI7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiB1bmtub3duW107XG5cdCQkdmFsdWVBc1Byb21pc2U/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZWZvcm1hdE9wdGlvbnMgPSB7XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1R5cGUgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM6IGNvbmZpZ1R5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogY29uZmlnVHlwZWZvcm1hdE9wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRlVGltZVN0eWxlID0gXCJzaG9ydFwiIHwgXCJtZWRpdW1cIiB8IFwibG9uZ1wiIHwgXCJmdWxsXCI7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0ID0gRmllbGRGb3JtYXRPcHRpb25zIHwgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucztcblxuZXhwb3J0IGNvbnN0IEZpZWxkRWRpdE1vZGUgPSB7XG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzYWJsZWQgbW9kZVxuXHQgKi9cblx0RGlzYWJsZWQ6IFwiRGlzYWJsZWRcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNwbGF5IG1vZGVcblx0ICovXG5cdERpc3BsYXk6IFwiRGlzcGxheVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGVkaXRhYmxlIG1vZGVcblx0ICovXG5cdEVkaXRhYmxlOiBcIkVkaXRhYmxlXCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgaW4gZGlzcGxheSBtb2RlLlxuXHQgKi9cblx0RWRpdGFibGVEaXNwbGF5OiBcIkVkaXRhYmxlRGlzcGxheVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIHJlYWQtb25seS5cblx0ICovXG5cdEVkaXRhYmxlUmVhZE9ubHk6IFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIHJlYWQtb25seSBtb2RlXG5cdCAqL1xuXHRSZWFkT25seTogXCJSZWFkT25seVwiXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFZGl0YWJsZUV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5UGF0aCxcblx0XHRvRGF0YUZpZWxkQ29udmVydGVkLFxuXHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRydWUsXG5cdFx0aXNFZGl0YWJsZSxcblx0XHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uc1xuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdGFibGVcIiBCb29sZWFuIHZhbHVlLlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIG9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIHRoaXMgcHJvcGVydHkgb2JqZWN0XG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcGFyYW0gY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgV2hldGhlciB3ZSB3YW50IHRvIHRha2UgaW50byBhY2NvdW50IFVwZGF0ZVJlc3RyaWN0aW9ucyB0byBjb21wdXRlIHRoZSBlZGl0YWJsZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVkaXRhYmxlIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBpc0VkaXRhYmxlKTtcblx0fSBlbHNlIGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpc0VkaXRhYmxlO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogb1Byb3BlcnR5UGF0aCxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIG9EYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRpZiAoY29tcGlsZUV4cHJlc3Npb24oaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIiAmJiBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBiQXNPYmplY3QgPyBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIDogXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9XG5cdFx0b1Byb3BlcnR5ICE9PSB1bmRlZmluZWRcblx0XHRcdD8gaWZFbHNlKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKG5vdChpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMpLFxuXHRcdFx0XHRcdFx0aXNDb21wdXRlZChvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNLZXkob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzSW1tdXRhYmxlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGlmRWxzZShvcihpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksIGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSksIGZhbHNlLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdFx0XHRcdGlzRWRpdGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlZGl0YWJsZUV4cHJlc3Npb24sIGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gPFQ+KFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0Zm9ybWF0dGVyOiBGbjxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFjdGl2aXR5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGAvY29sbGFib3JhdGlvbi9hY3Rpdml0aWVzJHtvYmplY3RQYXRofWAsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGtleXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoPy5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBsaXN0IG9mIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCB0byByZWFjaCB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0gbWVhc3VyZVJlYWRPbmx5IFdoZXRoZXIgd2Ugc2hvdWxkIHNldCBVb00gLyBjdXJyZW5jeSBmaWVsZCBtb2RlIHRvIHJlYWQgb25seVxuICogQHBhcmFtIGFzT2JqZWN0IFdoZXRoZXIgd2Ugc2hvdWxkIHJldHVybiB0aGlzIGFzIGFuIGV4cHJlc3Npb24gb3IgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXRhRmllbGRDb252ZXJ0ZWQgVGhlIGRhdGFGaWVsZCBvYmplY3RcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGVkaXQgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGVkaXRNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGUgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRtZWFzdXJlUmVhZE9ubHkgPSBmYWxzZSxcblx0YXNPYmplY3QgPSBmYWxzZSxcblx0ZGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoXG5cdFx0IXByb3BlcnR5UGF0aCB8fFxuXHRcdHR5cGVvZiBwcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIgfHxcblx0XHQoIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSAmJiBkYXRhRmllbGRDb252ZXJ0ZWQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpXG5cdCkge1xuXHRcdHJldHVybiBGaWVsZEVkaXRNb2RlLkRpc3BsYXk7XG5cdH1cblx0Y29uc3QgcHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eVBhdGgpID8gcHJvcGVydHlQYXRoLiR0YXJnZXQgOiBwcm9wZXJ0eVBhdGg7XG5cdGlmICghaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRyZXR1cm4gRmllbGRFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUoZGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHksXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdC8vIHdlIGdldCB0aGUgZWRpdGFibGUgRXhwcmVzc2lvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHVwZGF0ZSBSZXN0cmljdGlvbnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgsIGlzRWRpdGFibGUsIGZhbHNlKTtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgaXNVbml0UmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdG9yKGlzVW5pdFJlYWRPbmx5LCBpc0NvbXB1dGVkKHVuaXRQcm9wZXJ0eSksIGFuZChpc0ltbXV0YWJsZSh1bml0UHJvcGVydHkpLCBub3QoVUkuSXNUcmFuc2llbnRCaW5kaW5nKSksIG1lYXN1cmVSZWFkT25seSksXG5cdFx0XHRpZkVsc2UoIWlzQ29uc3RhbnQoaXNVbml0UmVhZE9ubHkpICYmIGlzVW5pdFJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KSxcblx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGVcblx0XHQpO1xuXHR9XG5cdGlmICghdW5pdFByb3BlcnR5ICYmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0KSkge1xuXHRcdC8vIG5vIHVuaXQgcHJvcGVydHkgYXNzb2NpYXRlZCBtZWFucyB0aGlzIGlzIGEgc3RhdGljIHVuaXRcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpO1xuXHR9XG5cdGxldCByZWFkT25seUV4cHJlc3Npb247XG5cdGlmIChkYXRhRmllbGRDb252ZXJ0ZWQgIT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBvcihpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgaXNSZWFkT25seUV4cHJlc3Npb24oZGF0YUZpZWxkQ29udmVydGVkKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdH1cblxuXHQvLyBpZiB0aGVyZSBhcmUgdXBkYXRlIFJlc3RyaWN0aW9ucyBpdCBpcyBhbHdheXMgZGlzcGxheSBtb2RlXG5cdGNvbnN0IGVkaXRNb2RlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdGlmRWxzZShcblx0XHRcdGVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRcdHJlc3VsdEV4cHJlc3Npb24sXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIGlzRWRpdGFibGUpLFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHRpZkVsc2UoaXNFZGl0YWJsZSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdCksXG5cdFx0RmllbGRFZGl0TW9kZS5EaXNwbGF5XG5cdCk7XG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdHJldHVybiBvUHJvcGVydHlEZWZpbml0aW9uICYmIGdldEV4cHJlc3Npb25Gb3JNZWFzdXJlVW5pdChvUHJvcGVydHlEZWZpbml0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTWVhc3VyZVVuaXQgPSBmdW5jdGlvbiAob1Byb3BlcnR5RGVmaW5pdGlvbjogUHJvcGVydHkpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChtZWFzdXJlKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKGlzVHJ1dGh5KGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihtZWFzdXJlKSksIG5vdChVSS5Jc1RvdGFsKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBmaWVsZERpc3BsYXkuXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uc3RyYWludE9wdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHkgJiZcblx0XHRwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJLkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eT8udmFsdWVPZigpXG5cdFx0PyB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfVxuXHRcdDoge307XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRcdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xuXHRcdGVtcHR5U3RyaW5nPzogc3RyaW5nIHwgbnVtYmVyO1xuXHR9LFxuXHRmb3JEaXNwbGF5TW9kZT86IGJvb2xlYW4sXG5cdHNob3dPbmx5VW5pdERlY2ltYWxzPzogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pKSB7XG5cdFx0aWYgKGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbiksIGlnbm9yZVVuaXRDb25zdHJhaW50KVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGxldCBjb25zdHJhaW50T3B0aW9uczogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbXBsZXhUeXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIikge1xuXHRcdGlmIChmb3JEaXNwbGF5TW9kZSAmJiAhc2hvd09ubHlVbml0RGVjaW1hbHMpIHtcblx0XHRcdGNvbnN0cmFpbnRPcHRpb25zID0geyBza2lwRGVjaW1hbHNWYWxpZGF0aW9uOiB0cnVlIH07XG5cdFx0fSBlbHNlIGlmICghZm9yRGlzcGxheU1vZGUpIHtcblx0XHRcdC8vIENvbnNpZGVyIGFubm90YXRpb24gb25seSBpbiBlZGl0IG1vZGVcblx0XHRcdGNvbnN0cmFpbnRPcHRpb25zID0gZ2V0Q29uc3RyYWludE9wdGlvbnMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QpO1xuXHRcdH1cblx0fVxuXHRpZiAoZm9yRGlzcGxheU1vZGUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCBlbXB0eVN0cmluZzogXCJcIiB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludE9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRhdGUgcGlja2VyIHdpdGggbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSBwcmVzZW50LlxuICogQHBhcmFtIG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIEJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBwcm9wZXJ0eSB3aXRoIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgZm9yIHRoZSBzYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yRGF0ZVBpY2tlciA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZFR5cGVzPixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge307XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlXCI7XG5cdGNvbnN0IG1pbkRhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW07XG5cdGNvbnN0IG1heERhdGUgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bT8uJERhdGVcblx0XHQ/IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtPy4kRGF0ZVxuXHRcdDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW07XG5cdGNvbnN0IG1pbkV4cHJlc3Npb24gPVxuXHRcdG1pbkRhdGUgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWluRGF0ZSlcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHRvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0sIHJlbGF0aXZlTG9jYXRpb24pXG5cdFx0XHQgIClcblx0XHRcdDogbWluRGF0ZTtcblx0Y29uc3QgbWF4RXhwcmVzc2lvbiA9XG5cdFx0bWF4RGF0ZSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtYXhEYXRlKVxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtLFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSwgcmVsYXRpdmVMb2NhdGlvbilcblx0XHRcdCAgKVxuXHRcdFx0OiBtYXhEYXRlO1xuXG5cdHJldHVybiAoXG5cdFx0KG1pbkV4cHJlc3Npb24gfHwgbWF4RXhwcmVzc2lvbikgJiZcblx0XHRhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIG1pbkV4cHJlc3Npb24sIG1heEV4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGZvckRpc3BsYXlNb2RlOiBib29sZWFuLFxuXHRzaG93T25seVVuaXREZWNpbWFsczogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmcge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRpZiAoIW9Qcm9wZXJ0eURlZmluaXRpb24pIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChvUHJvcGVydHlEZWZpbml0aW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChcIiVcIik7XG5cdH1cblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSlcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxQYXRoKVxuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB0cnVlKTtcblx0bGV0IGNvbnN0cmFpbnRPcHRpb25zOiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29tcGxleFR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0aWYgKGZvckRpc3BsYXlNb2RlICYmICFzaG93T25seVVuaXREZWNpbWFscykge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSB7IHNraXBEZWNpbWFsc1ZhbGlkYXRpb246IHRydWUgfTtcblx0XHR9IGVsc2UgaWYgKCFmb3JEaXNwbGF5TW9kZSkge1xuXHRcdFx0Y29uc3RyYWludE9wdGlvbnMgPSBnZXRDb25zdHJhaW50T3B0aW9ucyhvUHJvcGVydHlEZWZpbml0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihcblx0XHRbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSxcblx0XHRjb21wbGV4VHlwZSxcblx0XHR1bmRlZmluZWQsXG5cdFx0e1xuXHRcdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdFx0c2hvd051bWJlcjogZmFsc2Vcblx0XHR9LFxuXHRcdGNvbnN0cmFpbnRPcHRpb25zXG5cdCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGltZXpvbmUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZmllbGRGb3JtYXRPcHRpb25zPzogRmllbGRGb3JtYXRPcHRpb25zXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgdGltZXpvbmUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXHRjb25zdCBzdHlsZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5EYXRlVGltZVN0eWxlO1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0aW1lem9uZSkgJiYgdGltZXpvbmUuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHRcdCh0aW1lem9uZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248dW5rbm93bj4pLiR0YXJnZXQgYXMgUHJvcGVydHksXG5cdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKSxcblx0XHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdFx0ICApXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGxldCBmb3JtYXRPcHRpb25zID0ge307XG5cdGlmIChoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcykge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlczogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdC8vIGlmIHN0eWxlIG9yIHBhdHRlcm4gaXMgYWxzbyBzZXRcblx0aWYgKHN0eWxlKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzdHlsZTogc3R5bGUgfSB9O1xuXHR9IGVsc2UgaWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzdHlsZTogZmllbGRGb3JtYXRPcHRpb25zLmRhdGVUaW1lU3R5bGUgfSB9O1xuXHR9XG5cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uZGF0ZVRpbWVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHBhdHRlcm46IGZpZWxkRm9ybWF0T3B0aW9ucy5kYXRlVGltZVBhdHRlcm4gfSB9O1xuXHR9XG5cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93VGltZSB9IH07XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd0RhdGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd0RhdGU6IGZpZWxkRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSB9IH07XG5cdH1cblx0aWYgKGZpZWxkRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZmllbGRGb3JtYXRPcHRpb25zLnNob3dUaW1lem9uZSB9IH07XG5cdH1cblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZGF0ZSBmb3JtYXQgb2YgYSBkYXRlLCB0aW1lIG9yIGRhdGVUaW1lLlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsUGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gQmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdCBGb3JtYXQgb3B0aW9ucyB3aGljaCBjb250YWluIHRoZSBzdHlsZSBvciBwYXR0ZXJuIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGRhdGUsIHRpbWUsIG9yIGRhdGUtdGltZSwgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybiBvciBzdHlsZSBwcm9wZXJ0eVxuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvckRhdGVGb3JtYXQgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD86IEZvcm1hdE9wdGlvbnNEYXRlRm9ybWF0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCBwYXR0ZXJuID0gZm9ybWF0T3B0aW9uc0RhdGVGb3JtYXQ/LmRhdGVUaW1lUGF0dGVybjtcblx0Y29uc3Qgc3R5bGUgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uRGF0ZVRpbWVTdHlsZSA/PyBmb3JtYXRPcHRpb25zRGF0ZUZvcm1hdD8uZGF0ZVRpbWVTdHlsZTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24udHlwZSA9IEVETV9UWVBFX01BUFBJTkdbb1Byb3BlcnR5RGVmaW5pdGlvbi50eXBlXS50eXBlO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0Li4uKHN0eWxlICYmIHsgc3R5bGU6IHN0eWxlLnRvU3RyaW5nKCkgfSksXG5cdFx0Li4uKHBhdHRlcm4gJiYgeyBwYXR0ZXJuOiBwYXR0ZXJuIH0pXG5cdH07XG5cblx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHsgc2hvd1RpbWU6IGZhbHNlLCBzaG93RGF0ZTogZmFsc2UsIHNob3dUaW1lem9uZTogdHJ1ZSwgcGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlIH07XG5cblx0Ly8gbnVsbCBpcyByZXF1aXJlZCBieSBmb3JtYXR0ZXIgd2hlbiB0aGVyZSBpcyBqdXN0IGEgdGltZXpvbmVcblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbbnVsbCwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFsaWdubWVudEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0c0FsaWduRGlzcGxheSA9IFwiQmVnaW5cIixcblx0c0FsaWduRWRpdCA9IFwiQmVnaW5cIlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkRpc3BsYXlcIiksIHNBbGlnbkRpc3BsYXksIHNBbGlnbkVkaXQpKTtcbn07XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgY29udmVydGVyQ29udGV4dCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgbWV0YW1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgVGhlIENvbnZlcnRlckNvbnRleHQgcmVwcmVzZW50aW5nIHRoYXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBvYmplY3QgfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9JbnRlcmZhY2UuY29udGV4dCkgYXMgb2JqZWN0O1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldENvbnZlcnRlckNvbnRleHQucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbiA8VD4oXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb24uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlRmllbGQgPSBmdW5jdGlvbiAob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4pOiBib29sZWFuIHtcblx0aWYgKG9EYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBoYXNPbmVUb01hbnlOYXZpZ2F0aW9uID1cblx0XHRcdG9EYXRhTW9kZWxQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoKG9OYXYpID0+IHtcblx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkob05hdikpIHtcblx0XHRcdFx0XHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvL3dlIGNoZWNrIHRoZSBvbmUgdG8gbWFueSBuYXYgaXMgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgY29udGV4dFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0b0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHRcdFx0KG9Db250ZXh0TmF2KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGZvcmNlRWRpdE1vZGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCBmb3JjZUVkaXRNb2RlLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2UsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvUmVxdWlyZWRQcm9wZXJ0aWVzOiB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zPzogdW5rbm93bltdO1xuXHR9ID0ge30sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucztcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGJBc09iamVjdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGZhbHNlKSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdC8vIEZvciB0aGUgZGF0YWZpZWxkIGV4cHJlc3Npb24gd2Ugc2hvdWxkIG5vdCAgY29uc2lkZXIgdGhlIHJlbGF0aXZlIHBhdGhcblx0XHRkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKTtcblx0fVxuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZWRpdE1vZGUgPSBmb3JjZUVkaXRNb2RlIHx8IFVJLklzRWRpdGFibGU7XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gVUkuSXNDcmVhdGVNb2RlO1xuXHR9XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gYW5kKFVJLklzRWRpdGFibGUsIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKTtcblx0fVxuXHRjb25zdCByZXR1cm5FeHByZXNzaW9uID0gb3IoXG5cdFx0YW5kKG9yKHJlcXVpcmVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uKSwgZWRpdE1vZGUpLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbixcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb25cblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiByZXR1cm5FeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihyZXR1cm5FeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QW5ub3RhdGlvblBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZT4+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIERhdGFGaWVsZEFic3RyYWN0VHlwZXM+ID0gKGRhdGFGaWVsZE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uJHRhcmdldD8uRGF0YSA/PyB7fSkgYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHREYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdD47XG5cdGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0Y29uc3QgZGF0YUZpZWxkcyA9IFtdO1xuXHRsZXQgcHJvcGVydHlQYXRoO1xuXHRjb25zdCBpc1JlcXVpcmVkRXhwcmVzc2lvbnM6IChDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0aWYgKGRhdGFba2V5XT8uW1wiJFR5cGVcIl0gJiYgZGF0YVtrZXldW1wiJFR5cGVcIl0/LmluY2x1ZGVzKFwiRGF0YUZpZWxkXCIpKSB7XG5cdFx0XHRkYXRhRmllbGRzLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdH1cblx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgZGF0YUZpZWxkcykge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdFx0aXNSZXF1aXJlZEV4cHJlc3Npb25zLnB1c2goZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGQsIGZhbHNlKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLihpc1JlcXVpcmVkRXhwcmVzc2lvbnMgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGhlYWRlciBmYWNldCBvciBhY3Rpb24gaXMgdmlzaWJsZS5cbiAqIEBwYXJhbSB0YXJnZXRPYmplY3QgSGVhZGVyIGZhY2V0cyBvciBBY3Rpb25zXG4gKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmlzaWJsZShcblx0dGFyZ2V0T2JqZWN0OlxuXHRcdHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuXHRcdHwgRGF0YVBvaW50VHlwZVR5cGVzXG5cdFx0fCBSZWZlcmVuY2VGYWNldFxuXHRcdHwgQ29sbGVjdGlvbkZhY2V0XG5cdFx0fCBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1xuXHRcdHwgRmllbGRHcm91cFxuXHRcdHwgUHJvcGVydHlcblx0XHR8IHVuZGVmaW5lZCxcblx0bmF2aWdhdGlvblByb3BlcnRpZXM/OiBzdHJpbmdbXVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiwgbmF2aWdhdGlvblByb3BlcnRpZXMpLCB0cnVlKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aW9uIHBhcmFtZXRlciBpcyBzdXBwb3J0cyBtdWx0aSBsaW5lIGlucHV0LlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggT2JqZWN0IHBhdGggdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmV4cG9ydCBjb25zdCBpc011bHRpTGluZSA9IGZ1bmN0aW9uIChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEFjdGlvblBhcmFtZXRlcj4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzTXVsdGlMaW5lVGV4dChkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBhY3Rpb24gaXMgZW5hYmxlZC5cbiAqIEBwYXJhbSBhY3Rpb25UYXJnZXQgQWN0aW9uXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgQ29udmVydGVkTWV0YWRhdGFcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiBCb29sZWFuXG4gKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRhY3Rpb25UYXJnZXQ6IEFjdGlvbixcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbj86IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkID1cblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlPy50ZXJtID09PSBDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZTtcblxuXHRpZiAoIW9wZXJhdGlvbkF2YWlsYWJsZUlzQW5ub3RhdGVkKSB7XG5cdFx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlIHRlcm0gZG9lc24ndCBleGlzdCBmb3IgdGhlIGFjdGlvblxuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdGxldCBwcmVmaXggPSBcIlwiO1xuXHRpZiAoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uICYmXG5cdFx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24gPT09IHRydWUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5VHlwZSAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLnRhcmdldEVudGl0eVR5cGUgIT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlXG5cdCkge1xuXHRcdGNvbnN0IG5hdmlnYXRpb25zID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRsZXQgc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0ID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24pO1xuXHRcdC8vU3RhcnQgZnJvbSBjb250ZXh0TG9jYXRpb24gYW5kIG5hdmlnYXRlIHVudGlsIHRoZSBzb3VyY2UgZW50aXR5VHlwZSBvZiB0aGUgYWN0aW9uIHRvIGdldCB0aGUgcmlnaHQgcHJlZml4XG5cdFx0Zm9yIChjb25zdCBuYXYgb2YgbmF2aWdhdGlvbnMpIHtcblx0XHRcdHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCwgbmF2KTtcblx0XHRcdGlmIChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QudGFyZ2V0RW50aXR5VHlwZSA9PT0gYWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHtcblx0XHRcdFx0cHJlZml4ID0gYCR7Z2V0UmVsYXRpdmVQYXRocyhzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QpLmpvaW4oXCIvXCIpfS9gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lID0gYWN0aW9uVGFyZ2V0LmlzQm91bmQgPyBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXT8uZnVsbHlRdWFsaWZpZWROYW1lIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdGFjdGlvblRhcmdldC5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdChwYXRoOiBzdHJpbmcpID0+IGAke3ByZWZpeH0ke2JpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVkVHlwZXMsIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSl9YFxuXHQpO1xuXG5cdHJldHVybiBlcXVhbChvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHF1aWNrVmlldyBmYWNldCBpcyB2aXNpYmxlLlxuICogQHBhcmFtIGZhY2V0TW9kZWxQYXRoXG4gKiBAcmV0dXJucyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNRdWlja1ZpZXdGYWNldFZpc2libGUoZmFjZXRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UmVmZXJlbmNlRmFjZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgdGFyZ2V0VmlzaWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RmllbGRHcm91cD4oZmFjZXRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQsIFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlKSkge1xuXHRcdHRhcmdldFZpc2libGUgPSBpc1Zpc2libGUoZmFjZXRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoaXNWaXNpYmxlKGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdCksIHRhcmdldFZpc2libGUp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
|
|
@@ -700,9 +700,8 @@ export const getBindingForTimezone = function (
|
|
|
700
700
|
): BindingToolkitExpression<string> {
|
|
701
701
|
const propertyDefinition = propertyDataModelPath.targetObject as Property;
|
|
702
702
|
propertyBindingExpression = formatWithTypeInformation(propertyDefinition, propertyBindingExpression);
|
|
703
|
-
propertyBindingExpression.type = "any";
|
|
704
703
|
const complexType = "sap.ui.model.odata.type.DateTimeWithTimezone";
|
|
705
|
-
const formatOptions = { showTime: false, showDate: false, showTimezone: true };
|
|
704
|
+
const formatOptions = { showTime: false, showDate: false, showTimezone: true, parseKeepsEmptyString: true };
|
|
706
705
|
|
|
707
706
|
// null is required by formatter when there is just a timezone
|
|
708
707
|
return addTypeInformation([null, propertyBindingExpression], complexType, undefined, formatOptions);
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
|
-
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "./Operation"], function (MetaModelConverter, Operation) {
|
|
6
|
-
"use strict";
|
|
7
|
-
|
|
8
|
-
var convertTypes = MetaModelConverter.convertTypes;
|
|
9
|
-
/**
|
|
10
|
-
* Calls an action import.
|
|
11
|
-
* @param actionName The name of the action import to be called
|
|
12
|
-
* @param model An instance of an OData V4 model
|
|
13
|
-
* @param appComponent The AppComponent
|
|
14
|
-
* @param [parameters] Optional, can contain the following attributes:
|
|
15
|
-
* @param [parameters.parameterValues] A map of action parameter names and provided values
|
|
16
|
-
* @param [parameters.label] A human-readable label for the action
|
|
17
|
-
* @param [parameters.showActionParameterDialog] If set and if parameters exist the user retrieves a dialog to fill in parameters, if actionParameters are passed they are shown to the user
|
|
18
|
-
* @param [parameters.onSubmitted] Function which is called once the actions are submitted with an array of promises
|
|
19
|
-
* @param [parameters.defaultParameters] Can contain default parameters from FLP user defaults
|
|
20
|
-
* @param [parameters.ignoreETag] If specified, the action is called without ETag handling
|
|
21
|
-
* @returns Promise resolves with an array of response objects
|
|
22
|
-
*/
|
|
23
|
-
async function callActionImport(actionName, model, appComponent, parameters) {
|
|
24
|
-
const metaModel = model.getMetaModel();
|
|
25
|
-
const actionPath = `/${actionName}`;
|
|
26
|
-
const convertedTypes = convertTypes(metaModel);
|
|
27
|
-
const convertedActionImport = convertedTypes.resolvePath(actionPath).target,
|
|
28
|
-
convertedAction = convertedActionImport?.action;
|
|
29
|
-
if (!convertedAction) {
|
|
30
|
-
throw new Error("Unknown action import");
|
|
31
|
-
}
|
|
32
|
-
return new Operation(appComponent, model, convertedActionImport.action, parameters).execute();
|
|
33
|
-
}
|
|
34
|
-
async function callBoundFunction(sFunctionName, context, oModel) {
|
|
35
|
-
if (!context) {
|
|
36
|
-
return Promise.reject("Bound functions always requires a context");
|
|
37
|
-
}
|
|
38
|
-
const oMetaModel = oModel.getMetaModel(),
|
|
39
|
-
sFunctionPath = `${oMetaModel.getMetaPath(context.getPath())}/${sFunctionName}`,
|
|
40
|
-
oBoundFunction = oMetaModel.createBindingContext(sFunctionPath);
|
|
41
|
-
return _executeFunction(sFunctionName, oModel, oBoundFunction, context);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Calls a function import.
|
|
46
|
-
* @param sFunctionName The name of the function to be called
|
|
47
|
-
* @param oModel An instance of an OData v4 model
|
|
48
|
-
* @returns Promise resolves
|
|
49
|
-
*/
|
|
50
|
-
async function callFunctionImport(sFunctionName, oModel) {
|
|
51
|
-
const oMetaModel = oModel.getMetaModel(),
|
|
52
|
-
sFunctionPath = oModel.bindContext(`/${sFunctionName}`).getPath(),
|
|
53
|
-
oFunctionImport = oMetaModel.createBindingContext(`/${oMetaModel.createBindingContext(sFunctionPath).getObject("$Function")}/0`);
|
|
54
|
-
return _executeFunction(sFunctionName, oModel, oFunctionImport);
|
|
55
|
-
}
|
|
56
|
-
async function _executeFunction(sFunctionName, oModel, oFunction, context) {
|
|
57
|
-
if (!oFunction?.getObject()) {
|
|
58
|
-
return Promise.reject(new Error(`Function ${sFunctionName} not found`));
|
|
59
|
-
}
|
|
60
|
-
const functionToCall = oModel.bindContext(`${context?.getPath() ?? ""}/${sFunctionName}(...)`);
|
|
61
|
-
const groupId = context ? "functionGroup" : "functionImport";
|
|
62
|
-
const executionPromise = functionToCall.invoke(groupId);
|
|
63
|
-
oModel.submitBatch(groupId);
|
|
64
|
-
await executionPromise;
|
|
65
|
-
return functionToCall.getBoundContext();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Static functions to call OData actions (bound/import) and functions (bound/import)
|
|
70
|
-
* @namespace
|
|
71
|
-
* @experimental This module is only for experimental use! <br/><b>This is only a POC and maybe deleted</b>
|
|
72
|
-
* @since 1.56.0
|
|
73
|
-
*/
|
|
74
|
-
const operations = {
|
|
75
|
-
callActionImport: callActionImport,
|
|
76
|
-
callBoundFunction: callBoundFunction,
|
|
77
|
-
callFunctionImport: callFunctionImport
|
|
78
|
-
};
|
|
79
|
-
return operations;
|
|
80
|
-
}, false);
|
|
81
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWxsQWN0aW9uSW1wb3J0IiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVycyIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImFjdGlvblBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImNvbnZlcnRlZEFjdGlvbkltcG9ydCIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiY29udmVydGVkQWN0aW9uIiwiYWN0aW9uIiwiRXJyb3IiLCJPcGVyYXRpb24iLCJleGVjdXRlIiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJzRnVuY3Rpb25OYW1lIiwiY29udGV4dCIsIm9Nb2RlbCIsIlByb21pc2UiLCJyZWplY3QiLCJvTWV0YU1vZGVsIiwic0Z1bmN0aW9uUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsIm9Cb3VuZEZ1bmN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJfZXhlY3V0ZUZ1bmN0aW9uIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwiYmluZENvbnRleHQiLCJvRnVuY3Rpb25JbXBvcnQiLCJnZXRPYmplY3QiLCJvRnVuY3Rpb24iLCJmdW5jdGlvblRvQ2FsbCIsImdyb3VwSWQiLCJleGVjdXRpb25Qcm9taXNlIiwiaW52b2tlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvcGVyYXRpb25zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJmYWNhZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uLy4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyB0eXBlIE9wZXJhdGlvblJlc3VsdCB9IGZyb20gXCIuL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uLCB7IHR5cGUgT3BlcmF0aW9uUGFyYW1ldGVyc1R5cGUgfSBmcm9tIFwiLi9PcGVyYXRpb25cIjtcblxuZXhwb3J0IHR5cGUgQ2FsbEFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W107XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0b0RhdGFFdmVudHM/OiB7XG5cdFx0b25PRGF0YVJlc3BvbnNlPzogRnVuY3Rpb247XG5cdFx0b25PRGF0YVN1Ym1pdD86IEZ1bmN0aW9uO1xuXHRcdG9uUmVxdWVzdFNpZGVFZmZlY3RzPzogRnVuY3Rpb247XG5cdH07XG5cdG9wZXJhdGlvbkV2ZW50cz86IHtcblx0XHRvblJlc3BvbnNlPzogRnVuY3Rpb247XG5cdH07XG5cdGNvbnRyb2w/OiBDb250cm9sO1xuXHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjtcblx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0dmlldzogRkVWaWV3O1xufSAmIHtcblx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xufSAmIHtcblx0YUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdGdyb3VwSWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENhbGxzIGFuIGFjdGlvbiBpbXBvcnQuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGltcG9ydCB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBtb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFtwYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuaWdub3JlRVRhZ10gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IEVUYWcgaGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxBY3Rpb25JbXBvcnQoXG5cdGFjdGlvbk5hbWU6IHN0cmluZyxcblx0bW9kZWw6IE9EYXRhTW9kZWwsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYXJhbWV0ZXJzOiBPcGVyYXRpb25QYXJhbWV0ZXJzVHlwZVxuKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGFjdGlvblBhdGggPSBgLyR7YWN0aW9uTmFtZX1gO1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRjb25zdCBjb252ZXJ0ZWRBY3Rpb25JbXBvcnQgPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxBY3Rpb25JbXBvcnQgfCB1bmRlZmluZWQ+KGFjdGlvblBhdGgpLnRhcmdldCxcblx0XHRjb252ZXJ0ZWRBY3Rpb24gPSBjb252ZXJ0ZWRBY3Rpb25JbXBvcnQ/LmFjdGlvbjtcblx0aWYgKCFjb252ZXJ0ZWRBY3Rpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvbiBpbXBvcnRcIik7XG5cdH1cblx0cmV0dXJuIG5ldyBPcGVyYXRpb24oYXBwQ29tcG9uZW50LCBtb2RlbCwgY29udmVydGVkQWN0aW9uSW1wb3J0LmFjdGlvbiwgcGFyYW1ldGVycykuZXhlY3V0ZSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsQm91bmRGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdGlmICghY29udGV4dCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGZ1bmN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYSBjb250ZXh0XCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpfS8ke3NGdW5jdGlvbk5hbWV9YCxcblx0XHRvQm91bmRGdW5jdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kRnVuY3Rpb24gYXMgT0RhdGFWNENvbnRleHQsIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENhbGxzIGEgZnVuY3Rpb24gaW1wb3J0LlxuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPHZvaWQgfCBPRGF0YVY0Q29udGV4dD4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NGdW5jdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9GdW5jdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke29NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCkhLmdldE9iamVjdChcIiRGdW5jdGlvblwiKX0vMGApO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9GdW5jdGlvbkltcG9ydCBhcyBPRGF0YVY0Q29udGV4dCk7XG59XG5hc3luYyBmdW5jdGlvbiBfZXhlY3V0ZUZ1bmN0aW9uKFxuXHRzRnVuY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0b0Z1bmN0aW9uOiBPRGF0YVY0Q29udGV4dCB8IG51bGwsXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dFxuKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRpZiAoIW9GdW5jdGlvbj8uZ2V0T2JqZWN0KCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBGdW5jdGlvbiAke3NGdW5jdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0fVxuXHRjb25zdCBmdW5jdGlvblRvQ2FsbDogT0RhdGFDb250ZXh0QmluZGluZyA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtjb250ZXh0Py5nZXRQYXRoKCkgPz8gXCJcIn0vJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdGNvbnN0IGdyb3VwSWQgPSBjb250ZXh0ID8gXCJmdW5jdGlvbkdyb3VwXCIgOiBcImZ1bmN0aW9uSW1wb3J0XCI7XG5cdGNvbnN0IGV4ZWN1dGlvblByb21pc2UgPSBmdW5jdGlvblRvQ2FsbC5pbnZva2UoZ3JvdXBJZCk7XG5cdG9Nb2RlbC5zdWJtaXRCYXRjaChncm91cElkKTtcblx0YXdhaXQgZXhlY3V0aW9uUHJvbWlzZTtcblx0cmV0dXJuIGZ1bmN0aW9uVG9DYWxsLmdldEJvdW5kQ29udGV4dCgpO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgdG8gY2FsbCBPRGF0YSBhY3Rpb25zIChib3VuZC9pbXBvcnQpIGFuZCBmdW5jdGlvbnMgKGJvdW5kL2ltcG9ydClcbiAqIEBuYW1lc3BhY2VcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxBY3Rpb25JbXBvcnQ6IGNhbGxBY3Rpb25JbXBvcnQsXG5cdGNhbGxCb3VuZEZ1bmN0aW9uOiBjYWxsQm91bmRGdW5jdGlvbixcblx0Y2FsbEZ1bmN0aW9uSW1wb3J0OiBjYWxsRnVuY3Rpb25JbXBvcnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wZXJhdGlvbnM7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
|