botframework-webchat-component
Version:
React component of botframework-webchat
264 lines (262 loc) • 41.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _botframeworkWebchatApi = require("botframework-webchat-api");
var _reactFilm = require("react-film");
var _classnames = _interopRequireDefault(require("classnames"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
var _Bubble = _interopRequireDefault(require("./Bubble"));
var _CarouselFilmStripAttachment = _interopRequireDefault(require("./CarouselFilmStripAttachment"));
var _isZeroOrPositive = _interopRequireDefault(require("../Utils/isZeroOrPositive"));
var _ScreenReaderText = _interopRequireDefault(require("../ScreenReaderText"));
var _textFormatToContentType = _interopRequireDefault(require("../Utils/textFormatToContentType"));
var _useStyleSet3 = _interopRequireDefault(require("../hooks/useStyleSet"));
var _useStyleToEmotionObject = _interopRequireDefault(require("../hooks/internal/useStyleToEmotionObject"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /* eslint complexity: ["error", 30] */
var useAvatarForBot = _botframeworkWebchatApi.hooks.useAvatarForBot,
useAvatarForUser = _botframeworkWebchatApi.hooks.useAvatarForUser,
useDirection = _botframeworkWebchatApi.hooks.useDirection,
useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer,
useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions;
var ROOT_STYLE = {
'&.webchat__carousel-filmstrip': {
display: 'flex',
flexDirection: 'column',
MsOverflowStyle: 'none',
overflowX: 'scroll',
overflowY: 'hidden',
position: 'relative',
// This is to keep screen reader text in the destinated area.
touchAction: 'manipulation',
WebkitOverflowScrolling: 'touch',
'&::-webkit-scrollbar': {
display: 'none'
},
'& .webchat__carousel-filmstrip__alignment-pad': {
flexShrink: 0
},
'& .webchat__carousel-filmstrip-attachment': {
flex: 1
},
'& .webchat__carousel-filmstrip__attachments': {
display: 'flex',
listStyleType: 'none',
margin: 0,
padding: 0
},
'& .webchat__carousel-filmstrip__avatar': {
flexShrink: 0
},
'& .webchat__carousel-filmstrip__avatar-gutter': {
display: 'flex',
flexDirection: 'column',
flexShrink: 0
},
'& .webchat__carousel-filmstrip__complimentary': {
display: 'flex'
},
'& .webchat__carousel-filmstrip__complimentary-content': {
display: 'flex',
flexGrow: 1,
flexDirection: 'column'
},
'& .webchat__carousel-filmstrip__content': {
display: 'flex',
flexGrow: 1,
flexDirection: 'column'
},
'& .webchat__carousel-filmstrip__filler': {
flexGrow: 10000,
flexShrink: 1
},
'& .webchat__carousel-filmstrip__main': {
display: 'flex'
},
'& .webchat__carousel-filmstrip__message': {
display: 'flex'
},
'& .webchat__carousel-filmstrip__nub-pad': {
flexShrink: 0
},
'& .webchat__carousel-filmstrip__status': {
display: 'flex'
}
}
};
var CarouselFilmStrip = function CarouselFilmStrip(_ref) {
var activity = _ref.activity,
className = _ref.className,
hideTimestamp = _ref.hideTimestamp,
renderActivityStatus = _ref.renderActivityStatus,
renderAttachment = _ref.renderAttachment,
renderAvatar = _ref.renderAvatar,
showCallout = _ref.showCallout;
var _useStyleOptions = useStyleOptions(),
_useStyleOptions2 = _slicedToArray(_useStyleOptions, 1),
_useStyleOptions2$ = _useStyleOptions2[0],
bubbleNubOffset = _useStyleOptions2$.bubbleNubOffset,
bubbleNubSize = _useStyleOptions2$.bubbleNubSize,
bubbleFromUserNubOffset = _useStyleOptions2$.bubbleFromUserNubOffset,
bubbleFromUserNubSize = _useStyleOptions2$.bubbleFromUserNubSize;
var _useStyleSet = (0, _useStyleSet3.default)(),
_useStyleSet2 = _slicedToArray(_useStyleSet, 1),
carouselFilmStripStyleSet = _useStyleSet2[0].carouselFilmStrip;
var _useAvatarForBot = useAvatarForBot(),
_useAvatarForBot2 = _slicedToArray(_useAvatarForBot, 1),
botInitials = _useAvatarForBot2[0].initials;
var _useAvatarForUser = useAvatarForUser(),
_useAvatarForUser2 = _slicedToArray(_useAvatarForUser, 1),
userInitials = _useAvatarForUser2[0].initials;
var _useDirection = useDirection(),
_useDirection2 = _slicedToArray(_useDirection, 1),
direction = _useDirection2[0];
var localize = useLocalizer();
var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + '';
var showActivityStatus = typeof renderActivityStatus === 'function';
var itemContainerCallbackRef = (0, _reactFilm.useItemContainerCallbackRef)();
var scrollableCallbackRef = (0, _reactFilm.useScrollableCallbackRef)();
var _activity$attachments = activity.attachments,
attachments = _activity$attachments === void 0 ? [] : _activity$attachments,
_activity$channelData = activity.channelData;
_activity$channelData = _activity$channelData === void 0 ? {} : _activity$channelData;
var _activity$channelData2 = _activity$channelData.messageBack;
_activity$channelData2 = _activity$channelData2 === void 0 ? {} : _activity$channelData2;
var messageBackDisplayText = _activity$channelData2.displayText,
_activity$from = activity.from;
_activity$from = _activity$from === void 0 ? {} : _activity$from;
var role = _activity$from.role,
text = activity.text,
textFormat = activity.textFormat;
var activityDisplayText = messageBackDisplayText || text;
var fromUser = role === 'user';
var greetingAlt = (fromUser ? localize('ACTIVITY_YOU_SAID_ALT') : localize('ACTIVITY_BOT_SAID_ALT', botInitials || '')).replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]{2,}/g, ' ');
var initials = fromUser ? userInitials : botInitials;
var nubOffset = fromUser ? bubbleFromUserNubOffset : bubbleNubOffset;
var nubSize = fromUser ? bubbleFromUserNubSize : bubbleNubSize;
var otherInitials = fromUser ? botInitials : userInitials;
var otherNubSize = fromUser ? bubbleNubSize : bubbleFromUserNubSize;
var hasAvatar = initials || typeof initials === 'string';
var hasOtherAvatar = otherInitials || typeof otherInitials === 'string';
var hasNub = typeof nubSize === 'number';
var hasOtherNub = typeof otherNubSize === 'number';
var topAlignedCallout = (0, _isZeroOrPositive.default)(nubOffset);
var extraTrailing = !hasOtherAvatar && hasOtherNub; // This is for bot message with user nub and no user avatar. And vice versa.
var showAvatar = showCallout && hasAvatar && !!renderAvatar;
var showNub = showCallout && hasNub && (topAlignedCallout || !attachments.length);
var hideNub = hasNub && !showNub;
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)('webchat__carousel-filmstrip', {
'webchat__carousel-filmstrip--extra-trailing': extraTrailing,
'webchat__carousel-filmstrip--hide-avatar': hasAvatar && !showAvatar,
'webchat__carousel-filmstrip--hide-nub': hideNub,
'webchat__carousel-filmstrip--no-message': !activityDisplayText,
'webchat__carousel-filmstrip--rtl': direction === 'rtl',
'webchat__carousel-filmstrip--show-avatar': showAvatar,
'webchat__carousel-filmstrip--show-nub': showNub,
'webchat__carousel-filmstrip--top-callout': topAlignedCallout
}, 'react-film__filmstrip', rootClassName, carouselFilmStripStyleSet + '', (className || '') + ''),
ref: scrollableCallbackRef
}, /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__main"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__avatar-gutter"
}, showAvatar && renderAvatar({
activity: activity
})), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__content"
}, !!activityDisplayText && /*#__PURE__*/_react.default.createElement("div", {
"aria-roledescription": "message",
className: "webchat__carousel-filmstrip__message",
role: "group"
}, /*#__PURE__*/_react.default.createElement(_ScreenReaderText.default, {
text: greetingAlt
}), /*#__PURE__*/_react.default.createElement(_Bubble.default, {
className: "webchat__carousel-filmstrip__bubble",
fromUser: fromUser,
nub: showNub || (hasAvatar || hasNub) && 'hidden'
}, renderAttachment({
activity: activity,
attachment: {
content: activityDisplayText,
contentType: (0, _textFormatToContentType.default)(textFormat)
}
})), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__filler"
})), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__complimentary"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__nub-pad"
}), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__complimentary-content c"
}, /*#__PURE__*/_react.default.createElement("ul", {
className: "webchat__carousel-filmstrip__attachments react-film__filmstrip__list",
ref: itemContainerCallbackRef
}, attachments.map(function (attachment, index) {
return /*#__PURE__*/_react.default.createElement(_CarouselFilmStripAttachment.default, {
activity: activity,
attachment: attachment,
fromUser: fromUser,
hasAvatar: hasAvatar,
hideNub: hideNub,
index: index
/* Attachments do not have an ID; it is always indexed by number */
// eslint-disable-next-line react/no-array-index-key
,
key: index,
renderAttachment: renderAttachment,
showAvatar: showAvatar,
showNub: showNub
});
}))))), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__alignment-pad"
})), showActivityStatus && /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__status"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__avatar-gutter"
}), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__carousel-filmstrip__nub-pad"
}), renderActivityStatus({
hideTimestamp: hideTimestamp
})));
};
CarouselFilmStrip.defaultProps = {
className: '',
hideTimestamp: false,
renderActivityStatus: false,
renderAvatar: false,
showCallout: false
};
CarouselFilmStrip.propTypes = {
activity: _propTypes.default.shape({
attachments: _propTypes.default.array,
channelData: _propTypes.default.shape({
messageBack: _propTypes.default.shape({
displayText: _propTypes.default.string
})
}),
from: _propTypes.default.shape({
role: _propTypes.default.string.isRequired
}).isRequired,
text: _propTypes.default.string,
textFormat: _propTypes.default.string,
timestamp: _propTypes.default.string
}).isRequired,
className: _propTypes.default.string,
hideTimestamp: _propTypes.default.bool,
renderActivityStatus: _propTypes.default.oneOfType([_propTypes.default.oneOf([false]), _propTypes.default.func]),
renderAttachment: _propTypes.default.func.isRequired,
renderAvatar: _propTypes.default.oneOfType([_propTypes.default.oneOf([false]), _propTypes.default.func]),
showCallout: _propTypes.default.bool
};
var _default = CarouselFilmStrip;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcmVhY3RGaWxtIiwiX2NsYXNzbmFtZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3Byb3BUeXBlcyIsIl9yZWFjdCIsIl9CdWJibGUiLCJfQ2Fyb3VzZWxGaWxtU3RyaXBBdHRhY2htZW50IiwiX2lzWmVyb09yUG9zaXRpdmUiLCJfU2NyZWVuUmVhZGVyVGV4dCIsIl90ZXh0Rm9ybWF0VG9Db250ZW50VHlwZSIsIl91c2VTdHlsZVNldDMiLCJfdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9zbGljZWRUb0FycmF5IiwiYXJyIiwiaSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJvIiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJuIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuIiwibGVuZ3RoIiwiYXJyMiIsIl9pIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9zIiwiX2UiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImVyciIsImlzQXJyYXkiLCJ1c2VBdmF0YXJGb3JCb3QiLCJob29rcyIsInVzZUF2YXRhckZvclVzZXIiLCJ1c2VEaXJlY3Rpb24iLCJ1c2VMb2NhbGl6ZXIiLCJ1c2VTdHlsZU9wdGlvbnMiLCJST09UX1NUWUxFIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJNc092ZXJmbG93U3R5bGUiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJwb3NpdGlvbiIsInRvdWNoQWN0aW9uIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJmbGV4U2hyaW5rIiwiZmxleCIsImxpc3RTdHlsZVR5cGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiZmxleEdyb3ciLCJDYXJvdXNlbEZpbG1TdHJpcCIsIl9yZWYiLCJhY3Rpdml0eSIsImNsYXNzTmFtZSIsImhpZGVUaW1lc3RhbXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsInJlbmRlckF0dGFjaG1lbnQiLCJyZW5kZXJBdmF0YXIiLCJzaG93Q2FsbG91dCIsIl91c2VTdHlsZU9wdGlvbnMiLCJfdXNlU3R5bGVPcHRpb25zMiIsIl91c2VTdHlsZU9wdGlvbnMyJCIsImJ1YmJsZU51Yk9mZnNldCIsImJ1YmJsZU51YlNpemUiLCJidWJibGVGcm9tVXNlck51Yk9mZnNldCIsImJ1YmJsZUZyb21Vc2VyTnViU2l6ZSIsIl91c2VTdHlsZVNldCIsInVzZVN0eWxlU2V0IiwiX3VzZVN0eWxlU2V0MiIsImNhcm91c2VsRmlsbVN0cmlwU3R5bGVTZXQiLCJjYXJvdXNlbEZpbG1TdHJpcCIsIl91c2VBdmF0YXJGb3JCb3QiLCJfdXNlQXZhdGFyRm9yQm90MiIsImJvdEluaXRpYWxzIiwiaW5pdGlhbHMiLCJfdXNlQXZhdGFyRm9yVXNlciIsIl91c2VBdmF0YXJGb3JVc2VyMiIsInVzZXJJbml0aWFscyIsIl91c2VEaXJlY3Rpb24iLCJfdXNlRGlyZWN0aW9uMiIsImRpcmVjdGlvbiIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInVzZVN0eWxlVG9FbW90aW9uT2JqZWN0Iiwic2hvd0FjdGl2aXR5U3RhdHVzIiwiaXRlbUNvbnRhaW5lckNhbGxiYWNrUmVmIiwidXNlSXRlbUNvbnRhaW5lckNhbGxiYWNrUmVmIiwic2Nyb2xsYWJsZUNhbGxiYWNrUmVmIiwidXNlU2Nyb2xsYWJsZUNhbGxiYWNrUmVmIiwiX2FjdGl2aXR5JGF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJfYWN0aXZpdHkkY2hhbm5lbERhdGEiLCJjaGFubmVsRGF0YSIsIl9hY3Rpdml0eSRjaGFubmVsRGF0YTIiLCJtZXNzYWdlQmFjayIsIm1lc3NhZ2VCYWNrRGlzcGxheVRleHQiLCJkaXNwbGF5VGV4dCIsIl9hY3Rpdml0eSRmcm9tIiwicm9sZSIsInRleHQiLCJ0ZXh0Rm9ybWF0IiwiYWN0aXZpdHlEaXNwbGF5VGV4dCIsImZyb21Vc2VyIiwiZ3JlZXRpbmdBbHQiLCJyZXBsYWNlIiwibnViT2Zmc2V0IiwibnViU2l6ZSIsIm90aGVySW5pdGlhbHMiLCJvdGhlck51YlNpemUiLCJoYXNBdmF0YXIiLCJoYXNPdGhlckF2YXRhciIsImhhc051YiIsImhhc090aGVyTnViIiwidG9wQWxpZ25lZENhbGxvdXQiLCJpc1plcm9PclBvc2l0aXZlIiwiZXh0cmFUcmFpbGluZyIsInNob3dBdmF0YXIiLCJzaG93TnViIiwiaGlkZU51YiIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWVzIiwicmVmIiwibnViIiwiYXR0YWNobWVudCIsImNvbnRlbnQiLCJjb250ZW50VHlwZSIsInRleHRGb3JtYXRUb0NvbnRlbnRUeXBlIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzaGFwZSIsImFycmF5Iiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsInRpbWVzdGFtcCIsImJvb2wiLCJvbmVPZlR5cGUiLCJvbmVPZiIsImZ1bmMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BY3Rpdml0eS9DYXJvdXNlbEZpbG1TdHJpcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgY29tcGxleGl0eTogW1wiZXJyb3JcIiwgMzBdICovXG5cbmltcG9ydCB7IGhvb2tzIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB7IHVzZUl0ZW1Db250YWluZXJDYWxsYmFja1JlZiwgdXNlU2Nyb2xsYWJsZUNhbGxiYWNrUmVmIH0gZnJvbSAncmVhY3QtZmlsbSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQnViYmxlIGZyb20gJy4vQnViYmxlJztcbmltcG9ydCBDYXJvdXNlbEZpbG1TdHJpcEF0dGFjaG1lbnQgZnJvbSAnLi9DYXJvdXNlbEZpbG1TdHJpcEF0dGFjaG1lbnQnO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi4vVXRpbHMvaXNaZXJvT3JQb3NpdGl2ZSc7XG5pbXBvcnQgU2NyZWVuUmVhZGVyVGV4dCBmcm9tICcuLi9TY3JlZW5SZWFkZXJUZXh0JztcbmltcG9ydCB0ZXh0Rm9ybWF0VG9Db250ZW50VHlwZSBmcm9tICcuLi9VdGlscy90ZXh0Rm9ybWF0VG9Db250ZW50VHlwZSc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi4vaG9va3MvdXNlU3R5bGVTZXQnO1xuaW1wb3J0IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IGZyb20gJy4uL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9FbW90aW9uT2JqZWN0JztcblxuY29uc3QgeyB1c2VBdmF0YXJGb3JCb3QsIHVzZUF2YXRhckZvclVzZXIsIHVzZURpcmVjdGlvbiwgdXNlTG9jYWxpemVyLCB1c2VTdHlsZU9wdGlvbnMgfSA9IGhvb2tzO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICAnJi53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXAnOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIE1zT3ZlcmZsb3dTdHlsZTogJ25vbmUnLFxuICAgIG92ZXJmbG93WDogJ3Njcm9sbCcsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywgLy8gVGhpcyBpcyB0byBrZWVwIHNjcmVlbiByZWFkZXIgdGV4dCBpbiB0aGUgZGVzdGluYXRlZCBhcmVhLlxuICAgIHRvdWNoQWN0aW9uOiAnbWFuaXB1bGF0aW9uJyxcbiAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcblxuICAgICcmOjotd2Via2l0LXNjcm9sbGJhcic6IHtcbiAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgIH0sXG5cbiAgICAnJiAud2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19hbGlnbm1lbnQtcGFkJzoge1xuICAgICAgZmxleFNocmluazogMFxuICAgIH0sXG5cbiAgICAnJiAud2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwLWF0dGFjaG1lbnQnOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX2F0dGFjaG1lbnRzJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgbGlzdFN0eWxlVHlwZTogJ25vbmUnLFxuICAgICAgbWFyZ2luOiAwLFxuICAgICAgcGFkZGluZzogMFxuICAgIH0sXG5cbiAgICAnJiAud2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19hdmF0YXInOiB7XG4gICAgICBmbGV4U2hyaW5rOiAwXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX2F2YXRhci1ndXR0ZXInOiB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIGZsZXhTaHJpbms6IDBcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fY29tcGxpbWVudGFyeSc6IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4J1xuICAgIH0sXG5cbiAgICAnJiAud2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19jb21wbGltZW50YXJ5LWNvbnRlbnQnOiB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4R3JvdzogMSxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX2NvbnRlbnQnOiB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4R3JvdzogMSxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX2ZpbGxlcic6IHtcbiAgICAgIGZsZXhHcm93OiAxMDAwMCxcbiAgICAgIGZsZXhTaHJpbms6IDFcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fbWFpbic6IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4J1xuICAgIH0sXG5cbiAgICAnJiAud2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19tZXNzYWdlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX251Yi1wYWQnOiB7XG4gICAgICBmbGV4U2hyaW5rOiAwXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX3N0YXR1cyc6IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4J1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgQ2Fyb3VzZWxGaWxtU3RyaXAgPSAoe1xuICBhY3Rpdml0eSxcbiAgY2xhc3NOYW1lLFxuICBoaWRlVGltZXN0YW1wLFxuICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgcmVuZGVyQXR0YWNobWVudCxcbiAgcmVuZGVyQXZhdGFyLFxuICBzaG93Q2FsbG91dFxufSkgPT4ge1xuICBjb25zdCBbeyBidWJibGVOdWJPZmZzZXQsIGJ1YmJsZU51YlNpemUsIGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LCBidWJibGVGcm9tVXNlck51YlNpemUgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgW3sgY2Fyb3VzZWxGaWxtU3RyaXA6IGNhcm91c2VsRmlsbVN0cmlwU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbeyBpbml0aWFsczogYm90SW5pdGlhbHMgfV0gPSB1c2VBdmF0YXJGb3JCb3QoKTtcbiAgY29uc3QgW3sgaW5pdGlhbHM6IHVzZXJJbml0aWFscyB9XSA9IHVzZUF2YXRhckZvclVzZXIoKTtcbiAgY29uc3QgW2RpcmVjdGlvbl0gPSB1c2VEaXJlY3Rpb24oKTtcbiAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgY29uc3Qgcm9vdENsYXNzTmFtZSA9IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0KCkoUk9PVF9TVFlMRSkgKyAnJztcbiAgY29uc3Qgc2hvd0FjdGl2aXR5U3RhdHVzID0gdHlwZW9mIHJlbmRlckFjdGl2aXR5U3RhdHVzID09PSAnZnVuY3Rpb24nO1xuXG4gIGNvbnN0IGl0ZW1Db250YWluZXJDYWxsYmFja1JlZiA9IHVzZUl0ZW1Db250YWluZXJDYWxsYmFja1JlZigpO1xuICBjb25zdCBzY3JvbGxhYmxlQ2FsbGJhY2tSZWYgPSB1c2VTY3JvbGxhYmxlQ2FsbGJhY2tSZWYoKTtcblxuICBjb25zdCB7XG4gICAgYXR0YWNobWVudHMgPSBbXSxcbiAgICBjaGFubmVsRGF0YTogeyBtZXNzYWdlQmFjazogeyBkaXNwbGF5VGV4dDogbWVzc2FnZUJhY2tEaXNwbGF5VGV4dCB9ID0ge30gfSA9IHt9LFxuICAgIGZyb206IHsgcm9sZSB9ID0ge30sXG4gICAgdGV4dCxcbiAgICB0ZXh0Rm9ybWF0XG4gIH0gPSBhY3Rpdml0eTtcblxuICBjb25zdCBhY3Rpdml0eURpc3BsYXlUZXh0ID0gbWVzc2FnZUJhY2tEaXNwbGF5VGV4dCB8fCB0ZXh0O1xuICBjb25zdCBmcm9tVXNlciA9IHJvbGUgPT09ICd1c2VyJztcblxuICBjb25zdCBncmVldGluZ0FsdCA9IChcbiAgICBmcm9tVXNlciA/IGxvY2FsaXplKCdBQ1RJVklUWV9ZT1VfU0FJRF9BTFQnKSA6IGxvY2FsaXplKCdBQ1RJVklUWV9CT1RfU0FJRF9BTFQnLCBib3RJbml0aWFscyB8fCAnJylcbiAgKS5yZXBsYWNlKC9cXHN7Mix9L2d1LCAnICcpO1xuXG4gIGNvbnN0IGluaXRpYWxzID0gZnJvbVVzZXIgPyB1c2VySW5pdGlhbHMgOiBib3RJbml0aWFscztcbiAgY29uc3QgbnViT2Zmc2V0ID0gZnJvbVVzZXIgPyBidWJibGVGcm9tVXNlck51Yk9mZnNldCA6IGJ1YmJsZU51Yk9mZnNldDtcbiAgY29uc3QgbnViU2l6ZSA9IGZyb21Vc2VyID8gYnViYmxlRnJvbVVzZXJOdWJTaXplIDogYnViYmxlTnViU2l6ZTtcbiAgY29uc3Qgb3RoZXJJbml0aWFscyA9IGZyb21Vc2VyID8gYm90SW5pdGlhbHMgOiB1c2VySW5pdGlhbHM7XG4gIGNvbnN0IG90aGVyTnViU2l6ZSA9IGZyb21Vc2VyID8gYnViYmxlTnViU2l6ZSA6IGJ1YmJsZUZyb21Vc2VyTnViU2l6ZTtcblxuICBjb25zdCBoYXNBdmF0YXIgPSBpbml0aWFscyB8fCB0eXBlb2YgaW5pdGlhbHMgPT09ICdzdHJpbmcnO1xuICBjb25zdCBoYXNPdGhlckF2YXRhciA9IG90aGVySW5pdGlhbHMgfHwgdHlwZW9mIG90aGVySW5pdGlhbHMgPT09ICdzdHJpbmcnO1xuICBjb25zdCBoYXNOdWIgPSB0eXBlb2YgbnViU2l6ZSA9PT0gJ251bWJlcic7XG4gIGNvbnN0IGhhc090aGVyTnViID0gdHlwZW9mIG90aGVyTnViU2l6ZSA9PT0gJ251bWJlcic7XG4gIGNvbnN0IHRvcEFsaWduZWRDYWxsb3V0ID0gaXNaZXJvT3JQb3NpdGl2ZShudWJPZmZzZXQpO1xuXG4gIGNvbnN0IGV4dHJhVHJhaWxpbmcgPSAhaGFzT3RoZXJBdmF0YXIgJiYgaGFzT3RoZXJOdWI7IC8vIFRoaXMgaXMgZm9yIGJvdCBtZXNzYWdlIHdpdGggdXNlciBudWIgYW5kIG5vIHVzZXIgYXZhdGFyLiBBbmQgdmljZSB2ZXJzYS5cblxuICBjb25zdCBzaG93QXZhdGFyID0gc2hvd0NhbGxvdXQgJiYgaGFzQXZhdGFyICYmICEhcmVuZGVyQXZhdGFyO1xuICBjb25zdCBzaG93TnViID0gc2hvd0NhbGxvdXQgJiYgaGFzTnViICYmICh0b3BBbGlnbmVkQ2FsbG91dCB8fCAhYXR0YWNobWVudHMubGVuZ3RoKTtcblxuICBjb25zdCBoaWRlTnViID0gaGFzTnViICYmICFzaG93TnViO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAnd2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwJyxcbiAgICAgICAge1xuICAgICAgICAgICd3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXAtLWV4dHJhLXRyYWlsaW5nJzogZXh0cmFUcmFpbGluZyxcbiAgICAgICAgICAnd2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwLS1oaWRlLWF2YXRhcic6IGhhc0F2YXRhciAmJiAhc2hvd0F2YXRhcixcbiAgICAgICAgICAnd2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwLS1oaWRlLW51Yic6IGhpZGVOdWIsXG4gICAgICAgICAgJ3dlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcC0tbm8tbWVzc2FnZSc6ICFhY3Rpdml0eURpc3BsYXlUZXh0LFxuICAgICAgICAgICd3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXAtLXJ0bCc6IGRpcmVjdGlvbiA9PT0gJ3J0bCcsXG4gICAgICAgICAgJ3dlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcC0tc2hvdy1hdmF0YXInOiBzaG93QXZhdGFyLFxuICAgICAgICAgICd3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXAtLXNob3ctbnViJzogc2hvd051YixcbiAgICAgICAgICAnd2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwLS10b3AtY2FsbG91dCc6IHRvcEFsaWduZWRDYWxsb3V0XG4gICAgICAgIH0sXG4gICAgICAgICdyZWFjdC1maWxtX19maWxtc3RyaXAnLFxuICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICBjYXJvdXNlbEZpbG1TdHJpcFN0eWxlU2V0ICsgJycsXG4gICAgICAgIChjbGFzc05hbWUgfHwgJycpICsgJydcbiAgICAgICl9XG4gICAgICByZWY9e3Njcm9sbGFibGVDYWxsYmFja1JlZn1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fbWFpblwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fYXZhdGFyLWd1dHRlclwiPntzaG93QXZhdGFyICYmIHJlbmRlckF2YXRhcih7IGFjdGl2aXR5IH0pfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fY29udGVudFwiPlxuICAgICAgICAgIHshIWFjdGl2aXR5RGlzcGxheVRleHQgJiYgKFxuICAgICAgICAgICAgPGRpdiBhcmlhLXJvbGVkZXNjcmlwdGlvbj1cIm1lc3NhZ2VcIiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX21lc3NhZ2VcIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPFNjcmVlblJlYWRlclRleHQgdGV4dD17Z3JlZXRpbmdBbHR9IC8+XG4gICAgICAgICAgICAgIDxCdWJibGVcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX2J1YmJsZVwiXG4gICAgICAgICAgICAgICAgZnJvbVVzZXI9e2Zyb21Vc2VyfVxuICAgICAgICAgICAgICAgIG51Yj17c2hvd051YiB8fCAoKGhhc0F2YXRhciB8fCBoYXNOdWIpICYmICdoaWRkZW4nKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtyZW5kZXJBdHRhY2htZW50KHtcbiAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LFxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudDoge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBhY3Rpdml0eURpc3BsYXlUZXh0LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogdGV4dEZvcm1hdFRvQ29udGVudFR5cGUodGV4dEZvcm1hdClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9CdWJibGU+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19maWxsZXJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fY29tcGxpbWVudGFyeVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX251Yi1wYWRcIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX2NvbXBsaW1lbnRhcnktY29udGVudCBjXCI+XG4gICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fYXR0YWNobWVudHMgcmVhY3QtZmlsbV9fZmlsbXN0cmlwX19saXN0XCJcbiAgICAgICAgICAgICAgICByZWY9e2l0ZW1Db250YWluZXJDYWxsYmFja1JlZn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Q2Fyb3VzZWxGaWxtU3RyaXBBdHRhY2htZW50XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5PXthY3Rpdml0eX1cbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgICAgZnJvbVVzZXI9e2Zyb21Vc2VyfVxuICAgICAgICAgICAgICAgICAgICBoYXNBdmF0YXI9e2hhc0F2YXRhcn1cbiAgICAgICAgICAgICAgICAgICAgaGlkZU51Yj17aGlkZU51Yn1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAvKiBBdHRhY2htZW50cyBkbyBub3QgaGF2ZSBhbiBJRDsgaXQgaXMgYWx3YXlzIGluZGV4ZWQgYnkgbnVtYmVyICovXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyQXR0YWNobWVudD17cmVuZGVyQXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0F2YXRhcj17c2hvd0F2YXRhcn1cbiAgICAgICAgICAgICAgICAgICAgc2hvd051Yj17c2hvd051Yn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19hbGlnbm1lbnQtcGFkXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge3Nob3dBY3Rpdml0eVN0YXR1cyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fY2Fyb3VzZWwtZmlsbXN0cmlwX19zdGF0dXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Nhcm91c2VsLWZpbG1zdHJpcF9fYXZhdGFyLWd1dHRlclwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19jYXJvdXNlbC1maWxtc3RyaXBfX251Yi1wYWRcIiAvPlxuICAgICAgICAgIHtyZW5kZXJBY3Rpdml0eVN0YXR1cyh7IGhpZGVUaW1lc3RhbXAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkNhcm91c2VsRmlsbVN0cmlwLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgaGlkZVRpbWVzdGFtcDogZmFsc2UsXG4gIHJlbmRlckFjdGl2aXR5U3RhdHVzOiBmYWxzZSxcbiAgcmVuZGVyQXZhdGFyOiBmYWxzZSxcbiAgc2hvd0NhbGxvdXQ6IGZhbHNlXG59O1xuXG5DYXJvdXNlbEZpbG1TdHJpcC5wcm9wVHlwZXMgPSB7XG4gIGFjdGl2aXR5OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGF0dGFjaG1lbnRzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgY2hhbm5lbERhdGE6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZXNzYWdlQmFjazogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgZGlzcGxheVRleHQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgICAgIH0pXG4gICAgfSksXG4gICAgZnJvbTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvbGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgdGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0ZXh0Rm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRpbWVzdGFtcDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGVUaW1lc3RhbXA6IFByb3BUeXBlcy5ib29sLFxuICByZW5kZXJBY3Rpdml0eVN0YXR1czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLCBQcm9wVHlwZXMuZnVuY10pLFxuICByZW5kZXJBdHRhY2htZW50OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICByZW5kZXJBdmF0YXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgc2hvd0NhbGxvdXQ6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDYXJvdXNlbEZpbG1TdHJpcDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBQUEsdUJBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFNLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFPLDRCQUFBLEdBQUFKLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUSxpQkFBQSxHQUFBTCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQU4sc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFVLHdCQUFBLEdBQUFQLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBVyxhQUFBLEdBQUFSLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBWSx3QkFBQSxHQUFBVCxzQkFBQSxDQUFBSCxPQUFBO0FBQWdGLFNBQUFHLHVCQUFBVSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBO0FBQUEsU0FBQUcsZUFBQUMsR0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsR0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxHQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosR0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FB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