decap-cms-widget-list
Version:
Widget for editing lists in Decap CMS.
30 lines • 298 kB
JavaScript
import _styled from "@emotion/styled/base";
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { css, ClassNames } from '@emotion/react';
import { List, Map, fromJS } from 'immutable';
import partial from 'lodash/partial';
import isEmpty from 'lodash/isEmpty';
import uniqueId from 'lodash/uniqueId';
import { v4 as uuid } from 'uuid';
import DecapCmsWidgetObject from 'decap-cms-widget-object';
import { DndContext, MouseSensor, TouchSensor, closestCenter, useSensor, useSensors } from '@dnd-kit/core';
import { SortableContext, useSortable } from '@dnd-kit/sortable';
import { restrictToParentElement } from '@dnd-kit/modifiers';
import { CSS } from '@dnd-kit/utilities';
import { ListItemTopBar, ObjectWidgetTopBar, colors, lengths, FieldLabel } from 'decap-cms-ui-default';
import { stringTemplate, validations } from 'decap-cms-lib-widgets';
import { TYPES_KEY, getTypedFieldForValue, resolveFieldKeyType, getErrorMessageForTypedFieldAndValue } from './typedListHelpers';
import { jsx as ___EmotionJSX } from "@emotion/react";
const ObjectControl = DecapCmsWidgetObject.controlComponent;
const ListItem = /*#__PURE__*/_styled("div", {
target: "e11zrb3c2",
label: "ListItem"
})(process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3Q2lCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */");
const StyledListItemTopBar = /*#__PURE__*/_styled(ListItemTopBar, {
target: "e11zrb3c1",
label: "StyledListItemTopBar"
})("background-color:", colors.textFieldBorder, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQ21EIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiA