botframework-webchat-component 4.15.1 → 4.15.2-main.20220413.af6e8a3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Activity/CarouselLayout.js +3 -3
- package/lib/Activity/Speak.d.ts +2 -2
- package/lib/Activity/Speak.d.ts.map +1 -1
- package/lib/Activity/Speak.js +14 -7
- package/lib/Activity/StackedLayout.d.ts +5 -3
- package/lib/Activity/StackedLayout.d.ts.map +1 -1
- package/lib/Activity/StackedLayout.js +15 -20
- package/lib/Attachment/FileContent.js +2 -2
- package/lib/BasicSendBox.d.ts.map +1 -1
- package/lib/BasicSendBox.js +7 -8
- package/lib/BasicToast.js +1 -1
- package/lib/BasicToaster.js +1 -1
- package/lib/BasicTranscript.d.ts.map +1 -1
- package/lib/BasicTranscript.js +4 -4
- package/lib/BasicTypingIndicator.js +1 -1
- package/lib/Composer.js +3 -3
- package/lib/ConnectivityStatus/Connecting.js +1 -1
- package/lib/Dictation.js +1 -1
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/Activity/createCoreMiddleware.js +9 -12
- package/lib/Middleware/ActivityStatus/SendStatus/SendFailedRetry.js +1 -1
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts +2 -2
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts.map +1 -1
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.js +4 -3
- package/lib/Middleware/ActivityStatus/Timestamp.d.ts +2 -2
- package/lib/Middleware/ActivityStatus/Timestamp.d.ts.map +1 -1
- package/lib/Middleware/ActivityStatus/Timestamp.js +4 -2
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +2 -2
- package/lib/ReactWebChat.js +2 -2
- package/lib/ScreenReaderActivity.js +1 -1
- package/lib/ScreenReaderText.js +1 -1
- package/lib/SendBox/AutoResizeTextArea.js +1 -1
- package/lib/SendBox/IconButton.js +1 -1
- package/lib/SendBox/MicrophoneButton.js +1 -1
- package/lib/SendBox/SendButton.js +1 -1
- package/lib/SendBox/SuggestedAction.js +2 -2
- package/lib/SendBox/SuggestedActions.js +2 -2
- package/lib/SendBox/TextBox.js +3 -3
- package/lib/SendBox/UploadButton.js +3 -3
- package/lib/Styles/StyleSet/Bubble.js +2 -2
- package/lib/Styles/StyleSet/CarouselFilmStrip.js +2 -2
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +2 -2
- package/lib/Styles/createStyleSet.d.ts +1 -1
- package/lib/Styles/createStyleSet.js +2 -2
- package/lib/Transcript/ActivityRow.d.ts +2 -2
- package/lib/Transcript/ActivityRow.d.ts.map +1 -1
- package/lib/Transcript/ActivityRow.js +4 -2
- package/lib/Transcript/ActivityTextAlt.js +1 -1
- package/lib/Transcript/FocusTrap.js +1 -1
- package/lib/Transcript/KeyboardHelp.js +1 -1
- package/lib/Transcript/LiveRegionTranscript.d.ts.map +1 -1
- package/lib/Transcript/LiveRegionTranscript.js +22 -7
- package/lib/Transcript/useActivityAccessibleName.d.ts +2 -2
- package/lib/Transcript/useActivityAccessibleName.d.ts.map +1 -1
- package/lib/Transcript/useActivityAccessibleName.js +2 -2
- package/lib/Transcript/useTypistNames.d.ts +3 -0
- package/lib/Transcript/useTypistNames.d.ts.map +1 -0
- package/lib/Transcript/useTypistNames.js +61 -0
- package/lib/Utils/AccessKeySink/Surface.js +1 -1
- package/lib/Utils/AccessibleButton.js +1 -1
- package/lib/Utils/AccessibleInputText.js +1 -1
- package/lib/Utils/AccessibleTextArea.js +1 -1
- package/lib/Utils/CroppedImage.js +1 -1
- package/lib/Utils/FocusRedirector.js +1 -1
- package/lib/Utils/InlineMarkdown.js +3 -3
- package/lib/Utils/TypeFocusSink/FocusBox.js +1 -1
- package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +2 -2
- package/lib/Utils/downscaleImageToDataURL/index.js +1 -1
- package/lib/Utils/getActivityUniqueId.js +1 -1
- package/lib/connectToWebChat.js +2 -2
- package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +3 -3
- package/lib/hooks/internal/useMemoize.d.ts +1 -1
- package/lib/hooks/internal/useMemoize.d.ts.map +1 -1
- package/lib/hooks/internal/useMemoize.js +1 -1
- package/lib/hooks/useObserveTranscriptFocus.d.ts +2 -2
- package/lib/hooks/useObserveTranscriptFocus.d.ts.map +1 -1
- package/lib/hooks/useObserveTranscriptFocus.js +1 -1
- package/lib/hooks/useSendFiles.d.ts.map +1 -1
- package/lib/hooks/useSendFiles.js +4 -4
- package/lib/index.d.ts +3 -3
- package/lib/index.js +5 -5
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +1 -1
- package/lib/providers/ActivityTree/ActivityTreeComposer.js +2 -2
- package/lib/providers/ActivityTree/private/types.d.ts +2 -2
- package/lib/providers/ActivityTree/private/types.d.ts.map +1 -1
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +2 -2
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +1 -1
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +1 -1
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +1 -1
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +1 -1
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +2 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +1 -1
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +10 -6
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +1 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +1 -1
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +22 -8
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +1 -1
- package/package.json +24 -20
- package/src/Activity/Speak.tsx +21 -18
- package/src/Activity/StackedLayout.tsx +20 -26
- package/src/Attachment/FileContent.tsx +1 -1
- package/src/BasicSendBox.tsx +3 -2
- package/src/BasicTranscript.tsx +2 -6
- package/src/Middleware/Activity/createCoreMiddleware.tsx +5 -10
- package/src/Middleware/ActivityStatus/SendStatus/SendStatus.tsx +5 -3
- package/src/Middleware/ActivityStatus/Timestamp.tsx +5 -3
- package/src/SendBox/SuggestedAction.tsx +1 -1
- package/src/SendBox/SuggestedActions.tsx +1 -1
- package/src/Transcript/ActivityRow.tsx +4 -5
- package/src/Transcript/ActivityTextAlt.tsx +2 -3
- package/src/Transcript/LiveRegionTranscript.tsx +27 -12
- package/src/Transcript/useActivityAccessibleName.ts +3 -4
- package/src/Transcript/useTypistNames.ts +37 -0
- package/src/Utils/getActivityUniqueId.ts +2 -2
- package/src/hooks/internal/useMemoize.ts +6 -6
- package/src/hooks/useObserveTranscriptFocus.ts +2 -2
- package/src/hooks/useSendFiles.ts +7 -5
- package/src/providers/ActivityTree/ActivityTreeComposer.tsx +2 -2
- package/src/providers/ActivityTree/private/types.ts +2 -2
- package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +4 -6
- package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +6 -11
- package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +10 -3
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +22 -6
- package/lib/Middleware/GroupActivities/createCoreMiddleware.js +0 -69
- package/src/Middleware/GroupActivities/createCoreMiddleware.js +0 -57
package/lib/BasicTranscript.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -83,9 +83,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
83
83
|
|
|
84
84
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
85
85
|
|
|
86
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
86
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
87
87
|
|
|
88
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
88
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
89
89
|
|
|
90
90
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
91
91
|
|
|
@@ -851,4 +851,4 @@ BasicTranscript.propTypes = {
|
|
|
851
851
|
};
|
|
852
852
|
var _default = BasicTranscript;
|
|
853
853
|
exports.default = _default;
|
|
854
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RyYW5zY3JpcHQudHN4Il0sIm5hbWVzIjpbInVzZUFjdGl2aXR5S2V5cyIsImhvb2tzIiwidXNlQWN0aXZpdHlLZXlzQnlSZWFkIiwidXNlQ3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyIiwidXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsInVzZURpcmVjdGlvbiIsInVzZUdldEFjdGl2aXR5QnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwidXNlR2V0S2V5QnlBY3Rpdml0eUlkIiwidXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwidXNlTG9jYWxpemVyIiwidXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkIiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwidXNlU3R5bGVPcHRpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsImZsZXgiLCJvdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImxpc3RTdHlsZVR5cGUiLCJJbnRlcm5hbFRyYW5zY3JpcHQiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsImFjdGl2ZURlc2NlbmRhbnRJZCIsImFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSIsImRpcmVjdGlvbiIsImZvY3VzZWRBY3Rpdml0eUtleSIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImNyZWF0ZUF2YXRhclJlbmRlcmVyIiwiZm9jdXMiLCJmb2N1c0J5QWN0aXZpdHlLZXkiLCJmb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZ2V0S2V5QnlBY3Rpdml0eSIsImdldEtleUJ5QWN0aXZpdHlJZCIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInJvb3RFbGVtZW50UmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ0ZXJtaW5hdG9yUmVmIiwiZm9jdXNlZEFjdGl2aXR5S2V5UmVmIiwiaGlkZUFsbFRpbWVzdGFtcHMiLCJ0ZXJtaW5hdG9yVGV4dCIsInRyYW5zY3JpcHRBcmlhTGFiZWwiLCJjYWxsYmFja1JlZiIsImVsZW1lbnQiLCJjdXJyZW50IiwicmVuZGVyaW5nRWxlbWVudHMiLCJ0b3BTaWRlQm90TnViIiwidG9wU2lkZVVzZXJOdWIiLCJmb3JFYWNoIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZmlyc3RBY3Rpdml0eSIsImFjdGl2aXR5IiwicmVuZGVyQXZhdGFyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiaW5kZXhXaXRoaW5TZW5kZXJHcm91cCIsImZpcnN0SW5TZW5kZXJHcm91cCIsImxhc3RJblNlbmRlckdyb3VwIiwibGVuZ3RoIiwiaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwia2V5IiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsIm5leHRWaXNpYmxlQWN0aXZpdHkiLCJ1bmRlZmluZWQiLCJ0b3BTaWRlTnViIiwiZnJvbSIsInJvbGUiLCJzaG93Q2FsbG91dCIsInB1c2giLCJhY3Rpdml0eUVsZW1lbnQiLCJzZXQiLCJkZWxldGUiLCJoaWRlVGltZXN0YW1wIiwic2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZ2V0IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdHMiLCJzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsImRpc3BsYWNlbWVudCIsInJvb3RFbGVtZW50Iiwic2Nyb2xsYWJsZSIsIm5leHRTY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJoYW5kbGVTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGVDbGllbnRCb3R0b20iLCJib3R0b20iLCJhY3Rpdml0eUVsZW1lbnRzIiwiQXJyYXkiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsImVsZW1lbnRDbGllbnRSZWN0IiwiaWQiLCJoYW5kbGVUcmFuc2NyaXB0S2V5RG93biIsImV2ZW50IiwidGFyZ2V0IiwiZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciIsImZyb21UcmFuc2NyaXB0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZWQiLCJJbmZpbml0eSIsImJvZHkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5IiwiZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVGb2N1c0ZpbGxlciIsImFuZHJvaWQiLCJtYXAiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzaGFwZSIsImluc3RhbmNlT2YiLCJNYXAiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZSIsImNoaWxkcmVuIiwib25Gb2N1c0ZpbGxlciIsImFjdGl2aXRpZXNTdHlsZVNldCIsImFjdGl2aXRpZXMiLCJhbmltYXRpbmdUb0VuZCIsImF0RW5kIiwidW5yZWFkQWN0aXZpdHlLZXlzIiwic3RpY2t5Iiwic3R5bGVPcHRpb25zIiwibWFya0FsbEFzQWNrbm93bGVkZ2VkIiwicHJldlN0aWNreSIsInRyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb24iLCJzdGlja3lDaGFuZ2VkVG9UcnVlIiwiZmxhdCIsImZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciIsInJlbmRlcmluZ0FjdGl2aXR5S2V5cyIsInJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiIsIm5leHRVbnJlYWRBY3Rpdml0eUtleXMiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmIiwidW5yZWFkIiwic29tZSIsImluY2x1ZGVzIiwiaGFuZGxlU2Nyb2xsVG9FbmRCdXR0b25DbGljayIsImZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkiLCJyZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbiIsIm9uQ2xpY2siLCJSZWFjdCIsIkNoaWxkcmVuIiwiY291bnQiLCJhbnkiLCJmdW5jIiwidXNlU2Nyb2xsZXIiLCJhY3Rpdml0eUtleXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJhY3Rpdml0eUtleXNSZWYiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYiLCJzdHlsZU9wdGlvbnNSZWYiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZSIsImF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXQiLCJhY3Rpdml0eUVsZW1lbnRNYXAiLCJ2YWx1ZXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCIsImluZGV4T2YiLCJrZXlzIiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4Iiwic2xpY2UiLCJhY2tub3dsZWRnZWRBY3Rpdml0eUtleSIsImluZGV4IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eU9mZnNldFRvcCIsIm9mZnNldFRvcCIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJCYXNpY1RyYW5zY3JpcHQiLCJjb250YWluZXJSZWYiLCJzY3JvbGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBVUE7O0FBQ0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJ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LElBQU15QixlQUEwQyxHQUFHLFNBQTdDQSxlQUE2QyxTQUFtQjtBQUFBLE1BQWhCck0sU0FBZ0IsVUFBaEJBLFNBQWdCO0FBQ3BFLE1BQU1ELHFCQUFxQixHQUFHLG1CQUEyQixJQUFJcUksR0FBSixFQUEzQixDQUE5QjtBQUNBLE1BQU1rRSxZQUFZLEdBQUcsb0JBQXJCO0FBRUEsTUFBTUMsUUFBUSxHQUFHaEMsV0FBVyxDQUFDeEsscUJBQUQsQ0FBNUI7QUFFQSxzQkFDRSw2QkFBQyxnQ0FBRDtBQUF5QixJQUFBLFlBQVksRUFBRXVNO0FBQXZDLGtCQUNFLDZCQUFDLDZCQUFEO0FBQTZCLElBQUEsUUFBUSxFQUFFQztBQUF2QyxrQkFDRSw2QkFBQyxxQkFBRCxPQURGLGVBRUUsNkJBQUMsa0JBQUQ7QUFBb0IsSUFBQSxxQkFBcUIsRUFBRXhNLHFCQUEzQztBQUFrRSxJQUFBLFNBQVMsRUFBRUMsU0FBN0U7QUFBd0YsSUFBQSxHQUFHLEVBQUVzTTtBQUE3RixJQUZGLENBREYsQ0FERjtBQVFELENBZEQ7O0FBZ0JBRCxlQUFlLENBQUN0RSxZQUFoQixHQUErQjtBQUM3Qi9ILEVBQUFBLFNBQVMsRUFBRTtBQURrQixDQUEvQjtBQUlBcU0sZUFBZSxDQUFDckUsU0FBaEIsR0FBNEI7QUFDMUJoSSxFQUFBQSxTQUFTLEVBQUVpSSxtQkFBVUs7QUFESyxDQUE1QjtlQUllK0QsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnksIEF2YXRhckNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RMaW5lQWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcbmltcG9ydCB0eXBlIHsgRkMsIEtleWJvYXJkRXZlbnRIYW5kbGVyLCBNdXRhYmxlUmVmT2JqZWN0LCBSZWFjdE5vZGUsIFZGQyB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgYW5kcm9pZCB9IGZyb20gJy4vVXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgQWN0aXZpdHlSb3cgZnJvbSAnLi9UcmFuc2NyaXB0L0FjdGl2aXR5Um93JztcbmltcG9ydCBCYXNpY1R5cGluZ0luZGljYXRvciBmcm9tICcuL0Jhc2ljVHlwaW5nSW5kaWNhdG9yJztcbmltcG9ydCBGb2N1c1JlZGlyZWN0b3IgZnJvbSAnLi9VdGlscy9Gb2N1c1JlZGlyZWN0b3InO1xuaW1wb3J0IGlucHV0dGFibGVLZXkgZnJvbSAnLi9VdGlscy9UeXBlRm9jdXNTaW5rL2lucHV0dGFibGVLZXknO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi9VdGlscy9pc1plcm9PclBvc2l0aXZlJztcbmltcG9ydCBLZXlib2FyZEhlbHAgZnJvbSAnLi9UcmFuc2NyaXB0L0tleWJvYXJkSGVscCc7XG5pbXBvcnQgTGl2ZVJlZ2lvblRyYW5zY3JpcHQgZnJvbSAnLi9UcmFuc2NyaXB0L0xpdmVSZWdpb25UcmFuc2NyaXB0Jztcbi8vIFRPRE86IFtQMl0gIzQxMzMgUmVuYW1lIHRvIFwiZ2V0VGFiYmFibGVFbGVtZW50c1wiLlxuaW1wb3J0IHRhYmJhYmxlRWxlbWVudHMgZnJvbSAnLi9VdGlscy90YWJiYWJsZUVsZW1lbnRzJztcbmltcG9ydCBUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXInO1xuaW1wb3J0IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlQWN0aXZlRGVzY2VuZGFudElkJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24nO1xuaW1wb3J0IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi9ob29rcy91c2VGb2N1cyc7XG5pbXBvcnQgdXNlRm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c0J5QWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRBY3Rpdml0eUtleSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1c2VkRXhwbGljaXRseSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEV4cGxpY2l0bHknO1xuaW1wb3J0IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5JztcbmltcG9ydCB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VQcmV2aW91cyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUnO1xuaW1wb3J0IHVzZVJlZ2lzdGVyU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlclNjcm9sbFRvJztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvRW5kIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VVbmlxdWVJZCc7XG5pbXBvcnQgdXNlVmFsdWVSZWYgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VWYWx1ZVJlZic7XG5cbmNvbnN0IHtcbiAgdXNlQWN0aXZpdHlLZXlzLFxuICB1c2VBY3Rpdml0eUtleXNCeVJlYWQsXG4gIHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICB1c2VEaXJlY3Rpb24sXG4gIHVzZUdldEFjdGl2aXR5QnlLZXksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHlJZCxcbiAgdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5LFxuICB1c2VMb2NhbGl6ZXIsXG4gIHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICB1c2VTdHlsZU9wdGlvbnNcbn0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiBoZXJlIHRvIGZvcm0gYW5vdGhlciBzdGFja2luZyBjb250ZXh0IGZvciB0aGUgc2Nyb2xsLXRvLWVuZCBidXR0b24uXG4gICAgLy8gU3RhY2tpbmcgY29udGV4dCBoZWxwIGlzb2xhdGluZyBlbGVtZW50cyB0aGF0IHVzZSBcInotaW5kZXhcIiBmcm9tIGdsb2JhbCBwb2xsdXRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgvVGhlX3N0YWNraW5nX2NvbnRleHRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXInOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnOiB7XG4gICAgICBsaXN0U3R5bGVUeXBlOiAnbm9uZSdcbiAgICB9XG4gIH1cbn07XG5cbnR5cGUgUmVuZGVyaW5nRWxlbWVudCA9IHtcbiAgYWN0aXZpdHk6IERpcmVjdExpbmVBY3Rpdml0eSAmIHtcbiAgICBjaGFubmVsRGF0YT86IHtcbiAgICAgIFsnd2ViY2hhdDpmYWxsYmFjay10ZXh0J106IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBjYWxsYmFja1JlZjogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xuICBoaWRlVGltZXN0YW1wOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcmVuZGVyQWN0aXZpdHk6IEV4Y2x1ZGU8UmV0dXJuVHlwZTxBY3Rpdml0eUNvbXBvbmVudEZhY3Rvcnk+LCBmYWxzZT47XG4gIHJlbmRlckFjdGl2aXR5U3RhdHVzOiAocHJvcHM6IHsgaGlkZVRpbWVzdGFtcD86IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xuICByZW5kZXJBdmF0YXI6IEF2YXRhckNvbXBvbmVudEZhY3Rvcnk7XG4gIHNob3dDYWxsb3V0OiBib29sZWFuO1xufTtcblxudHlwZSBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJyB8ICdzbW9vdGgnO1xudHlwZSBTY3JvbGxUb09wdGlvbnMgPSB7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfTtcbnR5cGUgU2Nyb2xsVG9Qb3NpdGlvbiA9IHsgYWN0aXZpdHlJRD86IHN0cmluZzsgc2Nyb2xsVG9wPzogbnVtYmVyIH07XG5cbnR5cGUgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogTXV0YWJsZVJlZk9iamVjdDxBY3Rpdml0eUVsZW1lbnRNYXA+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG4vLyBUT0RPOiBbUDFdICM0MTMzIEFkZCB0ZWxlbWV0cnkgZm9yIGNvbXB1dGluZyBob3cgbWFueSByZS1yZW5kZXIgZG9uZSBzbyBmYXIuXG5jb25zdCBJbnRlcm5hbFRyYW5zY3JpcHQgPSBmb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBJbnRlcm5hbFRyYW5zY3JpcHRQcm9wcz4oXG4gICh7IGFjdGl2aXR5RWxlbWVudE1hcFJlZiwgY2xhc3NOYW1lIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IFt7IGJhc2ljVHJhbnNjcmlwdDogYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICAgIGNvbnN0IFt7IGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LCBidWJibGVOdWJPZmZzZXQsIGdyb3VwVGltZXN0YW1wLCBzaG93QXZhdGFySW5Hcm91cCB9XSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICAgIGNvbnN0IFthY3RpdmVEZXNjZW5kYW50SWRdID0gdXNlQWN0aXZlRGVzY2VuZGFudElkKCk7XG4gICAgY29uc3QgW2FjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZV0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoKTtcbiAgICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICAgIGNvbnN0IFtmb2N1c2VkQWN0aXZpdHlLZXldID0gdXNlRm9jdXNlZEFjdGl2aXR5S2V5KCk7XG4gICAgY29uc3QgW2ZvY3VzZWRFeHBsaWNpdGx5XSA9IHVzZUZvY3VzZWRFeHBsaWNpdGx5KCk7XG4gICAgY29uc3QgY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciA9IHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIoKTtcbiAgICBjb25zdCBjcmVhdGVBdmF0YXJSZW5kZXJlciA9IHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyKCk7XG4gICAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cygpO1xuICAgIGNvbnN0IGZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZUZvY3VzQnlBY3Rpdml0eUtleSgpO1xuICAgIGNvbnN0IGZvY3VzUmVsYXRpdmVBY3Rpdml0eSA9IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSgpO1xuICAgIGNvbnN0IGdldEFjdGl2aXR5QnlLZXkgPSB1c2VHZXRBY3Rpdml0eUJ5S2V5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eSA9IHVzZUdldEtleUJ5QWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5SWQgPSB1c2VHZXRLZXlCeUFjdGl2aXR5SWQoKTtcbiAgICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICAgIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgY29uc3QgdGVybWluYXRvckxhYmVsSWQgPSB1c2VVbmlxdWVJZCgnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci1sYWJlbCcpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBjb25zdCBmb2N1c2VkQWN0aXZpdHlLZXlSZWYgPSB1c2VWYWx1ZVJlZihmb2N1c2VkQWN0aXZpdHlLZXkpO1xuICAgIGNvbnN0IGhpZGVBbGxUaW1lc3RhbXBzID0gZ3JvdXBUaW1lc3RhbXAgPT09IGZhbHNlO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JUZXh0ID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfVEVSTUlOQVRPUl9URVhUJyk7XG4gICAgY29uc3QgdHJhbnNjcmlwdEFyaWFMYWJlbCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfTEFCRUxfQUxUJyk7XG5cbiAgICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVmKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgfSxcbiAgICAgIFtyZWYsIHJvb3RFbGVtZW50UmVmXVxuICAgICk7XG5cbiAgICAvLyBGbGF0dGVuIHRoZSB0cmVlIGJhY2sgaW50byBhbiBhcnJheSB3aXRoIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcmVuZGVyaW5nLlxuICAgIGNvbnN0IHJlbmRlcmluZ0VsZW1lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJpbmdFbGVtZW50czogUmVuZGVyaW5nRWxlbWVudFtdID0gW107XG4gICAgICBjb25zdCB0b3BTaWRlQm90TnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVOdWJPZmZzZXQpO1xuICAgICAgY29uc3QgdG9wU2lkZVVzZXJOdWIgPSBpc1plcm9PclBvc2l0aXZlKGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0KTtcblxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLmZvckVhY2goZW50cmllc1dpdGhTYW1lU2VuZGVyID0+IHtcbiAgICAgICAgY29uc3QgW1t7IGFjdGl2aXR5OiBmaXJzdEFjdGl2aXR5IH1dXSA9IGVudHJpZXNXaXRoU2FtZVNlbmRlcjtcbiAgICAgICAgY29uc3QgcmVuZGVyQXZhdGFyID0gY3JlYXRlQXZhdGFyUmVuZGVyZXIoeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9KTtcblxuICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXIuZm9yRWFjaCgoZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLCBpbmRleFdpdGhpblNlbmRlckdyb3VwKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckdyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyR3JvdXA7XG4gICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyR3JvdXAgPSBpbmRleFdpdGhpblNlbmRlckdyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXIubGVuZ3RoIC0gMTtcblxuICAgICAgICAgIGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5mb3JFYWNoKCh7IGFjdGl2aXR5LCByZW5kZXJBY3Rpdml0eSB9LCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwKSA9PiB7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIHRpbWVzdGFtcCBhdCB0aGUgZW5kIG9mIHRoZSBzZW5kZXIgZ3JvdXAuIEJ1dCB3ZSBhbHdheXMgc2hvdyB0aGUgXCJTZW5kIGZhaWxlZCwgcmV0cnlcIiBwcm9tcHQuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPSAhaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cCA9XG4gICAgICAgICAgICAgIGluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPT09IGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQWN0aXZpdHlTdGF0dXMgPSBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIG5leHRWaXNpYmxlQWN0aXZpdHk6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0b3BTaWRlTnViID0gYWN0aXZpdHkuZnJvbT8ucm9sZSA9PT0gJ3VzZXInID8gdG9wU2lkZVVzZXJOdWIgOiB0b3BTaWRlQm90TnViO1xuXG4gICAgICAgICAgICBsZXQgc2hvd0NhbGxvdXQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIC8vIERlcGVuZGluZyBvbiB0aGUgXCJzaG93QXZhdGFySW5Hcm91cFwiIHNldHRpbmcsIHRoZSBhdmF0YXIgd2lsbCByZW5kZXIgaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cbiAgICAgICAgICAgIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3NlbmRlcicpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJHcm91cCAmJiBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBsYXN0SW5TZW5kZXJHcm91cCAmJiBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3N0YXR1cycpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGxhc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmluZ0VsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICBhY3Rpdml0eSxcblxuICAgICAgICAgICAgICAvLyBBZnRlciB0aGUgZWxlbWVudCBpcyBtb3VudGVkLCBzZXQgaXQgdG8gYWN0aXZpdHlFbGVtZW50c1JlZi5cbiAgICAgICAgICAgICAgY2FsbGJhY2tSZWY6IGFjdGl2aXR5RWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50XG4gICAgICAgICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LnNldChrZXksIGFjdGl2aXR5RWxlbWVudClcbiAgICAgICAgICAgICAgICAgIDogYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgLy8gXCJoaWRlVGltZXN0YW1wXCIgaXMgYSByZW5kZXItdGltZSBwYXJhbWV0ZXIgZm9yIHJlbmRlckFjdGl2aXR5U3RhdHVzKCkuXG4gICAgICAgICAgICAgIC8vIElmIHRydWUsIGl0IHdpbGwgaGlkZSB0aGUgdGltZXN0YW1wLCBidXQgaXQgd2lsbCBjb250aW51ZSB0byBzaG93IHRoZVxuICAgICAgICAgICAgICAvLyByZXRyeSBwcm9tcHQuIEFuZCBzaG93IHRoZSBzY3JlZW4gcmVhZGVyIHZlcnNpb24gb2YgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgaGlkZVRpbWVzdGFtcDpcbiAgICAgICAgICAgICAgICBoaWRlQWxsVGltZXN0YW1wcyB8fCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwICE9PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHlTdGF0dXMsXG4gICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgc2hvd0NhbGxvdXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVuZGVyaW5nRWxlbWVudHM7XG4gICAgfSwgW1xuICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLFxuICAgICAgYnViYmxlRnJvbVVzZXJOdWJPZmZzZXQsXG4gICAgICBidWJibGVOdWJPZmZzZXQsXG4gICAgICBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgY3JlYXRlQXZhdGFyUmVuZGVyZXIsXG4gICAgICBnZXRLZXlCeUFjdGl2aXR5LFxuICAgICAgaGlkZUFsbFRpbWVzdGFtcHMsXG4gICAgICBzaG93QXZhdGFySW5Hcm91cFxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbzogKHNjcm9sbFRvcDogbnVtYmVyLCBvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG8oKTtcbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kOiAob3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvRW5kKCk7XG5cbiAgICBjb25zdCBzY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uLCB7IGJlaGF2aW9yID0gJ2F1dG8nIH06IFNjcm9sbFRvT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IEZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVNjcm9sbFRvXCIgbXVzdCBiZSBhIFNjcm9sbFBvc2l0aW9uIG9iamVjdC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYWN0aXZpdHlJRDogYWN0aXZpdHlJZCwgc2Nyb2xsVG9wIH0gPSBwb3NpdGlvbjtcblxuICAgICAgICBpZiAodHlwZW9mIHNjcm9sbFRvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aXZpdHlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAuZ2V0KGdldEtleUJ5QWN0aXZpdHlJZChhY3Rpdml0eUlkKSlcbiAgICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcblxuICAgICAgICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCAmJiBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCkge1xuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudENsaWVudFJlY3QgPSBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAvLyBFU0xpbnQgY29uZmxpY3Qgd2l0aCBUeXBlU2NyaXB0LiBUaGUgcmVzdWx0IG9mIGdldENsaWVudFJlY3RzKCkgaXMgbm90IGFuIEFycmF5IGJ1dCBET01SZWN0TGlzdCwgYW5kIGNhbm5vdCBiZSBkZXN0cnVjdHVyZWQuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCA9IHNjcm9sbGFibGVFbGVtZW50LmdldENsaWVudFJlY3RzKClbMF07XG5cbiAgICAgICAgICAgIC8vIElmIGVpdGhlciB0aGUgYWN0aXZpdHkgb3IgdGhlIHRyYW5zY3JpcHQgc2Nyb2xsYWJsZSBpcyBub3Qgb24gRE9NLCB3ZSB3aWxsIG5vdCBzY3JvbGwgdGhlIHZpZXcuXG4gICAgICAgICAgICBpZiAoYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0ICYmIHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCkge1xuICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogYWN0aXZpdHlIZWlnaHQsIHk6IGFjdGl2aXR5WSB9ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0O1xuICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogc2Nyb2xsYWJsZUhlaWdodCB9ID0gc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0O1xuICAgICAgICAgICAgICBjb25zdCBhY3Rpdml0eU9mZnNldFRvcCA9IGFjdGl2aXR5WSArIHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBNYXRoLm1pbihhY3Rpdml0eU9mZnNldFRvcCwgYWN0aXZpdHlPZmZzZXRUb3AgLSBzY3JvbGxhYmxlSGVpZ2h0ICsgYWN0aXZpdHlIZWlnaHQpO1xuXG4gICAgICAgICAgICAgIHNjcm9sbFRvQm90dG9tU2Nyb2xsVG8oc2Nyb2xsVG9wLCB7IGJlaGF2aW9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGdldEtleUJ5QWN0aXZpdHlJZCwgcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvQm90dG9tU2Nyb2xsVG9dXG4gICAgKTtcblxuICAgIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pLFxuICAgICAgW3Njcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmRdXG4gICAgKTtcblxuICAgIGNvbnN0IHNjcm9sbFJlbGF0aXZlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZGlyZWN0aW9uOiAnZG93bicgfCAndXAnLCB7IGRpc3BsYWNlbWVudCB9OiB7IGRpc3BsYWNlbWVudD86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50OiByb290RWxlbWVudCB9ID0gcm9vdEVsZW1lbnRSZWY7XG5cbiAgICAgICAgaWYgKCFyb290RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGU6IEhUTUxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcbiAgICAgICAgbGV0IG5leHRTY3JvbGxUb3A6IG51bWJlcjtcblxuICAgICAgICBpZiAodHlwZW9mIGRpc3BsYWNlbWVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICAgIG5leHRTY3JvbGxUb3AgPSBzY3JvbGxhYmxlLnNjcm9sbFRvcCArIChkaXJlY3Rpb24gPT09ICdkb3duJyA/IDEgOiAtMSkgKiBkaXNwbGFjZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogc2Nyb2xsYWJsZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBzY3JvbGxUbyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY3JvbGxUb3A6IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbGFibGUuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsYWJsZS5vZmZzZXRIZWlnaHQsIG5leHRTY3JvbGxUb3ApKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBiZWhhdmlvcjogJ3Ntb290aCcgfVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIFtyb290RWxlbWVudFJlZiwgc2Nyb2xsVG9dXG4gICAgKTtcblxuICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiA8QmFzaWNUcmFuc2NyaXB0PiBpbnNpZGUgdGhlIDxDb21wb3Nlcj4sIHdoZW4gdGhlIGRldmVsb3BlciBjYWxscyBgc2Nyb2xsWFhYYCwgd2UgbmVlZCB0byBjYWxsIGl0IG9uIGFsbCBpbnN0YW5jZXMuXG4gICAgLy8gV2UgY2FsbCBgdXNlUmVnaXN0ZXJTY3JvbGxYWFhgIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBgdXNlU2Nyb2xsWFhYYCB3aWxsIG11bHRpcGxleCB0aGUgY2FsbCBpbnRvIGVhY2ggaW5zdGFuY2Ugb2YgPEJhc2ljVHJhbnNjcmlwdD4uXG4gICAgdXNlUmVnaXN0ZXJTY3JvbGxUbyhzY3JvbGxUbyk7XG4gICAgdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZChzY3JvbGxUb0VuZCk7XG4gICAgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZShzY3JvbGxSZWxhdGl2ZSk7XG5cbiAgICBjb25zdCBtYXJrQWN0aXZpdHlLZXlBc1JlYWQgPSB1c2VNYXJrQWN0aXZpdHlLZXlBc1JlYWQoKTtcblxuICAgIGNvbnN0IGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZDogKHNjcm9sbFBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uKSA9PiB2b2lkID1cbiAgICAgIHVzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24oKTtcblxuICAgIC8vIFRPRE86IFtQMl0gV2Ugc2hvdWxkIHVzZSBJbnRlcnNlY3Rpb25PYnNlcnZlciB0byB0cmFjayB3aGF0IGFjdGl2aXR5IGlzIGluIHRoZSBzY3JvbGxhYmxlLlxuICAgIC8vICAgICAgICAgICAgSG93ZXZlciwgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSBvbiBJRTExLCB3ZSBuZWVkIHRvIG1ha2UgYSBsaW1pdGVkIHBvbHlmaWxsIGluIFJlYWN0IHN0eWxlLlxuICAgIGNvbnN0IGhhbmRsZVNjcm9sbFBvc2l0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgICAoeyBzY3JvbGxUb3AgfTogeyBzY3JvbGxUb3A6IG51bWJlciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG5cbiAgICAgICAgLy8gXCJnZXRDbGllbnRSZWN0cygpXCIgaXMgbm90IHJldHVybmluZyBhbiBhcnJheSwgdGh1cywgaXQgaXMgbm90IGRlc3RydWN0dXJhYmxlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0ID0gc2Nyb2xsYWJsZUVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsYWJsZSBpcyBub3QgbW91bnRlZCwgd2UgY2Fubm90IG1lYXN1cmUgd2hpY2ggYWN0aXZpdHkgaXMgaW4gdmlldy4gVGh1cywgd2Ugd2lsbCBub3QgZmlyZSBhbnkgZXZlbnRzLlxuICAgICAgICBpZiAoIXNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYm90dG9tOiBzY3JvbGxhYmxlQ2xpZW50Qm90dG9tIH0gPSBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3Q7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgYWN0aXZpdHkganVzdCBhYm92ZSBzY3JvbGwgdmlldyBib3R0b20uXG4gICAgICAgIC8vIElmIHRoZSBzY3JvbGwgdmlldyBpcyBhbHJlYWR5IG9uIHRvcCwgZ2V0IHRoZSBmaXJzdCBhY3Rpdml0eS5cbiAgICAgICAgY29uc3QgYWN0aXZpdHlFbGVtZW50cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnQuZW50cmllcygpKTtcbiAgICAgICAgY29uc3QgYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b206IHN0cmluZyB8IHVuZGVmaW5lZCA9IChcbiAgICAgICAgICBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgICAgID8gYWN0aXZpdHlFbGVtZW50c1xuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAvLyBBZGQgc3VicGl4ZWwgdG9sZXJhbmNlXG4gICAgICAgICAgICAgICAgLmZpbmQoKFssIGVsZW1lbnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBcImdldENsaWVudFJlY3RzKClcIiBpcyBub3QgcmV0dXJuaW5nIGFuIGFycmF5LCB0aHVzLCBpdCBpcyBub3QgZGVzdHJ1Y3R1cmFibGUuXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYWN0aXZpdHkgaXMgbm90IGF0dGFjaGVkIHRvIERPTSB0cmVlLCB3ZSBzaG91bGQgbm90IGNvdW50IGl0IGFzIFwiYm90dG9tbW9zdCB2aXNpYmxlIGFjdGl2aXR5XCIsIGFzIGl0IGlzIG5vdCB2aXNpYmxlLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRDbGllbnRSZWN0ICYmIGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSA8IHNjcm9sbGFibGVDbGllbnRCb3R0b20gKyAxO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IGFjdGl2aXR5RWxlbWVudHNbMF1cbiAgICAgICAgKT8uWzBdO1xuXG4gICAgICAgIC8vIFdoZW4gdGhlIGVuZC11c2VyIHNsb3dseSBzY3JvbGxpbmcgdGhlIHZpZXcgZG93biwgd2Ugd2lsbCBtYXJrIGFjdGl2aXR5IGFzIHJlYWQgd2hlbiB0aGUgbWVzc2FnZSBmdWxseSBhcHBlYXIgb24gdGhlIHNjcmVlbi5cbiAgICAgICAgYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20gJiYgbWFya0FjdGl2aXR5S2V5QXNSZWFkKGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tKTtcblxuICAgICAgICBpZiAoZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbldpdGhBY3Rpdml0eUlkKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZpdHkgPSBnZXRBY3Rpdml0eUJ5S2V5KGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tKTtcblxuICAgICAgICAgIGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCh7IC4uLihhY3Rpdml0eSA/IHsgYWN0aXZpdHlJRDogYWN0aXZpdHkuaWQgfSA6IHt9KSwgc2Nyb2xsVG9wIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBhY3Rpdml0eUVsZW1lbnRNYXBSZWYsXG4gICAgICAgIGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCxcbiAgICAgICAgZ2V0QWN0aXZpdHlCeUtleSxcbiAgICAgICAgbWFya0FjdGl2aXR5S2V5QXNSZWFkLFxuICAgICAgICByb290RWxlbWVudFJlZlxuICAgICAgXVxuICAgICk7XG5cbiAgICB1c2VPYnNlcnZlU2Nyb2xsUG9zaXRpb24oaGFuZGxlU2Nyb2xsUG9zaXRpb24pO1xuXG4gICAgY29uc3QgaGFuZGxlVHJhbnNjcmlwdEtleURvd24gPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD4+KFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA9IHRhcmdldCA9PT0gdGVybWluYXRvclJlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBmcm9tVHJhbnNjcmlwdCA9IHRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldDtcblxuICAgICAgICBpZiAoIWZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgJiYgIWZyb21UcmFuc2NyaXB0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhhbmRsZWQgPSB0cnVlO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgIGZvY3VzUmVsYXRpdmVBY3Rpdml0eShmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yID8gMCA6IDEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA/IDAgOiAtMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoSW5maW5pdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGNhcHR1cmluZyBwbGFpbiBFTlRFUi5cbiAgICAgICAgICAgIC8vIFdoZW4gc2NyZWVuIHJlYWRlciBpcyBub3QgcnVubmluZywgb3Igc2NyZWVuIHJlYWRlciBpcyBydW5uaW5nIG91dHNpZGUgb2Ygc2NhbiBtb2RlLCB0aGUgRU5URVIga2V5IHdpbGwgYmUgY2FwdHVyZWQgaGVyZS5cbiAgICAgICAgICAgIGlmICghZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvcikge1xuICAgICAgICAgICAgICBjb25zdCBib2R5OiBIVE1MRWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAgICAgLmdldChmb2N1c2VkQWN0aXZpdHlLZXlSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1ib2R5Jyk7XG5cbiAgICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50cyhib2R5KVswXT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgZm9jdXMoJ3NlbmRCb3hXaXRob3V0S2V5Ym9hcmQnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoLUluZmluaXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgLy8gSWYgYSBjdXN0b20gSFRNTCBjb250cm9sIHdhbnRzIHRvIGhhbmRsZSB1cC9kb3duIGFycm93LCB3ZSB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIGxpc3RlbmluZyB0byB0aGlzIGV2ZW50IHRvIHByZXZlbnQgYnVncyBkdWUgdG8gaGFuZGxpbmcgYXJyb3cga2V5cyB0d2ljZS5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGZvY3VzLCBmb2N1c2VkQWN0aXZpdHlLZXlSZWYsIGZvY3VzUmVsYXRpdmVBY3Rpdml0eSwgdGVybWluYXRvclJlZl1cbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlVHJhbnNjcmlwdEtleURvd25DYXB0dXJlID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+PihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyBhbHRLZXksIGN0cmxLZXksIGtleSwgbWV0YUtleSwgdGFyZ2V0IH0gPSBldmVudDtcblxuICAgICAgICBpZiAoYWx0S2V5IHx8IChjdHJsS2V5ICYmIGtleSAhPT0gJ3YnKSB8fCBtZXRhS2V5IHx8ICghaW5wdXR0YWJsZUtleShrZXkpICYmIGtleSAhPT0gJ0JhY2tzcGFjZScpKSB7XG4gICAgICAgICAgLy8gSWdub3JlIGlmIG9uZSBvZiB0aGUgdXRpbGl0eSBrZXkgKGV4Y2VwdCBTSElGVCkgaXMgcHJlc3NlZFxuICAgICAgICAgIC8vIEUuZy4gQ1RSTC1DIG9uIGEgbGluayBpbiBvbmUgb2YgdGhlIG1lc3NhZ2Ugc2hvdWxkIG5vdCBqdW1wIHRvIGNoYXQgYm94XG4gICAgICAgICAgLy8gRS5nLiBcIkFcIiBvciBcIkJhY2tzcGFjZVwiIHNob3VsZCBqdW1wIHRvIGNoYXQgYm94XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VuZCBrZXlzdHJva2VzIHRvIHNlbmQgYm94IGlmIHdlIGFyZSBmb2N1c2luZyBvbiB0aGUgdHJhbnNjcmlwdCBvciB0ZXJtaW5hdG9yLlxuICAgICAgICBpZiAodGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0IHx8IHRhcmdldCA9PT0gdGVybWluYXRvclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBmb2N1cygnc2VuZEJveCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2ZvY3VzXVxuICAgICk7XG5cbiAgICB1c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCh1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pKTtcblxuICAgIC8vIFdoZW4gdGhlIGZvY3VzaW5nIGFjdGl2aXR5IGhhcyBjaGFuZ2VkLCBkaXNwYXRjaCBhbiBldmVudCB0byBvYnNlcnZlcnMgb2YgXCJ1c2VPYnNlcnZlVHJhbnNjcmlwdEZvY3VzXCIuXG4gICAgY29uc3QgZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5ID0gdXNlRGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5KCk7XG5cbiAgICAvLyBEaXNwYXRjaCBhIFwidHJhbnNjcmlwdCBmb2N1c1wiIGV2ZW50IGJhc2VkIG9uIHVzZXIgc2VsZWN0aW9uLlxuICAgIC8vIFdlIHNob3VsZCBub3QgZGlzcGF0Y2ggXCJ0cmFuc2NyaXB0IGZvY3VzXCIgd2hlbiBhIG5ldyBhY3Rpdml0eSBjb21lLiBBbHRob3VnaCB0aGUgc2VsZWN0aW9uIGNoYW5nZSwgaXQgaXMgbm90IGluaXRpYXRlZCBmcm9tIHRoZSB1c2VyLlxuICAgIHVzZU1lbW8oXG4gICAgICAoKSA9PiBkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXkoZm9jdXNlZEV4cGxpY2l0bHkgPyBmb2N1c2VkQWN0aXZpdHlLZXkgOiB1bmRlZmluZWQpLFxuICAgICAgW2Rpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSwgZm9jdXNlZEFjdGl2aXR5S2V5LCBmb2N1c2VkRXhwbGljaXRseV1cbiAgICApO1xuXG4gICAgLy8gV2hlbiB0aGUgdHJhbnNjcmlwdCBpcyBiZWluZyBmb2N1c2VkIG9uLCB3ZSBzaG91bGQgZGlzcGF0Y2ggYSBcInRyYW5zY3JpcHRmb2N1c1wiIGV2ZW50LlxuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlQ2FsbGJhY2soXG4gICAgICAvLyBXZSBjYWxsIFwiZm9jdXNCeUFjdGl2aXR5S2V5XCIgd2l0aCBhY3Rpdml0eSBrZXkgb2YgXCJ0cnVlXCIuXG4gICAgICAvLyBJdCBtZWFucywgdHJpZXMgdG8gZm9jdXMgb24gYW55dGhpbmcuXG4gICAgICAoeyBjdXJyZW50VGFyZ2V0LCB0YXJnZXQgfSkgPT4gdGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0ICYmIGZvY3VzQnlBY3Rpdml0eUtleSh0cnVlLCBmYWxzZSksXG4gICAgICBbZm9jdXNCeUFjdGl2aXR5S2V5XVxuICAgICk7XG5cbiAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IElFMTEuXG4gICAgLy8gV2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYW5kIGVtcHR5IHNwYWNlIChhLmsuYS4gZmlsbGVyKSBpbiBhbiBlbXB0eSB0cmFuc2NyaXB0LCBJRTExIHNheXMgdGhlIGZvY3VzIGlzIG9uIHRoZSA8ZGl2IGNsYXNzTmFtZT1cImZpbGxlclwiPixcbiAgICAvLyBkZXNwaXRlIHRoZSBmYWN0IHRoZXJlIGFyZSBubyBcInRhYkluZGV4XCIgYXR0cmlidXRlcyBzZXQgb24gdGhlIGZpbGxlci5cbiAgICAvLyBXZSBuZWVkIHRvIGFydGlmaWNpYWxseSBzZW5kIHRoZSBmb2N1cyBiYWNrIHRvIHRoZSB0cmFuc2NyaXB0LlxuICAgIGNvbnN0IGhhbmRsZUZvY3VzRmlsbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKTtcblxuICAgIC8vIFdoZW4gZm9jdXMgaW50byB0aGUgdHJhbnNjcmlwdCB1c2luZyBUQUIvU0hJRlQtVEFCLCBzY3JvbGwgdGhlIGZvY3VzZWQgYWN0aXZpdHkgaW50byB2aWV3LlxuICAgIHVzZU9ic2VydmVGb2N1c1Zpc2libGUoXG4gICAgICByb290RWxlbWVudFJlZixcbiAgICAgIHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSlcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgLy8gQWx0aG91Z2ggQW5kcm9pZCBUYWxrQmFjayAxMi4xIGRvZXMgbm90IHN1cHBvcnQgYGFyaWEtYWN0aXZlZGVzY2VuZGFudGAsIHdoZW4gdXNlZCwgaXQgYmVjb21lIGJ1Z2d5IGFuZCB3aWxsIG5hcnJhdGUgY29udGVudCB0d2ljZS5cbiAgICAgICAgLy8gV2UgYXJlIGRpc2FibGluZyBgYXJpYS1hY3RpdmVkZXNjZW5kYW50YCBmb3IgQW5kcm9pZC4gU2VlIDxBY3Rpdml0eVJvdz4gZm9yIGRldGFpbHMuXG4gICAgICAgIGFyaWEtYWN0aXZlZGVzY2VuZGFudD17YW5kcm9pZCA/IHVuZGVmaW5lZCA6IGFjdGl2ZURlc2NlbmRhbnRJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dHJhbnNjcmlwdEFyaWFMYWJlbH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgICd3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0JyxcbiAgICAgICAgICBiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCArICcnLFxuICAgICAgICAgIHJvb3RDbGFzc05hbWUsXG4gICAgICAgICAgKGNsYXNzTmFtZSB8fCAnJykgKyAnJ1xuICAgICAgICApfVxuICAgICAgICBkaXI9e2RpcmVjdGlvbn1cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlRm9jdXN9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlVHJhbnNjcmlwdEtleURvd259XG4gICAgICAgIG9uS2V5RG93bkNhcHR1cmU9e2hhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZX1cbiAgICAgICAgcmVmPXtjYWxsYmFja1JlZn1cbiAgICAgICAgLy8gXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiB3aWxsIG9ubHkgd29ya3Mgd2l0aCBhIG51bWJlciBvZiByb2xlcyBhbmQgaXQgbXVzdCBiZSBleHBsaWNpdGx5IHNldC5cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLyNhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgLy8gRm9yIHVwL2Rvd24gYXJyb3cga2V5IG5hdmlnYXRpb24gYWNyb3NzIGFjdGl2aXRpZXMsIHRoaXMgY29tcG9uZW50IG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIHRhYiBzZXF1ZW5jZS5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiIHdpbGwgbm90IGJlIG5hcnJhdGVkIHdoZW4gdGhlIHVzZXIgcHJlc3MgdXAvZG93biBhcnJvdyBrZXlzLlxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtcHJhY3RpY2VzLTEuMS8ja2JkX2ZvY3VzX2FjdGl2ZWRlc2NlbmRhbnRcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICA+XG4gICAgICAgIDxMaXZlUmVnaW9uVHJhbnNjcmlwdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWY9e2FjdGl2aXR5RWxlbWVudE1hcFJlZn0gLz5cbiAgICAgICAgey8qIFRPRE86IFtQMl0gRml4IEVTTGludCBlcnJvciBgbm8tdXNlLWJlZm9yZS1kZWZpbmVgICovfVxuICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL31cbiAgICAgICAgPEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUgb25Gb2N1c0ZpbGxlcj17aGFuZGxlRm9jdXNGaWxsZXJ9IHRlcm1pbmF0b3JSZWY9e3Rlcm1pbmF0b3JSZWZ9PlxuICAgICAgICAgIHtyZW5kZXJpbmdFbGVtZW50cy5tYXAoXG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICBhY3Rpdml0eSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tSZWYsXG4gICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXAsXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5U3RhdHVzLFxuICAgICAgICAgICAgICByZW5kZXJBdmF0YXIsXG4gICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICB9KSA9PiAoXG4gICAgICAgICAgICAgIDxBY3Rpdml0eVJvdyBhY3Rpdml0eT17YWN0aXZpdHl9IGtleT17a2V5fSByZWY9e2NhbGxiYWNrUmVmfT5cbiAgICAgICAgICAgICAgICB7cmVuZGVyQWN0aXZpdHkoe1xuICAgICAgICAgICAgICAgICAgaGlkZVRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyQXZhdGFyLFxuICAgICAgICAgICAgICAgICAgc2hvd0NhbGxvdXRcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9BY3Rpdml0eVJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L0ludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU+XG4gICAgICAgIHshIXJlbmRlcmluZ0VsZW1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgPEZvY3VzUmVkaXJlY3RvciByZWRpcmVjdFJlZj17cm9vdEVsZW1lbnRSZWZ9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e3Rlcm1pbmF0b3JMYWJlbElkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yXCJcbiAgICAgICAgICAgICAgcmVmPXt0ZXJtaW5hdG9yUmVmfVxuICAgICAgICAgICAgICByb2xlPVwibm90ZVwiXG4gICAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3ItYm9keVwiPlxuICAgICAgICAgICAgICAgIHsvKiBgaWRgIGlzIHJlcXVpcmVkIGZvciBgYXJpYS1sYWJlbGxlZGJ5YCAqL31cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2ZvcmJpZC1kb20tcHJvcHMgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yLXRleHRcIiBpZD17dGVybWluYXRvckxhYmVsSWR9PlxuICAgICAgICAgICAgICAgICAge3Rlcm1pbmF0b3JUZXh0fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fZm9jdXMtaW5kaWNhdG9yXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG5cbkludGVybmFsVHJhbnNjcmlwdC5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogJydcbn07XG5cbkludGVybmFsVHJhbnNjcmlwdC5wcm9wVHlwZXMgPSB7XG4gIC8vIFByb3BUeXBlcyBjYW5ub3QgdmFsaWRhdGUgcHJlY2lzZWx5IHdpdGggaXRzIFR5cGVTY3JpcHQgY291bnRlcnBhcnQuXG4gIC8vIEB0cy1pZ25vcmVcbiAgYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcClcbiAgfSkuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG50eXBlIEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIG9uRm9jdXNGaWxsZXI6ICgpID0+IHZvaWQ7XG4gIHRlcm1pbmF0b3JSZWY6IE11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuLy8gU2VwYXJhdGluZyBoaWdoLWZyZXF1ZW5jeSBob29rcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuY29uc3QgSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZTogRkM8SW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZVByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBvbkZvY3VzRmlsbGVyLFxuICB0ZXJtaW5hdG9yUmVmXG59KSA9PiB7XG4gIGNvbnN0IFt7IGFjdGl2aXRpZXM6IGFjdGl2aXRpZXNTdHlsZVNldCB9XSA9IHVzZVN0eWxlU2V0KCk7XG4gIGNvbnN0IFthbmltYXRpbmdUb0VuZF06IFtib29sZWFuXSA9IHVzZUFuaW1hdGluZ1RvRW5kKCk7XG4gIGNvbnN0IFthdEVuZF06IFtib29sZWFuXSA9IHVzZUF0RW5kKCk7XG4gIGNvbnN0IFssIHVucmVhZEFjdGl2aXR5S2V5c10gPSB1c2VBY3Rpdml0eUtleXNCeVJlYWQoKTtcbiAgY29uc3QgW3N0aWNreV06IFtib29sZWFuXSA9IHVzZVN0aWNreSgpO1xuICBjb25zdCBbc3R5bGVPcHRpb25zXSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICBjb25zdCBmb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VGb2N1c0J5QWN0aXZpdHlLZXkoKTtcbiAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG4gIGNvbnN0IG1hcmtBbGxBc0Fja25vd2xlZGdlZCA9IHVzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCgpO1xuICBjb25zdCBzY3JvbGxUb0VuZDogKG9wdGlvbnM/OiBTY3JvbGxUb09wdGlvbnMpID0+IHZvaWQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gIGNvbnN0IHByZXZTdGlja3kgPSB1c2VQcmV2aW91cyhzdGlja3kpO1xuICBjb25zdCB0cmFuc2NyaXB0Um9sZURlc2NyaXB0aW9uID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfQVJJQV9ST0xFX0FMVCcpO1xuXG4gIGNvbnN0IHN0aWNreUNoYW5nZWRUb1RydWUgPSBwcmV2U3RpY2t5ICE9PSBzdGlja3kgJiYgc3RpY2t5O1xuXG4gIC8vIEFja25vd2xlZGdlZCBtZWFucyBlaXRoZXI6XG4gIC8vIDEuIFRoZSB1c2VyIHNlbnQgYSBtZXNzYWdlXG4gIC8vICAgIC0gV2UgZG9uJ3QgbmVlZCBhIGNvbmRpdGlvbiBoZXJlLiBXaGVuIFdlYiBDaGF0IHNlbmRzIHRoZSB1c2VyJ3MgbWVzc2FnZSwgaXQgd2lsbCBzY3JvbGwgdG8gYm90dG9tLCBhbmQgaXQgd2lsbCB0cmlnZ2VyIGNvbmRpdGlvbiAyIGJlbG93LlxuICAvLyAyLiBUaGUgdXNlciBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdHJhbnNjcmlwdCwgZnJvbSBhIG5vbi1ib3R0b20gc2Nyb2xsIHBvc2l0aW9uXG4gIC8vICAgIC0gSWYgdGhlIHRyYW5zY3JpcHQgaXMgYWxyZWFkeSBhdCB0aGUgYm90dG9tLCB0aGUgdXNlciBuZWVkcyB0byBzY3JvbGwgdXAgYW5kIHRoZW4gZ28gYmFjayBkb3duXG4gIC8vICAgIC0gV2hhdCBoYXBwZW5zIGlmIHdlIGFyZSByZWxheGluZyBcInNjcm9sbGVkIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblwiOlxuICAvLyAgICAgIDEuIFRoZSBjb25kaXRpb24gd2lsbCBiZWNvbWUgc29sZWx5IFwiYXQgdGhlIGJvdHRvbSBvZiB0aGUgdHJhbnNjcmlwdFwiXG4gIC8vICAgICAgMi4gQXV0by1zY3JvbGwgd2lsbCBhbHdheXMgc2Nyb2xsIHRoZSB0cmFuc2NyaXB0IHRvIHRoZSBib3R0b21cbiAgLy8gICAgICAzLiBXZWIgQ2hhdCB3aWxsIGFsd2F5cyBhY2tub3dsZWRnZSBhbGwgYWN0aXZpdGllcyBhcyBpdCBpcyBhdCB0aGUgYm90dG9tXG4gIC8vICAgICAgNC4gQWNrbm93bGVkZ2UgZmxhZyBiZWNvbWUgdXNlbGVzc1xuICAvLyAgICAgIDUuIFRoZXJlZm9yZSwgZXZlbiB0aGUgZGV2ZWxvcGVyIHNldCBcInBhdXNlIGFmdGVyIDMgYWN0aXZpdGllc1wiLCBpZiBhY3Rpdml0aWVzIGFyZSBjb21pbmcgaW4gYXQgYSBzbG93IHBhY2UgKG5vdCBiYXRjaGVkIGluIGEgc2luZ2xlIHJlbmRlcilcbiAgLy8gICAgICAgICBXZWIgQ2hhdCB3aWxsIGtlZXAgc2Nyb2xsaW5nIGFuZCBub3Qgc25hcHBlZC9wYXVzZWRcblxuICAvLyBOb3RlOiBXaGVuIFdlYiBDaGF0IGlzIGxvYWRlZCwgdGhlcmUgYXJlIG5vIGFjdGl2aXRpZXMgYWNrbm93bGVkZ2VkLiBXZSBuZWVkIHRvIGFzc3VtZSBhbGwgYXJyaXZpbmcgYWN0aXZpdGllcyBhcmUgYWNrbm93bGVkZ2VkIHVudGlsIGVuZC11c2VyIHNlbmRzIHRoZWlyIGZpcnN0IGFjdGl2aXR5LlxuICAvLyAgICAgICBBY3Rpdml0aWVzIGxvYWRlZCBpbml0aWFsbHkgY291bGQgYmUgZnJvbSBjb252ZXJzYXRpb24gaGlzdG9yeS4gV2l0aG91dCBhc3N1bWluZyBhY2tub3dsZWRnZW1lbnQsIFdlYiBDaGF0IHdpbGwgbm90IHNjcm9sbCBpbml0aWFsbHkgKGFzIGV2ZXJ5dGhpbmcgaXMgbm90IGFja25vd2xlZGdlZCkuXG4gIC8vICAgICAgIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGUgY2hhdCBhZGFwdGVyIHNob3VsZCBsZXQgV2ViIENoYXQga25vdyBpZiB0aGUgYWN0aXZpdHkgaXMgbG9hZGVkIGZyb20gaGlzdG9yeSBvciBub3QuXG5cbiAgLy8gVE9ETzogW1AyXSAjMzY3MCBNb3ZlIHRoZSBcImNvbnZlcnNhdGlvbiBoaXN0b3J5IGFja25vd2xlZGdlbWVudFwiIGxvZ2ljIG1lbnRpb25lZCBhYm92ZSB0byBwb2x5ZmlsbCBvZiBjaGF0IGFkYXB0ZXJzLlxuICAvLyAgICAgICAxLiBDaGF0IGFkYXB0ZXIgc2hvdWxkIHNlbmQgXCJhY2tub3dsZWRnZWRcIiBhcyBwYXJ0IG9mIFwiY2hhbm5lbERhdGFcIlxuICAvLyAgICAgICAyLiBJZiBcImFja25vd2xlZGdlZFwiIGlzIFwidW5kZWZpbmVkXCIsIHdlIHNldCBpdCB0bzpcbiAgLy8gICAgICAgICAgYS4gdHJ1ZSwgaWYgdGhlcmUgYXJlIG5vIGVncmVzcyBhY3Rpdml0aWVzIHlldFxuICAvLyAgICAgICAgICBiLiBPdGhlcndpc2UsIGZhbHNlXG5cbiAgdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc3RpY2t5Q2hhbmdlZFRvVHJ1ZSAmJlxuICAgICAgLy8gVE9ETzogW1AyXSBCb3RoIGBtYXJrQWN0aXZpdHlLZXlBc1JlYWRgIGFuZCBgbWFya0FsbEFzQWNrbm93bGVkZ2VkYCBob29rIGFyZSBzZXR0ZXJzIG9mIHVzZVN0YXRlLlxuICAgICAgLy8gICAgICAgVGhpcyBtZWFucywgaW4gYSByZW5kZXIgbG9vcCwgd2Ugd2lsbCBiZSBjYWxsaW5nIHNldHRlciBhbmQgd2lsbCBjYXVzZSBhbm90aGVyIHJlLXJlbmRlci5cbiAgICAgIC8vICAgICAgIFRoaXMgaXMgbm90IHRyaXZpYWwgYnV0IHdlIHNob3VsZCB0aGluayBpZiB0aGVyZSBpcyBhIHdheSB0byBhdm9pZCB0aGlzLlxuICAgICAgbWFya0FsbEFzQWNrbm93bGVkZ2VkKCksXG4gICAgW21hcmtBbGxBc0Fja25vd2xlZGdlZCwgc3RpY2t5Q2hhbmdlZFRvVHJ1ZV1cbiAgKTtcblxuICBjb25zdCBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyXSA9IHVzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcih7IGZsYXQ6IHRydWUgfSk7XG4gIGNvbnN0IGdldEtleUJ5QWN0aXZpdHkgPSB1c2VHZXRLZXlCeUFjdGl2aXR5KCk7XG5cbiAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzOiBzdHJpbmdbXSA9IHVzZU1lbW88c3RyaW5nW10+KFxuICAgICgpID0+IGZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlci5tYXAoKHsgYWN0aXZpdHkgfSkgPT4gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSkpLFxuICAgIFtmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIsIGdldEtleUJ5QWN0aXZpdHldXG4gICk7XG5cbiAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYocmVuZGVyaW5nQWN0aXZpdHlLZXlzKTtcblxuICAvLyBUbyBwcmV2ZW50IGZsYXNoeSBidXR0b24sIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYW5vdGhlciByZW5kZXIgbG9vcCB0byB1cGRhdGUgdGhlIGBbcmVhZEFjdGl2aXR5S2V5cywgdW5yZWFkQWN0aXZpdHlLZXlzXWAgc3RhdGUuXG4gIC8vIEluc3RlYWQsIHdlIGFyZSBidWlsZGluZyB0aGUgbmV4dCBvbmUgaW4gdGhpcyBgdXNlTWVtb2AgY2FsbC5cbiAgY29uc3QgbmV4dFVucmVhZEFjdGl2aXR5S2V5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFRoaXMgY29kZSBuZWVkIHRvIGJlIGNhcmVmdWwgcmV2aWV3ZWQgYXMgaXQgd2lsbCBjYXVzZSBhbm90aGVyIHJlbmRlci4gVGhlIGNvZGUgc2hvdWxkIGJlIGNvbnZlcmdpbmcuXG4gICAgLy8gQWZ0ZXIgd2UgY2FsbCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCwgZXZlcnl0aGluZyB3aWxsIGJlIHJlYWQgYW5kIG5vdGhpbmcgd2lsbCBiZSB1bnJlYWQuXG4gICAgLy8gVGhhdCBtZWFucywgaW4gbmV4dCByZW5kZXIsIGB1bnJlYWRBY3Rpdml0eUtleXNgIHdpbGwgYmUgZW1wdGllZCBhbmQgdGhlIGBtYXJrQWN0aXZpdHlLZXlBc1JlYWRgIHdpbGwgbm90IGdldCBjYWxsZWQgYWdhaW4uXG4gICAgaWYgKHN0aWNreSAmJiB1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoKSB7XG4gICAgICBtYXJrQWN0aXZpdHlLZXlBc1JlYWQodW5yZWFkQWN0aXZpdHlLZXlzW3VucmVhZEFjdGl2aXR5S2V5cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5yZWFkQWN0aXZpdHlLZXlzO1xuICB9LCBbbWFya0FjdGl2aXR5S2V5QXNSZWFkLCBzdGlja3ksIHVucmVhZEFjdGl2aXR5S2V5c10pO1xuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXNSZWYgPSB1c2VWYWx1ZVJlZihuZXh0VW5yZWFkQWN0aXZpdHlLZXlzKTtcblxuICAvLyBJZiB3ZSBhcmUgcmVuZGVyaW5nIGFueXRoaW5nIHRoYXQgaXMgdW5yZWFkLCB3ZSBzaG91bGQgc2hvdyB0aGUgXCJOZXcgbWVzc2FnZXNcIiBidXR0b24uXG4gIC8vIE5vdCBldmVyeXRoaW5nIGluIHRoZSBgdW5yZWFkQWN0aXZpdHlLZXlzYCBhcmUgcmVuZGVyZWQsIHNheSwgYm90IHR5cGluZyBpbmRpY2F0b3IuXG4gIC8vIFdlIHNob3VsZCBub3Qgc2hvdyB0aGUgXCJOZXcgbWVzc2FnZXNcIiBidXR0b24gZm9yIGJvdCB0eXBpbmcgaW5kaWNhdG9yIGFzIGl0IHdpbGwgY29uZnVzZSB0aGUgdXNlci5cbiAgY29uc3QgdW5yZWFkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzLnNvbWUoa2V5ID0+IHJlbmRlcmluZ0FjdGl2aXR5S2V5cy5pbmNsdWRlcyhrZXkpKSxcbiAgICBbcmVuZGVyaW5nQWN0aXZpdHlLZXlzLCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2Nyb2xsVG9FbmQoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG5cbiAgICBjb25zdCB7IGN1cnJlbnQ6IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyB9ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmO1xuXG4gICAgLy8gQWZ0ZXIgdGhlIFwiTmV3IG1lc3NhZ2VcIiBidXR0b24gaXMgY2xpY2tlZCwgZm9jdXMgb24gdGhlIGZpcnN0IHVucmVhZCBhY3Rpdml0eSB3aGljaCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgIGNvbnN0IGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkgPSBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmLmN1cnJlbnQuZmluZChrZXkgPT5cbiAgICAgIHJlbmRlcmluZ0FjdGl2aXR5S2V5cy5pbmNsdWRlcyhrZXkpXG4gICAgKTtcblxuICAgIGlmIChmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5KSB7XG4gICAgICBmb2N1c0J5QWN0aXZpdHlLZXkoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHVucmVhZCBhY3Rpdml0eSwgc2VuZCB0aGUgZm9jdXMgdG8gdGhlIHRlcm1pbmF0b3IgYmxvY2suXG4gICAgICB0ZXJtaW5hdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbZm9jdXNCeUFjdGl2aXR5S2V5LCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmLCByZW5kZXJpbmdBY3Rpdml0eUtleXNSZWYsIHNjcm9sbFRvRW5kLCB0ZXJtaW5hdG9yUmVmXSk7XG5cbiAgY29uc3QgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gPSB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyKCkoe1xuICAgIGF0RW5kOiBhbmltYXRpbmdUb0VuZCB8fCBhdEVuZCB8fCBzdGlja3ksXG4gICAgc3R5bGVPcHRpb25zLFxuICAgIHVucmVhZFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtyZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbiAmJiByZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbih7IG9uQ2xpY2s6IGhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2sgfSl9XG4gICAgICB7ISFSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbikgJiYgPEZvY3VzUmVkaXJlY3RvciByZWRpcmVjdFJlZj17dGVybWluYXRvclJlZn0gLz59XG4gICAgICA8UmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsIGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGVcIj5cbiAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj17dHJ1ZX0gY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fZmlsbGVyXCIgb25Gb2N1cz17b25Gb2N1c0ZpbGxlcn0gLz5cbiAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICBhcmlhLXJvbGVkZXNjcmlwdGlvbj17dHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbn1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYWN0aXZpdGllc1N0eWxlU2V0ICsgJycsICd3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190cmFuc2NyaXB0Jyl9XG4gICAgICAgICAgcm9sZT1cImZlZWRcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxCYXNpY1R5cGluZ0luZGljYXRvciAvPlxuICAgICAgPC9SZWFjdFNjcm9sbFRvQm90dG9tUGFuZWw+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKTtcbn07XG5cbkludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBvbkZvY3VzRmlsbGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0ZXJtaW5hdG9yUmVmOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbn07XG5cbnR5cGUgU2Nyb2xsZXIgPSAoeyBvZmZzZXRIZWlnaHQsIHNjcm9sbFRvcCB9OiB7IG9mZnNldEhlaWdodDogbnVtYmVyOyBzY3JvbGxUb3A6IG51bWJlciB9KSA9PiBudW1iZXI7XG5cbi8vIFwic2Nyb2xsZXJcIiBpcyB0aGUgYXV0by1zY3JvbGwgbGltaXRlciwgYS5rLmEuIGF1dG8gc2Nyb2xsIHNuYXAuXG5jb25zdCB1c2VTY3JvbGxlciA9IChhY3Rpdml0eUVsZW1lbnRNYXBSZWY6IE11dGFibGVSZWZPYmplY3Q8QWN0aXZpdHlFbGVtZW50TWFwPik6IFNjcm9sbGVyID0+IHtcbiAgY29uc3QgW2FjdGl2aXR5S2V5c10gPSB1c2VBY3Rpdml0eUtleXMoKTtcbiAgY29uc3QgW2xhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleV0gPSB1c2VMYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkoKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcblxuICBjb25zdCBhY3Rpdml0eUtleXNSZWYgPSB1c2VWYWx1ZVJlZihhY3Rpdml0eUtleXMpO1xuICBjb25zdCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYgPSB1c2VWYWx1ZVJlZihsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuICBjb25zdCBzdHlsZU9wdGlvbnNSZWYgPSB1c2VWYWx1ZVJlZihzdHlsZU9wdGlvbnMpO1xuXG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoeyBvZmZzZXRIZWlnaHQsIHNjcm9sbFRvcCB9KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnQ6IHtcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHksXG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25QYWdlLFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH0gPSBzdHlsZU9wdGlvbnNSZWY7XG5cbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkgPVxuICAgICAgICB0eXBlb2YgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMCwgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5KVxuICAgICAgICAgIDogYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5XG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25QYWdlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYXV0b1Njcm9sbFNuYXBPblBhZ2UpKVxuICAgICAgICAgIDogYXV0b1Njcm9sbFNuYXBPblBhZ2VcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDA7XG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0ID09PSAnbnVtYmVyJyA/IGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IDogMDtcblxuICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkgfHwgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogYWN0aXZpdHlFbGVtZW50TWFwIH0gPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWY7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogYWN0aXZpdHlLZXlzIH0gPSBhY3Rpdml0eUtleXNSZWY7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IH0gPSBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWY7XG4gICAgICAgIGNvbnN0IHZhbHVlczogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICBjb25zdCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCA9IGFjdGl2aXR5S2V5cy5pbmRleE9mKGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSk7XG5cbiAgICAgICAgaWYgKH5sYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCkge1xuICAgICAgICAgIC8vIFRoZSBhY3Rpdml0eSB0aGF0IHdlIGFja25vd2xlZGdlZCBjb3VsZCBiZSBub3QgcmVuZGVyZWQsIHN1Y2ggYXMgcG9zdCBiYWNrIGFjdGl2aXR5LlxuICAgICAgICAgIC8vIFdoZW4gY2FsY3VsYXRpbmcgc2Nyb2xsIHNuYXAsIHdlIGNhbiBvbmx5IGJhc2Ugb24gdGhlIGZpcnN0IHVuYWNrbm93bGVkZ2VkLWFuZC1yZW5kZXJpbmcgYWN0aXZpdHkuXG4gICAgICAgICAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXAua2V5cygpKTtcbiAgICAgICAgICBsZXQgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ID0gLTE7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFja25vd2xlZGdlZEFjdGl2aXR5S2V5IG9mIGFjdGl2aXR5S2V5cy5zbGljZSgwLCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCArIDEpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5kZXhPZihhY2tub3dsZWRnZWRBY3Rpdml0eUtleSk7XG5cbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSByZW5kZXJpbmdBY3Rpdml0eUtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh+Zmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eUVsZW1lbnRzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXAudmFsdWVzKCkpO1xuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSkge1xuICAgICAgICAgICAgICAvLyBHZXRzIHRoZSBhY3Rpdml0eSBlbGVtZW50IHdoaWNoIHdlIHNob3VsZCBzbmFwIHRvLlxuICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50c1tmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggKyBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IC0gMV07XG5cbiAgICAgICAgICAgICAgaWYgKG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgPVxuICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQub2Zmc2V0VG9wICsgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Lm9mZnNldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCArXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudHNbK2ZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleF07XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50J1xuICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgPVxuICAgICAgICAgICAgICAgIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQub2Zmc2V0VG9wICsgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Lm9mZnNldFRvcDtcblxuICAgICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgLVxuICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wIC1cbiAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCAqICgxIC0gcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSArXG4gICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4udmFsdWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH0sXG4gICAgW2FjdGl2aXR5RWxlbWVudE1hcFJlZiwgYWN0aXZpdHlLZXlzUmVmLCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYsIHN0eWxlT3B0aW9uc1JlZl1cbiAgKTtcbn07XG5cbnR5cGUgQmFzaWNUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmNvbnN0IEJhc2ljVHJhbnNjcmlwdDogVkZDPEJhc2ljVHJhbnNjcmlwdFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IGFjdGl2aXR5RWxlbWVudE1hcFJlZiA9IHVzZVJlZjxBY3Rpdml0eUVsZW1lbnRNYXA+KG5ldyBNYXAoKSk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICBjb25zdCBzY3JvbGxlciA9IHVzZVNjcm9sbGVyKGFjdGl2aXR5RWxlbWVudE1hcFJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8VHJhbnNjcmlwdEZvY3VzQ29tcG9zZXIgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgPFJlYWN0U2Nyb2xsVG9Cb3R0b21Db21wb3NlciBzY3JvbGxlcj17c2Nyb2xsZXJ9PlxuICAgICAgICA8S2V5Ym9hcmRIZWxwIC8+XG4gICAgICAgIDxJbnRlcm5hbFRyYW5zY3JpcHQgYWN0aXZpdHlFbGVtZW50TWFwUmVmPXthY3Rpdml0eUVsZW1lbnRNYXBSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSByZWY9e2NvbnRhaW5lclJlZn0gLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyPlxuICAgIDwvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXI+XG4gICk7XG59O1xuXG5CYXNpY1RyYW5zY3JpcHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5CYXNpY1RyYW5zY3JpcHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2ljVHJhbnNjcmlwdDtcbiJdfQ==
|
|
854
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RyYW5zY3JpcHQudHN4Il0sIm5hbWVzIjpbInVzZUFjdGl2aXR5S2V5cyIsImhvb2tzIiwidXNlQWN0aXZpdHlLZXlzQnlSZWFkIiwidXNlQ3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyIiwidXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsInVzZURpcmVjdGlvbiIsInVzZUdldEFjdGl2aXR5QnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwidXNlR2V0S2V5QnlBY3Rpdml0eUlkIiwidXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwidXNlTG9jYWxpemVyIiwidXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkIiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwidXNlU3R5bGVPcHRpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsImZsZXgiLCJvdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImxpc3RTdHlsZVR5cGUiLCJJbnRlcm5hbFRyYW5zY3JpcHQiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsImFjdGl2ZURlc2NlbmRhbnRJZCIsImFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSIsImRpcmVjdGlvbiIsImZvY3VzZWRBY3Rpdml0eUtleSIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImNyZWF0ZUF2YXRhclJlbmRlcmVyIiwiZm9jdXMiLCJmb2N1c0J5QWN0aXZpdHlLZXkiLCJmb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZ2V0S2V5QnlBY3Rpdml0eSIsImdldEtleUJ5QWN0aXZpdHlJZCIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInJvb3RFbGVtZW50UmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ0ZXJtaW5hdG9yUmVmIiwiZm9jdXNlZEFjdGl2aXR5S2V5UmVmIiwiaGlkZUFsbFRpbWVzdGFtcHMiLCJ0ZXJtaW5hdG9yVGV4dCIsInRyYW5zY3JpcHRBcmlhTGFiZWwiLCJjYWxsYmFja1JlZiIsImVsZW1lbnQiLCJjdXJyZW50IiwicmVuZGVyaW5nRWxlbWVudHMiLCJ0b3BTaWRlQm90TnViIiwidG9wU2lkZVVzZXJOdWIiLCJmb3JFYWNoIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZmlyc3RBY3Rpdml0eSIsImFjdGl2aXR5IiwicmVuZGVyQXZhdGFyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiaW5kZXhXaXRoaW5TZW5kZXJHcm91cCIsImZpcnN0SW5TZW5kZXJHcm91cCIsImxhc3RJblNlbmRlckdyb3VwIiwibGVuZ3RoIiwiaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwia2V5IiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsIm5leHRWaXNpYmxlQWN0aXZpdHkiLCJ1bmRlZmluZWQiLCJ0b3BTaWRlTnViIiwiZnJvbSIsInJvbGUiLCJzaG93Q2FsbG91dCIsInB1c2giLCJhY3Rpdml0eUVsZW1lbnQiLCJzZXQiLCJkZWxldGUiLCJoaWRlVGltZXN0YW1wIiwic2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZ2V0IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdHMiLCJzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsImRpc3BsYWNlbWVudCIsInJvb3RFbGVtZW50Iiwic2Nyb2xsYWJsZSIsIm5leHRTY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJoYW5kbGVTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGVDbGllbnRCb3R0b20iLCJib3R0b20iLCJhY3Rpdml0eUVsZW1lbnRzIiwiQXJyYXkiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsImVsZW1lbnRDbGllbnRSZWN0IiwiaWQiLCJoYW5kbGVUcmFuc2NyaXB0S2V5RG93biIsImV2ZW50IiwidGFyZ2V0IiwiZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciIsImZyb21UcmFuc2NyaXB0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZWQiLCJJbmZpbml0eSIsImJvZHkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5IiwiZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVGb2N1c0ZpbGxlciIsImFuZHJvaWQiLCJtYXAiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzaGFwZSIsImluc3RhbmNlT2YiLCJNYXAiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZSIsImNoaWxkcmVuIiwib25Gb2N1c0ZpbGxlciIsImFjdGl2aXRpZXNTdHlsZVNldCIsImFjdGl2aXRpZXMiLCJhbmltYXRpbmdUb0VuZCIsImF0RW5kIiwidW5yZWFkQWN0aXZpdHlLZXlzIiwic3RpY2t5Iiwic3R5bGVPcHRpb25zIiwibWFya0FsbEFzQWNrbm93bGVkZ2VkIiwicHJldlN0aWNreSIsInRyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb24iLCJzdGlja3lDaGFuZ2VkVG9UcnVlIiwiZmxhdCIsImZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciIsInJlbmRlcmluZ0FjdGl2aXR5S2V5cyIsInJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiIsIm5leHRVbnJlYWRBY3Rpdml0eUtleXMiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmIiwidW5yZWFkIiwic29tZSIsImluY2x1ZGVzIiwiaGFuZGxlU2Nyb2xsVG9FbmRCdXR0b25DbGljayIsImZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkiLCJyZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbiIsIm9uQ2xpY2siLCJSZWFjdCIsIkNoaWxkcmVuIiwiY291bnQiLCJhbnkiLCJmdW5jIiwidXNlU2Nyb2xsZXIiLCJhY3Rpdml0eUtleXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJhY3Rpdml0eUtleXNSZWYiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYiLCJzdHlsZU9wdGlvbnNSZWYiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZSIsImF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXQiLCJhY3Rpdml0eUVsZW1lbnRNYXAiLCJ2YWx1ZXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCIsImluZGV4T2YiLCJrZXlzIiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4Iiwic2xpY2UiLCJhY2tub3dsZWRnZWRBY3Rpdml0eUtleSIsImluZGV4IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eU9mZnNldFRvcCIsIm9mZnNldFRvcCIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJCYXNpY1RyYW5zY3JpcHQiLCJjb250YWluZXJSZWYiLCJzY3JvbGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBVUE7O0FBQ0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJ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LElBQU15QixlQUEwQyxHQUFHLFNBQTdDQSxlQUE2QyxTQUFtQjtBQUFBLE1BQWhCck0sU0FBZ0IsVUFBaEJBLFNBQWdCO0FBQ3BFLE1BQU1ELHFCQUFxQixHQUFHLG1CQUEyQixJQUFJcUksR0FBSixFQUEzQixDQUE5QjtBQUNBLE1BQU1rRSxZQUFZLEdBQUcsb0JBQXJCO0FBRUEsTUFBTUMsUUFBUSxHQUFHaEMsV0FBVyxDQUFDeEsscUJBQUQsQ0FBNUI7QUFFQSxzQkFDRSw2QkFBQyxnQ0FBRDtBQUF5QixJQUFBLFlBQVksRUFBRXVNO0FBQXZDLGtCQUNFLDZCQUFDLDZCQUFEO0FBQTZCLElBQUEsUUFBUSxFQUFFQztBQUF2QyxrQkFDRSw2QkFBQyxxQkFBRCxPQURGLGVBRUUsNkJBQUMsa0JBQUQ7QUFBb0IsSUFBQSxxQkFBcUIsRUFBRXhNLHFCQUEzQztBQUFrRSxJQUFBLFNBQVMsRUFBRUMsU0FBN0U7QUFBd0YsSUFBQSxHQUFHLEVBQUVzTTtBQUE3RixJQUZGLENBREYsQ0FERjtBQVFELENBZEQ7O0FBZ0JBRCxlQUFlLENBQUN0RSxZQUFoQixHQUErQjtBQUM3Qi9ILEVBQUFBLFNBQVMsRUFBRTtBQURrQixDQUEvQjtBQUlBcU0sZUFBZSxDQUFDckUsU0FBaEIsR0FBNEI7QUFDMUJoSSxFQUFBQSxTQUFTLEVBQUVpSSxtQkFBVUs7QUFESyxDQUE1QjtlQUllK0QsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnksIEF2YXRhckNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBGQywgS2V5Ym9hcmRFdmVudEhhbmRsZXIsIE11dGFibGVSZWZPYmplY3QsIFJlYWN0Tm9kZSwgVkZDIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBXZWJDaGF0QWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcblxuaW1wb3J0IHsgYW5kcm9pZCB9IGZyb20gJy4vVXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgQWN0aXZpdHlSb3cgZnJvbSAnLi9UcmFuc2NyaXB0L0FjdGl2aXR5Um93JztcbmltcG9ydCBCYXNpY1R5cGluZ0luZGljYXRvciBmcm9tICcuL0Jhc2ljVHlwaW5nSW5kaWNhdG9yJztcbmltcG9ydCBGb2N1c1JlZGlyZWN0b3IgZnJvbSAnLi9VdGlscy9Gb2N1c1JlZGlyZWN0b3InO1xuaW1wb3J0IGlucHV0dGFibGVLZXkgZnJvbSAnLi9VdGlscy9UeXBlRm9jdXNTaW5rL2lucHV0dGFibGVLZXknO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi9VdGlscy9pc1plcm9PclBvc2l0aXZlJztcbmltcG9ydCBLZXlib2FyZEhlbHAgZnJvbSAnLi9UcmFuc2NyaXB0L0tleWJvYXJkSGVscCc7XG5pbXBvcnQgTGl2ZVJlZ2lvblRyYW5zY3JpcHQgZnJvbSAnLi9UcmFuc2NyaXB0L0xpdmVSZWdpb25UcmFuc2NyaXB0Jztcbi8vIFRPRE86IFtQMl0gIzQxMzMgUmVuYW1lIHRvIFwiZ2V0VGFiYmFibGVFbGVtZW50c1wiLlxuaW1wb3J0IHRhYmJhYmxlRWxlbWVudHMgZnJvbSAnLi9VdGlscy90YWJiYWJsZUVsZW1lbnRzJztcbmltcG9ydCBUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXInO1xuaW1wb3J0IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlQWN0aXZlRGVzY2VuZGFudElkJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24nO1xuaW1wb3J0IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi9ob29rcy91c2VGb2N1cyc7XG5pbXBvcnQgdXNlRm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c0J5QWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRBY3Rpdml0eUtleSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1c2VkRXhwbGljaXRseSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEV4cGxpY2l0bHknO1xuaW1wb3J0IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5JztcbmltcG9ydCB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VQcmV2aW91cyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUnO1xuaW1wb3J0IHVzZVJlZ2lzdGVyU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlclNjcm9sbFRvJztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvRW5kIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VVbmlxdWVJZCc7XG5pbXBvcnQgdXNlVmFsdWVSZWYgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VWYWx1ZVJlZic7XG5cbmNvbnN0IHtcbiAgdXNlQWN0aXZpdHlLZXlzLFxuICB1c2VBY3Rpdml0eUtleXNCeVJlYWQsXG4gIHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICB1c2VEaXJlY3Rpb24sXG4gIHVzZUdldEFjdGl2aXR5QnlLZXksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHlJZCxcbiAgdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5LFxuICB1c2VMb2NhbGl6ZXIsXG4gIHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICB1c2VTdHlsZU9wdGlvbnNcbn0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiBoZXJlIHRvIGZvcm0gYW5vdGhlciBzdGFja2luZyBjb250ZXh0IGZvciB0aGUgc2Nyb2xsLXRvLWVuZCBidXR0b24uXG4gICAgLy8gU3RhY2tpbmcgY29udGV4dCBoZWxwIGlzb2xhdGluZyBlbGVtZW50cyB0aGF0IHVzZSBcInotaW5kZXhcIiBmcm9tIGdsb2JhbCBwb2xsdXRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgvVGhlX3N0YWNraW5nX2NvbnRleHRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXInOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnOiB7XG4gICAgICBsaXN0U3R5bGVUeXBlOiAnbm9uZSdcbiAgICB9XG4gIH1cbn07XG5cbnR5cGUgUmVuZGVyaW5nRWxlbWVudCA9IHtcbiAgYWN0aXZpdHk6IFdlYkNoYXRBY3Rpdml0eTtcbiAgY2FsbGJhY2tSZWY6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbiAgaGlkZVRpbWVzdGFtcDogYm9vbGVhbjtcbiAga2V5OiBzdHJpbmc7XG4gIHJlbmRlckFjdGl2aXR5OiBFeGNsdWRlPFJldHVyblR5cGU8QWN0aXZpdHlDb21wb25lbnRGYWN0b3J5PiwgZmFsc2U+O1xuICByZW5kZXJBY3Rpdml0eVN0YXR1czogKHByb3BzOiB7IGhpZGVUaW1lc3RhbXA/OiBib29sZWFuIH0pID0+IFJlYWN0Tm9kZTtcbiAgcmVuZGVyQXZhdGFyOiBBdmF0YXJDb21wb25lbnRGYWN0b3J5O1xuICBzaG93Q2FsbG91dDogYm9vbGVhbjtcbn07XG5cbnR5cGUgU2Nyb2xsQmVoYXZpb3IgPSAnYXV0bycgfCAnc21vb3RoJztcbnR5cGUgU2Nyb2xsVG9PcHRpb25zID0geyBiZWhhdmlvcj86IFNjcm9sbEJlaGF2aW9yIH07XG50eXBlIFNjcm9sbFRvUG9zaXRpb24gPSB7IGFjdGl2aXR5SUQ/OiBzdHJpbmc7IHNjcm9sbFRvcD86IG51bWJlciB9O1xuXG50eXBlIEludGVybmFsVHJhbnNjcmlwdFByb3BzID0ge1xuICBhY3Rpdml0eUVsZW1lbnRNYXBSZWY6IE11dGFibGVSZWZPYmplY3Q8QWN0aXZpdHlFbGVtZW50TWFwPjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gVE9ETzogW1AxXSAjNDEzMyBBZGQgdGVsZW1ldHJ5IGZvciBjb21wdXRpbmcgaG93IG1hbnkgcmUtcmVuZGVyIGRvbmUgc28gZmFyLlxuY29uc3QgSW50ZXJuYWxUcmFuc2NyaXB0ID0gZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHM+KFxuICAoeyBhY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGNsYXNzTmFtZSB9LCByZWYpID0+IHtcbiAgICBjb25zdCBbeyBiYXNpY1RyYW5zY3JpcHQ6IGJhc2ljVHJhbnNjcmlwdFN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgICBjb25zdCBbeyBidWJibGVGcm9tVXNlck51Yk9mZnNldCwgYnViYmxlTnViT2Zmc2V0LCBncm91cFRpbWVzdGFtcCwgc2hvd0F2YXRhckluR3JvdXAgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBbYWN0aXZlRGVzY2VuZGFudElkXSA9IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCgpO1xuICAgIGNvbnN0IFthY3Rpdml0eVdpdGhSZW5kZXJlclRyZWVdID0gdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyKCk7XG4gICAgY29uc3QgW2RpcmVjdGlvbl0gPSB1c2VEaXJlY3Rpb24oKTtcbiAgICBjb25zdCBbZm9jdXNlZEFjdGl2aXR5S2V5XSA9IHVzZUZvY3VzZWRBY3Rpdml0eUtleSgpO1xuICAgIGNvbnN0IFtmb2N1c2VkRXhwbGljaXRseV0gPSB1c2VGb2N1c2VkRXhwbGljaXRseSgpO1xuICAgIGNvbnN0IGNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgPSB1c2VDcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyKCk7XG4gICAgY29uc3QgY3JlYXRlQXZhdGFyUmVuZGVyZXIgPSB1c2VDcmVhdGVBdmF0YXJSZW5kZXJlcigpO1xuICAgIGNvbnN0IGZvY3VzID0gdXNlRm9jdXMoKTtcbiAgICBjb25zdCBmb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VGb2N1c0J5QWN0aXZpdHlLZXkoKTtcbiAgICBjb25zdCBmb2N1c1JlbGF0aXZlQWN0aXZpdHkgPSB1c2VGb2N1c1JlbGF0aXZlQWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRBY3Rpdml0eUJ5S2V5ID0gdXNlR2V0QWN0aXZpdHlCeUtleSgpO1xuICAgIGNvbnN0IGdldEtleUJ5QWN0aXZpdHkgPSB1c2VHZXRLZXlCeUFjdGl2aXR5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eUlkID0gdXNlR2V0S2V5QnlBY3Rpdml0eUlkKCk7XG4gICAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgICBjb25zdCByb290Q2xhc3NOYW1lID0gdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QoKShST09UX1NUWUxFKSArICcnO1xuICAgIGNvbnN0IHJvb3RFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JMYWJlbElkID0gdXNlVW5pcXVlSWQoJ3dlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3ItbGFiZWwnKTtcbiAgICBjb25zdCB0ZXJtaW5hdG9yUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgY29uc3QgZm9jdXNlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYoZm9jdXNlZEFjdGl2aXR5S2V5KTtcbiAgICBjb25zdCBoaWRlQWxsVGltZXN0YW1wcyA9IGdyb3VwVGltZXN0YW1wID09PSBmYWxzZTtcbiAgICBjb25zdCB0ZXJtaW5hdG9yVGV4dCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX1RFUk1JTkFUT1JfVEVYVCcpO1xuICAgIGNvbnN0IHRyYW5zY3JpcHRBcmlhTGFiZWwgPSBsb2NhbGl6ZSgnVFJBTlNDUklQVF9BUklBX0xBQkVMX0FMVCcpO1xuXG4gICAgY29uc3QgY2FsbGJhY2tSZWYgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJlZihlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByb290RWxlbWVudFJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBbcmVmLCByb290RWxlbWVudFJlZl1cbiAgICApO1xuXG4gICAgLy8gRmxhdHRlbiB0aGUgdHJlZSBiYWNrIGludG8gYW4gYXJyYXkgd2l0aCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHJlbmRlcmluZy5cbiAgICBjb25zdCByZW5kZXJpbmdFbGVtZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgcmVuZGVyaW5nRWxlbWVudHM6IFJlbmRlcmluZ0VsZW1lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgdG9wU2lkZUJvdE51YiA9IGlzWmVyb09yUG9zaXRpdmUoYnViYmxlTnViT2Zmc2V0KTtcbiAgICAgIGNvbnN0IHRvcFNpZGVVc2VyTnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVGcm9tVXNlck51Yk9mZnNldCk7XG5cbiAgICAgIGFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZS5mb3JFYWNoKGVudHJpZXNXaXRoU2FtZVNlbmRlciA9PiB7XG4gICAgICAgIGNvbnN0IFtbeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9XV0gPSBlbnRyaWVzV2l0aFNhbWVTZW5kZXI7XG4gICAgICAgIGNvbnN0IHJlbmRlckF2YXRhciA9IGNyZWF0ZUF2YXRhclJlbmRlcmVyKHsgYWN0aXZpdHk6IGZpcnN0QWN0aXZpdHkgfSk7XG5cbiAgICAgICAgZW50cmllc1dpdGhTYW1lU2VuZGVyLmZvckVhY2goKGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cywgaW5kZXhXaXRoaW5TZW5kZXJHcm91cCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0SW5TZW5kZXJHcm91cCA9ICFpbmRleFdpdGhpblNlbmRlckdyb3VwO1xuICAgICAgICAgIGNvbnN0IGxhc3RJblNlbmRlckdyb3VwID0gaW5kZXhXaXRoaW5TZW5kZXJHcm91cCA9PT0gZW50cmllc1dpdGhTYW1lU2VuZGVyLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMuZm9yRWFjaCgoeyBhY3Rpdml0eSwgcmVuZGVyQWN0aXZpdHkgfSwgaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCkgPT4ge1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzaG93IHRoZSB0aW1lc3RhbXAgYXQgdGhlIGVuZCBvZiB0aGUgc2VuZGVyIGdyb3VwLiBCdXQgd2UgYWx3YXlzIHNob3cgdGhlIFwiU2VuZCBmYWlsZWQsIHJldHJ5XCIgcHJvbXB0LlxuICAgICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPVxuICAgICAgICAgICAgICBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckFjdGl2aXR5U3RhdHVzID0gY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlcih7XG4gICAgICAgICAgICAgIGFjdGl2aXR5LFxuICAgICAgICAgICAgICBuZXh0VmlzaWJsZUFjdGl2aXR5OiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdG9wU2lkZU51YiA9IGFjdGl2aXR5LmZyb20/LnJvbGUgPT09ICd1c2VyJyA/IHRvcFNpZGVVc2VyTnViIDogdG9wU2lkZUJvdE51YjtcblxuICAgICAgICAgICAgbGV0IHNob3dDYWxsb3V0OiBib29sZWFuO1xuXG4gICAgICAgICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIFwic2hvd0F2YXRhckluR3JvdXBcIiBzZXR0aW5nLCB0aGUgYXZhdGFyIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG4gICAgICAgICAgICBpZiAoc2hvd0F2YXRhckluR3JvdXAgPT09ICdzZW5kZXInKSB7XG4gICAgICAgICAgICAgIGlmICh0b3BTaWRlTnViKSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBmaXJzdEluU2VuZGVyR3JvdXAgJiYgZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0ID0gbGFzdEluU2VuZGVyR3JvdXAgJiYgbGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvd0F2YXRhckluR3JvdXAgPT09ICdzdGF0dXMnKSB7XG4gICAgICAgICAgICAgIGlmICh0b3BTaWRlTnViKSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJpbmdFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG5cbiAgICAgICAgICAgICAgLy8gQWZ0ZXIgdGhlIGVsZW1lbnQgaXMgbW91bnRlZCwgc2V0IGl0IHRvIGFjdGl2aXR5RWxlbWVudHNSZWYuXG4gICAgICAgICAgICAgIGNhbGxiYWNrUmVmOiBhY3Rpdml0eUVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5RWxlbWVudFxuICAgICAgICAgICAgICAgICAgPyBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudC5zZXQoa2V5LCBhY3Rpdml0eUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICA6IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIC8vIFwiaGlkZVRpbWVzdGFtcFwiIGlzIGEgcmVuZGVyLXRpbWUgcGFyYW1ldGVyIGZvciByZW5kZXJBY3Rpdml0eVN0YXR1cygpLlxuICAgICAgICAgICAgICAvLyBJZiB0cnVlLCBpdCB3aWxsIGhpZGUgdGhlIHRpbWVzdGFtcCwgYnV0IGl0IHdpbGwgY29udGludWUgdG8gc2hvdyB0aGVcbiAgICAgICAgICAgICAgLy8gcmV0cnkgcHJvbXB0LiBBbmQgc2hvdyB0aGUgc2NyZWVuIHJlYWRlciB2ZXJzaW9uIG9mIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXA6XG4gICAgICAgICAgICAgICAgaGlkZUFsbFRpbWVzdGFtcHMgfHwgaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCAhPT0gZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5U3RhdHVzLFxuICAgICAgICAgICAgICByZW5kZXJBdmF0YXIsXG4gICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlbmRlcmluZ0VsZW1lbnRzO1xuICAgIH0sIFtcbiAgICAgIGFjdGl2aXR5RWxlbWVudE1hcFJlZixcbiAgICAgIGFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSxcbiAgICAgIGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LFxuICAgICAgYnViYmxlTnViT2Zmc2V0LFxuICAgICAgY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgICAgIGNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICAgICAgZ2V0S2V5QnlBY3Rpdml0eSxcbiAgICAgIGhpZGVBbGxUaW1lc3RhbXBzLFxuICAgICAgc2hvd0F2YXRhckluR3JvdXBcbiAgICBdKTtcblxuICAgIGNvbnN0IHNjcm9sbFRvQm90dG9tU2Nyb2xsVG86IChzY3JvbGxUb3A6IG51bWJlciwgb3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvKCk7XG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUb0VuZDogKG9wdGlvbnM/OiBTY3JvbGxUb09wdGlvbnMpID0+IHZvaWQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAgIChwb3NpdGlvbjogU2Nyb2xsVG9Qb3NpdGlvbiwgeyBiZWhhdmlvciA9ICdhdXRvJyB9OiBTY3JvbGxUb09wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBpZiAoIXBvc2l0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBGaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gXCJ1c2VTY3JvbGxUb1wiIG11c3QgYmUgYSBTY3JvbGxQb3NpdGlvbiBvYmplY3QuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGFjdGl2aXR5SUQ6IGFjdGl2aXR5SWQsIHNjcm9sbFRvcCB9ID0gcG9zaXRpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzY3JvbGxUb3AgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyhzY3JvbGxUb3AsIHsgYmVoYXZpb3IgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGl2aXR5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudFxuICAgICAgICAgICAgLmdldChnZXRLZXlCeUFjdGl2aXR5SWQoYWN0aXZpdHlJZCkpXG4gICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCcpO1xuXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSByb290RWxlbWVudFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG5cbiAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUVsZW1lbnQgJiYgYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEVTTGludCBjb25mbGljdCB3aXRoIFR5cGVTY3JpcHQuIFRoZSByZXN1bHQgb2YgZ2V0Q2xpZW50UmVjdHMoKSBpcyBub3QgYW4gQXJyYXkgYnV0IERPTVJlY3RMaXN0LCBhbmQgY2Fubm90IGJlIGRlc3RydWN0dXJlZC5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QgPSBzY3JvbGxhYmxlRWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAvLyBJZiBlaXRoZXIgdGhlIGFjdGl2aXR5IG9yIHRoZSB0cmFuc2NyaXB0IHNjcm9sbGFibGUgaXMgbm90IG9uIERPTSwgd2Ugd2lsbCBub3Qgc2Nyb2xsIHRoZSB2aWV3LlxuICAgICAgICAgICAgaWYgKGFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Q2xpZW50UmVjdCAmJiBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IGFjdGl2aXR5SGVpZ2h0LCB5OiBhY3Rpdml0eVkgfSA9IGFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Q2xpZW50UmVjdDtcbiAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHNjcm9sbGFibGVIZWlnaHQgfSA9IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdDtcbiAgICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlPZmZzZXRUb3AgPSBhY3Rpdml0eVkgKyBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gTWF0aC5taW4oYWN0aXZpdHlPZmZzZXRUb3AsIGFjdGl2aXR5T2Zmc2V0VG9wIC0gc2Nyb2xsYWJsZUhlaWdodCArIGFjdGl2aXR5SGVpZ2h0KTtcblxuICAgICAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBnZXRLZXlCeUFjdGl2aXR5SWQsIHJvb3RFbGVtZW50UmVmLCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gc2Nyb2xsVG9Cb3R0b21TY3JvbGxUb0VuZCh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KSxcbiAgICAgIFtzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxSZWxhdGl2ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGRpcmVjdGlvbjogJ2Rvd24nIHwgJ3VwJywgeyBkaXNwbGFjZW1lbnQgfTogeyBkaXNwbGFjZW1lbnQ/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlOiBIVE1MRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG4gICAgICAgIGxldCBuZXh0U2Nyb2xsVG9wOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwbGFjZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogZGlzcGxhY2VtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgbmV4dFNjcm9sbFRvcCA9IHNjcm9sbGFibGUuc2Nyb2xsVG9wICsgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xKSAqIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgc2Nyb2xsVG8oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Nyb2xsVG9wOiBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxhYmxlLnNjcm9sbEhlaWdodCAtIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0LCBuZXh0U2Nyb2xsVG9wKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYmVoYXZpb3I6ICdzbW9vdGgnIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvXVxuICAgICk7XG5cbiAgICAvLyBTaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgPEJhc2ljVHJhbnNjcmlwdD4gaW5zaWRlIHRoZSA8Q29tcG9zZXI+LCB3aGVuIHRoZSBkZXZlbG9wZXIgY2FsbHMgYHNjcm9sbFhYWGAsIHdlIG5lZWQgdG8gY2FsbCBpdCBvbiBhbGwgaW5zdGFuY2VzLlxuICAgIC8vIFdlIGNhbGwgYHVzZVJlZ2lzdGVyU2Nyb2xsWFhYYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYHVzZVNjcm9sbFhYWGAgd2lsbCBtdWx0aXBsZXggdGhlIGNhbGwgaW50byBlYWNoIGluc3RhbmNlIG9mIDxCYXNpY1RyYW5zY3JpcHQ+LlxuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG8oc2Nyb2xsVG8pO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQoc2Nyb2xsVG9FbmQpO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUoc2Nyb2xsUmVsYXRpdmUpO1xuXG4gICAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG5cbiAgICBjb25zdCBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQ6IChzY3JvbGxQb3NpdGlvbjogU2Nyb2xsVG9Qb3NpdGlvbikgPT4gdm9pZCA9XG4gICAgICB1c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uKCk7XG5cbiAgICAvLyBUT0RPOiBbUDJdIFdlIHNob3VsZCB1c2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gdHJhY2sgd2hhdCBhY3Rpdml0eSBpcyBpbiB0aGUgc2Nyb2xsYWJsZS5cbiAgICAvLyAgICAgICAgICAgIEhvd2V2ZXIsIEludGVyc2VjdGlvbk9ic2VydmVyIGlzIG5vdCBhdmFpbGFibGUgb24gSUUxMSwgd2UgbmVlZCB0byBtYWtlIGEgbGltaXRlZCBwb2x5ZmlsbCBpbiBSZWFjdCBzdHlsZS5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGxQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHsgc2Nyb2xsVG9wIH06IHsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IHJvb3RFbGVtZW50IH0gPSByb290RWxlbWVudFJlZjtcblxuICAgICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSByb290RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fc2Nyb2xsYWJsZScpO1xuXG4gICAgICAgIC8vIFwiZ2V0Q2xpZW50UmVjdHMoKVwiIGlzIG5vdCByZXR1cm5pbmcgYW4gYXJyYXksIHRodXMsIGl0IGlzIG5vdCBkZXN0cnVjdHVyYWJsZS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCA9IHNjcm9sbGFibGVFbGVtZW50LmdldENsaWVudFJlY3RzKClbMF07XG5cbiAgICAgICAgLy8gSWYgdGhlIHNjcm9sbGFibGUgaXMgbm90IG1vdW50ZWQsIHdlIGNhbm5vdCBtZWFzdXJlIHdoaWNoIGFjdGl2aXR5IGlzIGluIHZpZXcuIFRodXMsIHdlIHdpbGwgbm90IGZpcmUgYW55IGV2ZW50cy5cbiAgICAgICAgaWYgKCFzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGJvdHRvbTogc2Nyb2xsYWJsZUNsaWVudEJvdHRvbSB9ID0gc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0O1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGFjdGl2aXR5IGp1c3QgYWJvdmUgc2Nyb2xsIHZpZXcgYm90dG9tLlxuICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsIHZpZXcgaXMgYWxyZWFkeSBvbiB0b3AsIGdldCB0aGUgZmlyc3QgYWN0aXZpdHkuXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5RWxlbWVudHMgPSBBcnJheS5mcm9tKGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LmVudHJpZXMoKSk7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoXG4gICAgICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudHNcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLy8gQWRkIHN1YnBpeGVsIHRvbGVyYW5jZVxuICAgICAgICAgICAgICAgIC5maW5kKChbLCBlbGVtZW50XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gXCJnZXRDbGllbnRSZWN0cygpXCIgaXMgbm90IHJldHVybmluZyBhbiBhcnJheSwgdGh1cywgaXQgaXMgbm90IGRlc3RydWN0dXJhYmxlLlxuICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IGlzIG5vdCBhdHRhY2hlZCB0byBET00gdHJlZSwgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdCBhcyBcImJvdHRvbW1vc3QgdmlzaWJsZSBhY3Rpdml0eVwiLCBhcyBpdCBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Q2xpZW50UmVjdCAmJiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gPCBzY3JvbGxhYmxlQ2xpZW50Qm90dG9tICsgMTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBhY3Rpdml0eUVsZW1lbnRzWzBdXG4gICAgICAgICk/LlswXTtcblxuICAgICAgICAvLyBXaGVuIHRoZSBlbmQtdXNlciBzbG93bHkgc2Nyb2xsaW5nIHRoZSB2aWV3IGRvd24sIHdlIHdpbGwgbWFyayBhY3Rpdml0eSBhcyByZWFkIHdoZW4gdGhlIG1lc3NhZ2UgZnVsbHkgYXBwZWFyIG9uIHRoZSBzY3JlZW4uXG4gICAgICAgIGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tICYmIG1hcmtBY3Rpdml0eUtleUFzUmVhZChhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgaWYgKGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCkge1xuICAgICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gZ2V0QWN0aXZpdHlCeUtleShhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQoeyAuLi4oYWN0aXZpdHkgPyB7IGFjdGl2aXR5SUQ6IGFjdGl2aXR5LmlkIH0gOiB7fSksIHNjcm9sbFRvcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQsXG4gICAgICAgIGdldEFjdGl2aXR5QnlLZXksXG4gICAgICAgIG1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgICAgICAgcm9vdEVsZW1lbnRSZWZcbiAgICAgIF1cbiAgICApO1xuXG4gICAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uKGhhbmRsZVNjcm9sbFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+PihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPSB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgZnJvbVRyYW5zY3JpcHQgPSB0YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgaWYgKCFmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yICYmICFmcm9tVHJhbnNjcmlwdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA/IDAgOiAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPyAwIDogLTEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KEluZmluaXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBjYXB0dXJpbmcgcGxhaW4gRU5URVIuXG4gICAgICAgICAgICAvLyBXaGVuIHNjcmVlbiByZWFkZXIgaXMgbm90IHJ1bm5pbmcsIG9yIHNjcmVlbiByZWFkZXIgaXMgcnVubmluZyBvdXRzaWRlIG9mIHNjYW4gbW9kZSwgdGhlIEVOVEVSIGtleSB3aWxsIGJlIGNhcHR1cmVkIGhlcmUuXG4gICAgICAgICAgICBpZiAoIWZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSFRNTEVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudFxuICAgICAgICAgICAgICAgIC5nZXQoZm9jdXNlZEFjdGl2aXR5S2V5UmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYm9keScpO1xuXG4gICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudHMoYm9keSlbMF0/LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgIGZvY3VzKCdzZW5kQm94V2l0aG91dEtleWJvYXJkJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KC1JbmZpbml0eSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIC8vIElmIGEgY3VzdG9tIEhUTUwgY29udHJvbCB3YW50cyB0byBoYW5kbGUgdXAvZG93biBhcnJvdywgd2Ugd2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBsaXN0ZW5pbmcgdG8gdGhpcyBldmVudCB0byBwcmV2ZW50IGJ1Z3MgZHVlIHRvIGhhbmRsaW5nIGFycm93IGtleXMgdHdpY2UuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBmb2N1cywgZm9jdXNlZEFjdGl2aXR5S2V5UmVmLCBmb2N1c1JlbGF0aXZlQWN0aXZpdHksIHRlcm1pbmF0b3JSZWZdXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pj4oXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBjdHJsS2V5LCBrZXksIG1ldGFLZXksIHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKGFsdEtleSB8fCAoY3RybEtleSAmJiBrZXkgIT09ICd2JykgfHwgbWV0YUtleSB8fCAoIWlucHV0dGFibGVLZXkoa2V5KSAmJiBrZXkgIT09ICdCYWNrc3BhY2UnKSkge1xuICAgICAgICAgIC8vIElnbm9yZSBpZiBvbmUgb2YgdGhlIHV0aWxpdHkga2V5IChleGNlcHQgU0hJRlQpIGlzIHByZXNzZWRcbiAgICAgICAgICAvLyBFLmcuIENUUkwtQyBvbiBhIGxpbmsgaW4gb25lIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBub3QganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIC8vIEUuZy4gXCJBXCIgb3IgXCJCYWNrc3BhY2VcIiBzaG91bGQganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbmQga2V5c3Ryb2tlcyB0byBzZW5kIGJveCBpZiB3ZSBhcmUgZm9jdXNpbmcgb24gdGhlIHRyYW5zY3JpcHQgb3IgdGVybWluYXRvci5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fCB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgZm9jdXMoJ3NlbmRCb3gnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtmb2N1c11cbiAgICApO1xuXG4gICAgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQodXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKSk7XG5cbiAgICAvLyBXaGVuIHRoZSBmb2N1c2luZyBhY3Rpdml0eSBoYXMgY2hhbmdlZCwgZGlzcGF0Y2ggYW4gZXZlbnQgdG8gb2JzZXJ2ZXJzIG9mIFwidXNlT2JzZXJ2ZVRyYW5zY3JpcHRGb2N1c1wiLlxuICAgIGNvbnN0IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSgpO1xuXG4gICAgLy8gRGlzcGF0Y2ggYSBcInRyYW5zY3JpcHQgZm9jdXNcIiBldmVudCBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbi5cbiAgICAvLyBXZSBzaG91bGQgbm90IGRpc3BhdGNoIFwidHJhbnNjcmlwdCBmb2N1c1wiIHdoZW4gYSBuZXcgYWN0aXZpdHkgY29tZS4gQWx0aG91Z2ggdGhlIHNlbGVjdGlvbiBjaGFuZ2UsIGl0IGlzIG5vdCBpbml0aWF0ZWQgZnJvbSB0aGUgdXNlci5cbiAgICB1c2VNZW1vKFxuICAgICAgKCkgPT4gZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5KGZvY3VzZWRFeHBsaWNpdGx5ID8gZm9jdXNlZEFjdGl2aXR5S2V5IDogdW5kZWZpbmVkKSxcbiAgICAgIFtkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXksIGZvY3VzZWRBY3Rpdml0eUtleSwgZm9jdXNlZEV4cGxpY2l0bHldXG4gICAgKTtcblxuICAgIC8vIFdoZW4gdGhlIHRyYW5zY3JpcHQgaXMgYmVpbmcgZm9jdXNlZCBvbiwgd2Ugc2hvdWxkIGRpc3BhdGNoIGEgXCJ0cmFuc2NyaXB0Zm9jdXNcIiBldmVudC5cbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUNhbGxiYWNrKFxuICAgICAgLy8gV2UgY2FsbCBcImZvY3VzQnlBY3Rpdml0eUtleVwiIHdpdGggYWN0aXZpdHkga2V5IG9mIFwidHJ1ZVwiLlxuICAgICAgLy8gSXQgbWVhbnMsIHRyaWVzIHRvIGZvY3VzIG9uIGFueXRoaW5nLlxuICAgICAgKHsgY3VycmVudFRhcmdldCwgdGFyZ2V0IH0pID0+IHRhcmdldCA9PT0gY3VycmVudFRhcmdldCAmJiBmb2N1c0J5QWN0aXZpdHlLZXkodHJ1ZSwgZmFsc2UpLFxuICAgICAgW2ZvY3VzQnlBY3Rpdml0eUtleV1cbiAgICApO1xuXG4gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBJRTExLlxuICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGFuZCBlbXB0eSBzcGFjZSAoYS5rLmEuIGZpbGxlcikgaW4gYW4gZW1wdHkgdHJhbnNjcmlwdCwgSUUxMSBzYXlzIHRoZSBmb2N1cyBpcyBvbiB0aGUgPGRpdiBjbGFzc05hbWU9XCJmaWxsZXJcIj4sXG4gICAgLy8gZGVzcGl0ZSB0aGUgZmFjdCB0aGVyZSBhcmUgbm8gXCJ0YWJJbmRleFwiIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBmaWxsZXIuXG4gICAgLy8gV2UgbmVlZCB0byBhcnRpZmljaWFsbHkgc2VuZCB0aGUgZm9jdXMgYmFjayB0byB0aGUgdHJhbnNjcmlwdC5cbiAgICBjb25zdCBoYW5kbGVGb2N1c0ZpbGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSk7XG5cbiAgICAvLyBXaGVuIGZvY3VzIGludG8gdGhlIHRyYW5zY3JpcHQgdXNpbmcgVEFCL1NISUZULVRBQiwgc2Nyb2xsIHRoZSBmb2N1c2VkIGFjdGl2aXR5IGludG8gdmlldy5cbiAgICB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlKFxuICAgICAgcm9vdEVsZW1lbnRSZWYsXG4gICAgICB1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIC8vIEFsdGhvdWdoIEFuZHJvaWQgVGFsa0JhY2sgMTIuMSBkb2VzIG5vdCBzdXBwb3J0IGBhcmlhLWFjdGl2ZWRlc2NlbmRhbnRgLCB3aGVuIHVzZWQsIGl0IGJlY29tZSBidWdneSBhbmQgd2lsbCBuYXJyYXRlIGNvbnRlbnQgdHdpY2UuXG4gICAgICAgIC8vIFdlIGFyZSBkaXNhYmxpbmcgYGFyaWEtYWN0aXZlZGVzY2VuZGFudGAgZm9yIEFuZHJvaWQuIFNlZSA8QWN0aXZpdHlSb3c+IGZvciBkZXRhaWxzLlxuICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9e2FuZHJvaWQgPyB1bmRlZmluZWQgOiBhY3RpdmVEZXNjZW5kYW50SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RyYW5zY3JpcHRBcmlhTGFiZWx9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCcsXG4gICAgICAgICAgYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgKyAnJyxcbiAgICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICAgIChjbGFzc05hbWUgfHwgJycpICsgJydcbiAgICAgICAgKX1cbiAgICAgICAgZGlyPXtkaXJlY3Rpb259XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZUZvY3VzfVxuICAgICAgICBvbktleURvd249e2hhbmRsZVRyYW5zY3JpcHRLZXlEb3dufVxuICAgICAgICBvbktleURvd25DYXB0dXJlPXtoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmV9XG4gICAgICAgIHJlZj17Y2FsbGJhY2tSZWZ9XG4gICAgICAgIC8vIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIgd2lsbCBvbmx5IHdvcmtzIHdpdGggYSBudW1iZXIgb2Ygcm9sZXMgYW5kIGl0IG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIC8vIEZvciB1cC9kb3duIGFycm93IGtleSBuYXZpZ2F0aW9uIGFjcm9zcyBhY3Rpdml0aWVzLCB0aGlzIGNvbXBvbmVudCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSB0YWIgc2VxdWVuY2UuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiB3aWxsIG5vdCBiZSBuYXJyYXRlZCB3aGVuIHRoZSB1c2VyIHByZXNzIHVwL2Rvd24gYXJyb3cga2V5cy5cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2tiZF9mb2N1c19hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgPlxuICAgICAgICA8TGl2ZVJlZ2lvblRyYW5zY3JpcHQgYWN0aXZpdHlFbGVtZW50TWFwUmVmPXthY3Rpdml0eUVsZW1lbnRNYXBSZWZ9IC8+XG4gICAgICAgIHsvKiBUT0RPOiBbUDJdIEZpeCBFU0xpbnQgZXJyb3IgYG5vLXVzZS1iZWZvcmUtZGVmaW5lYCAqL31cbiAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi99XG4gICAgICAgIDxJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlIG9uRm9jdXNGaWxsZXI9e2hhbmRsZUZvY3VzRmlsbGVyfSB0ZXJtaW5hdG9yUmVmPXt0ZXJtaW5hdG9yUmVmfT5cbiAgICAgICAgICB7cmVuZGVyaW5nRWxlbWVudHMubWFwKFxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIGNhbGxiYWNrUmVmLFxuICAgICAgICAgICAgICBoaWRlVGltZXN0YW1wLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgcmVuZGVyQXZhdGFyLFxuICAgICAgICAgICAgICBzaG93Q2FsbG91dFxuICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICA8QWN0aXZpdHlSb3cgYWN0aXZpdHk9e2FjdGl2aXR5fSBrZXk9e2tleX0gcmVmPXtjYWxsYmFja1JlZn0+XG4gICAgICAgICAgICAgICAge3JlbmRlckFjdGl2aXR5KHtcbiAgICAgICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvQWN0aXZpdHlSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlPlxuICAgICAgICB7ISFyZW5kZXJpbmdFbGVtZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Jvb3RFbGVtZW50UmVmfSAvPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0ZXJtaW5hdG9yTGFiZWxJZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvclwiXG4gICAgICAgICAgICAgIHJlZj17dGVybWluYXRvclJlZn1cbiAgICAgICAgICAgICAgcm9sZT1cIm5vdGVcIlxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yLWJvZHlcIj5cbiAgICAgICAgICAgICAgICB7LyogYGlkYCBpcyByZXF1aXJlZCBmb3IgYGFyaWEtbGFiZWxsZWRieWAgKi99XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZG9tLXByb3BzICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci10ZXh0XCIgaWQ9e3Rlcm1pbmF0b3JMYWJlbElkfT5cbiAgICAgICAgICAgICAgICAgIHt0ZXJtaW5hdG9yVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZvY3VzLWluZGljYXRvclwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQucHJvcFR5cGVzID0ge1xuICAvLyBQcm9wVHlwZXMgY2Fubm90IHZhbGlkYXRlIHByZWNpc2VseSB3aXRoIGl0cyBUeXBlU2NyaXB0IGNvdW50ZXJwYXJ0LlxuICAvLyBAdHMtaWdub3JlXG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihNYXApXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudHlwZSBJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBvbkZvY3VzRmlsbGVyOiAoKSA9PiB2b2lkO1xuICB0ZXJtaW5hdG9yUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbi8vIFNlcGFyYXRpbmcgaGlnaC1mcmVxdWVuY3kgaG9va3MgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cbmNvbnN0IEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU6IEZDPEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgb25Gb2N1c0ZpbGxlcixcbiAgdGVybWluYXRvclJlZlxufSkgPT4ge1xuICBjb25zdCBbeyBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbYW5pbWF0aW5nVG9FbmRdOiBbYm9vbGVhbl0gPSB1c2VBbmltYXRpbmdUb0VuZCgpO1xuICBjb25zdCBbYXRFbmRdOiBbYm9vbGVhbl0gPSB1c2VBdEVuZCgpO1xuICBjb25zdCBbLCB1bnJlYWRBY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzQnlSZWFkKCk7XG4gIGNvbnN0IFtzdGlja3ldOiBbYm9vbGVhbl0gPSB1c2VTdGlja3koKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgZm9jdXNCeUFjdGl2aXR5S2V5ID0gdXNlRm9jdXNCeUFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IG1hcmtBY3Rpdml0eUtleUFzUmVhZCA9IHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCgpO1xuICBjb25zdCBtYXJrQWxsQXNBY2tub3dsZWRnZWQgPSB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQoKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQ6IChvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG9FbmQoKTtcblxuICBjb25zdCBwcmV2U3RpY2t5ID0gdXNlUHJldmlvdXMoc3RpY2t5KTtcbiAgY29uc3QgdHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbiA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfUk9MRV9BTFQnKTtcblxuICBjb25zdCBzdGlja3lDaGFuZ2VkVG9UcnVlID0gcHJldlN0aWNreSAhPT0gc3RpY2t5ICYmIHN0aWNreTtcblxuICAvLyBBY2tub3dsZWRnZWQgbWVhbnMgZWl0aGVyOlxuICAvLyAxLiBUaGUgdXNlciBzZW50IGEgbWVzc2FnZVxuICAvLyAgICAtIFdlIGRvbid0IG5lZWQgYSBjb25kaXRpb24gaGVyZS4gV2hlbiBXZWIgQ2hhdCBzZW5kcyB0aGUgdXNlcidzIG1lc3NhZ2UsIGl0IHdpbGwgc2Nyb2xsIHRvIGJvdHRvbSwgYW5kIGl0IHdpbGwgdHJpZ2dlciBjb25kaXRpb24gMiBiZWxvdy5cbiAgLy8gMi4gVGhlIHVzZXIgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHQsIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblxuICAvLyAgICAtIElmIHRoZSB0cmFuc2NyaXB0IGlzIGFscmVhZHkgYXQgdGhlIGJvdHRvbSwgdGhlIHVzZXIgbmVlZHMgdG8gc2Nyb2xsIHVwIGFuZCB0aGVuIGdvIGJhY2sgZG93blxuICAvLyAgICAtIFdoYXQgaGFwcGVucyBpZiB3ZSBhcmUgcmVsYXhpbmcgXCJzY3JvbGxlZCBmcm9tIGEgbm9uLWJvdHRvbSBzY3JvbGwgcG9zaXRpb25cIjpcbiAgLy8gICAgICAxLiBUaGUgY29uZGl0aW9uIHdpbGwgYmVjb21lIHNvbGVseSBcImF0IHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHRcIlxuICAvLyAgICAgIDIuIEF1dG8tc2Nyb2xsIHdpbGwgYWx3YXlzIHNjcm9sbCB0aGUgdHJhbnNjcmlwdCB0byB0aGUgYm90dG9tXG4gIC8vICAgICAgMy4gV2ViIENoYXQgd2lsbCBhbHdheXMgYWNrbm93bGVkZ2UgYWxsIGFjdGl2aXRpZXMgYXMgaXQgaXMgYXQgdGhlIGJvdHRvbVxuICAvLyAgICAgIDQuIEFja25vd2xlZGdlIGZsYWcgYmVjb21lIHVzZWxlc3NcbiAgLy8gICAgICA1LiBUaGVyZWZvcmUsIGV2ZW4gdGhlIGRldmVsb3BlciBzZXQgXCJwYXVzZSBhZnRlciAzIGFjdGl2aXRpZXNcIiwgaWYgYWN0aXZpdGllcyBhcmUgY29taW5nIGluIGF0IGEgc2xvdyBwYWNlIChub3QgYmF0Y2hlZCBpbiBhIHNpbmdsZSByZW5kZXIpXG4gIC8vICAgICAgICAgV2ViIENoYXQgd2lsbCBrZWVwIHNjcm9sbGluZyBhbmQgbm90IHNuYXBwZWQvcGF1c2VkXG5cbiAgLy8gTm90ZTogV2hlbiBXZWIgQ2hhdCBpcyBsb2FkZWQsIHRoZXJlIGFyZSBubyBhY3Rpdml0aWVzIGFja25vd2xlZGdlZC4gV2UgbmVlZCB0byBhc3N1bWUgYWxsIGFycml2aW5nIGFjdGl2aXRpZXMgYXJlIGFja25vd2xlZGdlZCB1bnRpbCBlbmQtdXNlciBzZW5kcyB0aGVpciBmaXJzdCBhY3Rpdml0eS5cbiAgLy8gICAgICAgQWN0aXZpdGllcyBsb2FkZWQgaW5pdGlhbGx5IGNvdWxkIGJlIGZyb20gY29udmVyc2F0aW9uIGhpc3RvcnkuIFdpdGhvdXQgYXNzdW1pbmcgYWNrbm93bGVkZ2VtZW50LCBXZWIgQ2hhdCB3aWxsIG5vdCBzY3JvbGwgaW5pdGlhbGx5IChhcyBldmVyeXRoaW5nIGlzIG5vdCBhY2tub3dsZWRnZWQpLlxuICAvLyAgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIGNoYXQgYWRhcHRlciBzaG91bGQgbGV0IFdlYiBDaGF0IGtub3cgaWYgdGhlIGFjdGl2aXR5IGlzIGxvYWRlZCBmcm9tIGhpc3Rvcnkgb3Igbm90LlxuXG4gIC8vIFRPRE86IFtQMl0gIzM2NzAgTW92ZSB0aGUgXCJjb252ZXJzYXRpb24gaGlzdG9yeSBhY2tub3dsZWRnZW1lbnRcIiBsb2dpYyBtZW50aW9uZWQgYWJvdmUgdG8gcG9seWZpbGwgb2YgY2hhdCBhZGFwdGVycy5cbiAgLy8gICAgICAgMS4gQ2hhdCBhZGFwdGVyIHNob3VsZCBzZW5kIFwiYWNrbm93bGVkZ2VkXCIgYXMgcGFydCBvZiBcImNoYW5uZWxEYXRhXCJcbiAgLy8gICAgICAgMi4gSWYgXCJhY2tub3dsZWRnZWRcIiBpcyBcInVuZGVmaW5lZFwiLCB3ZSBzZXQgaXQgdG86XG4gIC8vICAgICAgICAgIGEuIHRydWUsIGlmIHRoZXJlIGFyZSBubyBlZ3Jlc3MgYWN0aXZpdGllcyB5ZXRcbiAgLy8gICAgICAgICAgYi4gT3RoZXJ3aXNlLCBmYWxzZVxuXG4gIHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHN0aWNreUNoYW5nZWRUb1RydWUgJiZcbiAgICAgIC8vIFRPRE86IFtQMl0gQm90aCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCBhbmQgYG1hcmtBbGxBc0Fja25vd2xlZGdlZGAgaG9vayBhcmUgc2V0dGVycyBvZiB1c2VTdGF0ZS5cbiAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMsIGluIGEgcmVuZGVyIGxvb3AsIHdlIHdpbGwgYmUgY2FsbGluZyBzZXR0ZXIgYW5kIHdpbGwgY2F1c2UgYW5vdGhlciByZS1yZW5kZXIuXG4gICAgICAvLyAgICAgICBUaGlzIGlzIG5vdCB0cml2aWFsIGJ1dCB3ZSBzaG91bGQgdGhpbmsgaWYgdGhlcmUgaXMgYSB3YXkgdG8gYXZvaWQgdGhpcy5cbiAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCgpLFxuICAgIFttYXJrQWxsQXNBY2tub3dsZWRnZWQsIHN0aWNreUNoYW5nZWRUb1RydWVdXG4gICk7XG5cbiAgY29uc3QgW2ZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcl0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoeyBmbGF0OiB0cnVlIH0pO1xuICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5ID0gdXNlR2V0S2V5QnlBY3Rpdml0eSgpO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5czogc3RyaW5nW10gPSB1c2VNZW1vPHN0cmluZ1tdPihcbiAgICAoKSA9PiBmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIubWFwKCh7IGFjdGl2aXR5IH0pID0+IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpKSxcbiAgICBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyLCBnZXRLZXlCeUFjdGl2aXR5XVxuICApO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiA9IHVzZVZhbHVlUmVmKHJlbmRlcmluZ0FjdGl2aXR5S2V5cyk7XG5cbiAgLy8gVG8gcHJldmVudCBmbGFzaHkgYnV0dG9uLCB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGFub3RoZXIgcmVuZGVyIGxvb3AgdG8gdXBkYXRlIHRoZSBgW3JlYWRBY3Rpdml0eUtleXMsIHVucmVhZEFjdGl2aXR5S2V5c11gIHN0YXRlLlxuICAvLyBJbnN0ZWFkLCB3ZSBhcmUgYnVpbGRpbmcgdGhlIG5leHQgb25lIGluIHRoaXMgYHVzZU1lbW9gIGNhbGwuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBUaGlzIGNvZGUgbmVlZCB0byBiZSBjYXJlZnVsIHJldmlld2VkIGFzIGl0IHdpbGwgY2F1c2UgYW5vdGhlciByZW5kZXIuIFRoZSBjb2RlIHNob3VsZCBiZSBjb252ZXJnaW5nLlxuICAgIC8vIEFmdGVyIHdlIGNhbGwgYG1hcmtBY3Rpdml0eUtleUFzUmVhZGAsIGV2ZXJ5dGhpbmcgd2lsbCBiZSByZWFkIGFuZCBub3RoaW5nIHdpbGwgYmUgdW5yZWFkLlxuICAgIC8vIFRoYXQgbWVhbnMsIGluIG5leHQgcmVuZGVyLCBgdW5yZWFkQWN0aXZpdHlLZXlzYCB3aWxsIGJlIGVtcHRpZWQgYW5kIHRoZSBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCB3aWxsIG5vdCBnZXQgY2FsbGVkIGFnYWluLlxuICAgIGlmIChzdGlja3kgJiYgdW5yZWFkQWN0aXZpdHlLZXlzLmxlbmd0aCkge1xuICAgICAgbWFya0FjdGl2aXR5S2V5QXNSZWFkKHVucmVhZEFjdGl2aXR5S2V5c1t1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHVucmVhZEFjdGl2aXR5S2V5cztcbiAgfSwgW21hcmtBY3Rpdml0eUtleUFzUmVhZCwgc3RpY2t5LCB1bnJlYWRBY3Rpdml0eUtleXNdKTtcblxuICBjb25zdCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYobmV4dFVucmVhZEFjdGl2aXR5S2V5cyk7XG5cbiAgLy8gSWYgd2UgYXJlIHJlbmRlcmluZyBhbnl0aGluZyB0aGF0IGlzIHVucmVhZCwgd2Ugc2hvdWxkIHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uLlxuICAvLyBOb3QgZXZlcnl0aGluZyBpbiB0aGUgYHVucmVhZEFjdGl2aXR5S2V5c2AgYXJlIHJlbmRlcmVkLCBzYXksIGJvdCB0eXBpbmcgaW5kaWNhdG9yLlxuICAvLyBXZSBzaG91bGQgbm90IHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uIGZvciBib3QgdHlwaW5nIGluZGljYXRvciBhcyBpdCB3aWxsIGNvbmZ1c2UgdGhlIHVzZXIuXG4gIGNvbnN0IHVucmVhZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbmV4dFVucmVhZEFjdGl2aXR5S2V5cy5zb21lKGtleSA9PiByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KSksXG4gICAgW3JlbmRlcmluZ0FjdGl2aXR5S2V5cywgbmV4dFVucmVhZEFjdGl2aXR5S2V5c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuXG4gICAgY29uc3QgeyBjdXJyZW50OiByZW5kZXJpbmdBY3Rpdml0eUtleXMgfSA9IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZjtcblxuICAgIC8vIEFmdGVyIHRoZSBcIk5ldyBtZXNzYWdlXCIgYnV0dG9uIGlzIGNsaWNrZWQsIGZvY3VzIG9uIHRoZSBmaXJzdCB1bnJlYWQgYWN0aXZpdHkgd2hpY2ggd2lsbCBiZSByZW5kZXJlZC5cbiAgICBjb25zdCBmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5ID0gbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZi5jdXJyZW50LmZpbmQoa2V5ID0+XG4gICAgICByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KVxuICAgICk7XG5cbiAgICBpZiAoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSkge1xuICAgICAgZm9jdXNCeUFjdGl2aXR5S2V5KGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyB1bnJlYWQgYWN0aXZpdHksIHNlbmQgdGhlIGZvY3VzIHRvIHRoZSB0ZXJtaW5hdG9yIGJsb2NrLlxuICAgICAgdGVybWluYXRvclJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2ZvY3VzQnlBY3Rpdml0eUtleSwgbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiwgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmLCBzY3JvbGxUb0VuZCwgdGVybWluYXRvclJlZl0pO1xuXG4gIGNvbnN0IHJlbmRlclNjcm9sbFRvRW5kQnV0dG9uID0gdXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcigpKHtcbiAgICBhdEVuZDogYW5pbWF0aW5nVG9FbmQgfHwgYXRFbmQgfHwgc3RpY2t5LFxuICAgIHN0eWxlT3B0aW9ucyxcbiAgICB1bnJlYWRcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7cmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gJiYgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24oeyBvbkNsaWNrOiBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrIH0pfVxuICAgICAgeyEhUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pICYmIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Rlcm1pbmF0b3JSZWZ9IC8+fVxuICAgICAgPFJlYWN0U2Nyb2xsVG9Cb3R0b21QYW5lbCBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlXCI+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZpbGxlclwiIG9uRm9jdXM9e29uRm9jdXNGaWxsZXJ9IC8+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgYXJpYS1yb2xlZGVzY3JpcHRpb249e3RyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb259XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGFjdGl2aXRpZXNTdHlsZVNldCArICcnLCAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdHJhbnNjcmlwdCcpfVxuICAgICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8QmFzaWNUeXBpbmdJbmRpY2F0b3IgLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25Gb2N1c0ZpbGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGVybWluYXRvclJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59O1xuXG50eXBlIFNjcm9sbGVyID0gKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfTogeyBvZmZzZXRIZWlnaHQ6IG51bWJlcjsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gbnVtYmVyO1xuXG4vLyBcInNjcm9sbGVyXCIgaXMgdGhlIGF1dG8tc2Nyb2xsIGxpbWl0ZXIsIGEuay5hLiBhdXRvIHNjcm9sbCBzbmFwLlxuY29uc3QgdXNlU2Nyb2xsZXIgPSAoYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEFjdGl2aXR5RWxlbWVudE1hcD4pOiBTY3JvbGxlciA9PiB7XG4gIGNvbnN0IFthY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzKCk7XG4gIGNvbnN0IFtsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXldID0gdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IFtzdHlsZU9wdGlvbnNdID0gdXNlU3R5bGVPcHRpb25zKCk7XG5cbiAgY29uc3QgYWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYoYWN0aXZpdHlLZXlzKTtcbiAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYobGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KTtcbiAgY29uc3Qgc3R5bGVPcHRpb25zUmVmID0gdXNlVmFsdWVSZWYoc3R5bGVPcHRpb25zKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZSxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldFxuICAgICAgICB9XG4gICAgICB9ID0gc3R5bGVPcHRpb25zUmVmO1xuXG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGF1dG9TY3JvbGxTbmFwT25QYWdlKSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25QYWdlXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgPT09ICdudW1iZXInID8gYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA6IDA7XG5cbiAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IHx8IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5RWxlbWVudE1hcCB9ID0gYWN0aXZpdHlFbGVtZW50TWFwUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5S2V5cyB9ID0gYWN0aXZpdHlLZXlzUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSB9ID0gbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggPSBhY3Rpdml0eUtleXMuaW5kZXhPZihsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgIGlmICh+bGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgpIHtcbiAgICAgICAgICAvLyBUaGUgYWN0aXZpdHkgdGhhdCB3ZSBhY2tub3dsZWRnZWQgY291bGQgYmUgbm90IHJlbmRlcmVkLCBzdWNoIGFzIHBvc3QgYmFjayBhY3Rpdml0eS5cbiAgICAgICAgICAvLyBXaGVuIGNhbGN1bGF0aW5nIHNjcm9sbCBzbmFwLCB3ZSBjYW4gb25seSBiYXNlIG9uIHRoZSBmaXJzdCB1bmFja25vd2xlZGdlZC1hbmQtcmVuZGVyaW5nIGFjdGl2aXR5LlxuICAgICAgICAgIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLmtleXMoKSk7XG4gICAgICAgICAgbGV0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IC0xO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBhY2tub3dsZWRnZWRBY3Rpdml0eUtleSBvZiBhY3Rpdml0eUtleXMuc2xpY2UoMCwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggKyAxKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmluZGV4T2YoYWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAofmZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlFbGVtZW50cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLnZhbHVlcygpKTtcblxuICAgICAgICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgLy8gR2V0cyB0aGUgYWN0aXZpdHkgZWxlbWVudCB3aGljaCB3ZSBzaG91bGQgc25hcCB0by5cbiAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIGFjdGl2aXR5RWxlbWVudHNbZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ICsgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYWN0aXZlLWRlc2NlbmRhbnQnXG4gICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQub2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgK1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRzWytmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXhdO1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCAtXG4gICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgKiAoMSAtIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkgK1xuICAgICAgICAgICAgICAgICAgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9LFxuICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGFjdGl2aXR5S2V5c1JlZiwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmLCBzdHlsZU9wdGlvbnNSZWZdXG4gICk7XG59O1xuXG50eXBlIEJhc2ljVHJhbnNjcmlwdFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBCYXNpY1RyYW5zY3JpcHQ6IFZGQzxCYXNpY1RyYW5zY3JpcHRQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWYgPSB1c2VSZWY8QWN0aXZpdHlFbGVtZW50TWFwPihuZXcgTWFwKCkpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgc2Nyb2xsZXIgPSB1c2VTY3JvbGxlcihhY3Rpdml0eUVsZW1lbnRNYXBSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRyYW5zY3JpcHRGb2N1c0NvbXBvc2VyIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgIDxSZWFjdFNjcm9sbFRvQm90dG9tQ29tcG9zZXIgc2Nyb2xsZXI9e3Njcm9sbGVyfT5cbiAgICAgICAgPEtleWJvYXJkSGVscCAvPlxuICAgICAgICA8SW50ZXJuYWxUcmFuc2NyaXB0IGFjdGl2aXR5RWxlbWVudE1hcFJlZj17YWN0aXZpdHlFbGVtZW50TWFwUmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gcmVmPXtjb250YWluZXJSZWZ9IC8+XG4gICAgICA8L1JlYWN0U2Nyb2xsVG9Cb3R0b21Db21wb3Nlcj5cbiAgICA8L1RyYW5zY3JpcHRGb2N1c0NvbXBvc2VyPlxuICApO1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJ1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYXNpY1RyYW5zY3JpcHQ7XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
package/lib/Composer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -83,9 +83,9 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
|
|
|
83
83
|
|
|
84
84
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
85
85
|
|
|
86
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
86
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
87
87
|
|
|
88
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
88
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
89
89
|
|
|
90
90
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
91
91
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
package/lib/Dictation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCoreMiddleware.d.ts","sourceRoot":"","sources":["../../../src/Middleware/Activity/createCoreMiddleware.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createCoreMiddleware.d.ts","sourceRoot":"","sources":["../../../src/Middleware/Activity/createCoreMiddleware.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAM9D,MAAM,CAAC,OAAO,UAAU,oBAAoB,IAAI,kBAAkB,EAAE,CAkEnE"}
|
|
@@ -30,25 +30,22 @@ function createCoreMiddleware() {
|
|
|
30
30
|
if (type === 'conversationUpdate' || type === 'event' || type === 'invoke' || type === 'typing') {
|
|
31
31
|
return false;
|
|
32
32
|
} else if (type === 'message') {
|
|
33
|
-
var
|
|
34
|
-
attachments = _activity$attachments === void 0 ? [] : _activity$attachments,
|
|
33
|
+
var attachments = activity.attachments,
|
|
35
34
|
channelData = activity.channelData,
|
|
36
35
|
text = activity.text;
|
|
37
36
|
|
|
38
37
|
if ( // Do not show postback
|
|
39
|
-
channelData && channelData.postBack || // Do not show messageBack if displayText is undefined
|
|
40
|
-
channelData && channelData.messageBack && !channelData.messageBack.displayText || // Do not show empty bubbles (no text and attachments, and not "typing")
|
|
41
|
-
!(text || attachments.length)) {
|
|
38
|
+
channelData !== null && channelData !== void 0 && channelData.postBack || // Do not show messageBack if displayText is undefined
|
|
39
|
+
channelData !== null && channelData !== void 0 && channelData.messageBack && !channelData.messageBack.displayText || // Do not show empty bubbles (no text and attachments, and not "typing")
|
|
40
|
+
!(text || attachments !== null && attachments !== void 0 && attachments.length)) {
|
|
42
41
|
return false;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
} else if (type === 'typing' && activity.from.role === 'user') {
|
|
46
|
-
// Do not show typing by oneself
|
|
47
|
-
return false;
|
|
42
|
+
}
|
|
48
43
|
}
|
|
49
44
|
|
|
50
45
|
if (type === 'message' || type === 'typing') {
|
|
51
|
-
|
|
46
|
+
var _activity$attachments;
|
|
47
|
+
|
|
48
|
+
if (type === 'message' && (((_activity$attachments = activity.attachments) === null || _activity$attachments === void 0 ? void 0 : _activity$attachments.length) || 0) > 1 && activity.attachmentLayout === 'carousel') {
|
|
52
49
|
// The following line is not a React functional component, it's a render function called by useCreateActivityRenderer() hook.
|
|
53
50
|
// The function signature need to be compatible with older version of activity middleware, which was:
|
|
54
51
|
//
|
|
@@ -79,4 +76,4 @@ function createCoreMiddleware() {
|
|
|
79
76
|
};
|
|
80
77
|
}];
|
|
81
78
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9NaWRkbGV3YXJlL0FjdGl2aXR5L2NyZWF0ZUNvcmVNaWRkbGV3YXJlLnRzeCJdLCJuYW1lcyI6WyJjcmVhdGVDb3JlTWlkZGxld2FyZSIsIm5leHQiLCJhcmdzIiwiYWN0aXZpdHkiLCJ0eXBlIiwiYXR0YWNobWVudHMiLCJjaGFubmVsRGF0YSIsInRleHQiLCJwb3N0QmFjayIsIm1lc3NhZ2VCYWNrIiwiZGlzcGxheVRleHQiLCJsZW5ndGgiLCJhdHRhY2htZW50TGF5b3V0IiwicmVuZGVyQ2Fyb3VzZWxMYXlvdXQiLCJyZW5kZXJBdHRhY2htZW50IiwicHJvcHMiLCJjb25zb2xlIiwid2FybiIsInJlbmRlclN0YWNrZWRMYXlvdXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7Ozs7O0FBRWUsU0FBU0Esb0JBQVQsR0FBc0Q7QUFDbkUsU0FBTyxDQUNMO0FBQUEsV0FDRSxVQUFBQyxJQUFJO0FBQUEsYUFDSixZQUFhO0FBQUEsMENBQVRDLElBQVM7QUFBVEEsVUFBQUEsSUFBUztBQUFBOztBQUNYLFlBQVNDLFFBQVQsR0FBdUJELElBQXZCLElBQVNDLFFBQVQsQ0FEVyxDQUdYOztBQUVBLFlBQVFDLElBQVIsR0FBaUJELFFBQWpCLENBQVFDLElBQVIsQ0FMVyxDQU9YOztBQUNBLFlBQUlBLElBQUksS0FBSyxvQkFBVCxJQUFpQ0EsSUFBSSxLQUFLLE9BQTFDLElBQXFEQSxJQUFJLEtBQUssUUFBOUQsSUFBMEVBLElBQUksS0FBSyxRQUF2RixFQUFpRztBQUMvRixpQkFBTyxLQUFQO0FBQ0QsU0FGRCxNQUVPLElBQUlBLElBQUksS0FBSyxTQUFiLEVBQXdCO0FBQzdCLGNBQVFDLFdBQVIsR0FBMkNGLFFBQTNDLENBQVFFLFdBQVI7QUFBQSxjQUFxQkMsV0FBckIsR0FBMkNILFFBQTNDLENBQXFCRyxXQUFyQjtBQUFBLGNBQWtDQyxJQUFsQyxHQUEyQ0osUUFBM0MsQ0FBa0NJLElBQWxDOztBQUVBLGVBQ0U7QUFDQUQsVUFBQUEsV0FBVyxTQUFYLElBQUFBLFdBQVcsV0FBWCxJQUFBQSxXQUFXLENBQUVFLFFBQWIsSUFDQTtBQUNDRixVQUFBQSxXQUFXLFNBQVgsSUFBQUEsV0FBVyxXQUFYLElBQUFBLFdBQVcsQ0FBRUcsV0FBYixJQUE0QixDQUFDSCxXQUFXLENBQUNHLFdBQVosQ0FBd0JDLFdBRnRELElBR0E7QUFDQSxZQUFFSCxJQUFJLElBQUlGLFdBQUosYUFBSUEsV0FBSixlQUFJQSxXQUFXLENBQUVNLE1BQXZCLENBTkYsRUFPRTtBQUNBLG1CQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVELFlBQUlQLElBQUksS0FBSyxTQUFULElBQXNCQSxJQUFJLEtBQUssUUFBbkMsRUFBNkM7QUFBQTs7QUFDM0MsY0FDRUEsSUFBSSxLQUFLLFNBQVQsSUFDQSxDQUFDLDBCQUFBRCxRQUFRLENBQUNFLFdBQVQsZ0ZBQXNCTSxNQUF0QixLQUFnQyxDQUFqQyxJQUFzQyxDQUR0QyxJQUVBUixRQUFRLENBQUNTLGdCQUFULEtBQThCLFVBSGhDLEVBSUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxtQkFBTyxTQUFTQyxvQkFBVCxDQUE4QkMsZ0JBQTlCLEVBQWdEQyxLQUFoRCxFQUF1RDtBQUM1RCxxQkFBT0EsS0FBUCxLQUFpQixXQUFqQixJQUNFQyxPQUFPLENBQUNDLElBQVIsQ0FDRSw0TEFERixDQURGO0FBS0Esa0NBQU8sNkJBQUMsdUJBQUQ7QUFBZ0IsZ0JBQUEsUUFBUSxFQUFFZCxRQUExQjtBQUFvQyxnQkFBQSxnQkFBZ0IsRUFBRVc7QUFBdEQsaUJBQTRFQyxLQUE1RSxFQUFQO0FBQ0QsYUFQRDtBQVFELFdBckIwQyxDQXVCM0M7OztBQUNBLGlCQUFPLFNBQVNHLG1CQUFULENBQTZCSixnQkFBN0IsRUFBK0NDLEtBQS9DLEVBQXNEO0FBQzNELG1CQUFPQSxLQUFQLEtBQWlCLFdBQWpCLElBQ0VDLE9BQU8sQ0FBQ0MsSUFBUixDQUNFLDRMQURGLENBREY7QUFLQSxnQ0FBTyw2QkFBQyxzQkFBRDtBQUFlLGNBQUEsUUFBUSxFQUFFZCxRQUF6QjtBQUFtQyxjQUFBLGdCQUFnQixFQUFFVztBQUFyRCxlQUEyRUMsS0FBM0UsRUFBUDtBQUNELFdBUEQ7QUFRRDs7QUFFRCxlQUFPZCxJQUFJLE1BQUosU0FBUUMsSUFBUixDQUFQO0FBQ0QsT0E3REc7QUFBQSxLQUROO0FBQUEsR0FESyxDQUFQO0FBaUVEIiwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpdml0eU1pZGRsZXdhcmUgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IENhcm91c2VsTGF5b3V0IGZyb20gJy4uLy4uL0FjdGl2aXR5L0Nhcm91c2VsTGF5b3V0JztcbmltcG9ydCBTdGFja2VkTGF5b3V0IGZyb20gJy4uLy4uL0FjdGl2aXR5L1N0YWNrZWRMYXlvdXQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb3JlTWlkZGxld2FyZSgpOiBBY3Rpdml0eU1pZGRsZXdhcmVbXSB7XG4gIHJldHVybiBbXG4gICAgKCkgPT5cbiAgICAgIG5leHQgPT5cbiAgICAgICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IFt7IGFjdGl2aXR5IH1dID0gYXJncztcblxuICAgICAgICAvLyBUT0RPOiBbUDRdIENhbiB3ZSBzaW1wbGlmeSB0aGVzZSBpZi1zdGF0ZW1lbnQgdG8gc29tZXRoaW5nIG1vcmUgcmVhZGFibGU/XG5cbiAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBhY3Rpdml0eTtcblxuICAgICAgICAvLyBGaWx0ZXIgb3V0IGFjdGl2aXRpZXMgdGhhdCBzaG91bGQgbm90IGJlIHZpc2libGVcbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb252ZXJzYXRpb25VcGRhdGUnIHx8IHR5cGUgPT09ICdldmVudCcgfHwgdHlwZSA9PT0gJ2ludm9rZScgfHwgdHlwZSA9PT0gJ3R5cGluZycpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21lc3NhZ2UnKSB7XG4gICAgICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgY2hhbm5lbERhdGEsIHRleHQgfSA9IGFjdGl2aXR5O1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gRG8gbm90IHNob3cgcG9zdGJhY2tcbiAgICAgICAgICAgIGNoYW5uZWxEYXRhPy5wb3N0QmFjayB8fFxuICAgICAgICAgICAgLy8gRG8gbm90IHNob3cgbWVzc2FnZUJhY2sgaWYgZGlzcGxheVRleHQgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgICAoY2hhbm5lbERhdGE/Lm1lc3NhZ2VCYWNrICYmICFjaGFubmVsRGF0YS5tZXNzYWdlQmFjay5kaXNwbGF5VGV4dCkgfHxcbiAgICAgICAgICAgIC8vIERvIG5vdCBzaG93IGVtcHR5IGJ1YmJsZXMgKG5vIHRleHQgYW5kIGF0dGFjaG1lbnRzLCBhbmQgbm90IFwidHlwaW5nXCIpXG4gICAgICAgICAgICAhKHRleHQgfHwgYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ21lc3NhZ2UnIHx8IHR5cGUgPT09ICd0eXBpbmcnKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZSA9PT0gJ21lc3NhZ2UnICYmXG4gICAgICAgICAgICAoYWN0aXZpdHkuYXR0YWNobWVudHM/Lmxlbmd0aCB8fCAwKSA+IDEgJiZcbiAgICAgICAgICAgIGFjdGl2aXR5LmF0dGFjaG1lbnRMYXlvdXQgPT09ICdjYXJvdXNlbCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBub3QgYSBSZWFjdCBmdW5jdGlvbmFsIGNvbXBvbmVudCwgaXQncyBhIHJlbmRlciBmdW5jdGlvbiBjYWxsZWQgYnkgdXNlQ3JlYXRlQWN0aXZpdHlSZW5kZXJlcigpIGhvb2suXG4gICAgICAgICAgICAvLyBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIG5lZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb24gb2YgYWN0aXZpdHkgbWlkZGxld2FyZSwgd2hpY2ggd2FzOlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHJlbmRlckFjdGl2aXR5KFxuICAgICAgICAgICAgLy8gICByZW5kZXJBdHRhY2htZW50OiAoeyBhY3Rpdml0eSwgYXR0YWNobWVudCB9KSA9PiBSZWFjdC5FbGVtZW50XG4gICAgICAgICAgICAvLyApID0+IFJlYWN0LkVsZW1lbnRcblxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlbmRlckNhcm91c2VsTGF5b3V0KHJlbmRlckF0dGFjaG1lbnQsIHByb3BzKSB7XG4gICAgICAgICAgICAgIHR5cGVvZiBwcm9wcyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IE9uZSBvciBtb3JlIGFyZ3VtZW50cyB3ZXJlIG1pc3NpbmcgYWZ0ZXIgcGFzc2luZyB0aHJvdWdoIHRoZSBhY3Rpdml0eSBtaWRkbGV3YXJlLiBQbGVhc2UgY2hlY2sgeW91ciBjdXN0b20gYWN0aXZpdHkgbWlkZGxld2FyZSB0byBtYWtlIHN1cmUgaXQgcGFzc2VzIGFsbCBhcmd1bWVudHMuJ1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIDxDYXJvdXNlbExheW91dCBhY3Rpdml0eT17YWN0aXZpdHl9IHJlbmRlckF0dGFjaG1lbnQ9e3JlbmRlckF0dGFjaG1lbnR9IHsuLi5wcm9wc30gLz47XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBub3QgYSBSZWFjdCBmdW5jdGlvbmFsIGNvbXBvbmVudCwgaXQncyBhIHJlbmRlciBmdW5jdGlvbiBjYWxsZWQgYnkgdXNlQ3JlYXRlQWN0aXZpdHlSZW5kZXJlcigpIGhvb2suXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlbmRlclN0YWNrZWRMYXlvdXQocmVuZGVyQXR0YWNobWVudCwgcHJvcHMpIHtcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcyA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogT25lIG9yIG1vcmUgYXJndW1lbnRzIHdlcmUgbWlzc2luZyBhZnRlciBwYXNzaW5nIHRocm91Z2ggdGhlIGFjdGl2aXR5IG1pZGRsZXdhcmUuIFBsZWFzZSBjaGVjayB5b3VyIGN1c3RvbSBhY3Rpdml0eSBtaWRkbGV3YXJlIHRvIG1ha2Ugc3VyZSBpdCBwYXNzZXMgYWxsIGFyZ3VtZW50cy4nXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiA8U3RhY2tlZExheW91dCBhY3Rpdml0eT17YWN0aXZpdHl9IHJlbmRlckF0dGFjaG1lbnQ9e3JlbmRlckF0dGFjaG1lbnR9IHsuLi5wcm9wc30gLz47XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KC4uLmFyZ3MpO1xuICAgICAgfVxuICBdO1xufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DirectLineActivity } from 'botframework-webchat-core';
|
|
2
1
|
import { FC } from 'react';
|
|
2
|
+
import type { WebChatActivity } from 'botframework-webchat-core';
|
|
3
3
|
declare const connectSendStatus: (...selectors: any[]) => any;
|
|
4
4
|
declare type SendStatusProps = {
|
|
5
|
-
activity:
|
|
5
|
+
activity: WebChatActivity;
|
|
6
6
|
sendState: 'sending' | 'send failed' | 'sent';
|
|
7
7
|
};
|
|
8
8
|
declare const SendStatus: FC<SendStatusProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SendStatus.d.ts","sourceRoot":"","sources":["../../../../src/Middleware/ActivityStatus/SendStatus/SendStatus.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SendStatus.d.ts","sourceRoot":"","sources":["../../../../src/Middleware/ActivityStatus/SendStatus/SendStatus.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAcjE,QAAA,MAAM,iBAAiB,8BAepB,CAAC;AAEJ,aAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;CAC/C,CAAC;AAEF,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAgCnC,CAAC;AAaF,eAAe,UAAU,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|