nsc-react-component 4.1.27 → 4.1.28
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.
|
@@ -296,7 +296,7 @@ class BasePage extends PureComponent {
|
|
|
296
296
|
tableProps = {}
|
|
297
297
|
} = this.props;
|
|
298
298
|
const {
|
|
299
|
-
store: tableStore
|
|
299
|
+
store: tableStore = {}
|
|
300
300
|
} = tableProps;
|
|
301
301
|
let queryParams = this.convertQueryParams();
|
|
302
302
|
let data = queryParams.data || queryParams.params || {};
|
|
@@ -840,9 +840,17 @@ class BasePage extends PureComponent {
|
|
|
840
840
|
title: treeTitle
|
|
841
841
|
} = treeProps,
|
|
842
842
|
othertreeParams = _objectWithoutProperties(treeProps, _excluded8);
|
|
843
|
+
let _this = this;
|
|
843
844
|
let tableParams = _objectSpread({
|
|
844
845
|
filterColumn,
|
|
845
|
-
store: _objectSpread({
|
|
846
|
+
store: _objectSpread({
|
|
847
|
+
listeners: {
|
|
848
|
+
load: data => {
|
|
849
|
+
var _this$props$onCallBac6, _this$props$onCallBac7;
|
|
850
|
+
((_this$props$onCallBac6 = _this.props.onCallBacks) === null || _this$props$onCallBac6 === void 0 ? void 0 : _this$props$onCallBac6.tableLoadCallBack) && ((_this$props$onCallBac7 = _this.props.onCallBacks) === null || _this$props$onCallBac7 === void 0 ? void 0 : _this$props$onCallBac7.tableLoadCallBack(data));
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
}, newTableStore)
|
|
846
854
|
}, othertableParams);
|
|
847
855
|
const defaultValue = {};
|
|
848
856
|
const columnButtons = [];
|
|
@@ -958,8 +966,8 @@ class BasePage extends PureComponent {
|
|
|
958
966
|
return;
|
|
959
967
|
}
|
|
960
968
|
this.showForm(null, null, () => {
|
|
961
|
-
var _this$props$
|
|
962
|
-
((_this$props$
|
|
969
|
+
var _this$props$onCallBac8, _this$props$onCallBac9;
|
|
970
|
+
((_this$props$onCallBac8 = this.props.onCallBacks) === null || _this$props$onCallBac8 === void 0 ? void 0 : _this$props$onCallBac8.onAddCallBack) && converFunction((_this$props$onCallBac9 = this.props.onCallBacks) === null || _this$props$onCallBac9 === void 0 ? void 0 : _this$props$onCallBac9.onAddCallBack, {
|
|
963
971
|
pageRef: this.props.pageRef,
|
|
964
972
|
funcs: this.props.funcs
|
|
965
973
|
}, this.props.Utils);
|
|
@@ -1179,8 +1187,8 @@ class BasePage extends PureComponent {
|
|
|
1179
1187
|
}, tableParams))))), editorForm && /*#__PURE__*/React.createElement(EditorForm, _extends({
|
|
1180
1188
|
ref: this.editorRef,
|
|
1181
1189
|
callBack: () => {
|
|
1182
|
-
var _this$props$
|
|
1183
|
-
((_this$props$
|
|
1190
|
+
var _this$props$onCallBac10, _this$props$onCallBac11;
|
|
1191
|
+
((_this$props$onCallBac10 = this.props.onCallBacks) === null || _this$props$onCallBac10 === void 0 ? void 0 : _this$props$onCallBac10.onSumbitCallBack) && converFunction((_this$props$onCallBac11 = this.props.onCallBacks) === null || _this$props$onCallBac11 === void 0 ? void 0 : _this$props$onCallBac11.onSumbitCallBack, {
|
|
1184
1192
|
pageRef: this.props.pageRef
|
|
1185
1193
|
}, this.props.Utils);
|
|
1186
1194
|
this.tableReload();
|
|
@@ -1207,4 +1215,4 @@ class BasePage extends PureComponent {
|
|
|
1207
1215
|
}
|
|
1208
1216
|
_defineProperty(BasePage, "convertColumns", convertColumns);
|
|
1209
1217
|
export default BasePage;
|
|
1210
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsIkRvd25PdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwiRWRpdE91dGxpbmVkIiwiUmlnaHRPdXRsaW5lZCIsIlBsdXNPdXRsaW5lZCIsIkVsbGlwc2lzT3V0bGluZWQiLCJEZWxldGVPdXRsaW5lZCIsImNvbnZlckZ1bmN0aW9uIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiZ2V0QnV0dG9uUGVybWlzc29ucyIsIkhlYWRlclNlYXJjaCIsImNvbnZlcnRDb2x1bW5zIiwiZ2V0TmV3Q29sdW1ucyIsInRocm90dGxlIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJ0YWJsZVdyYXBwZXJSZWYiLCJjdXJyZW50IiwidGFibGVIZWFkZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaGVhZGVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwidGFibGVIZWFkZXJIZWlnaHQiLCJzZXRTdGF0ZSIsImNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0Iiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJ0cmVlU2VhcmNoUHJhbXMiLCJwb3BvcGVucyIsIm1vcmVPcGVuIiwiZWxlbWVudEhlaWdodCIsInBlcm1pc3Npb25CdXR0b25zIiwicXVlcnlQYXJhbXMiLCJidXR0b25zTG9hZGluZyIsInRyZWVXaWR0aCIsInNob3dMZWZ0IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlQ29udGVudFJlZiQiLCJpbml0RGF0YSIsInBlcm1pc3NvbiIsInBhZ2VDb250ZW50UmVmIiwiY2xpZW50SGVpZ2h0Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQiLCJzZXRUaW1lb3V0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3RoaXMkcGFnZVJlZiRjdXJyZW50IiwicGFnZVJlZiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsImNhbGxCYWNrIiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlIiwic2VhcmNoUmVmIiwiZG9TdWJtaXQiLCJkYXRhIiwiX3RoaXMkZWRpdG9yUmVmJGN1cnJlIiwibGFiZWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJlZGl0b3JSZWYiLCJzaG93Rm9ybSIsIl90aGlzJGVkaXRvclJlZiIsImVkaXRvcmZsYWciLCJuZXdWYWx1ZSIsIl9vYmplY3RTcHJlYWQiLCJzaG93IiwiaGlkZUZvcm0iLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUyIiwic2V0TG9hZGluZyIsImxvYWRpbmciLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUzIiwic2V0RWRpdEZvcm1WYWx1ZXMiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmU0Iiwic2V0Rm9ybVZhbHVlIiwiZ2V0RWRpdEZvcm1WYWx1ZXMiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmU1IiwiZ2V0Rm9ybVZhbHVlIiwib25EZWxldGUiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4iLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4yIiwiZGVsZXRlVXJsIiwiZGVsZXRlUGFyYW1zIiwiZGVsZXRlUG9zaXRpb24iLCJidXR0b25DbGljayIsInJlcXVlc3RQYXJhbXMiLCJyZXF1ZXN0VXJscyIsInJlcXVlc3RDb25maWciLCJfdGhpcyIsInRhYmxlUmVmIiwiZ2V0U2VsZWN0ZWRSb3dLZXlzIiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsInVybCIsIndhcm5pbmciLCJjb25maXJtIiwib25PayIsInJlY29yZCIsImlkcyIsImlkIiwiZnVuY3MiLCJVdGlscyIsIkVycm9yIiwiZGF0YVBhcmFtcyIsIm90aGVyUGFyYW1zIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsImF1dG9QcmVmaXgiLCJqb2luIiwiZmluYWxQYXJhbXMiLCJ0aGVuIiwiY29kZSIsIl90aGlzJHNlYXJjaFJlZiIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzIiLCJzdWNjZXNzIiwiZ2V0U2VhcmNoVmFsdWVzIiwib25DYWxsQmFja3MiLCJvbkRlbGV0ZUNhbGxCYWNrIiwidGFibGVMb2FkIiwiZXJyb3IiLCJjYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJfdGFibGVTdG9yZSRyZXF1ZXN0Q28iLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4zIiwiZGVmYXVsdFJlcXVlc3RDb25maWciLCJ0YWJsZVByb3BzIiwic3RvcmUiLCJ0YWJsZVN0b3JlIiwiY29udmVydFF1ZXJ5UGFyYW1zIiwicmVxdWVzdENvbmlnIiwic3RvcmVDb25maWciLCJzdG9yZVBhcmFtcyIsIm90aGVyU3RvcmVDb25maWciLCJfZXhjbHVkZWQyIiwibG9hZCIsIl90YWJsZVN0b3JlJHJlcXVlc3RDbzIiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMzIiwib25RdWVyeUNhbGxCYWNrIiwidGFibGVSZWxvYWQiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW40IiwiYXV0b0xvYWQiLCJyZWxvYWQiLCJjYWxsYmFjayIsIl9yZXMkZGF0YSIsInJlY29yZHMiLCJjdXJyZW50UGFnZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjUiLCJ0cmVlTG9hZCIsIl90aGlzJHRyZWVSZWYkY3VycmVudCIsInRyZWVSZWYiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW42IiwiX3RoaXMkdGFibGVSZWYkY3VycmVuNyIsInNldFNlbGVjdGVkUm93S2V5cyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjgiLCJzZXRTZWxlY3RlZFJvd0RhdGFzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuOSIsInJlc2V0U2VsZWN0ZWRSb3dLZXlzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuMTAiLCJfdGhpcyRzZWFyY2hSZWYyIiwiZnJvbVZhbHVlIiwiZ2V0Q2hpbGRyZW5EYXRhIiwicm93S2V5IiwicmVzS2V5IiwiY2hpbGROb2RlcyIsImNoaWxkcmVuIiwibWFwIiwiaXRlbSIsImluZGV4IiwicmVuZGVyVG9vbEJ1dHRvbnMiLCJ0b29sYnV0dG9ucyIsInRvb2xiYXJGbGFnIiwiZmxhZyIsInNob3dTZWFyY2giLCJfaXRlbSRwcm9wcyIsInBhZ2VUeXBlIiwib25DbGljayIsImljb24iLCJfZXhjbHVkZWQzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIl9leHRlbmRzIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJ0aXRsZSIsInBsYWNlbWVudCIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJjb2x1bW5CdXR0b25zIiwicm93UmVjb3JkIiwiYWN0aW9uUHJvcHMiLCJiYXNlQWN0aW9uQ29sdW1uIiwibmV3QnV0dG9ucyIsInNob3dJY29uIiwiX2l0ZW0kcHJvcHMyIiwicmVjb3JkU2hvdyIsIl9leGNsdWRlZDQiLCJldmVudE9wdGlvbiIsIlVpdGxzIiwiZnVuYyIsIkZ1bmN0aW9uIiwicHVzaCIsImUiLCJldmFsIiwibnVtYmVyIiwiYnV0dG9uTnVtYmVyIiwiX2l0ZW0kcHJvcHMzIiwiX2V4Y2x1ZGVkNSIsIk51bWJlciIsIl9pdGVtJHByb3BzNCIsIl9leGNsdWRlZDYiLCJ0cmlnZ2VyIiwidHJlZVNlbGVjdCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsIl90aGlzJHNlYXJjaFJlZjMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM0IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNSIsImtleXdvcmQiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInRyZWVQcm9wcyIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRTZWFyY2giLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUyIiwicmVzZXRGaWVsZHMiLCJnZXRUZXh0IiwidGV4dCIsIl9wcm9wcyRkYXRhIiwibmV3VGV4dCIsImkiLCJzZXRUYWJsZURhdGEiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMSIsInNldERhdGEiLCJzZXRUcmVlRGF0YSIsIl90aGlzJHRyZWVSZWYkY3VycmVudDIiLCJjb252ZXJQYXJhbXMiLCJoYW5kbGVNb3VzZURvd24iLCJwcmV2ZW50RGVmYXVsdCIsIm1hc2siLCJkb2N1bWVudCIsImNzc1RleHQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJoYW5kbGVNb3VzZU1vdmUiLCJuZXdXaWR0aCIsInNjcmVlblgiLCJ0aHJvdHRsZWRNb3VzZU1vdmUiLCJoYW5kbGVNb3VzZVVwIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJlbmRlciIsIl90aGlzMiIsIl90YWJsZVByb3BzJHRvb2xiYXIiLCJfdGFibGVQcm9wcyR0b29sYmFyMiIsImNvbHVtbnMiLCJzdWJtaXRVcmwiLCJmb3JtUHJvcHMiLCJmb3JtUGFnZVByb3BzIiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJwZXJtaXNzaW9uIiwiaGFzIiwiZmlsdGVyQ29sdW1uIiwiYWN0aW9uQ29sdW1uIiwic2hvd1Jvd1NlbGVjdGlvbiIsImNvbHVtbk9yZGVyIiwiZXhwYW5kYWJsZSIsInRhYmxlVGl0bGUiLCJvdGhlcnRhYmxlUGFyYW1zIiwiX2V4Y2x1ZGVkNyIsIm5ld1RhYmxlU3RvcmUiLCJfbmV3VGFibGVTdG9yZSRyZXF1ZXMiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsInRyZWVUaXRsZSIsIm90aGVydHJlZVBhcmFtcyIsIl9leGNsdWRlZDgiLCJ0YWJsZVBhcmFtcyIsImRlZmF1bHRWYWx1ZSIsIm1lbnVDb2RlIiwicGVybWlzc29ucyIsInRhYmxlQ29sdW1uIiwic2VhcmNoRm9ybXMiLCJlZGl0b3JGb3JtcyIsInRvb2xCdXR0b25zIiwiYnV0dG9uTWFwIiwiZWRpdG9yIiwiZGVsZXRlIiwic2VhcmNoIiwicmV0dXJuQnV0dG9uIiwiX2J1dHRvbk1hcCRjb2RlIiwiZGVmYXVsdFByb3BzIiwib25FZGl0b3IiLCJfdGhpczIkcHJvcHMkb25DYWxsQmEiLCJfdGhpczIkcHJvcHMkb25DYWxsQmEyIiwib25FZGl0b3JDYWxsQmFjayIsIm9uU2VhcmNoQ2FsbEJhY2siLCJjaGVja1BlcnNzaW9uIiwiaW5kZXhPZiIsIm9uQWRkIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNiIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzciLCJvbkFkZENhbGxCYWNrIiwiYmluZCIsImRhbmdlciIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkIiwiX2NoaWxkJHByb3BzIiwiX2NoaWxkJHByb3BzMiIsIl9jaGlsZCRwcm9wczMiLCJfY2hpbGQkcHJvcHM0IiwiX2NoaWxkJHByb3BzNSIsIl9pdGVtJHByb3BzNSIsIl9pdGVtJHByb3BzNiIsIl9pdGVtJHByb3BzNyIsIl9pdGVtJHByb3BzOCIsIl9pdGVtJHByb3BzOSIsImRhdGFJbmRleCIsImFsaWduIiwidGV4dEFsaWduIiwid2lkdGgiLCJmaXhlZCIsInJlYWNvcmQiLCJGcmFnbWVudCIsInNlYXJjaEZsYWciLCJ0YWJsZVRvb2wiLCJ0b29sRmxhZyIsInRvb2xiYXIiLCJ0b29scyIsInRvb2xIZWlnaHQiLCJwYWRkaW5nSGVpZ2h0IiwidGFibGVDb250ZW50SGVpZ2h0IiwiUGFnaW5hdGlvbkhlaWdodCIsInBhZ2luYXRpb24iLCJ0YWJsZUhlaWdodCIsInRhYmxlU3JvbGxIZWlnaHQiLCJzY3JvbGwiLCJ4IiwieSIsInJlZiIsInBhZ2VUaXRsZSIsImRpc3BsYXkiLCJvbk1vdXNlRG93biIsImNoZWNrYWJsZSIsInNlYXJjaGFibGUiLCJvblNlbGVjdCIsImNvbmNhdCIsIm9uUmVzZXQiLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUzIiwic2VhcmNoRm9ybVByb3BzIiwiZXhwYW5kSWNvbiIsIl9yZWYiLCJfcmVjb3JkJGNoaWxkTm9kZXMiLCJfcmVjb3JkJGNoaWxkTm9kZXMyIiwiZXhwYW5kZWQiLCJvbkV4cGFuZCIsIm9uQ2hhbmdlIiwib25Ub29sQ2xpY2siLCJvblJlZnJlc2giLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM4IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjOSIsIm9uU3VtYml0Q2FsbEJhY2siLCJmb3JtcyIsIm9uU3VibWl0Iiwib25IaWRlRm9ybSIsIm9uRm9ybUNoYW5nZSIsImNoYW5nZVZhbGlkIiwicmVxdWVzdE9iamVjdCIsImFkZFVybCIsImVkaXRvclVybCIsImFkZFBhcmFtcyIsImVkaXRvclBhcmFtcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9iYXNlL3RhYmxlXCI7XHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi9iYXNlL3RyZWVcIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYmFzZS9idXR0b25cIjtcclxuaW1wb3J0IE1vZGFsIGZyb20gXCIuLi8uLi9iYXNlL21vZGFsXCI7XHJcbmltcG9ydCBQb3BvdmVyIGZyb20gXCIuLi8uLi9iYXNlL3BvcG92ZXJcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uLy4uL2Jhc2UvbWVzc2FnZVwiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSwgeyBGb3JtUGFnZVByb3BzIH0gZnJvbSBcIi4uL0Zvcm1QYWdlL2luZGV4XCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgRWxsaXBzaXNPdXRsaW5lZCxcclxuICBEZWxldGVPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgY29udmVyRnVuY3Rpb24sIGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHB4MnZ3LCBnZXRCdXR0b25QZXJtaXNzb25zIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgbnNjZmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW1wb3J0IHsgY29udmVydENvbHVtbnMsIGdldE5ld0NvbHVtbnMgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuaW1wb3J0IHRocm90dGxlIGZyb20gXCJsb2Rhc2gvdGhyb3R0bGVcIjtcclxudHlwZSBCdXR0b25JdGVtID1cclxuICB8IHN0cmluZ1xyXG4gIHwge1xyXG4gICAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICAgIHJlY29yZFNob3c/OiBzdHJpbmcgfCBGdW5jdGlvbjtcclxuICAgICAgcHJvcHM/OiBhbnk7XHJcbiAgICB9O1xyXG5cclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66L+H5ruk5oyJ6ZKuXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm6KGo5qC85Yu+6YCJ5YiXXHJcbiAgcGFnaW5hdGlvbj86IGJvb2xlYW4gfCBQYWdpbmF0aW9uUHJvcHM7IC8v5piv5ZCm5pi+56S65YiG6aG1XHJcbiAgY29sdW1uT3JkZXI/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuihqOagvOW6j+WIl1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5jb25zdCBzdHlsZXMgPSBudWxsO1xyXG5pbnRlcmZhY2UgVHJlZVByb3BzIHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pCc57Si5qGGXHJcbiAgc2VhcmNoS2V5Pzogc3RyaW5nOyAvL+aQnOe0onZhbHVl5a+55bqU55qEa2V5XHJcbiAgc2VhcmNoRmllbGQ/OiBzdHJpbmc7IC8v5p+l6K+i5a+55bqU55qEa2V5XHJcbiAgdGl0bGVBbGlhcz86IHN0cmluZzsgLy/moJF0aXRsZeWvueW6lOeahGtleSzpu5jorqR0aXRsZVxyXG4gIG5vZGVQb3Jwcz86IG9iamVjdDtcclxuICBwYXJhbnRTZWxlY3Q/OiBib29sZWFuO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgRm9ybVByb3BzIGV4dGVuZHMgRm9ybVBhZ2VQcm9wcyB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOU0NCYXNlQmFnZVByb3BzIHtcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlpLTpg6jmkJzntKLmoI9cclxuICB0YWJsZVByb3BzPzogVGFibGVQcm9wczsgLy/ooajmoLzlj4LmlbBcclxuICB0cmVlUHJvcHM/OiBUcmVlUHJvcHM7IC8v5bem5L6n5qCR5Y+C5pWwXHJcbiAgc3VibWl0UGFyYW1zPzogT2JqZWN0OyAvL+a3u+WKoOWPguaVsO+8jOm7mOiupG1vdGhvZDpwb3N077yMIOWPguaVsOmAmui/h2RhdGHkvKDpgJJcclxuICBzdWJtaXRVcmw/OiBzdHJpbmc7XHJcbiAgb25TdWJtaXQ/OiAodmFsdWU/OiBhbnksIGxhYmVsPzogYW55KSA9PiB2b2lkO1xyXG4gIGNvbHVtbnM/OiBBcnJheTxPYmplY3Q+O1xyXG4gIHNob3dMZWZ0PzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlt6bkvqfnm67lvZXmoJFcclxuICBzaG93VG9vbEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65oyJ6ZKu5qCPXHJcbiAgZWRpdG9yRm9ybT86IGJvb2xlYW47IC8v5piv5ZCm6ZyA6KaB6KGo5Y2V5Yqf6IO9ICwg5Li6ZmFsc2Ug57yW6L6R77yM5p+l55yL77yM5paw5aKe5Yqf6IO95Z2H5LiN5Y+v55SoXHJcbiAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIG9uRGVsZXRlPzogKHNlbGVjdGVkS2V5cz86IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7IC8v5Yig6Zmk5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HaWRz5ou85o6l5Lyg6YCS57uZ5ZCO5Y+wXHJcbiAgZGVsZXRlUG9zaXRpb24/OiBcInRvb2xiYXJcIiB8IFwicm93XCI7XHJcbiAgZGVsZXRlUGFyYW1zPzogT2JqZWN0O1xyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xyXG4gIGluaXREYXRhPzogYW55OyAvL+WIneWni+WMluWbnuiwg+WHveaVsO+8jOWcqGNvbXBvbmVudERpZE1vdW505Lit6LCD55SoXHJcbiAgYnV0dG9ucz86IEJ1dHRvbkl0ZW1bXTsgLy/mjInpkq7pm4blkIggIFsnYWRkJywnZGVsZXRlJywnc2VhcmNoJywnZWRpdG9yJ11cclxuICBvblNob3dGb3JtPzogKHZhbHVlPzogYW55LCBlZGl0b3JGbGFnPzogc3RyaW5nKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uSGlkZUZvcm0/OiAoKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uRm9ybUNoYW5nZT86IChjaGFuZ2VkVmFsdWVzPzogYW55LCBhbGxWYWx1ZXM/OiBhbnkpID0+IHZvaWQ7IC8v6KGo5Y2Vb25DaGFuZ2Xlm57osINcclxuICBmb3JtVHlwZT86IFwibW9kYWxcIiB8IFwiZHJhd2VyXCI7XHJcbiAgZm9ybUNoYW5nZVZhbGlkPzogYm9vbGVhbjsgLy/ooajljZXmoKHpqoxcclxuICBjbGFzc05hbWU/OiBhbnk7XHJcbiAgdG9vbEJ1dHRvblBvc2l0aW9uPzogXCJyaWdodFwiIHwgXCJidXR0b21cIjtcclxuICBwYWdlVGl0bGU/OiBzdHJpbmcgfCBSZWFjdE5vZGU7XHJcbiAgZm9ybVByb3BzPzogRm9ybVByb3BzO1xyXG4gIGFjdGlvblByb3BzPzoge1xyXG4gICAgdGV4dEFsaWduPzogc3RyaW5nO1xyXG4gICAgc2hvd0ljb24/OiBib29sZWFuO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBidXR0b25OdW1iZXI/OiBudW1iZXIgfCBcImFsbFwiO1xyXG4gIH07XHJcbiAgc2VhcmNoRm9ybVByb3BzPzogeyB3cmFwcGVyQ29sPzogYW55OyBsYWJlbENvbD86IGFueSB9O1xyXG4gIG9uVHJlZVNlbGVjdD86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkNhbGxCYWNrcz86IHtcclxuICAgIHRyZWVTZWxlY3RDYWxsQmFjaz86IGFueTsgLy/moJHngrnlh7vmn6Xor6LlkI7lm57osINcclxuICAgIG9uUXVlcnlDYWxsQmFjaz86IGFueTsgLy/mn6Xor6Llm57osIPvvIzmn6Xor6LmlbDmja7lkI7lm57osINcclxuICAgIG9uU3VtYml0Q2FsbEJhY2s/OiBhbnk7IC8v5L+d5a2Y5Zue6LCD77yM5L+d5a2Y5pWw5o2u5oiQ5Yqf5ZCO5Zue6LCDXHJcbiAgICBvbkRlbGV0ZUNhbGxCYWNrPzogYW55OyAvL+WIoOmZpOaMiemSruWbnuiwg++8jOWIoOmZpOaVsOaNruWQjuaJp+ihjFxyXG4gICAgb25FZGl0b3JDYWxsQmFjaz86IGFueTsgLy/nvJbovpHmjInpkq7lm57osIPvvIzmiZPlvIDlvLnmoYblkI7miafooYxcclxuICAgIG9uQWRkQ2FsbEJhY2s/OiBhbnk7IC8v5re75Yqg5oyJ6ZKu5Zue6LCD77yM5omT5byA5by55qGG5ZCO5omn6KGMXHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55OyAvL+WIl+ihqOafpeivouaMiemSruWbnuiwg++8jOaJk+W8gOW8ueahhuWQjuaJp+ihjFxyXG4gIH07XHJcbiAgcGFnZVR5cGU/OiBcIm5vcm1hbFwiIHwgXCJ0YWJzcGFnZVwiO1xyXG4gIGZvcm1QYWdlUHJvcHM/OiB7fTtcclxuICBidXR0b25DbGljaz86IHtcclxuICAgIG9uQWRkPzogKCkgPT4gdm9pZDtcclxuICAgIG9uRWRpdG9yPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gICAgb25TZWFyY2g/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgICBvbkRlbGV0ZT86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICB9O1xyXG4gIHBlcm1pc3Npb24/OiB7XHJcbiAgICBoYXM/OiBib29sZWFuO1xyXG4gICAgbWVudUNvZGU/OiBzdHJpbmc7XHJcbiAgfTtcclxuICByZXF1ZXN0UGFyYW1zPzoge1xyXG4gICAgLy/pnIDopoHpop3lpJbkvKDnmoTlm7rlrpror7fmsYLlj4LmlbBcclxuICAgIGFkZFBhcmFtcz86IE9iamVjdDsgLy/mlrDlop7lm7rlrprlj4LmlbBcclxuICAgIGVkaXRvclBhcmFtcz86IE9iamVjdDsgLy/nvJbovpHlm7rlrprlj4LmlbBcclxuICAgIHF1ZXJ5UGFyYW1zPzogT2JqZWN0OyAvL+afpeivouWbuuWumuWPguaVsFxyXG4gICAgZGVsZXRlUGFyYW1zPzogT2JqZWN0OyAvL+WIoOmZpOWbuuWumuWPguaVsFxyXG4gIH07XHJcbiAgcmVxdWVzdFVybHM/OiB7XHJcbiAgICBhZGRVcmw/OiBzdHJpbmc7IC8v5paw5aKedXJsXHJcbiAgICBlZGl0b3JVcmw/OiBzdHJpbmc7IC8v57yW6L6RdXJsXHJcbiAgICBkZWxldGVVcmw/OiBzdHJpbmc7IC8v5Yig6ZmkdXJsXHJcbiAgfTtcclxuICBmdW5jcz86IGFueTtcclxuICByZXF1ZXN0Q29uZmlnPzogYW55O1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuY2xhc3MgQmFzZVBhZ2UgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PE5TQ0Jhc2VCYWdlUHJvcHMsIGFueT4ge1xyXG4gIHRhYmxlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICB0cmVlUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBzZWFyY2hSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGVkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgcGFnZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgcGFnZUNvbnRlbnRSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGRhdGVGb3JtYXQgPSB7fSBhcyBhbnk7XHJcbiAgdGFibGVXcmFwcGVyUmVmID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xyXG4gIHN0YXRpYyBjb252ZXJ0Q29sdW1ucyA9IGNvbnZlcnRDb2x1bW5zO1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCB7IHN0b3JlUHJlZml4IH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0eXBlID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJmb3JtVHlwZVwiIDogXCJmb3JtVHlwZVwiXHJcbiAgICApO1xyXG4gICAgdHlwZSA9IHR5cGU/LmNvbnRlbnQ7XHJcbiAgICBsZXQgc2l6ZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwidGFibGVTaXplXCIgOiBcInRhYmxlU2l6ZVwiXHJcbiAgICApO1xyXG4gICAgc2l6ZSA9IHNpemU/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICB0eXBlOiBcImFkZFwiLFxyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgICAgdHJlZVNlbGVjdGVkS2V5OiBcIlwiLFxyXG4gICAgICBleHBhbmQ6IGZhbHNlLFxyXG4gICAgICBmb3JtVHlwZTogdHlwZSB8fCBcIm1vZGFsXCIsXHJcbiAgICAgIHRhYmxlU2l6ZTogc2l6ZSB8fCBcImRlZmF1bHRcIixcclxuICAgICAgdHJlZVNlYXJjaFByYW1zOiB7fSxcclxuICAgICAgcG9wb3BlbnM6IHt9LFxyXG4gICAgICBtb3JlT3BlbjogZmFsc2UsXHJcbiAgICAgIGVsZW1lbnRIZWlnaHQ6IDAsXHJcbiAgICAgIHBlcm1pc3Npb25CdXR0b25zOiBbXSxcclxuICAgICAgcXVlcnlQYXJhbXM6IHt9LFxyXG4gICAgICB0YWJsZUhlYWRlckhlaWdodDogMCwgLy8g5re75Yqg6KGo5aS06auY5bqm5Yiwc3RhdGVcclxuICAgICAgYnV0dG9uc0xvYWRpbmc6IHt9LFxyXG4gICAgICB0cmVlV2lkdGg6IHRoaXMucHJvcHMuc2hvd0xlZnQgPyAyNjAgOiAwLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBpbml0RGF0YSwgcGVybWlzc29uID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdGhpcy5wYWdlQ29udGVudFJlZi5jdXJyZW50Py5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgLy8g5re75Yqg56qX5Y+jcmVzaXpl55uR5ZCsXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLnRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQpO1xyXG5cclxuICAgIC8vIOWIneWni+iuoeeul+ihqOWktOmrmOW6plxyXG4gICAgc2V0VGltZW91dCh0aGlzLmNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0LCAwKTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgZWxlbWVudEhlaWdodCxcclxuICAgIH0pO1xyXG4gICAgaW5pdERhdGEgJiYgaW5pdERhdGEoKTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgY29uc3QgZWxlbWVudEhlaWdodCA9IHRoaXMucGFnZVJlZi5jdXJyZW50Py5jbGllbnRIZWlnaHQ7XHJcbiAgICBpZiAoZWxlbWVudEhlaWdodCA+IHRoaXMuc3RhdGUuZWxlbWVudEhlaWdodCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBlbGVtZW50SGVpZ2h0LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAvLyDnp7vpmaRyZXNpemXnm5HlkKxcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICBcInJlc2l6ZVwiLFxyXG4gICAgICB0aGlzLnRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHRcclxuICAgICk7XHJcbiAgfVxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG4gIGRvU3VibWl0KGRhdGEsIGxhYmVsID0gXCLnvJbovpFcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZG9TdWJtaXQoZGF0YSwgbGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAoY2hlY2tlZFRyZWVLZXlzOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHsgbmFtZSwgdXNlclR5cGUsIGFjY291bnQsIGRlcHRJZDogY2hlY2tlZFRyZWVLZXlzWzBdIH07XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblNlYXJjaCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBlZGl0b3JmbGFnID0gXCJhZGRcIiwgY2FsbEJhY2s/OiBhbnkpIHtcclxuICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlID8geyAuLi52YWx1ZSB9IDogbnVsbDtcclxuICAgIHRoaXMuZWRpdG9yUmVmPy5jdXJyZW50Py5zaG93KG5ld1ZhbHVlLCBlZGl0b3JmbGFnLCBjYWxsQmFjayk7XHJcbiAgfVxyXG5cclxuICAvL+WFs+mXreihqOWNlVxyXG4gIGhpZGVGb3JtKCkge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uaGlkZUZvcm0oKTtcclxuICB9XHJcblxyXG4gIHNldExvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2V0TG9hZGluZyhsb2FkaW5nKTtcclxuICB9XHJcblxyXG4gIHNldEVkaXRGb3JtVmFsdWVzKHZhbHVlLCB0eXBlID0gXCLnvJbovpFcIikge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2V0Rm9ybVZhbHVlKHZhbHVlLCB0eXBlKTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRGb3JtVmFsdWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEZvcm1WYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy/mibnph4/liKDpmaRcclxuICBvbkRlbGV0ZShkYXRhPzogYW55KSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGRlbGV0ZVVybCxcclxuICAgICAgb25EZWxldGUsXHJcbiAgICAgIGRlbGV0ZVBhcmFtcyA9IHt9LFxyXG4gICAgICBkZWxldGVQb3NpdGlvbiA9IFwidG9vbGJhclwiLFxyXG4gICAgICBidXR0b25DbGljayA9IHt9LFxyXG4gICAgICByZXF1ZXN0UGFyYW1zID0ge30sXHJcbiAgICAgIHJlcXVlc3RVcmxzID0ge30sXHJcbiAgICAgIHJlcXVlc3RDb25maWcgPSB7fSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGNvbnN0IHNlbGVjdGVkUm93S2V5cyA9IHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0RhdGFzID0gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0RhdGFzKCk7XHJcbiAgICBsZXQgdXJsID0gcmVxdWVzdFVybHMuZGVsZXRlVXJsID8gcmVxdWVzdFVybHMuZGVsZXRlVXJsIDogZGVsZXRlVXJsO1xyXG4gICAgbGV0IHBhcmFtczogYW55ID0gcmVxdWVzdFBhcmFtcy5kZWxldGVQYXJhbXNcclxuICAgICAgPyByZXF1ZXN0UGFyYW1zLmRlbGV0ZVBhcmFtc1xyXG4gICAgICA6IGRlbGV0ZVBhcmFtcztcclxuICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBpZiAoYnV0dG9uQ2xpY2sub25EZWxldGUpIHtcclxuICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICBidXR0b25DbGljay5vbkRlbGV0ZSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICByZWNvcmQ6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dEYXRhcyA6IGRhdGEsXHJcbiAgICAgICAgICAgICAgaWRzOiBkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93S2V5cyA6IGRhdGE/LmlkLFxyXG4gICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZ1bmNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgICAgIG9uRGVsZXRlICYmXHJcbiAgICAgICAgICAgIG9uRGVsZXRlKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzIDogZGF0YSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgZGF0YTogZGF0YVBhcmFtcyA9IHt9LCAuLi5vdGhlclBhcmFtcyB9ID0gcGFyYW1zO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgYXV0b1ByZWZpeDogdHJ1ZSxcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBpZHM6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzLmpvaW4oKSA6IGRhdGEuaWQsXHJcbiAgICAgICAgICAgIC4uLmRhdGFQYXJhbXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBmaW5hbFBhcmFtcyA9IHt9IGFzIGFueTtcclxuICAgICAgICBmaW5hbFBhcmFtcyA9IHsgLi4uZGVmYXVsdFBhcmFtcywgLi4ub3RoZXJQYXJhbXMgfTtcclxuICAgICAgICByZXF1ZXN0KHVybCwge1xyXG4gICAgICAgICAgLi4uZmluYWxQYXJhbXMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3VjY2VzcyhcIuWIoOmZpOaIkOWKn++8gVwiKTtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRGVsZXRlQ2FsbEJhY2ssXHJcbiAgICAgICAgICAgICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgX3RoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5Yig6Zmk5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgcmVxdWVzdENvbmZpZzogZGVmYXVsdFJlcXVlc3RDb25maWcgPSB7fSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgc3RvcmU6IHRhYmxlU3RvcmUgPSB7fSB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgIGxldCBkYXRhID0gcXVlcnlQYXJhbXMuZGF0YSB8fCBxdWVyeVBhcmFtcy5wYXJhbXMgfHwge307XHJcblxyXG4gICAgbGV0IGZpbmFsUGFyYW1zID0ge1xyXG4gICAgICAuLi5kYXRhLFxyXG4gICAgICAuLi50YWJsZVN0b3JlLnJlcXVlc3RDb25maWc/LnBhcmFtcyxcclxuICAgICAgLi4ucGFyYW1zLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHsgcmVxdWVzdENvbmlnOiBzdG9yZUNvbmZpZyA9IHt9IH0gPSB0YWJsZVN0b3JlO1xyXG4gICAgY29uc3QgeyBwYXJhbXM6IHN0b3JlUGFyYW1zID0ge30sIC4uLm90aGVyU3RvcmVDb25maWcgfSA9IHN0b3JlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgLi4uZGVmYXVsdFJlcXVlc3RDb25maWcsXHJcbiAgICAgIC4uLm90aGVyU3RvcmVDb25maWcsXHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogeyAuLi5zdG9yZVBhcmFtcywgLi4uZmluYWxQYXJhbXMgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKHBhcmFtcykge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBvblNlYXJjaCxcclxuICAgICAgb25DYWxsQmFja3MsXHJcbiAgICAgIHJlcXVlc3RQYXJhbXMgPSB7fSxcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHN0b3JlOiB0YWJsZVN0b3JlIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IHF1ZXJ5UGFyYW1zOiBhbnkgPSB0aGlzLmNvbnZlcnRRdWVyeVBhcmFtcygpO1xyXG4gICAgbGV0IGRhdGEgPSBxdWVyeVBhcmFtcy5kYXRhIHx8IHF1ZXJ5UGFyYW1zLnBhcmFtcyB8fCB7fTtcclxuICAgIGxldCBmaW5hbFBhcmFtcyA9IHtcclxuICAgICAgLi4uZGF0YSxcclxuICAgICAgLi4udGFibGVTdG9yZS5yZXF1ZXN0Q29uZmlnPy5wYXJhbXMsXHJcbiAgICAgIC4uLnBhcmFtcyxcclxuICAgIH07XHJcbiAgICBpZiAob25TZWFyY2gpIHtcclxuICAgICAgb25TZWFyY2goeyAuLi5maW5hbFBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGFibGVMb2FkKHsgLi4uZmluYWxQYXJhbXMsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH0pO1xyXG4gICAgb25DYWxsQmFja3M/Lm9uUXVlcnlDYWxsQmFjayAmJlxyXG4gICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblF1ZXJ5Q2FsbEJhY2ssXHJcbiAgICAgICAgeyBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsIHBhcmFtczogcGFyYW1zIH0sXHJcbiAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICApO1xyXG4gIH1cclxuICAvL+ihqOagvOmHjeaWsOWKoOi9vVxyXG4gIHRhYmxlUmVsb2FkKHBhcmFtcyA9IHt9LCBhdXRvTG9hZCA9IHRydWUpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnJlbG9hZCh7XHJcbiAgICAgIGNhbGxiYWNrOiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYXV0b0xvYWQgJiZcclxuICAgICAgICAgIHJlcz8uZGF0YT8ucmVjb3Jkcz8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgIT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnJlbG9hZCh7XHJcbiAgICAgICAgICAgIHBhcmFtczogeyBjdXJyZW50OiAxLCAuLi5wYXJhbXMgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICB0cmVlTG9hZChwYXJhbXM6IGFueSwgcmVxdWVzdENvbmZpZyA9IHt9KSB7XHJcbiAgICBjb25zdCB7IHJlcXVlc3RDb25maWc6IGRlZmF1bHRSZXF1ZXN0Q29uZmlnID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICB0aGlzLnRyZWVSZWYuY3VycmVudD8uc3RvcmUubG9hZCh7XHJcbiAgICAgIC4uLmRlZmF1bHRSZXF1ZXN0Q29uZmlnLFxyXG4gICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxyXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dEYXRhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93RGF0YXMoKTtcclxuICB9XHJcbiAgc2V0U2VsZWN0ZWRSb3dLZXlzKGRhdGE6IEFycmF5PFN0cmluZyB8IE51bWJlcj4pIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkUm93S2V5cyhkYXRhKTtcclxuICB9XHJcbiAgc2V0U2VsZWN0ZWRSb3dEYXRhcyhkYXRhOiBBcnJheTxPYmplY3Q+KSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGEpO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnJlc2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICByZXR1cm4geyAuLi5mcm9tVmFsdWUsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH07XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZHJlbkRhdGEoZGF0YSwga2V5cyA9IFtdKSB7XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCByZXNLZXkgPSBbXTtcclxuICAgIGxldCBrZXkgPSBcIlwiO1xyXG4gICAgaWYgKGRhdGEuY2hpbGROb2Rlcykge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEuY2hpbGROb2RlcztcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm93S2V5ID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAga2V5ID0gcm93S2V5KGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBrZXkgPSBpdGVtW3Jvd0tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5EYXRhKGl0ZW0uY2hpbGROb2Rlcywga2V5cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXNLZXkgPSBbLi4ua2V5cywga2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNLZXk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJUb29sQnV0dG9ucyh0b29sYnV0dG9uczogYW55LCB0b29sYmFyRmxhZykge1xyXG4gICAgY29uc3QgZmxhZyA9IHRvb2xidXR0b25zLmxlbmd0aCA+IDU7XHJcbiAgICBjb25zdCB7IHNob3dTZWFyY2ggPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgY29udGVudCA9IHRvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9IGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IDMpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIG1vcmVPcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICAgIHR5cGU9e1wibGlua1wifVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdG9vbC1idXR0b25zXCIpKX1cclxuICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAwIH19XHJcbiAgICAgID5cclxuICAgICAgICB7dG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAxMixcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge2l0ZW19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgIG9wZW49e3RoaXMuc3RhdGUubW9yZU9wZW59XHJcbiAgICAgICAgICAgICAgICAgIG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3Blbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVPcGVuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlT3BlbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIC8vIG9wZW49e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wLWJveCddfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAg5pu05aSaIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IGluZGV4ID09IHRvb2xidXR0b25zLmxlbmd0aCAtIDEgPyAwIDogMTIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtpdGVtfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zOiBhbnksIHJvd1JlY29yZDogYW55KSB7XHJcbiAgICBjb25zdCB7IGFjdGlvblByb3BzLCB0YWJsZVByb3BzID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQga2V5ID0gXCJcIjtcclxuICAgIGlmICh0eXBlb2Ygcm93S2V5ID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBrZXkgPSByb3dLZXkocm93UmVjb3JkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9IHJvd1JlY29yZFtyb3dLZXldO1xyXG4gICAgfVxyXG4gICAgbGV0IHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBpZiAoYWN0aW9uUHJvcHM/LnNob3dJY29uID09PSB0cnVlIHx8IGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IHRydWUpXHJcbiAgICAgIHNob3dJY29uID0gdHJ1ZTtcclxuICAgIGNvbHVtbkJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHJlY29yZFNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAocmVjb3JkU2hvdykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmVjb3JkU2hvdyA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudE9wdGlvbiA9IHtcclxuICAgICAgICAgICAgICByZWNvcmQ6IHJvd1JlY29yZCxcclxuICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IFV0aWxzID0geyAuLi50aGlzLnByb3BzLlVpdGxzIH07XHJcbiAgICAgICAgICAgIGxldCBmdW5jID0gbmV3IEZ1bmN0aW9uKFwiZXZlbnRPcHRpb24sVXRpbHNcIiwgcmVjb3JkU2hvdyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNob3cgPSBmdW5jKGV2ZW50T3B0aW9uLCBVdGlscyk7XHJcbiAgICAgICAgICAgIHNob3cgJiYgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsZXQgcmVjb3JkID0gcm93UmVjb3JkO1xyXG4gICAgICAgICAgICBpZiAoZXZhbChyZWNvcmRTaG93KSkge1xyXG4gICAgICAgICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBjb25zdCBzaG93ID0gcmVjb3JkU2hvdyhyb3dSZWNvcmQpO1xyXG4gICAgICAgICAgc2hvdyAmJiBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgbnVtYmVyID0gYWN0aW9uUHJvcHM/LmJ1dHRvbk51bWJlclxyXG4gICAgICA/IGFjdGlvblByb3BzPy5idXR0b25OdW1iZXJcclxuICAgICAgOiBiYXNlQWN0aW9uQ29sdW1uPy5idXR0b25OdW1iZXJcclxuICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uPy5idXR0b25OdW1iZXJcclxuICAgICAgOiAzO1xyXG4gICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgIGlmIChudW1iZXIgPT0gXCJhbGxcIikge1xyXG4gICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmbGFnID0gbmV3QnV0dG9ucy5sZW5ndGggPiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiBOdW1iZXIobnVtYmVyKSAtIDEpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi50aGlzLnN0YXRlLnBvcG9wZW5zIH07XHJcbiAgICAgICAgICAgICAgZGF0YVtyb3dSZWNvcmQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBwb3BvcGVuczogZGF0YSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socm93UmVjb3JkKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIGlmIChpbmRleCA8IG51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yLWZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socm93UmVjb3JkKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGljb249e2ljb259XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSBudW1iZXIpIHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9e1tcImNsaWNrXCJdfVxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgb3Blbj17dGhpcy5zdGF0ZS5wb3BvcGVuc1trZXldIHx8IGZhbHNlfVxyXG4gICAgICAgICAgICAgIG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi50aGlzLnN0YXRlLnBvcG9wZW5zIH07XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcG9wZW5zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcG9wZW5zOiB7fSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcCddfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpfT5cclxuICAgICAgICAgICAgICAgIDxFbGxpcHNpc091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yLWZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJvd1JlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgIHR5cGU9XCJsaW5rXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIC8v5qCR54K55Ye75LqL5Lu2XHJcbiAgdHJlZVNlbGVjdChzZWxlY3RlZEtleXM6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgIGxldCBrZXl3b3JkID0gXCJcIjtcclxuICAgIGNvbnN0IHtcclxuICAgICAgc2VhcmNoS2V5ID0gXCJrZXlcIixcclxuICAgICAgc2VhcmNoRmllbGQgPSBcIlwiLFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH0gPSBvYmo7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIGtleXdvcmQgPSBzZWxlY3RlZE5vZGVzWzBdLmRhdGFyZWYuYXR0cmlidXRlW3NlYXJjaEtleV07XHJcbiAgICAgIGlmIChwYXJhbnRTZWxlY3QpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7IFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2Rlc1swXS5pc0xlYWYgfHwgIXNlbGVjdGVkTm9kZXNbMF0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEtleXNbMF0gIT09IHRyZWVTZWxlY3RlZEtleSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHRyZWVTZWxlY3RlZEtleToga2V5d29yZCxcclxuICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLm9uVHJlZVNlbGVjdCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uVHJlZVNlbGVjdChzZWxlY3RlZEtleXMsIG9iaik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKSB8fCB7fTtcclxuICAgIHNlYXJjaEZpZWxkICYmIHRoaXMudGFibGVMb2FkKHsgLi4uZnJvbVZhbHVlLCBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0pO1xyXG4gICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrICYmXHJcbiAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjayxcclxuICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiwgc2VsZWN0ZWRLZXlzOiBzZWxlY3RlZEtleXMsIG9iajogb2JqIH0sXHJcbiAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICApO1xyXG4gICAgLy8gdXRpbHMuY2FsbGJhY2sodGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrLCB0aGlzLCBbXHJcbiAgICAvLyAgIHNlbGVjdGVkS2V5cyxcclxuICAgIC8vICAgb2JqLFxyXG4gICAgLy8gXSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VhcmNoKCkge1xyXG4gICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICB9XHJcbiAgZ2V0VGV4dChwcm9wcywgdGV4dCkge1xyXG4gICAgbGV0IG5ld1RleHQgPSB0ZXh0O1xyXG4gICAgaWYgKHByb3BzPy5kYXRhICYmIHByb3BzPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBkYXRhID0gcHJvcHMuZGF0YTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkYXRhW2ldLnZhbHVlID09IHRleHQpIHtcclxuICAgICAgICAgIG5ld1RleHQgPSBkYXRhW2ldLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1RleHQ7XHJcbiAgfVxyXG4gIHNldFRhYmxlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlPy5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBzZXRUcmVlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRyZWVSZWYuY3VycmVudD8uc3RvcmU/LnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkS2V5ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICBsZXQgcmVzID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IHNlbGVjdGVkW2tleV07XHJcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXMgPSBbLi4ucmVzLCAuLi5rZXlzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9O1xyXG5cclxuICBjb252ZXJ0UXVlcnlQYXJhbXMoKSB7XHJcbiAgICBjb25zdCB7IHJlcXVlc3RQYXJhbXMgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gcmVxdWVzdFBhcmFtcy5xdWVyeVBhcmFtcztcclxuICAgIGlmIChxdWVyeVBhcmFtcyAmJiB0eXBlb2YgcXVlcnlQYXJhbXMgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBjb25zdCBVdGlscyA9IHRoaXMucHJvcHMuVXRpbHMgfHwge307XHJcbiAgICAgIGxldCBmdW5jID0gbmV3IEZ1bmN0aW9uKFwiVXRpbHNcIiwgcXVlcnlQYXJhbXMpO1xyXG4gICAgICBsZXQgY29udmVyUGFyYW1zID0gZnVuYyhVdGlscyk7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zID0gY29udmVyUGFyYW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtcyB8fCB7fTtcclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vIOiuoeeul+ihqOWktOmrmOW6pueahOaWueazlVxyXG4gIGNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMudGFibGVXcmFwcGVyUmVmLmN1cnJlbnQpIHtcclxuICAgICAgY29uc3QgdGFibGVIZWFkZXIgPVxyXG4gICAgICAgIHRoaXMudGFibGVXcmFwcGVyUmVmLmN1cnJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgIFwiYW50LXRhYmxlLXRoZWFkXCJcclxuICAgICAgICApWzBdO1xyXG4gICAgICBpZiAodGFibGVIZWFkZXIpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0YWJsZUhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKGhlYWRlckhlaWdodCAhPT0gdGhpcy5zdGF0ZS50YWJsZUhlYWRlckhlaWdodCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHRhYmxlSGVhZGVySGVpZ2h0OiBoZWFkZXJIZWlnaHQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG4gIHRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQgPSB0aHJvdHRsZShcclxuICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQsXHJcbiAgICA1MDBcclxuICApO1xyXG5cclxuICAvLyDkvJjljJbmi5bmi73nm7jlhbPmlrnms5VcclxuICBoYW5kbGVNb3VzZURvd24oZTogUmVhY3QuTW91c2VFdmVudCkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIC8vIOWIm+W7uumBrue9qeWxguS7peWkhOeQhmlmcmFtZeWcuuaZr1xyXG4gICAgY29uc3QgbWFzayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBtYXNrLnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgei1pbmRleDogOTk5OTtcclxuICAgICAgY3Vyc29yOiBjb2wtcmVzaXplO1xyXG4gICAgYDtcclxuICAgIG1hc2suaWQgPSBcImRyYWctbWFza1wiO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYXNrKTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZTogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICBjb25zdCBuZXdXaWR0aCA9IGUuc2NyZWVuWDtcclxuICAgICAgLy8g6ZmQ5Yi25pyA5bCPMTAwcHjvvIzmnIDlpKc1MDBweFxyXG4gICAgICBpZiAobmV3V2lkdGggPj0gNTAgJiYgbmV3V2lkdGggPD0gODAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHRyZWVXaWR0aDogbmV3V2lkdGggfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgdGhyb3R0bGVkTW91c2VNb3ZlID0gdGhyb3R0bGUoaGFuZGxlTW91c2VNb3ZlLCAxNik7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aHJvdHRsZWRNb3VzZU1vdmUpO1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVNb3VzZVVwKTtcclxuICAgICAgLy8g56e76Zmk6YGu572p5bGCXHJcbiAgICAgIGNvbnN0IG1hc2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRyYWctbWFza1wiKTtcclxuICAgICAgaWYgKG1hc2spIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1hc2spO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhyb3R0bGVkTW91c2VNb3ZlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZU1vdXNlVXApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjb2x1bW5zID0gW10sXHJcbiAgICAgIHNob3dTZWFyY2ggPSB0cnVlLFxyXG4gICAgICBjaGlsZHJlbixcclxuICAgICAgc3VibWl0VXJsID0gXCJcIixcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgICB0cmVlUHJvcHMgPSB7fSxcclxuICAgICAgZm9ybVByb3BzID0ge30sXHJcbiAgICAgIGZvcm1QYWdlUHJvcHMgPSB7fSxcclxuICAgICAgc2hvd0xlZnQgPSBmYWxzZSxcclxuICAgICAgc3VibWl0UGFyYW1zID0ge30sXHJcbiAgICAgIHNob3dUb29sQnV0dG9uID0gdHJ1ZSxcclxuICAgICAgYnV0dG9ucyA9IFtdLFxyXG4gICAgICBlZGl0b3JGb3JtID0gdHJ1ZSxcclxuICAgICAgb25TaG93Rm9ybSxcclxuICAgICAgZm9ybUNoYW5nZVZhbGlkID0gdHJ1ZSxcclxuICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPSBcImJ1dHRvbVwiLFxyXG4gICAgICBhY3Rpb25Qcm9wcyxcclxuICAgICAgZGVsZXRlUG9zaXRpb24gPSBcInRvb2xiYXJcIixcclxuICAgICAgYnV0dG9uQ2xpY2sgPSB7fSxcclxuICAgICAgcGVybWlzc2lvbiA9IHsgaGFzOiBmYWxzZSB9LFxyXG4gICAgICByZXF1ZXN0UGFyYW1zID0ge30sXHJcbiAgICAgIHJlcXVlc3RVcmxzID0ge30sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRhYmxlU3RvcmUgPSB7fSxcclxuICAgICAgZmlsdGVyQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1NlbGVjdGlvbiA9IHRydWUsXHJcbiAgICAgIGNvbHVtbk9yZGVyID0gdHJ1ZSxcclxuICAgICAgZXhwYW5kYWJsZSA9IHt9LFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgICB0aXRsZTogdGFibGVUaXRsZSxcclxuICAgICAgLi4ub3RoZXJ0YWJsZVBhcmFtc1xyXG4gICAgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgbmV3VGFibGVTdG9yZSA9IHsgLi4udGFibGVTdG9yZSB9O1xyXG4gICAgaWYgKHJlcXVlc3RQYXJhbXMucXVlcnlQYXJhbXMpIHtcclxuICAgICAgbGV0IHF1ZXJ5UGFyYW1zOiBhbnkgPSB0aGlzLmNvbnZlcnRRdWVyeVBhcmFtcygpO1xyXG4gICAgICBsZXQgZGF0YSA9IHF1ZXJ5UGFyYW1zPy5kYXRhIHx8IHF1ZXJ5UGFyYW1zPy5wYXJhbXMgfHwge307XHJcbiAgICAgIG5ld1RhYmxlU3RvcmUucmVxdWVzdENvbmZpZyA9IHtcclxuICAgICAgICBwYXJhbXM6IHsgLi4uZGF0YSwgLi4ubmV3VGFibGVTdG9yZS5yZXF1ZXN0Q29uZmlnPy5wYXJhbXMgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRyZWVTdG9yZSA9IHt9LFxyXG4gICAgICBzaG93U2VhcmNoOiB0cmVlU2VhcmNoID0gdHJ1ZSxcclxuICAgICAgdGl0bGVBbGlhcyA9IFwidGl0bGVcIixcclxuICAgICAgdGl0bGU6IHRyZWVUaXRsZSxcclxuICAgICAgLi4ub3RoZXJ0cmVlUGFyYW1zXHJcbiAgICB9ID0gdHJlZVByb3BzO1xyXG5cclxuICAgIGxldCB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgZmlsdGVyQ29sdW1uLFxyXG4gICAgICBzdG9yZTogeyAuLi5uZXdUYWJsZVN0b3JlIH0sXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXMsXHJcbiAgICB9IGFzIGFueTtcclxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZTogYW55ID0ge307XHJcbiAgICBjb25zdCBjb2x1bW5CdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHsgZWxlbWVudEhlaWdodCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCBwZXJtaXNzaW9uQnV0dG9ucyA9IFtdO1xyXG4gICAgaWYgKHBlcm1pc3Npb24uaGFzICYmIHBlcm1pc3Npb24ubWVudUNvZGUpIHtcclxuICAgICAgcGVybWlzc2lvbkJ1dHRvbnMgPVxyXG4gICAgICAgIGdldEJ1dHRvblBlcm1pc3NvbnMocGVybWlzc2lvbi5tZW51Q29kZSkucGVybWlzc29ucyB8fCBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9iaiA9IGNvbnZlcnRDb2x1bW5zKGNvbHVtbnMsIHt9KTtcclxuICAgIGxldCB0YWJsZUNvbHVtbjogYW55W10gPSBnZXROZXdDb2x1bW5zKGNvbHVtbnMsIHRoaXMucHJvcHMpO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXMgPSBvYmouc2VhcmNoRm9ybXMgfHwgW107XHJcbiAgICBjb25zdCBlZGl0b3JGb3JtcyA9IG9iai5lZGl0b3JGb3JtcyB8fCBbXTtcclxuICAgIGNvbnN0IHRvb2xCdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblByb3BzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGNvbnN0IGJ1dHRvbk1hcCA9IHtcclxuICAgICAgZWRpdG9yOiB7IG5hbWU6IFwi57yW6L6RXCIsIGNvZGU6IFwiZWRpdG9yXCIsIGljb246IDxFZGl0T3V0bGluZWQgLz4gfSxcclxuICAgICAgZGVsZXRlOiB7IG5hbWU6IFwi5Yig6ZmkXCIsIGNvZGU6IFwiZGVsZXRlXCIsIGljb246IDxEZWxldGVPdXRsaW5lZCAvPiB9LFxyXG4gICAgICBzZWFyY2g6IHsgbmFtZTogXCLmn6XnnItcIiwgY29kZTogXCJzZWFyY2hcIiwgaWNvbjogPEV5ZU91dGxpbmVkIC8+IH0sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcmV0dXJuQnV0dG9uID0gKGNvZGUsIHNob3cgPSBcIlwiLCBkZWZhdWx0UHJvcHMgPSB7fSkgPT4ge1xyXG4gICAgICBsZXQgcHJvcHMgPSB7XHJcbiAgICAgICAgaWNvbjogc2hvd0ljb24gPyBidXR0b25NYXBbY29kZV0uaWNvbiA6IG51bGwsXHJcbiAgICAgICAgdHlwZTogXCJsaW5rXCIsXHJcbiAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxyXG4gICAgICB9IGFzIGFueTtcclxuXHJcbiAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgcHJvcHMgPSB7IC4uLnByb3BzLCByZWNvcmRTaG93OiBzaG93IH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT0gXCJkZWxldGVcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMub25EZWxldGUocmVjb3JkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoY29kZSA9PSBcImVkaXRvclwiICYmIGJ1dHRvbkNsaWNrLm9uRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25FZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiByZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gXCJzZWFyY2hcIiAmJiBidXR0b25DbGljay5vblNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNsaWNrLm9uU2VhcmNoLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBjb2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIGNvZGUsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjYWxsQmFjayA9XHJcbiAgICAgICAgICAgICAgICAgIGNvZGUgPT0gXCJlZGl0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25FZGl0b3JDYWxsQmFja1xyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjaztcclxuICAgICAgICAgICAgICAgIGNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7YnV0dG9uTWFwW2NvZGVdPy5uYW1lfVxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGNoZWNrUGVyc3Npb24gPSAoY29kZSkgPT4ge1xyXG4gICAgICBpZiAoIXBlcm1pc3Npb24uaGFzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25CdXR0b25zLmluZGV4T2YoY29kZSkgPiAtMTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGJ1dHRvbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKChpdGVtID09IFwiYWRkXCIgfHwgaXRlbS5jb2RlID09IFwiYWRkXCIpICYmIGNoZWNrUGVyc3Npb24oXCJhZGRcIikpIHtcclxuICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHsgb25TaG93Rm9ybSwgYnV0dG9uQ2xpY2sgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICAgICAgICBpZiAoYnV0dG9uQ2xpY2s/Lm9uQWRkKSB7XHJcbiAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25BZGQsXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKG51bGwsIFwiYWRkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKG51bGwsIG51bGwsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uQWRkQ2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25BZGRDYWxsQmFjayxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PFBsdXNPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5re75YqgXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChpdGVtID09IFwiZGVsZXRlXCIgfHwgaXRlbS5jb2RlID09IFwiZGVsZXRlXCIpICYmXHJcbiAgICAgICAgY2hlY2tQZXJzc2lvbihcImRlbGV0ZVwiKVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIpIHtcclxuICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goXHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uRGVsZXRlLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgaWNvbj17PERlbGV0ZU91dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICAgIGRhbmdlclxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgICByZXR1cm5CdXR0b24oaXRlbS5jb2RlIHx8IGl0ZW0sIGl0ZW0ucmVjb3JkU2hvdywgaXRlbS5wcm9wcyB8fCB7fSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjaGVja1BlcnNzaW9uKGl0ZW0uY29kZSA/IGl0ZW0uY29kZSA6IGl0ZW0pKSB7XHJcbiAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICAgIHJldHVybkJ1dHRvbihcclxuICAgICAgICAgICAgICBpdGVtLmNvZGUgPyBpdGVtLmNvZGUgOiBpdGVtLFxyXG4gICAgICAgICAgICAgIGl0ZW0ucmVjb3JkU2hvdyxcclxuICAgICAgICAgICAgICBpdGVtLnByb3BzIHx8IHt9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgY2hpbGRyZW4ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgICAgaXRlbS5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIChjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY29sdW1uQnV0dG9uXCIgfHxcclxuICAgICAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikgJiZcclxuICAgICAgICAgICAgICBjaGVja1BlcnNzaW9uKGNoaWxkPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiICYmXHJcbiAgICAgICAgICAgIGNoZWNrUGVyc3Npb24oaXRlbT8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdG9vbEJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIChpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIiB8fFxyXG4gICAgICAgICAgICAgIGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNsb3VtbkJ1dHRvblwiKSAmJlxyXG4gICAgICAgICAgICBjaGVja1BlcnNzaW9uKGl0ZW0/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiICYmIGNoZWNrUGVyc3Npb24ocHJvcHM/LmNvZGUpKSB7XHJcbiAgICAgICAgdG9vbEJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgKHByb3BzPy5wYWdlVHlwZSA9PSBcImNvbHVtbkJ1dHRvblwiIHx8XHJcbiAgICAgICAgICBwcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikgJiZcclxuICAgICAgICBjaGVja1BlcnNzaW9uKHByb3BzPy5jb2RlKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBhY3Rpb25Qcm9wcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGFjdGlvblByb3BzPy50ZXh0QWxpZ25cclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgIDogXCJsZWZ0XCIsXHJcbiAgICAgICAgd2lkdGg6IGFjdGlvblByb3BzPy53aWR0aFxyXG4gICAgICAgICAgPyBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICA6IDIwMCxcclxuICAgICAgICBmaXhlZDogXCJyaWdodFwiLFxyXG4gICAgICAgIHJlbmRlcjogKHRleHQ6IGFueSwgcmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtYWN0aW9uXCIpfT5cclxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJDbG91bW5CdXR0b24oY29sdW1uQnV0dG9ucywgcmVjb3JkKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmIChjb2x1bW5PcmRlcilcclxuICAgICAgdGFibGVDb2x1bW4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwi5bqP5Y+3XCIsXHJcbiAgICAgICAgICB3aWR0aDogODAsXHJcbiAgICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQsIHJlYWNvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8PntpbmRleCArIDF9PC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRhYmxlQ29sdW1uLFxyXG4gICAgICBdO1xyXG4gICAgbGV0IHNlYXJjaEZsYWcgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgeyB0YWJsZVRvb2wgfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xGbGFnID1cclxuICAgICAgc2hvd1Rvb2xCdXR0b24gJiZcclxuICAgICAgdG9vbEJ1dHRvbnMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPT0gXCJidXR0b21cIjtcclxuICAgIGxldCB0b29sYmFyRmxhZyA9ICEoXHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhciA9PSBmYWxzZSB8fFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXI/LnNob3cgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy50b29scz8ubGVuZ3RoID09IDAgfHxcclxuICAgICAgdGFibGVUb29sPy5zaG93ID09IGZhbHNlXHJcbiAgICApO1xyXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHNob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCA/IDEwNCA6IDA7IC8v5aS06YOo5pCc57Si5qCP6auY5bqmXHJcbiAgICBsZXQgdG9vbEhlaWdodCA9IHRhYmxlVGl0bGUgfHwgdG9vbEZsYWcgPyA1MCA6IDA7XHJcbiAgICBsZXQgcGFkZGluZ0hlaWdodCA9IDIwICogMjsgLy/kuIrkuIvpl7Tot51cclxuICAgIGxldCB0YWJsZUNvbnRlbnRIZWlnaHQgPVxyXG4gICAgICBlbGVtZW50SGVpZ2h0IC0gdG9vbEhlaWdodCAtIHBhZGRpbmdIZWlnaHQgLSBoZWFkZXJIZWlnaHQ7XHJcbiAgICBsZXQgUGFnaW5hdGlvbkhlaWdodCA9IHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UgPyAzMiArIDE2IDogMDsgLy8zMiDkuLrliIbpobXlmajpq5jluqYsMTbkuLptYXJnaW7pl7Tot51cclxuICAgIGxldCB0YWJsZUhlaWdodCA9IHRhYmxlQ29udGVudEhlaWdodCAtIFBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICBsZXQgdGFibGVTcm9sbEhlaWdodCA9XHJcbiAgICAgIHRhYmxlQ29udGVudEhlaWdodCAtXHJcbiAgICAgICh0aGlzLnN0YXRlLnRhYmxlSGVhZGVySGVpZ2h0ID4gMCA/IHRoaXMuc3RhdGUudGFibGVIZWFkZXJIZWlnaHQgOiA1NSkgLVxyXG4gICAgICBQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgLy8gaWYgKHRhYmxlUHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHNjcm9sbCA9IHRhYmxlUGFyYW1zLnNjcm9sbDtcclxuICAgIHRhYmxlUGFyYW1zID0ge1xyXG4gICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgc2Nyb2xsOiB7IHg6IFwibWF4LWNvbnRlbnRcIiwgeTogdGFibGVTcm9sbEhlaWdodCwgLi4uc2Nyb2xsIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZVwiKSwgY2xhc3NOYW1lKX1cclxuICAgICAgICByZWY9e3RoaXMucGFnZVJlZn1cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZVwiKSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1wYW5lXCIpKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWxlZnRcIil9XHJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMuc3RhdGUudHJlZVdpZHRoIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dHJlZVRpdGxlICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLXRpdGxlXCIpfT57dHJlZVRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidHJlZS1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLWNvbnRlbnQtbm90aXRsZVwiKV06ICF0cmVlVGl0bGUsXHJcbiAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRyZWUtZHJhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXt0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFRyZWVcclxuICAgICAgICAgICAgICAgICAgc3RvcmU9e3sgLi4udHJlZVN0b3JlIH19XHJcbiAgICAgICAgICAgICAgICAgIHNob3dJY29uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgY2hlY2thYmxlPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZT17dHJlZVNlYXJjaH1cclxuICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMudHJlZVNlbGVjdC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXM9e1t0aGlzLnN0YXRlLnRyZWVTZWxlY3RlZEtleV19XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlQWxpYXM9e3RpdGxlQWxpYXN9XHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy50cmVlUmVmfVxyXG4gICAgICAgICAgICAgICAgICB7Li4ub3RoZXJ0cmVlUGFyYW1zfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtcmlnaHRcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLW5vLWxlZnQtcmlnaHRcIildOiAhc2hvd0xlZnQsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygxMDAlIC0gJHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUudHJlZVdpZHRoIC0gKHNob3dMZWZ0ID8gMjQgOiAwKVxyXG4gICAgICAgICAgICAgIH1weClgLFxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWhlYWRlcnNlYXJjaFwiKX0+XHJcbiAgICAgICAgICAgICAgICA8SGVhZGVyU2VhcmNoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1zPXtzZWFyY2hGb3Jtc31cclxuICAgICAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uPXt0b29sQnV0dG9uUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLm9uU2VhcmNoLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIG9uUmVzZXQ9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblJlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uUmVzZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTG9hZCh7fSk7XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5zZWFyY2hSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1Qcm9wcz17dGhpcy5wcm9wcy5zZWFyY2hGb3JtUHJvcHN9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnRcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1nYXBcIildOiAhc2VhcmNoRmxhZyxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMucGFnZUNvbnRlbnRSZWZ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7KHRhYmxlVGl0bGUgfHwgdG9vbEZsYWcpICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRpdGxlXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZS13aWR0aFwiKV06ICF0b29sYmFyRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+e3RhYmxlVGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIHt0b29sRmxhZyAmJiB0aGlzLnJlbmRlclRvb2xCdXR0b25zKHRvb2xCdXR0b25zLCB0b29sYmFyRmxhZyl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlXCIpLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10b3BcIildOiAhdG9vbGJhckZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRvcDJcIildOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbGJhckZsYWcgJiYgIXRvb2xGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlV3JhcHBlclJlZn1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVDb250ZW50SGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy50YWJsZVJlZn1cclxuICAgICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRJY29uOiAoeyBleHBhbmRlZCwgb25FeHBhbmQsIHJlY29yZCB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBhbmRlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDAgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogcmVjb3JkLmNoaWxkTm9kZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzPy5sZW5ndGggPiAwID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpZ2h0T3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IG9uRXhwYW5kKHJlY29yZCwgZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5PcmRlcj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgIT09IHBhZ2luYXRpb24uY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXI9e3tcclxuICAgICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBzaG93Um93U2VsZWN0aW9uPXtzaG93Um93U2VsZWN0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAgICAgLy8gcGFnaW5hdGlvbj17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgey8qIDxkaXY+PC9kaXY+ICovfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAge2VkaXRvckZvcm0gJiYgKFxyXG4gICAgICAgICAgICA8RWRpdG9yRm9ybVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgICAgY2FsbEJhY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TdW1iaXRDYWxsQmFjayxcclxuICAgICAgICAgICAgICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVSZWxvYWQoKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGZvcm1zPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIFV0aWxzPXt0aGlzLnByb3BzLlV0aWxzfVxyXG4gICAgICAgICAgICAgIHJlcXVlc3RPYmplY3Q9e3tcclxuICAgICAgICAgICAgICAgIGFkZFVybDogcmVxdWVzdFVybHMuYWRkVXJsLFxyXG4gICAgICAgICAgICAgICAgZWRpdG9yVXJsOiByZXF1ZXN0VXJscy5lZGl0b3JVcmwsXHJcbiAgICAgICAgICAgICAgICBhZGRQYXJhbXM6IHJlcXVlc3RQYXJhbXMuYWRkUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgZWRpdG9yUGFyYW1zOiByZXF1ZXN0UGFyYW1zLmVkaXRvclBhcmFtcyxcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGZ1bmNzPXt0aGlzLnByb3BzLmZ1bmNzfVxyXG4gICAgICAgICAgICAgIHsuLi5mb3JtUHJvcHN9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VQYWdlO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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
|
|
1218
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsIkRvd25PdXRsaW5lZCIsIkV5ZU91dGxpbmVkIiwiRWRpdE91dGxpbmVkIiwiUmlnaHRPdXRsaW5lZCIsIlBsdXNPdXRsaW5lZCIsIkVsbGlwc2lzT3V0bGluZWQiLCJEZWxldGVPdXRsaW5lZCIsImNvbnZlckZ1bmN0aW9uIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiZ2V0QnV0dG9uUGVybWlzc29ucyIsIkhlYWRlclNlYXJjaCIsImNvbnZlcnRDb2x1bW5zIiwiZ2V0TmV3Q29sdW1ucyIsInRocm90dGxlIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJ0YWJsZVdyYXBwZXJSZWYiLCJjdXJyZW50IiwidGFibGVIZWFkZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaGVhZGVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwidGFibGVIZWFkZXJIZWlnaHQiLCJzZXRTdGF0ZSIsImNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0Iiwic3RvcmVQcmVmaXgiLCJ0eXBlIiwiY29udGVudCIsInNpemUiLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiZm9ybVR5cGUiLCJ0YWJsZVNpemUiLCJ0cmVlU2VhcmNoUHJhbXMiLCJwb3BvcGVucyIsIm1vcmVPcGVuIiwiZWxlbWVudEhlaWdodCIsInBlcm1pc3Npb25CdXR0b25zIiwicXVlcnlQYXJhbXMiLCJidXR0b25zTG9hZGluZyIsInRyZWVXaWR0aCIsInNob3dMZWZ0IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlQ29udGVudFJlZiQiLCJpbml0RGF0YSIsInBlcm1pc3NvbiIsInBhZ2VDb250ZW50UmVmIiwiY2xpZW50SGVpZ2h0Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRocm90dGxlQ2FsY3VsYXRlVGFibGVIZWFkZXJIZWlnaHQiLCJzZXRUaW1lb3V0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3RoaXMkcGFnZVJlZiRjdXJyZW50IiwicGFnZVJlZiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsImNhbGxCYWNrIiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlIiwic2VhcmNoUmVmIiwiZG9TdWJtaXQiLCJkYXRhIiwiX3RoaXMkZWRpdG9yUmVmJGN1cnJlIiwibGFiZWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJlZGl0b3JSZWYiLCJzaG93Rm9ybSIsIl90aGlzJGVkaXRvclJlZiIsImVkaXRvcmZsYWciLCJuZXdWYWx1ZSIsIl9vYmplY3RTcHJlYWQiLCJzaG93IiwiaGlkZUZvcm0iLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUyIiwic2V0TG9hZGluZyIsImxvYWRpbmciLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUzIiwic2V0RWRpdEZvcm1WYWx1ZXMiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmU0Iiwic2V0Rm9ybVZhbHVlIiwiZ2V0RWRpdEZvcm1WYWx1ZXMiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmU1IiwiZ2V0Rm9ybVZhbHVlIiwib25EZWxldGUiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4iLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4yIiwiZGVsZXRlVXJsIiwiZGVsZXRlUGFyYW1zIiwiZGVsZXRlUG9zaXRpb24iLCJidXR0b25DbGljayIsInJlcXVlc3RQYXJhbXMiLCJyZXF1ZXN0VXJscyIsInJlcXVlc3RDb25maWciLCJfdGhpcyIsInRhYmxlUmVmIiwiZ2V0U2VsZWN0ZWRSb3dLZXlzIiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsInVybCIsIndhcm5pbmciLCJjb25maXJtIiwib25PayIsInJlY29yZCIsImlkcyIsImlkIiwiZnVuY3MiLCJVdGlscyIsIkVycm9yIiwiZGF0YVBhcmFtcyIsIm90aGVyUGFyYW1zIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsImF1dG9QcmVmaXgiLCJqb2luIiwiZmluYWxQYXJhbXMiLCJ0aGVuIiwiY29kZSIsIl90aGlzJHNlYXJjaFJlZiIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzIiLCJzdWNjZXNzIiwiZ2V0U2VhcmNoVmFsdWVzIiwib25DYWxsQmFja3MiLCJvbkRlbGV0ZUNhbGxCYWNrIiwidGFibGVMb2FkIiwiZXJyb3IiLCJjYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJfdGFibGVTdG9yZSRyZXF1ZXN0Q28iLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4zIiwiZGVmYXVsdFJlcXVlc3RDb25maWciLCJ0YWJsZVByb3BzIiwic3RvcmUiLCJ0YWJsZVN0b3JlIiwiY29udmVydFF1ZXJ5UGFyYW1zIiwicmVxdWVzdENvbmlnIiwic3RvcmVDb25maWciLCJzdG9yZVBhcmFtcyIsIm90aGVyU3RvcmVDb25maWciLCJfZXhjbHVkZWQyIiwibG9hZCIsIl90YWJsZVN0b3JlJHJlcXVlc3RDbzIiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMzIiwib25RdWVyeUNhbGxCYWNrIiwidGFibGVSZWxvYWQiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW40IiwiYXV0b0xvYWQiLCJyZWxvYWQiLCJjYWxsYmFjayIsIl9yZXMkZGF0YSIsInJlY29yZHMiLCJjdXJyZW50UGFnZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjUiLCJ0cmVlTG9hZCIsIl90aGlzJHRyZWVSZWYkY3VycmVudCIsInRyZWVSZWYiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW42IiwiX3RoaXMkdGFibGVSZWYkY3VycmVuNyIsInNldFNlbGVjdGVkUm93S2V5cyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjgiLCJzZXRTZWxlY3RlZFJvd0RhdGFzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuOSIsInJlc2V0U2VsZWN0ZWRSb3dLZXlzIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuMTAiLCJfdGhpcyRzZWFyY2hSZWYyIiwiZnJvbVZhbHVlIiwiZ2V0Q2hpbGRyZW5EYXRhIiwicm93S2V5IiwicmVzS2V5IiwiY2hpbGROb2RlcyIsImNoaWxkcmVuIiwibWFwIiwiaXRlbSIsImluZGV4IiwicmVuZGVyVG9vbEJ1dHRvbnMiLCJ0b29sYnV0dG9ucyIsInRvb2xiYXJGbGFnIiwiZmxhZyIsInNob3dTZWFyY2giLCJfaXRlbSRwcm9wcyIsInBhZ2VUeXBlIiwib25DbGljayIsImljb24iLCJfZXhjbHVkZWQzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIl9leHRlbmRzIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJ0aXRsZSIsInBsYWNlbWVudCIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJjb2x1bW5CdXR0b25zIiwicm93UmVjb3JkIiwiYWN0aW9uUHJvcHMiLCJiYXNlQWN0aW9uQ29sdW1uIiwibmV3QnV0dG9ucyIsInNob3dJY29uIiwiX2l0ZW0kcHJvcHMyIiwicmVjb3JkU2hvdyIsIl9leGNsdWRlZDQiLCJldmVudE9wdGlvbiIsIlVpdGxzIiwiZnVuYyIsIkZ1bmN0aW9uIiwicHVzaCIsImUiLCJldmFsIiwibnVtYmVyIiwiYnV0dG9uTnVtYmVyIiwiX2l0ZW0kcHJvcHMzIiwiX2V4Y2x1ZGVkNSIsIk51bWJlciIsIl9pdGVtJHByb3BzNCIsIl9leGNsdWRlZDYiLCJ0cmlnZ2VyIiwidHJlZVNlbGVjdCIsInNlbGVjdGVkS2V5cyIsIm9iaiIsIl90aGlzJHNlYXJjaFJlZjMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM0IiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNSIsImtleXdvcmQiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInRyZWVQcm9wcyIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRTZWFyY2giLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUyIiwicmVzZXRGaWVsZHMiLCJnZXRUZXh0IiwidGV4dCIsIl9wcm9wcyRkYXRhIiwibmV3VGV4dCIsImkiLCJzZXRUYWJsZURhdGEiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4xMSIsInNldERhdGEiLCJzZXRUcmVlRGF0YSIsIl90aGlzJHRyZWVSZWYkY3VycmVudDIiLCJjb252ZXJQYXJhbXMiLCJoYW5kbGVNb3VzZURvd24iLCJwcmV2ZW50RGVmYXVsdCIsIm1hc2siLCJkb2N1bWVudCIsImNzc1RleHQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJoYW5kbGVNb3VzZU1vdmUiLCJuZXdXaWR0aCIsInNjcmVlblgiLCJ0aHJvdHRsZWRNb3VzZU1vdmUiLCJoYW5kbGVNb3VzZVVwIiwiZ2V0RWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJlbmRlciIsIl90aGlzMiIsIl90YWJsZVByb3BzJHRvb2xiYXIiLCJfdGFibGVQcm9wcyR0b29sYmFyMiIsImNvbHVtbnMiLCJzdWJtaXRVcmwiLCJmb3JtUHJvcHMiLCJmb3JtUGFnZVByb3BzIiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJwZXJtaXNzaW9uIiwiaGFzIiwiZmlsdGVyQ29sdW1uIiwiYWN0aW9uQ29sdW1uIiwic2hvd1Jvd1NlbGVjdGlvbiIsImNvbHVtbk9yZGVyIiwiZXhwYW5kYWJsZSIsInRhYmxlVGl0bGUiLCJvdGhlcnRhYmxlUGFyYW1zIiwiX2V4Y2x1ZGVkNyIsIm5ld1RhYmxlU3RvcmUiLCJfbmV3VGFibGVTdG9yZSRyZXF1ZXMiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsInRyZWVUaXRsZSIsIm90aGVydHJlZVBhcmFtcyIsIl9leGNsdWRlZDgiLCJ0YWJsZVBhcmFtcyIsImxpc3RlbmVycyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzYiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM3IiwidGFibGVMb2FkQ2FsbEJhY2siLCJkZWZhdWx0VmFsdWUiLCJtZW51Q29kZSIsInBlcm1pc3NvbnMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJ0b29sQnV0dG9ucyIsImJ1dHRvbk1hcCIsImVkaXRvciIsImRlbGV0ZSIsInNlYXJjaCIsInJldHVybkJ1dHRvbiIsIl9idXR0b25NYXAkY29kZSIsImRlZmF1bHRQcm9wcyIsIm9uRWRpdG9yIiwiX3RoaXMyJHByb3BzJG9uQ2FsbEJhIiwiX3RoaXMyJHByb3BzJG9uQ2FsbEJhMiIsIm9uRWRpdG9yQ2FsbEJhY2siLCJvblNlYXJjaENhbGxCYWNrIiwiY2hlY2tQZXJzc2lvbiIsImluZGV4T2YiLCJvbkFkZCIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzgiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM5Iiwib25BZGRDYWxsQmFjayIsImJpbmQiLCJkYW5nZXIiLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZCIsIl9jaGlsZCRwcm9wcyIsIl9jaGlsZCRwcm9wczIiLCJfY2hpbGQkcHJvcHMzIiwiX2NoaWxkJHByb3BzNCIsIl9jaGlsZCRwcm9wczUiLCJfaXRlbSRwcm9wczUiLCJfaXRlbSRwcm9wczYiLCJfaXRlbSRwcm9wczciLCJfaXRlbSRwcm9wczgiLCJfaXRlbSRwcm9wczkiLCJkYXRhSW5kZXgiLCJhbGlnbiIsInRleHRBbGlnbiIsIndpZHRoIiwiZml4ZWQiLCJyZWFjb3JkIiwiRnJhZ21lbnQiLCJzZWFyY2hGbGFnIiwidGFibGVUb29sIiwidG9vbEZsYWciLCJ0b29sYmFyIiwidG9vbHMiLCJ0b29sSGVpZ2h0IiwicGFkZGluZ0hlaWdodCIsInRhYmxlQ29udGVudEhlaWdodCIsIlBhZ2luYXRpb25IZWlnaHQiLCJwYWdpbmF0aW9uIiwidGFibGVIZWlnaHQiLCJ0YWJsZVNyb2xsSGVpZ2h0Iiwic2Nyb2xsIiwieCIsInkiLCJyZWYiLCJwYWdlVGl0bGUiLCJkaXNwbGF5Iiwib25Nb3VzZURvd24iLCJjaGVja2FibGUiLCJzZWFyY2hhYmxlIiwib25TZWxlY3QiLCJjb25jYXQiLCJvblJlc2V0IiwiX3RoaXMkc2VhcmNoUmVmJGN1cnJlMyIsInNlYXJjaEZvcm1Qcm9wcyIsImV4cGFuZEljb24iLCJfcmVmIiwiX3JlY29yZCRjaGlsZE5vZGVzIiwiX3JlY29yZCRjaGlsZE5vZGVzMiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJvbkNoYW5nZSIsIm9uVG9vbENsaWNrIiwib25SZWZyZXNoIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMTAiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMxMSIsIm9uU3VtYml0Q2FsbEJhY2siLCJmb3JtcyIsIm9uU3VibWl0Iiwib25IaWRlRm9ybSIsIm9uRm9ybUNoYW5nZSIsImNoYW5nZVZhbGlkIiwicmVxdWVzdE9iamVjdCIsImFkZFVybCIsImVkaXRvclVybCIsImFkZFBhcmFtcyIsImVkaXRvclBhcmFtcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi8uLi9iYXNlL3RhYmxlXCI7XHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi9iYXNlL3RyZWVcIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYmFzZS9idXR0b25cIjtcclxuaW1wb3J0IE1vZGFsIGZyb20gXCIuLi8uLi9iYXNlL21vZGFsXCI7XHJcbmltcG9ydCBQb3BvdmVyIGZyb20gXCIuLi8uLi9iYXNlL3BvcG92ZXJcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uLy4uL2Jhc2UvbWVzc2FnZVwiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSwgeyBGb3JtUGFnZVByb3BzIH0gZnJvbSBcIi4uL0Zvcm1QYWdlL2luZGV4XCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgRWxsaXBzaXNPdXRsaW5lZCxcclxuICBEZWxldGVPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgY29udmVyRnVuY3Rpb24sIGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHB4MnZ3LCBnZXRCdXR0b25QZXJtaXNzb25zIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgbnNjZmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW1wb3J0IHsgY29udmVydENvbHVtbnMsIGdldE5ld0NvbHVtbnMgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuaW1wb3J0IHRocm90dGxlIGZyb20gXCJsb2Rhc2gvdGhyb3R0bGVcIjtcclxuaW1wb3J0IENvbXBvdW5kZWRTcGFjZSBmcm9tIFwiYW50ZC9lcy9zcGFjZVwiO1xyXG50eXBlIEJ1dHRvbkl0ZW0gPVxyXG4gIHwgc3RyaW5nXHJcbiAgfCB7XHJcbiAgICAgIGNvZGU6IHN0cmluZztcclxuICAgICAgcmVjb3JkU2hvdz86IHN0cmluZyB8IEZ1bmN0aW9uO1xyXG4gICAgICBwcm9wcz86IGFueTtcclxuICAgIH07XHJcblxyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxuICBwYWdpbmF0aW9uPzogYm9vbGVhbiB8IFBhZ2luYXRpb25Qcm9wczsgLy/mmK/lkKbmmL7npLrliIbpobVcclxuICBjb2x1bW5PcmRlcj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66KGo5qC85bqP5YiXXHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmNvbnN0IHN0eWxlcyA9IG51bGw7XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG4gIHBhcmFudFNlbGVjdD86IGJvb2xlYW47XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBGb3JtUHJvcHMgZXh0ZW5kcyBGb3JtUGFnZVByb3BzIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5TQ0Jhc2VCYWdlUHJvcHMge1xyXG4gIHNob3dTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWktOmDqOaQnOe0ouagj1xyXG4gIHRhYmxlUHJvcHM/OiBUYWJsZVByb3BzOyAvL+ihqOagvOWPguaVsFxyXG4gIHRyZWVQcm9wcz86IFRyZWVQcm9wczsgLy/lt6bkvqfmoJHlj4LmlbBcclxuICBzdWJtaXRQYXJhbXM/OiBPYmplY3Q7IC8v5re75Yqg5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HZGF0YeS8oOmAklxyXG4gIHN1Ym1pdFVybD86IHN0cmluZztcclxuICBvblN1Ym1pdD86ICh2YWx1ZT86IGFueSwgbGFiZWw/OiBhbnkpID0+IHZvaWQ7XHJcbiAgY29sdW1ucz86IEFycmF5PE9iamVjdD47XHJcbiAgc2hvd0xlZnQ/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuW3puS+p+ebruW9leagkVxyXG4gIHNob3dUb29sQnV0dG9uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmjInpkq7moI9cclxuICBlZGl0b3JGb3JtPzogYm9vbGVhbjsgLy/mmK/lkKbpnIDopoHooajljZXlip/og70gLCDkuLpmYWxzZSDnvJbovpHvvIzmn6XnnIvvvIzmlrDlop7lip/og73lnYfkuI3lj6/nlKhcclxuICBkZWxldGVVcmw/OiBzdHJpbmc7IC8v5Yig6ZmkdXJsXHJcbiAgb25EZWxldGU/OiAoc2VsZWN0ZWRLZXlzPzogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDsgLy/liKDpmaTlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dpZHPmi7zmjqXkvKDpgJLnu5nlkI7lj7BcclxuICBkZWxldGVQb3NpdGlvbj86IFwidG9vbGJhclwiIHwgXCJyb3dcIjtcclxuICBkZWxldGVQYXJhbXM/OiBPYmplY3Q7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgb25TZWFyY2g/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25SZXNldD86ICgpID0+IHZvaWQ7XHJcbiAgaW5pdERhdGE/OiBhbnk7IC8v5Yid5aeL5YyW5Zue6LCD5Ye95pWw77yM5ZyoY29tcG9uZW50RGlkTW91bnTkuK3osIPnlKhcclxuICBidXR0b25zPzogQnV0dG9uSXRlbVtdOyAvL+aMiemSrumbhuWQiCAgWydhZGQnLCdkZWxldGUnLCdzZWFyY2gnLCdlZGl0b3InXVxyXG4gIG9uU2hvd0Zvcm0/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25IaWRlRm9ybT86ICgpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25Gb3JtQ2hhbmdlPzogKGNoYW5nZWRWYWx1ZXM/OiBhbnksIGFsbFZhbHVlcz86IGFueSkgPT4gdm9pZDsgLy/ooajljZVvbkNoYW5nZeWbnuiwg1xyXG4gIGZvcm1UeXBlPzogXCJtb2RhbFwiIHwgXCJkcmF3ZXJcIjtcclxuICBmb3JtQ2hhbmdlVmFsaWQ/OiBib29sZWFuOyAvL+ihqOWNleagoemqjFxyXG4gIGNsYXNzTmFtZT86IGFueTtcclxuICB0b29sQnV0dG9uUG9zaXRpb24/OiBcInJpZ2h0XCIgfCBcImJ1dHRvbVwiO1xyXG4gIHBhZ2VUaXRsZT86IHN0cmluZyB8IFJlYWN0Tm9kZTtcclxuICBmb3JtUHJvcHM/OiBGb3JtUHJvcHM7XHJcbiAgYWN0aW9uUHJvcHM/OiB7XHJcbiAgICB0ZXh0QWxpZ24/OiBzdHJpbmc7XHJcbiAgICBzaG93SWNvbj86IGJvb2xlYW47XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIGJ1dHRvbk51bWJlcj86IG51bWJlciB8IFwiYWxsXCI7XHJcbiAgfTtcclxuICBzZWFyY2hGb3JtUHJvcHM/OiB7IHdyYXBwZXJDb2w/OiBhbnk7IGxhYmVsQ29sPzogYW55IH07XHJcbiAgb25UcmVlU2VsZWN0PzogKHZhbHVlPzogYW55LCBlZGl0b3JGbGFnPzogc3RyaW5nKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uQ2FsbEJhY2tzPzoge1xyXG4gICAgdHJlZVNlbGVjdENhbGxCYWNrPzogYW55OyAvL+agkeeCueWHu+afpeivouWQjuWbnuiwg1xyXG4gICAgb25RdWVyeUNhbGxCYWNrPzogYW55OyAvL+afpeivouWbnuiwg++8jOafpeivouaVsOaNruWQjuWbnuiwg1xyXG4gICAgb25TdW1iaXRDYWxsQmFjaz86IGFueTsgLy/kv53lrZjlm57osIPvvIzkv53lrZjmlbDmja7miJDlip/lkI7lm57osINcclxuICAgIG9uRGVsZXRlQ2FsbEJhY2s/OiBhbnk7IC8v5Yig6Zmk5oyJ6ZKu5Zue6LCD77yM5Yig6Zmk5pWw5o2u5ZCO5omn6KGMXHJcbiAgICBvbkVkaXRvckNhbGxCYWNrPzogYW55OyAvL+e8lui+keaMiemSruWbnuiwg++8jOaJk+W8gOW8ueahhuWQjuaJp+ihjFxyXG4gICAgb25BZGRDYWxsQmFjaz86IGFueTsgLy/mt7vliqDmjInpkq7lm57osIPvvIzmiZPlvIDlvLnmoYblkI7miafooYxcclxuICAgIG9uU2VhcmNoQ2FsbEJhY2s/OiBhbnk7IC8v5YiX6KGo5p+l6K+i5oyJ6ZKu5Zue6LCD77yM5omT5byA5by55qGG5ZCO5omn6KGMXHJcbiAgICB0YWJsZUxvYWRDYWxsQmFjaz86IGFueTsgLy/liJfooajmn6Xor6Llm57osIMtLWxvYWRcclxuICB9O1xyXG4gIHBhZ2VUeXBlPzogXCJub3JtYWxcIiB8IFwidGFic3BhZ2VcIjtcclxuICBmb3JtUGFnZVByb3BzPzoge307XHJcbiAgYnV0dG9uQ2xpY2s/OiB7XHJcbiAgICBvbkFkZD86ICgpID0+IHZvaWQ7XHJcbiAgICBvbkVkaXRvcj86ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcclxuICAgIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gICAgb25EZWxldGU/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgfTtcclxuICBwZXJtaXNzaW9uPzoge1xyXG4gICAgaGFzPzogYm9vbGVhbjtcclxuICAgIG1lbnVDb2RlPzogc3RyaW5nO1xyXG4gIH07XHJcbiAgcmVxdWVzdFBhcmFtcz86IHtcclxuICAgIC8v6ZyA6KaB6aKd5aSW5Lyg55qE5Zu65a6a6K+35rGC5Y+C5pWwXHJcbiAgICBhZGRQYXJhbXM/OiBPYmplY3Q7IC8v5paw5aKe5Zu65a6a5Y+C5pWwXHJcbiAgICBlZGl0b3JQYXJhbXM/OiBPYmplY3Q7IC8v57yW6L6R5Zu65a6a5Y+C5pWwXHJcbiAgICBxdWVyeVBhcmFtcz86IE9iamVjdDsgLy/mn6Xor6Llm7rlrprlj4LmlbBcclxuICAgIGRlbGV0ZVBhcmFtcz86IE9iamVjdDsgLy/liKDpmaTlm7rlrprlj4LmlbBcclxuICB9O1xyXG4gIHJlcXVlc3RVcmxzPzoge1xyXG4gICAgYWRkVXJsPzogc3RyaW5nOyAvL+aWsOWinnVybFxyXG4gICAgZWRpdG9yVXJsPzogc3RyaW5nOyAvL+e8lui+kXVybFxyXG4gICAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIH07XHJcbiAgZnVuY3M/OiBhbnk7XHJcbiAgcmVxdWVzdENvbmZpZz86IGFueTtcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VDb250ZW50UmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBkYXRlRm9ybWF0ID0ge30gYXMgYW55O1xyXG4gIHRhYmxlV3JhcHBlclJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICBzdGF0aWMgY29udmVydENvbHVtbnMgPSBjb252ZXJ0Q29sdW1ucztcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgeyBzdG9yZVByZWZpeCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcIi1cIiArIFwiZm9ybVR5cGVcIiA6IFwiZm9ybVR5cGVcIlxyXG4gICAgKTtcclxuICAgIHR5cGUgPSB0eXBlPy5jb250ZW50O1xyXG4gICAgbGV0IHNpemUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIHNpemUgPSBzaXplPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgdHlwZTogXCJhZGRcIixcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICAgIHRyZWVTZWxlY3RlZEtleTogXCJcIixcclxuICAgICAgZXhwYW5kOiBmYWxzZSxcclxuICAgICAgZm9ybVR5cGU6IHR5cGUgfHwgXCJtb2RhbFwiLFxyXG4gICAgICB0YWJsZVNpemU6IHNpemUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIHBvcG9wZW5zOiB7fSxcclxuICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICBlbGVtZW50SGVpZ2h0OiAwLFxyXG4gICAgICBwZXJtaXNzaW9uQnV0dG9uczogW10sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcclxuICAgICAgdGFibGVIZWFkZXJIZWlnaHQ6IDAsIC8vIOa3u+WKoOihqOWktOmrmOW6puWIsHN0YXRlXHJcbiAgICAgIGJ1dHRvbnNMb2FkaW5nOiB7fSxcclxuICAgICAgdHJlZVdpZHRoOiB0aGlzLnByb3BzLnNob3dMZWZ0ID8gMjYwIDogMCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEsIHBlcm1pc3NvbiA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZWxlbWVudEhlaWdodCA9IHRoaXMucGFnZUNvbnRlbnRSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgIC8vIOa3u+WKoOeql+WPo3Jlc2l6ZeebkeWQrFxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy50aHJvdHRsZUNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0KTtcclxuXHJcbiAgICAvLyDliJ3lp4vorqHnrpfooajlpLTpq5jluqZcclxuICAgIHNldFRpbWVvdXQodGhpcy5jYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCwgMCk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICB9KTtcclxuICAgIGluaXREYXRhICYmIGluaXREYXRhKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgaWYgKGVsZW1lbnRIZWlnaHQgPiB0aGlzLnN0YXRlLmVsZW1lbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZWxlbWVudEhlaWdodCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgLy8g56e76ZmkcmVzaXpl55uR5ZCsXHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgXCJyZXNpemVcIixcclxuICAgICAgdGhpcy50aHJvdHRsZUNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0XHJcbiAgICApO1xyXG4gIH1cclxuICBzZXRTZWFyY2hQYXJhbXMocGFyYW1zLCBjYWxsQmFjaykge1xyXG4gICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8uc2V0U2VhcmNoUGFyYW1zKHBhcmFtcyk7XHJcbiAgICBjYWxsQmFjayAmJiBjYWxsQmFjayhwYXJhbXMpO1xyXG4gIH1cclxuICBkb1N1Ym1pdChkYXRhLCBsYWJlbCA9IFwi57yW6L6RXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmRvU3VibWl0KGRhdGEsIGxhYmVsKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ID0gKGNoZWNrZWRUcmVlS2V5czogYW55KSA9PiB7XHJcbiAgICBjb25zdCB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgdmFsdWUgPSB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50LCBkZXB0SWQ6IGNoZWNrZWRUcmVlS2V5c1swXSB9O1xyXG4gICAgaWYgKHRoaXMucHJvcHMub25TZWFyY2gpIHtcclxuICAgICAgdGhpcy5wcm9wcy5vblNlYXJjaCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgLy/mmL7npLrooajljZVcclxuICBzaG93Rm9ybSh2YWx1ZT86IGFueSwgZWRpdG9yZmxhZyA9IFwiYWRkXCIsIGNhbGxCYWNrPzogYW55KSB7XHJcbiAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZSA/IHsgLi4udmFsdWUgfSA6IG51bGw7XHJcbiAgICB0aGlzLmVkaXRvclJlZj8uY3VycmVudD8uc2hvdyhuZXdWYWx1ZSwgZWRpdG9yZmxhZywgY2FsbEJhY2spO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSwgdHlwZSA9IFwi57yW6L6RXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldEZvcm1WYWx1ZSh2YWx1ZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0Rm9ybVZhbHVlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5nZXRGb3JtVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoZGF0YT86IGFueSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBkZWxldGVVcmwsXHJcbiAgICAgIG9uRGVsZXRlLFxyXG4gICAgICBkZWxldGVQYXJhbXMgPSB7fSxcclxuICAgICAgZGVsZXRlUG9zaXRpb24gPSBcInRvb2xiYXJcIixcclxuICAgICAgYnV0dG9uQ2xpY2sgPSB7fSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICByZXF1ZXN0VXJscyA9IHt9LFxyXG4gICAgICByZXF1ZXN0Q29uZmlnID0ge30sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0tleXMgPSB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dEYXRhcyA9IHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gICAgbGV0IHVybCA9IHJlcXVlc3RVcmxzLmRlbGV0ZVVybCA/IHJlcXVlc3RVcmxzLmRlbGV0ZVVybCA6IGRlbGV0ZVVybDtcclxuICAgIGxldCBwYXJhbXM6IGFueSA9IHJlcXVlc3RQYXJhbXMuZGVsZXRlUGFyYW1zXHJcbiAgICAgID8gcmVxdWVzdFBhcmFtcy5kZWxldGVQYXJhbXNcclxuICAgICAgOiBkZWxldGVQYXJhbXM7XHJcbiAgICBpZiAoZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkUm93S2V5cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIG1lc3NhZ2Uud2FybmluZyhcIuivt+mAieaLqeimgeWIoOmZpOeahOaVsOaNru+8gVwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIE1vZGFsLmNvbmZpcm0oe1xyXG4gICAgICBjb250ZW50OiBcIuaYr+WQpuehruiupOWIoOmZpOaJgOmAiemhue+8n1wiLFxyXG4gICAgICAvLyBjZW50ZXJlZDp0cnVlLFxyXG4gICAgICBvbk9rOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGJ1dHRvbkNsaWNrLm9uRGVsZXRlKSB7XHJcbiAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgYnV0dG9uQ2xpY2sub25EZWxldGUsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgcmVjb3JkOiBkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93RGF0YXMgOiBkYXRhLFxyXG4gICAgICAgICAgICAgIGlkczogZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMgOiBkYXRhPy5pZCxcclxuICAgICAgICAgICAgICBmdW5jczogdGhpcy5wcm9wcy5mdW5jcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5VdGlsc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uRGVsZXRlKSB7XHJcbiAgICAgICAgICBvbkRlbGV0ZSAmJlxyXG4gICAgICAgICAgICBvbkRlbGV0ZShkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93S2V5cyA6IGRhdGEpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJs5LiN6IO95Li656m677yBXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IGRhdGE6IGRhdGFQYXJhbXMgPSB7fSwgLi4ub3RoZXJQYXJhbXMgfSA9IHBhcmFtcztcclxuICAgICAgICBjb25zdCBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcclxuICAgICAgICAgIGF1dG9QcmVmaXg6IHRydWUsXHJcbiAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgaWRzOiBkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIiA/IHNlbGVjdGVkUm93S2V5cy5qb2luKCkgOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICAuLi5kYXRhUGFyYW1zLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZmluYWxQYXJhbXMgPSB7fSBhcyBhbnk7XHJcbiAgICAgICAgZmluYWxQYXJhbXMgPSB7IC4uLmRlZmF1bHRQYXJhbXMsIC4uLm90aGVyUGFyYW1zIH07XHJcbiAgICAgICAgcmVxdWVzdCh1cmwsIHtcclxuICAgICAgICAgIC4uLmZpbmFsUGFyYW1zLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLnN1Y2Nlc3MoXCLliKDpmaTmiJDlip/vvIFcIik7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gX3RoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25EZWxldGVDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrLFxyXG4gICAgICAgICAgICAgICAgICB7IHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZiB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIF90aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSwgcmVxdWVzdENvbmZpZyA9IHt9KSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHJlcXVlc3RDb25maWc6IGRlZmF1bHRSZXF1ZXN0Q29uZmlnID0ge30sXHJcbiAgICAgIHJlcXVlc3RQYXJhbXMgPSB7fSxcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHN0b3JlOiB0YWJsZVN0b3JlID0ge30gfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM6IGFueSA9IHRoaXMuY29udmVydFF1ZXJ5UGFyYW1zKCk7XHJcbiAgICBsZXQgZGF0YSA9IHF1ZXJ5UGFyYW1zLmRhdGEgfHwgcXVlcnlQYXJhbXMucGFyYW1zIHx8IHt9O1xyXG5cclxuICAgIGxldCBmaW5hbFBhcmFtcyA9IHtcclxuICAgICAgLi4uZGF0YSxcclxuICAgICAgLi4udGFibGVTdG9yZS5yZXF1ZXN0Q29uZmlnPy5wYXJhbXMsXHJcbiAgICAgIC4uLnBhcmFtcyxcclxuICAgIH07XHJcbiAgICBjb25zdCB7IHJlcXVlc3RDb25pZzogc3RvcmVDb25maWcgPSB7fSB9ID0gdGFibGVTdG9yZTtcclxuICAgIGNvbnN0IHsgcGFyYW1zOiBzdG9yZVBhcmFtcyA9IHt9LCAuLi5vdGhlclN0b3JlQ29uZmlnIH0gPSBzdG9yZUNvbmZpZztcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUubG9hZCh7XHJcbiAgICAgIC4uLmRlZmF1bHRSZXF1ZXN0Q29uZmlnLFxyXG4gICAgICAuLi5vdGhlclN0b3JlQ29uZmlnLFxyXG4gICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxyXG4gICAgICBwYXJhbXM6IHsgLi4uc3RvcmVQYXJhbXMsIC4uLmZpbmFsUGFyYW1zIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy/mn6Xor6JcclxuICBvblNlYXJjaChwYXJhbXMpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgb25TZWFyY2gsXHJcbiAgICAgIG9uQ2FsbEJhY2tzLFxyXG4gICAgICByZXF1ZXN0UGFyYW1zID0ge30sXHJcbiAgICAgIHRhYmxlUHJvcHMgPSB7fSxcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBzdG9yZTogdGFibGVTdG9yZT17fSB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgIGxldCBkYXRhID0gcXVlcnlQYXJhbXMuZGF0YSB8fCBxdWVyeVBhcmFtcy5wYXJhbXMgfHwge307XHJcbiAgICBsZXQgZmluYWxQYXJhbXMgPSB7XHJcbiAgICAgIC4uLmRhdGEsXHJcbiAgICAgIC4uLnRhYmxlU3RvcmUucmVxdWVzdENvbmZpZz8ucGFyYW1zLFxyXG4gICAgICAuLi5wYXJhbXMsXHJcbiAgICB9O1xyXG4gICAgaWYgKG9uU2VhcmNoKSB7XHJcbiAgICAgIG9uU2VhcmNoKHsgLi4uZmluYWxQYXJhbXMsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYmxlTG9hZCh7IC4uLmZpbmFsUGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgIG9uQ2FsbEJhY2tzPy5vblF1ZXJ5Q2FsbEJhY2sgJiZcclxuICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25RdWVyeUNhbGxCYWNrLFxyXG4gICAgICAgIHsgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLCBwYXJhbXM6IHBhcmFtcyB9LFxyXG4gICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgKTtcclxuICB9XHJcbiAgLy/ooajmoLzph43mlrDliqDovb1cclxuICB0YWJsZVJlbG9hZChwYXJhbXMgPSB7fSwgYXV0b0xvYWQgPSB0cnVlKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlPy5yZWxvYWQoe1xyXG4gICAgICBjYWxsYmFjazogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGF1dG9Mb2FkICYmXHJcbiAgICAgICAgICByZXM/LmRhdGE/LnJlY29yZHM/Lmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlICE9PSAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlPy5yZWxvYWQoe1xyXG4gICAgICAgICAgICBwYXJhbXM6IHsgY3VycmVudDogMSwgLi4ucGFyYW1zIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdHJlZUxvYWQocGFyYW1zOiBhbnksIHJlcXVlc3RDb25maWcgPSB7fSkge1xyXG4gICAgY29uc3QgeyByZXF1ZXN0Q29uZmlnOiBkZWZhdWx0UmVxdWVzdENvbmZpZyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoe1xyXG4gICAgICAuLi5kZWZhdWx0UmVxdWVzdENvbmZpZyxcclxuICAgICAgLi4ucmVxdWVzdENvbmZpZyxcclxuICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0RhdGFzKCk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93S2V5cyhkYXRhOiBBcnJheTxTdHJpbmcgfCBOdW1iZXI+KSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zZXRTZWxlY3RlZFJvd0tleXMoZGF0YSk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkUm93RGF0YXMoZGF0YTogQXJyYXk8T2JqZWN0Pikge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWRSb3dEYXRhcyhkYXRhKTtcclxuICB9XHJcbiAgcmVzZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5yZXNldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoVmFsdWVzKCkge1xyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgcmV0dXJuIHsgLi4uZnJvbVZhbHVlLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5EYXRhKGRhdGEsIGtleXMgPSBbXSkge1xyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcmVzS2V5ID0gW107XHJcbiAgICBsZXQga2V5ID0gXCJcIjtcclxuICAgIGlmIChkYXRhLmNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkTm9kZXM7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHJvd0tleSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgIGtleSA9IHJvd0tleShpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAga2V5ID0gaXRlbVtyb3dLZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICB0aGlzLmdldENoaWxkcmVuRGF0YShpdGVtLmNoaWxkTm9kZXMsIGtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNLZXkgPSBbLi4ua2V5cywga2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzS2V5O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyVG9vbEJ1dHRvbnModG9vbGJ1dHRvbnM6IGFueSwgdG9vbGJhckZsYWcpIHtcclxuICAgIGNvbnN0IGZsYWcgPSB0b29sYnV0dG9ucy5sZW5ndGggPiA1O1xyXG4gICAgY29uc3QgeyBzaG93U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgaWNvbiwgc2hvdywgLi4ucGFyYW1zIH0gPSBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiAzKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1pdGVtXCIpXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICBtb3JlT3BlbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRvb2wtYnV0dG9uc1wiKSl9XHJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMCB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3Rvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogMTIsXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLm1vcmVPcGVufVxyXG4gICAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlT3BlbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAvLyBvcGVuPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcC1ib3gnXX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOabtOWkmiA8RG93bk91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiBpbmRleCA9PSB0b29sYnV0dG9ucy5sZW5ndGggLSAxID8gMCA6IDEyLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7aXRlbX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICByZW5kZXJDbG91bW5CdXR0b24oY29sdW1uQnV0dG9uczogYW55LCByb3dSZWNvcmQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBhY3Rpb25Qcm9wcywgdGFibGVQcm9wcyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGNvbnN0IG5ld0J1dHRvbnMgPSBbXTtcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IGtleSA9IFwiXCI7XHJcbiAgICBpZiAodHlwZW9mIHJvd0tleSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAga2V5ID0gcm93S2V5KHJvd1JlY29yZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBrZXkgPSByb3dSZWNvcmRbcm93S2V5XTtcclxuICAgIH1cclxuICAgIGxldCBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFjdGlvblByb3BzPy5zaG93SWNvbiA9PT0gdHJ1ZSB8fCBiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSB0cnVlKVxyXG4gICAgICBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBjb2x1bW5CdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCByZWNvcmRTaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKHJlY29yZFNob3cpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnRPcHRpb24gPSB7XHJcbiAgICAgICAgICAgICAgcmVjb3JkOiByb3dSZWNvcmQsXHJcbiAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZ1bmNzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBVdGlscyA9IHsgLi4udGhpcy5wcm9wcy5VaXRscyB9O1xyXG4gICAgICAgICAgICBsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbihcImV2ZW50T3B0aW9uLFV0aWxzXCIsIHJlY29yZFNob3cpO1xyXG4gICAgICAgICAgICBjb25zdCBzaG93ID0gZnVuYyhldmVudE9wdGlvbiwgVXRpbHMpO1xyXG4gICAgICAgICAgICBzaG93ICYmIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbGV0IHJlY29yZCA9IHJvd1JlY29yZDtcclxuICAgICAgICAgICAgaWYgKGV2YWwocmVjb3JkU2hvdykpIHtcclxuICAgICAgICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWNvcmRTaG93ID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgY29uc3Qgc2hvdyA9IHJlY29yZFNob3cocm93UmVjb3JkKTtcclxuICAgICAgICAgIHNob3cgJiYgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IG51bWJlciA9IGFjdGlvblByb3BzPy5idXR0b25OdW1iZXJcclxuICAgICAgPyBhY3Rpb25Qcm9wcz8uYnV0dG9uTnVtYmVyXHJcbiAgICAgIDogYmFzZUFjdGlvbkNvbHVtbj8uYnV0dG9uTnVtYmVyXHJcbiAgICAgID8gYmFzZUFjdGlvbkNvbHVtbj8uYnV0dG9uTnVtYmVyXHJcbiAgICAgIDogMztcclxuICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICBpZiAobnVtYmVyID09IFwiYWxsXCIpIHtcclxuICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmxhZyA9IG5ld0J1dHRvbnMubGVuZ3RoID4gbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gTnVtYmVyKG51bWJlcikgLSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1pdGVtXCIpXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgZGF0YSA9IHsgLi4udGhpcy5zdGF0ZS5wb3BvcGVucyB9O1xyXG4gICAgICAgICAgICAgIGRhdGFbcm93UmVjb3JkLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgcG9wb3BlbnM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJvd1JlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgIHR5cGU9e1wibGlua1wifVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCBudW1iZXIpIHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLCB7XHJcbiAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvci1maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJvd1JlY29yZCk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICBpY29uPXtpY29ufVxyXG4gICAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gbnVtYmVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICB0cmlnZ2VyPXtbXCJjbGlja1wiXX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9wZW49e3RoaXMuc3RhdGUucG9wb3BlbnNba2V5XSB8fCBmYWxzZX1cclxuICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3Blbikge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHsgLi4udGhpcy5zdGF0ZS5wb3BvcGVucyB9O1xyXG4gICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BvcGVuczogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BvcGVuczoge30sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AnXX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKX0+XHJcbiAgICAgICAgICAgICAgICA8RWxsaXBzaXNPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvci1maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyb3dSZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgICB0eXBlPVwibGlua1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICAvL+agkeeCueWHu+S6i+S7tlxyXG4gIHRyZWVTZWxlY3Qoc2VsZWN0ZWRLZXlzOiBhbnksIG9iajogYW55KSB7XHJcbiAgICBsZXQga2V5d29yZCA9IFwiXCI7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHNlYXJjaEtleSA9IFwia2V5XCIsXHJcbiAgICAgIHNlYXJjaEZpZWxkID0gXCJcIixcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgIH0gPSB0aGlzLnByb3BzLnRyZWVQcm9wcztcclxuICAgIGNvbnN0IHsgdHJlZVNlbGVjdGVkS2V5IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZCwgc2VsZWN0ZWROb2RlcyB9ID0gb2JqO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBrZXl3b3JkID0gc2VsZWN0ZWROb2Rlc1swXS5kYXRhcmVmLmF0dHJpYnV0ZVtzZWFyY2hLZXldO1xyXG4gICAgICBpZiAocGFyYW50U2VsZWN0KSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkTm9kZXNbMF0uaXNMZWFmIHx8ICFzZWxlY3RlZE5vZGVzWzBdLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRLZXlzWzBdICE9PSB0cmVlU2VsZWN0ZWRLZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7IFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IGtleXdvcmQsXHJcbiAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7fSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9wcy5vblRyZWVTZWxlY3QpIHtcclxuICAgICAgdGhpcy5wcm9wcy5vblRyZWVTZWxlY3Qoc2VsZWN0ZWRLZXlzLCBvYmopO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCkgfHwge307XHJcbiAgICBzZWFyY2hGaWVsZCAmJiB0aGlzLnRhYmxlTG9hZCh7IC4uLmZyb21WYWx1ZSwgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9KTtcclxuICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjayAmJlxyXG4gICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2ssXHJcbiAgICAgICAgeyBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsIHNlbGVjdGVkS2V5czogc2VsZWN0ZWRLZXlzLCBvYmo6IG9iaiB9LFxyXG4gICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgKTtcclxuICAgIC8vIHV0aWxzLmNhbGxiYWNrKHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjaywgdGhpcywgW1xyXG4gICAgLy8gICBzZWxlY3RlZEtleXMsXHJcbiAgICAvLyAgIG9iaixcclxuICAgIC8vIF0pO1xyXG4gIH1cclxuICByZXNldFNlYXJjaCgpIHtcclxuICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnJlc2V0RmllbGRzKCk7XHJcbiAgfVxyXG4gIGdldFRleHQocHJvcHMsIHRleHQpIHtcclxuICAgIGxldCBuZXdUZXh0ID0gdGV4dDtcclxuICAgIGlmIChwcm9wcz8uZGF0YSAmJiBwcm9wcz8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZGF0YSA9IHByb3BzLmRhdGE7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZGF0YVtpXS52YWx1ZSA9PSB0ZXh0KSB7XHJcbiAgICAgICAgICBuZXdUZXh0ID0gZGF0YVtpXS5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdUZXh0O1xyXG4gIH1cclxuICBzZXRUYWJsZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8uc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgc2V0VHJlZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlPy5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZEtleSA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgbGV0IHJlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIHNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBzZWxlY3RlZFtrZXldO1xyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzID0gWy4uLnJlcywgLi4ua2V5c107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuXHJcbiAgY29udmVydFF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgY29uc3QgeyByZXF1ZXN0UGFyYW1zID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgcXVlcnlQYXJhbXM6IGFueSA9IHJlcXVlc3RQYXJhbXMucXVlcnlQYXJhbXM7XHJcbiAgICBpZiAocXVlcnlQYXJhbXMgJiYgdHlwZW9mIHF1ZXJ5UGFyYW1zID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgY29uc3QgVXRpbHMgPSB0aGlzLnByb3BzLlV0aWxzIHx8IHt9O1xyXG4gICAgICBsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbihcIlV0aWxzXCIsIHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgbGV0IGNvbnZlclBhcmFtcyA9IGZ1bmMoVXRpbHMpO1xyXG4gICAgICBxdWVyeVBhcmFtcyA9IGNvbnZlclBhcmFtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMgfHwge307XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvLyDorqHnrpfooajlpLTpq5jluqbnmoTmlrnms5VcclxuICBjYWxjdWxhdGVUYWJsZUhlYWRlckhlaWdodCA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnRhYmxlV3JhcHBlclJlZi5jdXJyZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlSGVhZGVyID1cclxuICAgICAgICB0aGlzLnRhYmxlV3JhcHBlclJlZi5jdXJyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICBcImFudC10YWJsZS10aGVhZFwiXHJcbiAgICAgICAgKVswXTtcclxuICAgICAgaWYgKHRhYmxlSGVhZGVyKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGFibGVIZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICAgIGlmIChoZWFkZXJIZWlnaHQgIT09IHRoaXMuc3RhdGUudGFibGVIZWFkZXJIZWlnaHQpIHtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB0YWJsZUhlYWRlckhlaWdodDogaGVhZGVySGVpZ2h0LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuICB0aHJvdHRsZUNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0ID0gdGhyb3R0bGUoXHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVhZGVySGVpZ2h0LFxyXG4gICAgNTAwXHJcbiAgKTtcclxuXHJcbiAgLy8g5LyY5YyW5ouW5ou955u45YWz5pa55rOVXHJcbiAgaGFuZGxlTW91c2VEb3duKGU6IFJlYWN0Lk1vdXNlRXZlbnQpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAvLyDliJvlu7rpga7nvanlsYLku6XlpITnkIZpZnJhbWXlnLrmma9cclxuICAgIGNvbnN0IG1hc2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgbWFzay5zdHlsZS5jc3NUZXh0ID0gYFxyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgbGVmdDogMDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgIHotaW5kZXg6IDk5OTk7XHJcbiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTtcclxuICAgIGA7XHJcbiAgICBtYXNrLmlkID0gXCJkcmFnLW1hc2tcIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWFzayk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgbmV3V2lkdGggPSBlLnNjcmVlblg7XHJcbiAgICAgIC8vIOmZkOWItuacgOWwjzEwMHB477yM5pyA5aSnNTAwcHhcclxuICAgICAgaWYgKG5ld1dpZHRoID49IDUwICYmIG5ld1dpZHRoIDw9IDgwMCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0cmVlV2lkdGg6IG5ld1dpZHRoIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRocm90dGxlZE1vdXNlTW92ZSA9IHRocm90dGxlKGhhbmRsZU1vdXNlTW92ZSwgMTYpO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhyb3R0bGVkTW91c2VNb3ZlKTtcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlTW91c2VVcCk7XHJcbiAgICAgIC8vIOenu+mZpOmBrue9qeWxglxyXG4gICAgICBjb25zdCBtYXNrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkcmFnLW1hc2tcIik7XHJcbiAgICAgIGlmIChtYXNrKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtYXNrKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRocm90dGxlZE1vdXNlTW92ZSk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVNb3VzZVVwKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY29sdW1ucyA9IFtdLFxyXG4gICAgICBzaG93U2VhcmNoID0gdHJ1ZSxcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICAgIHN1Ym1pdFVybCA9IFwiXCIsXHJcbiAgICAgIHRhYmxlUHJvcHMgPSB7fSxcclxuICAgICAgdHJlZVByb3BzID0ge30sXHJcbiAgICAgIGZvcm1Qcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUGFnZVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID0gXCJidXR0b21cIixcclxuICAgICAgYWN0aW9uUHJvcHMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICAgIGJ1dHRvbkNsaWNrID0ge30sXHJcbiAgICAgIHBlcm1pc3Npb24gPSB7IGhhczogZmFsc2UgfSxcclxuICAgICAgcmVxdWVzdFBhcmFtcyA9IHt9LFxyXG4gICAgICByZXF1ZXN0VXJscyA9IHt9LFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0YWJsZVN0b3JlID0ge30sXHJcbiAgICAgIGZpbHRlckNvbHVtbiA9IHRydWUsXHJcbiAgICAgIGFjdGlvbkNvbHVtbiA9IHRydWUsXHJcbiAgICAgIHNob3dSb3dTZWxlY3Rpb24gPSB0cnVlLFxyXG4gICAgICBjb2x1bW5PcmRlciA9IHRydWUsXHJcbiAgICAgIGV4cGFuZGFibGUgPSB7fSxcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgICAgdGl0bGU6IHRhYmxlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXNcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG4gICAgbGV0IG5ld1RhYmxlU3RvcmUgPSB7IC4uLnRhYmxlU3RvcmUgfTtcclxuICAgIGlmIChyZXF1ZXN0UGFyYW1zLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIGxldCBxdWVyeVBhcmFtczogYW55ID0gdGhpcy5jb252ZXJ0UXVlcnlQYXJhbXMoKTtcclxuICAgICAgbGV0IGRhdGEgPSBxdWVyeVBhcmFtcz8uZGF0YSB8fCBxdWVyeVBhcmFtcz8ucGFyYW1zIHx8IHt9O1xyXG4gICAgICBuZXdUYWJsZVN0b3JlLnJlcXVlc3RDb25maWcgPSB7XHJcbiAgICAgICAgcGFyYW1zOiB7IC4uLmRhdGEsIC4uLm5ld1RhYmxlU3RvcmUucmVxdWVzdENvbmZpZz8ucGFyYW1zIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIHRpdGxlOiB0cmVlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgIGZpbHRlckNvbHVtbixcclxuICAgICAgc3RvcmU6IHtcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIGxvYWQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50YWJsZUxvYWRDYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50YWJsZUxvYWRDYWxsQmFjayhkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5uZXdUYWJsZVN0b3JlLFxyXG4gICAgICB9LFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zLFxyXG4gICAgfSBhcyBhbnk7XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsdWU6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgY29sdW1uQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCB7IGVsZW1lbnRIZWlnaHQgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgcGVybWlzc2lvbkJ1dHRvbnMgPSBbXTtcclxuICAgIGlmIChwZXJtaXNzaW9uLmhhcyAmJiBwZXJtaXNzaW9uLm1lbnVDb2RlKSB7XHJcbiAgICAgIHBlcm1pc3Npb25CdXR0b25zID1cclxuICAgICAgICBnZXRCdXR0b25QZXJtaXNzb25zKHBlcm1pc3Npb24ubWVudUNvZGUpLnBlcm1pc3NvbnMgfHwgW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYmogPSBjb252ZXJ0Q29sdW1ucyhjb2x1bW5zLCB7fSk7XHJcbiAgICBsZXQgdGFibGVDb2x1bW46IGFueVtdID0gZ2V0TmV3Q29sdW1ucyhjb2x1bW5zLCB0aGlzLnByb3BzKTtcclxuICAgIGNvbnN0IHNlYXJjaEZvcm1zID0gb2JqLnNlYXJjaEZvcm1zIHx8IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXMgPSBvYmouZWRpdG9yRm9ybXMgfHwgW107XHJcbiAgICBjb25zdCB0b29sQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHNob3dJY29uID0gdHJ1ZTtcclxuICAgIGlmIChhY3Rpb25Qcm9wcz8uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgZWxzZSBpZiAoYmFzZUFjdGlvbkNvbHVtbi5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBjb25zdCBidXR0b25NYXAgPSB7XHJcbiAgICAgIGVkaXRvcjogeyBuYW1lOiBcIue8lui+kVwiLCBjb2RlOiBcImVkaXRvclwiLCBpY29uOiA8RWRpdE91dGxpbmVkIC8+IH0sXHJcbiAgICAgIGRlbGV0ZTogeyBuYW1lOiBcIuWIoOmZpFwiLCBjb2RlOiBcImRlbGV0ZVwiLCBpY29uOiA8RGVsZXRlT3V0bGluZWQgLz4gfSxcclxuICAgICAgc2VhcmNoOiB7IG5hbWU6IFwi5p+l55yLXCIsIGNvZGU6IFwic2VhcmNoXCIsIGljb246IDxFeWVPdXRsaW5lZCAvPiB9LFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHJldHVybkJ1dHRvbiA9IChjb2RlLCBzaG93ID0gXCJcIiwgZGVmYXVsdFByb3BzID0ge30pID0+IHtcclxuICAgICAgbGV0IHByb3BzID0ge1xyXG4gICAgICAgIGljb246IHNob3dJY29uID8gYnV0dG9uTWFwW2NvZGVdLmljb24gOiBudWxsLFxyXG4gICAgICAgIHR5cGU6IFwibGlua1wiLFxyXG4gICAgICAgIC4uLmRlZmF1bHRQcm9wcyxcclxuICAgICAgfSBhcyBhbnk7XHJcblxyXG4gICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgIHByb3BzID0geyAuLi5wcm9wcywgcmVjb3JkU2hvdzogc2hvdyB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09IFwiZGVsZXRlXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gXCJlZGl0b3JcIiAmJiBidXR0b25DbGljay5vbkVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNsaWNrLm9uRWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZDogcmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuVXRpbHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IFwic2VhcmNoXCIgJiYgYnV0dG9uQ2xpY2sub25TZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICBidXR0b25DbGljay5vblNlYXJjaCxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VSZWY6IHRoaXMucHJvcHMucGFnZVJlZixcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmQ6IHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZ1bmNzLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb25TaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgY29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBjb2RlLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2FsbEJhY2sgPVxyXG4gICAgICAgICAgICAgICAgICBjb2RlID09IFwiZWRpdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRWRpdG9yQ2FsbEJhY2tcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU2VhcmNoQ2FsbEJhY2s7XHJcbiAgICAgICAgICAgICAgICBjYWxsQmFjayAmJlxyXG4gICAgICAgICAgICAgICAgICBjb252ZXJGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBjYWxsQmFjayxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmQ6IHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2J1dHRvbk1hcFtjb2RlXT8ubmFtZX1cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBjaGVja1BlcnNzaW9uID0gKGNvZGUpID0+IHtcclxuICAgICAgaWYgKCFwZXJtaXNzaW9uLmhhcykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9uQnV0dG9ucy5pbmRleE9mKGNvZGUpID4gLTE7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBidXR0b25zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGlmICgoaXRlbSA9PSBcImFkZFwiIHx8IGl0ZW0uY29kZSA9PSBcImFkZFwiKSAmJiBjaGVja1BlcnNzaW9uKFwiYWRkXCIpKSB7XHJcbiAgICAgICAgdG9vbEJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB7IG9uU2hvd0Zvcm0sIGJ1dHRvbkNsaWNrID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgICAgICAgaWYgKGJ1dHRvbkNsaWNrPy5vbkFkZCkge1xyXG4gICAgICAgICAgICAgICAgY29udmVyRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbkNsaWNrLm9uQWRkLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNzOiB0aGlzLnByb3BzLmZ1bmNzLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb25TaG93Rm9ybShudWxsLCBcImFkZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShudWxsLCBudWxsLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkFkZENhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uQWRkQ2FsbEJhY2ssXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFnZVJlZjogdGhpcy5wcm9wcy5wYWdlUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3M6IHRoaXMucHJvcHMuZnVuY3MsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOa3u+WKoFxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAoaXRlbSA9PSBcImRlbGV0ZVwiIHx8IGl0ZW0uY29kZSA9PSBcImRlbGV0ZVwiKSAmJlxyXG4gICAgICAgIGNoZWNrUGVyc3Npb24oXCJkZWxldGVcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiKSB7XHJcbiAgICAgICAgICB0b29sQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgLy8gdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgIGljb249ezxEZWxldGVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICBkYW5nZXJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgICAgcmV0dXJuQnV0dG9uKGl0ZW0uY29kZSB8fCBpdGVtLCBpdGVtLnJlY29yZFNob3csIGl0ZW0ucHJvcHMgfHwge30pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY2hlY2tQZXJzc2lvbihpdGVtLmNvZGUgPyBpdGVtLmNvZGUgOiBpdGVtKSkge1xyXG4gICAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgICByZXR1cm5CdXR0b24oXHJcbiAgICAgICAgICAgICAgaXRlbS5jb2RlID8gaXRlbS5jb2RlIDogaXRlbSxcclxuICAgICAgICAgICAgICBpdGVtLnJlY29yZFNob3csXHJcbiAgICAgICAgICAgICAgaXRlbS5wcm9wcyB8fCB7fVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICAgIGl0ZW0ubWFwKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJlxyXG4gICAgICAgICAgICAgIGNoZWNrUGVyc3Npb24oY2hpbGQ/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0b29sQnV0dG9ucy5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAoY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNvbHVtbkJ1dHRvblwiIHx8XHJcbiAgICAgICAgICAgICAgICBjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpICYmXHJcbiAgICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihjaGlsZD8ucHJvcHM/LmNvZGUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJlxyXG4gICAgICAgICAgICBjaGVja1BlcnNzaW9uKGl0ZW0/LnByb3BzPy5jb2RlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRvb2xCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY29sdW1uQnV0dG9uXCIgfHxcclxuICAgICAgICAgICAgICBpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikgJiZcclxuICAgICAgICAgICAgY2hlY2tQZXJzc2lvbihpdGVtPy5wcm9wcz8uY29kZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgY29uc3QgeyBwcm9wcyB9OiBhbnkgPSBjaGlsZHJlbjtcclxuICAgICAgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIiAmJiBjaGVja1BlcnNzaW9uKHByb3BzPy5jb2RlKSkge1xyXG4gICAgICAgIHRvb2xCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChwcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIiB8fFxyXG4gICAgICAgICAgcHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpICYmXHJcbiAgICAgICAgY2hlY2tQZXJzc2lvbihwcm9wcz8uY29kZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogYWN0aW9uUHJvcHM/LnRleHRBbGlnblxyXG4gICAgICAgICAgPyBhY3Rpb25Qcm9wcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA6IFwibGVmdFwiLFxyXG4gICAgICAgIHdpZHRoOiBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgID8gYWN0aW9uUHJvcHM/LndpZHRoXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgOiAyMDAsXHJcbiAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcclxuICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnksIHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9XHJcbiAgICAgIHNob3dUb29sQnV0dG9uICYmXHJcbiAgICAgIHRvb2xCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCI7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuICAgIGxldCBoZWFkZXJIZWlnaHQgPSBzaG93U2VhcmNoICYmIHNlYXJjaEZvcm1zLmxlbmd0aCA+IDAgPyAxMDQgOiAwOyAvL+WktOmDqOaQnOe0ouagj+mrmOW6plxyXG4gICAgbGV0IHRvb2xIZWlnaHQgPSB0YWJsZVRpdGxlIHx8IHRvb2xGbGFnID8gNTAgOiAwO1xyXG4gICAgbGV0IHBhZGRpbmdIZWlnaHQgPSAyMCAqIDI7IC8v5LiK5LiL6Ze06LedXHJcbiAgICBsZXQgdGFibGVDb250ZW50SGVpZ2h0ID1cclxuICAgICAgZWxlbWVudEhlaWdodCAtIHRvb2xIZWlnaHQgLSBwYWRkaW5nSGVpZ2h0IC0gaGVhZGVySGVpZ2h0O1xyXG4gICAgbGV0IFBhZ2luYXRpb25IZWlnaHQgPSB0YWJsZVByb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlID8gMzIgKyAxNiA6IDA7IC8vMzIg5Li65YiG6aG15Zmo6auY5bqmLDE25Li6bWFyZ2lu6Ze06LedXHJcbiAgICBsZXQgdGFibGVIZWlnaHQgPSB0YWJsZUNvbnRlbnRIZWlnaHQgLSBQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgbGV0IHRhYmxlU3JvbGxIZWlnaHQgPVxyXG4gICAgICB0YWJsZUNvbnRlbnRIZWlnaHQgLVxyXG4gICAgICAodGhpcy5zdGF0ZS50YWJsZUhlYWRlckhlaWdodCA+IDAgPyB0aGlzLnN0YXRlLnRhYmxlSGVhZGVySGVpZ2h0IDogNTUpIC1cclxuICAgICAgUGFnaW5hdGlvbkhlaWdodDtcclxuICAgIC8vIGlmICh0YWJsZVByb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlKSB7XHJcbiAgICBjb25zdCBzY3JvbGwgPSB0YWJsZVBhcmFtcy5zY3JvbGw7XHJcbiAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgLi4udGFibGVQYXJhbXMsXHJcbiAgICAgIHNjcm9sbDogeyB4OiBcIm1heC1jb250ZW50XCIsIHk6IHRhYmxlU3JvbGxIZWlnaHQsIC4uLnNjcm9sbCB9LFxyXG4gICAgfTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2VcIiksIGNsYXNzTmFtZSl9XHJcbiAgICAgICAgcmVmPXt0aGlzLnBhZ2VSZWZ9XHJcbiAgICAgID5cclxuICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGUgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGl0bGVcIikpfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMucGFnZVRpdGxlfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtcGFuZVwiKSl9XHJcbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtzaG93TGVmdCAmJiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1sZWZ0XCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiB0aGlzLnN0YXRlLnRyZWVXaWR0aCB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3RyZWVUaXRsZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidHJlZS10aXRsZVwiKX0+e3RyZWVUaXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcInRyZWUtY29udGVudFwiKSwge1xyXG4gICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwidHJlZS1jb250ZW50LW5vdGl0bGVcIildOiAhdHJlZVRpdGxlLFxyXG4gICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0cmVlLWRyYWdcIlxyXG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5oYW5kbGVNb3VzZURvd24uYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxUcmVlXHJcbiAgICAgICAgICAgICAgICAgIHN0b3JlPXt7IC4uLnRyZWVTdG9yZSB9fVxyXG4gICAgICAgICAgICAgICAgICBzaG93SWNvbj17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e3RyZWVTZWFyY2h9XHJcbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnRyZWVTZWxlY3QuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzPXtbdGhpcy5zdGF0ZS50cmVlU2VsZWN0ZWRLZXldfVxyXG4gICAgICAgICAgICAgICAgICB0aXRsZUFsaWFzPXt0aXRsZUFsaWFzfVxyXG4gICAgICAgICAgICAgICAgICByZWY9e3RoaXMudHJlZVJlZn1cclxuICAgICAgICAgICAgICAgICAgey4uLm90aGVydHJlZVBhcmFtc31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXJpZ2h0XCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1uby1sZWZ0LXJpZ2h0XCIpXTogIXNob3dMZWZ0LFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoMTAwJSAtICR7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnRyZWVXaWR0aCAtIChzaG93TGVmdCA/IDI0IDogMClcclxuICAgICAgICAgICAgICB9cHgpYCxcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1oZWFkZXJzZWFyY2hcIil9PlxyXG4gICAgICAgICAgICAgICAgPEhlYWRlclNlYXJjaFxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hGb3Jtcz17c2VhcmNoRm9ybXN9XHJcbiAgICAgICAgICAgICAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbj17dG9vbEJ1dHRvblBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBvblNlYXJjaD17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBvblJlc2V0PXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMub25SZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnJlc2V0RmllbGRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUxvYWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2VhcmNoUmVmfVxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hGb3JtUHJvcHM9e3RoaXMucHJvcHMuc2VhcmNoRm9ybVByb3BzfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtZ2FwXCIpXTogIXNlYXJjaEZsYWcsXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnBhZ2VDb250ZW50UmVmfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgeyh0YWJsZVRpdGxlIHx8IHRvb2xGbGFnKSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10aXRsZVwiKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGl0bGUtd2lkdGhcIildOiAhdG9vbGJhckZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2Pnt0YWJsZVRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB7dG9vbEZsYWcgJiYgdGhpcy5yZW5kZXJUb29sQnV0dG9ucyh0b29sQnV0dG9ucywgdG9vbGJhckZsYWcpfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoXHJcbiAgICAgICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZVwiKSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdG9wXCIpXTogIXRvb2xiYXJGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10b3AyXCIpXTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRvb2xiYXJGbGFnICYmICF0b29sRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIHJlZj17dGhpcy50YWJsZVdyYXBwZXJSZWZ9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlQ29udGVudEhlaWdodCB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgICByZWY9e3RoaXMudGFibGVSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e3RhYmxlQ29sdW1ufVxyXG4gICAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kSWNvbjogKHsgZXhwYW5kZWQsIG9uRXhwYW5kLCByZWNvcmQgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXhwYW5kZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2RlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzPy5sZW5ndGggPiAwID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPERvd25PdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHJlY29yZC5jaGlsZE5vZGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2Rlcz8ubGVuZ3RoID4gMCA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSaWdodE91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZXhwYW5kYWJsZSxcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgY29sdW1uT3JkZXI9e3RydWV9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGFnaW5hdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSBwYWdpbmF0aW9uLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICB0b29sYmFyPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgb25Ub29sQ2xpY2s6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTG9hZChwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLnRhYmxlUHJvcHMudG9vbGJhcixcclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgc2hvd1Jvd1NlbGVjdGlvbj17c2hvd1Jvd1NlbGVjdGlvbn1cclxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxyXG4gICAgICAgICAgICAgICAgICB7Li4udGFibGVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgICAgIC8vIHBhZ2luYXRpb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIHsvKiA8ZGl2PjwvZGl2PiAqL31cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIHtlZGl0b3JGb3JtICYmIChcclxuICAgICAgICAgICAgPEVkaXRvckZvcm1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMuZWRpdG9yUmVmfVxyXG4gICAgICAgICAgICAgIGNhbGxCYWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblN1bWJpdENhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbnZlckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgeyBwYWdlUmVmOiB0aGlzLnByb3BzLnBhZ2VSZWYgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLlV0aWxzXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlUmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICBmb3Jtcz17ZWRpdG9yRm9ybXN9XHJcbiAgICAgICAgICAgICAgc3VibWl0VXJsPXtzdWJtaXRVcmx9XHJcbiAgICAgICAgICAgICAgc3VibWl0UGFyYW1zPXtzdWJtaXRQYXJhbXN9XHJcbiAgICAgICAgICAgICAgb25TdWJtaXQ9e3RoaXMucHJvcHMub25TdWJtaXR9XHJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XHJcbiAgICAgICAgICAgICAgb25IaWRlRm9ybT17dGhpcy5wcm9wcy5vbkhpZGVGb3JtfVxyXG4gICAgICAgICAgICAgIG9uRm9ybUNoYW5nZT17dGhpcy5wcm9wcy5vbkZvcm1DaGFuZ2V9XHJcbiAgICAgICAgICAgICAgZm9ybVR5cGU9e3RoaXMucHJvcHMuZm9ybVR5cGUgfHwgXCJhdXRvXCJ9XHJcbiAgICAgICAgICAgICAgY2hhbmdlVmFsaWQ9e2Zvcm1DaGFuZ2VWYWxpZH1cclxuICAgICAgICAgICAgICBVdGlscz17dGhpcy5wcm9wcy5VdGlsc31cclxuICAgICAgICAgICAgICByZXF1ZXN0T2JqZWN0PXt7XHJcbiAgICAgICAgICAgICAgICBhZGRVcmw6IHJlcXVlc3RVcmxzLmFkZFVybCxcclxuICAgICAgICAgICAgICAgIGVkaXRvclVybDogcmVxdWVzdFVybHMuZWRpdG9yVXJsLFxyXG4gICAgICAgICAgICAgICAgYWRkUGFyYW1zOiByZXF1ZXN0UGFyYW1zLmFkZFBhcmFtcyxcclxuICAgICAgICAgICAgICAgIGVkaXRvclBhcmFtczogcmVxdWVzdFBhcmFtcy5lZGl0b3JQYXJhbXMsXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICBmdW5jcz17dGhpcy5wcm9wcy5mdW5jc31cclxuICAgICAgICAgICAgICB7Li4uZm9ybVByb3BzfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUGFnZTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxhQUFhLFFBQW1CLE9BQU87QUFDdkQsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxJQUFJLE1BQU0saUJBQWlCO0FBQ2xDLE9BQU9DLE1BQU0sTUFBTSxtQkFBbUI7QUFDdEMsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxPQUFPLE1BQU0sb0JBQW9CO0FBQ3hDLE9BQU9DLE9BQU8sTUFBTSxvQkFBb0I7QUFDeEMsT0FBT0MsVUFBVSxNQUF5QixtQkFBbUI7QUFDN0QsT0FBT0MsR0FBRyxNQUFNLFlBQVk7QUFDNUIsT0FBTyxxQkFBcUI7QUFHNUIsU0FDRUMsWUFBWSxFQUNaQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsY0FBYyxRQUNULG1CQUFtQjtBQUMxQixTQUFTQyxjQUFjLEVBQUVDLE9BQU8sUUFBa0MsYUFBYTtBQUMvRSxPQUFPQyxPQUFP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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","PureComponent","Table","Tree","Button","Modal","Popover","message","EditorForm","cls","DownOutlined","EyeOutlined","EditOutlined","RightOutlined","PlusOutlined","EllipsisOutlined","DeleteOutlined","converFunction","getLess","request","config","getStorage","getButtonPermissons","HeaderSearch","convertColumns","getNewColumns","throttle","styles","BasePage","constructor","props","_type","_size","_defineProperty","createRef","checkedTreeKeys","name","userType","account","state","value","deptId","onSearch","selected","res","key","keys","length","tableWrapperRef","current","tableHeader","getElementsByClassName","headerHeight","getBoundingClientRect","height","tableHeaderHeight","setState","calculateTableHeaderHeight","storePrefix","type","content","size","selectedRowKeys","selectedRowDatas","treeSelectedKey","expand","formType","tableSize","treeSearchPrams","popopens","moreOpen","elementHeight","permissionButtons","queryParams","buttonsLoading","treeWidth","showLeft","componentDidMount","_this$pageContentRef$","initData","permisson","pageContentRef","clientHeight","window","addEventListener","throttleCalculateTableHeaderHeight","setTimeout","componentDidUpdate","_this$pageRef$current","pageRef","componentWillUnmount","removeEventListener","setSearchParams","params","callBack","_this$searchRef$curre","searchRef","doSubmit","data","_this$editorRef$curre","label","arguments","undefined","editorRef","showForm","_this$editorRef","editorflag","newValue","_objectSpread","show","hideForm","_this$editorRef$curre2","setLoading","loading","_this$editorRef$curre3","setEditFormValues","_this$editorRef$curre4","setFormValue","getEditFormValues","_this$editorRef$curre5","getFormValue","onDelete","_this$tableRef$curren","_this$tableRef$curren2","deleteUrl","deleteParams","deletePosition","buttonClick","requestParams","requestUrls","requestConfig","_this","tableRef","getSelectedRowKeys","getSelectedRowDatas","url","warning","confirm","onOk","record","ids","id","funcs","Utils","Error","dataParams","otherParams","_objectWithoutProperties","_excluded","defaultParams","method","autoPrefix","join","finalParams","then","code","_this$searchRef","_this$props$onCallBac","_this$props$onCallBac2","success","getSearchValues","onCallBacks","onDeleteCallBack","tableLoad","error","catch","console","log","_tableStore$requestCo","_this$tableRef$curren3","defaultRequestConfig","tableProps","store","tableStore","convertQueryParams","requestConig","storeConfig","storeParams","otherStoreConfig","_excluded2","load","_tableStore$requestCo2","_this$props$onCallBac3","onQueryCallBack","tableReload","_this$tableRef$curren4","autoLoad","reload","callback","_res$data","records","currentPage","_this$tableRef$curren5","treeLoad","_this$treeRef$current","treeRef","_this$tableRef$curren6","_this$tableRef$curren7","setSelectedRowKeys","_this$tableRef$curren8","setSelectedRowDatas","_this$tableRef$curren9","resetSelectedRowKeys","_this$tableRef$curren10","_this$searchRef2","fromValue","getChildrenData","rowKey","resKey","childNodes","children","map","item","index","renderToolButtons","toolbuttons","toolbarFlag","flag","showSearch","_item$props","pageType","onClick","icon","_excluded3","createElement","className","_extends","style","marginLeft","marginRight","title","placement","open","onOpenChange","renderCloumnButton","columnButtons","rowRecord","actionProps","baseActionColumn","newButtons","showIcon","_item$props2","recordShow","_excluded4","eventOption","Uitls","func","Function","push","e","eval","number","buttonNumber","_item$props3","_excluded5","Number","_item$props4","_excluded6","trigger","treeSelect","selectedKeys","obj","_this$searchRef3","_this$props$onCallBac4","_this$props$onCallBac5","keyword","searchKey","searchField","parantSelect","treeProps","selectedNodes","dataref","attribute","isLeaf","onTreeSelect","treeSelectCallBack","resetSearch","_this$searchRef$curre2","resetFields","getText","text","_props$data","newText","i","setTableData","_this$tableRef$curren11","setData","setTreeData","_this$treeRef$current2","converParams","handleMouseDown","preventDefault","mask","document","cssText","body","appendChild","handleMouseMove","newWidth","screenX","throttledMouseMove","handleMouseUp","getElementById","removeChild","render","_this2","_tableProps$toolbar","_tableProps$toolbar2","columns","submitUrl","formProps","formPageProps","submitParams","showToolButton","buttons","editorForm","onShowForm","formChangeValid","toolButtonPosition","permission","has","filterColumn","actionColumn","showRowSelection","columnOrder","expandable","tableTitle","othertableParams","_excluded7","newTableStore","_newTableStore$reques","treeStore","treeSearch","titleAlias","treeTitle","othertreeParams","_excluded8","tableParams","defaultValue","menuCode","permissons","tableColumn","searchForms","editorForms","toolButtons","buttonMap","editor","delete","search","returnButton","_buttonMap$code","defaultProps","onEditor","_this2$props$onCallBa","_this2$props$onCallBa2","onEditorCallBack","onSearchCallBack","checkPerssion","indexOf","onAdd","_this$props$onCallBac6","_this$props$onCallBac7","onAddCallBack","bind","danger","Array","isArray","child","_child$props","_child$props2","_child$props3","_child$props4","_child$props5","_item$props5","_item$props6","_item$props7","_item$props8","_item$props9","dataIndex","align","textAlign","width","fixed","reacord","Fragment","searchFlag","tableTool","toolFlag","toolbar","tools","toolHeight","paddingHeight","tableContentHeight","PaginationHeight","pagination","tableHeight","tableSrollHeight","scroll","x","y","ref","pageTitle","display","onMouseDown","checkable","searchable","onSelect","concat","onReset","_this$searchRef$curre3","searchFormProps","expandIcon","_ref","_record$childNodes","_record$childNodes2","expanded","onExpand","onChange","onToolClick","onRefresh","_this$props$onCallBac8","_this$props$onCallBac9","onSumbitCallBack","forms","onSubmit","onHideForm","onFormChange","changeValid","requestObject","addUrl","editorUrl","addParams","editorParams"],"sources":["../../../src/components/page/BasePage/index.tsx"],"sourcesContent":["import React, { PureComponent, ReactNode } from \"react\";\r\nimport Table from \"../../base/table\";\r\nimport Tree from \"../../base/tree\";\r\nimport Button from \"../../base/button\";\r\nimport Modal from \"../../base/modal\";\r\nimport Popover from \"../../base/popover\";\r\nimport message from \"../../base/message\";\r\nimport EditorForm, { FormPageProps } from \"../FormPage/index\";\r\nimport cls from \"classnames\";\r\nimport \"./index.module.less\";\r\nimport Store, { PageStore, StoreProps } from \"@bj-nsc/msn\";\r\nimport { utils } from \"@bj-nsc/msn/lib/utils\";\r\nimport {\r\n DownOutlined,\r\n EyeOutlined,\r\n EditOutlined,\r\n RightOutlined,\r\n PlusOutlined,\r\n EllipsisOutlined,\r\n DeleteOutlined,\r\n} from \"@ant-design/icons\";\r\nimport { converFunction, getLess, getNode, simplifyColumns } from \"../../utils\";\r\nimport request from \"nsc-request\";\r\nimport config from \"../../config\";\r\nimport { getStorage, px2vw, getButtonPermissons } from \"@bj-nsc/functions\";\r\nimport HeaderSearch from \"../HeaderSearch\";\r\nimport { PaginationProps } from \"antd\";\r\nimport nscfile from \"nsc-file\";\r\nimport { convertColumns, getNewColumns } from \"./utils\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport throttle from \"lodash/throttle\";\r\ntype ButtonItem =\r\n | string\r\n | {\r\n code: string;\r\n recordShow?: string | Function;\r\n props?: any;\r\n };\r\n\r\ninterface TableProps {\r\n actionColumn?: boolean; //是否显示操作列\r\n store?: StoreProps;\r\n filterColumn?: boolean; //是否显示过滤按钮\r\n showRowSelection?: boolean; //是否表格勾选列\r\n pagination?: boolean | PaginationProps; //是否显示分页\r\n columnOrder?: boolean; //是否显示表格序列\r\n [propsName: string]: any;\r\n}\r\nconst styles = null;\r\ninterface TreeProps {\r\n store?: StoreProps;\r\n showSearch?: boolean; //是否显示搜索框\r\n searchKey?: string; //搜索value对应的key\r\n searchField?: string; //查询对应的key\r\n titleAlias?: string; //树title对应的key,默认title\r\n nodePorps?: object;\r\n parantSelect?: boolean;\r\n [propsName: string]: any;\r\n}\r\ninterface FormProps extends FormPageProps {}\r\n\r\nexport interface NSCBaseBageProps {\r\n showSearch?: boolean; //是否显示头部搜索栏\r\n tableProps?: TableProps; //表格参数\r\n treeProps?: TreeProps; //左侧树参数\r\n submitParams?: Object; //添加参数,默认mothod:post, 参数通过data传递\r\n submitUrl?: string;\r\n onSubmit?: (value?: any, label?: any) => void;\r\n columns?: Array<Object>;\r\n showLeft?: boolean; //是否显示左侧目录树\r\n showToolButton?: boolean; //是否显示按钮栏\r\n editorForm?: boolean; //是否需要表单功能 , 为false 编辑,查看,新增功能均不可用\r\n deleteUrl?: string; //删除url\r\n onDelete?: (selectedKeys?: Array<string>) => void; //删除参数,默认mothod:post, 参数通过ids拼接传递给后台\r\n deletePosition?: \"toolbar\" | \"row\";\r\n deleteParams?: Object;\r\n children?: React.ReactNode;\r\n onSearch?: (value?: any) => void;\r\n onReset?: () => void;\r\n initData?: any; //初始化回调函数,在componentDidMount中调用\r\n buttons?: ButtonItem[]; //按钮集合 ['add','delete','search','editor']\r\n onShowForm?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onHideForm?: () => void; //打开表单回调\r\n onFormChange?: (changedValues?: any, allValues?: any) => void; //表单onChange回调\r\n formType?: \"modal\" | \"drawer\";\r\n formChangeValid?: boolean; //表单校验\r\n className?: any;\r\n toolButtonPosition?: \"right\" | \"buttom\";\r\n pageTitle?: string | ReactNode;\r\n formProps?: FormProps;\r\n actionProps?: {\r\n textAlign?: string;\r\n showIcon?: boolean;\r\n width?: number;\r\n buttonNumber?: number | \"all\";\r\n };\r\n searchFormProps?: { wrapperCol?: any; labelCol?: any };\r\n onTreeSelect?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onCallBacks?: {\r\n treeSelectCallBack?: any; //树点击查询后回调\r\n onQueryCallBack?: any; //查询回调,查询数据后回调\r\n onSumbitCallBack?: any; //保存回调,保存数据成功后回调\r\n onDeleteCallBack?: any; //删除按钮回调,删除数据后执行\r\n onEditorCallBack?: any; //编辑按钮回调,打开弹框后执行\r\n onAddCallBack?: any; //添加按钮回调,打开弹框后执行\r\n onSearchCallBack?: any; //列表查询按钮回调,打开弹框后执行\r\n };\r\n pageType?: \"normal\" | \"tabspage\";\r\n formPageProps?: {};\r\n buttonClick?: {\r\n onAdd?: () => void;\r\n onEditor?: (value?: any) => void;\r\n onSearch?: (value?: any) => void;\r\n onDelete?: (value?: any) => void;\r\n };\r\n permission?: {\r\n has?: boolean;\r\n menuCode?: string;\r\n };\r\n requestParams?: {\r\n //需要额外传的固定请求参数\r\n addParams?: Object; //新增固定参数\r\n editorParams?: Object; //编辑固定参数\r\n queryParams?: Object; //查询固定参数\r\n deleteParams?: Object; //删除固定参数\r\n };\r\n requestUrls?: {\r\n addUrl?: string; //新增url\r\n editorUrl?: string; //编辑url\r\n deleteUrl?: string; //删除url\r\n };\r\n funcs?: any;\r\n requestConfig?: any;\r\n [propsName: string]: any;\r\n}\r\n\r\nclass BasePage extends PureComponent<NSCBaseBageProps, any> {\r\n tableRef = React.createRef<any>();\r\n treeRef = React.createRef<any>();\r\n searchRef = React.createRef<any>();\r\n editorRef = React.createRef<any>();\r\n pageRef = React.createRef<any>();\r\n pageContentRef = React.createRef<any>();\r\n dateFormat = {} as any;\r\n tableWrapperRef = React.createRef<HTMLDivElement>();\r\n static convertColumns = convertColumns;\r\n constructor(props: any) {\r\n super(props);\r\n let { storePrefix } = config();\r\n let type = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"formType\" : \"formType\"\r\n );\r\n type = type?.content;\r\n let size = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"tableSize\" : \"tableSize\"\r\n );\r\n size = size?.content;\r\n this.state = {\r\n type: \"add\",\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n treeSelectedKey: \"\",\r\n expand: false,\r\n formType: type || \"modal\",\r\n tableSize: size || \"default\",\r\n treeSearchPrams: {},\r\n popopens: {},\r\n moreOpen: false,\r\n elementHeight: 0,\r\n permissionButtons: [],\r\n queryParams: {},\r\n tableHeaderHeight: 0, // 添加表头高度到state\r\n buttonsLoading: {},\r\n treeWidth: this.props.showLeft ? 260 : 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { initData, permisson = {} } = this.props;\r\n const elementHeight = this.pageContentRef.current?.clientHeight;\r\n\r\n // 添加窗口resize监听\r\n window.addEventListener(\"resize\", this.throttleCalculateTableHeaderHeight);\r\n\r\n // 初始计算表头高度\r\n setTimeout(this.calculateTableHeaderHeight, 0);\r\n\r\n this.setState({\r\n elementHeight,\r\n });\r\n initData && initData();\r\n }\r\n componentDidUpdate() {\r\n const elementHeight = this.pageRef.current?.clientHeight;\r\n if (elementHeight > this.state.elementHeight) {\r\n this.setState({\r\n elementHeight,\r\n });\r\n }\r\n }\r\n componentWillUnmount() {\r\n // 移除resize监听\r\n window.removeEventListener(\r\n \"resize\",\r\n this.throttleCalculateTableHeaderHeight\r\n );\r\n }\r\n setSearchParams(params, callBack) {\r\n this.searchRef.current?.setSearchParams(params);\r\n callBack && callBack(params);\r\n }\r\n doSubmit(data, label = \"编辑\") {\r\n this.editorRef.current?.doSubmit(data, label);\r\n }\r\n\r\n onSelect = (checkedTreeKeys: any) => {\r\n const { name, userType, account } = this.state;\r\n const value = { name, userType, account, deptId: checkedTreeKeys[0] };\r\n if (this.props.onSearch) {\r\n this.props.onSearch(value);\r\n }\r\n // this.tableLoad(value);\r\n };\r\n\r\n //显示表单\r\n showForm(value?: any, editorflag = \"add\", callBack?: any) {\r\n let newValue = value ? { ...value } : null;\r\n this.editorRef?.current?.show(newValue, editorflag, callBack);\r\n }\r\n\r\n //关闭表单\r\n hideForm() {\r\n this.editorRef.current?.hideForm();\r\n }\r\n\r\n setLoading(loading: boolean) {\r\n this.editorRef.current?.setLoading(loading);\r\n }\r\n\r\n setEditFormValues(value, type = \"编辑\") {\r\n this.editorRef.current?.setFormValue(value, type);\r\n }\r\n\r\n getEditFormValues() {\r\n return this.editorRef.current?.getFormValue();\r\n }\r\n\r\n //批量删除\r\n onDelete(data?: any) {\r\n const {\r\n deleteUrl,\r\n onDelete,\r\n deleteParams = {},\r\n deletePosition = \"toolbar\",\r\n buttonClick = {},\r\n requestParams = {},\r\n requestUrls = {},\r\n requestConfig = {},\r\n } = this.props;\r\n let _this = this;\r\n const selectedRowKeys = this.tableRef.current?.getSelectedRowKeys();\r\n const selectedRowDatas = this.tableRef.current?.getSelectedRowDatas();\r\n let url = requestUrls.deleteUrl ? requestUrls.deleteUrl : deleteUrl;\r\n let params: any = requestParams.deleteParams\r\n ? requestParams.deleteParams\r\n : deleteParams;\r\n if (deletePosition == \"toolbar\") {\r\n if (selectedRowKeys.length == 0) {\r\n message.warning(\"请选择要删除的数据!\");\r\n return;\r\n }\r\n }\r\n Modal.confirm({\r\n content: \"是否确认删除所选项?\",\r\n // centered:true,\r\n onOk: () => {\r\n if (buttonClick.onDelete) {\r\n converFunction(\r\n buttonClick.onDelete,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: deletePosition == \"toolbar\" ? selectedRowDatas : data,\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys : data?.id,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onDelete) {\r\n onDelete &&\r\n onDelete(deletePosition == \"toolbar\" ? selectedRowKeys : data);\r\n return;\r\n }\r\n if (!url) {\r\n throw new Error(\"url不能为空!\");\r\n }\r\n const { data: dataParams = {}, ...otherParams } = params;\r\n const defaultParams = {\r\n method: \"post\",\r\n autoPrefix: true,\r\n params: {\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys.join() : data.id,\r\n ...dataParams,\r\n },\r\n ...requestConfig,\r\n };\r\n let finalParams = {} as any;\r\n finalParams = { ...defaultParams, ...otherParams };\r\n request(url, {\r\n ...finalParams,\r\n })\r\n .then(function (res: any) {\r\n const { code } = res;\r\n if (code === 200) {\r\n message.success(\"删除成功!\");\r\n let value = _this.searchRef?.current?.getSearchValues();\r\n _this.props.onCallBacks?.onDeleteCallBack &&\r\n converFunction(\r\n _this.props.onCallBacks?.onDeleteCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n _this.tableLoad(value);\r\n } else {\r\n message.error(\"删除失败!\");\r\n }\r\n })\r\n .catch(function (error: any) {\r\n console.log(\"error\", error);\r\n });\r\n },\r\n });\r\n }\r\n tableLoad(params: any, requestConfig = {}) {\r\n const {\r\n requestConfig: defaultRequestConfig = {},\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore = {} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n const { requestConig: storeConfig = {} } = tableStore;\r\n const { params: storeParams = {}, ...otherStoreConfig } = storeConfig;\r\n this.tableRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...otherStoreConfig,\r\n ...requestConfig,\r\n params: { ...storeParams, ...finalParams },\r\n });\r\n }\r\n //查询\r\n onSearch(params) {\r\n const {\r\n onSearch,\r\n onCallBacks,\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n if (onSearch) {\r\n onSearch({ ...finalParams, ...this.state.treeSearchPrams });\r\n return;\r\n }\r\n this.tableLoad({ ...finalParams, ...this.state.treeSearchPrams });\r\n onCallBacks?.onQueryCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onQueryCallBack,\r\n { pageRef: this.props.pageRef, params: params },\r\n this.props.Utils\r\n );\r\n }\r\n //表格重新加载\r\n tableReload(params = {}, autoLoad = true) {\r\n this.tableRef.current?.store?.reload({\r\n callback: (res) => {\r\n if (\r\n autoLoad &&\r\n res?.data?.records?.length == 0 &&\r\n this.state.currentPage !== 1\r\n ) {\r\n this.tableRef.current?.store?.reload({\r\n params: { current: 1, ...params },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n treeLoad(params: any, requestConfig = {}) {\r\n const { requestConfig: defaultRequestConfig = {} } = this.props;\r\n this.treeRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...requestConfig,\r\n params: params,\r\n });\r\n }\r\n getSelectedRowKeys() {\r\n return this.tableRef.current?.getSelectedRowKeys();\r\n }\r\n getSelectedRowDatas() {\r\n return this.tableRef.current?.getSelectedRowDatas();\r\n }\r\n setSelectedRowKeys(data: Array<String | Number>) {\r\n return this.tableRef.current?.setSelectedRowKeys(data);\r\n }\r\n setSelectedRowDatas(data: Array<Object>) {\r\n return this.tableRef.current?.setSelectedRowDatas(data);\r\n }\r\n resetSelectedRowKeys() {\r\n return this.tableRef.current?.resetSelectedRowKeys();\r\n }\r\n\r\n getSearchValues() {\r\n const fromValue = this.searchRef?.current?.getSearchValues();\r\n return { ...fromValue, ...this.state.treeSearchPrams };\r\n }\r\n\r\n getChildrenData(data, keys = []) {\r\n const { tableProps } = this.props;\r\n const { rowKey = \"id\" } = tableProps;\r\n let resKey = [];\r\n let key = \"\";\r\n if (data.childNodes) {\r\n const children = data.childNodes;\r\n children.map((item, index) => {\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(item);\r\n } else {\r\n key = item[rowKey];\r\n }\r\n if (item.childNodes) {\r\n this.getChildrenData(item.childNodes, keys);\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n });\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n return resKey;\r\n }\r\n\r\n renderToolButtons(toolbuttons: any, toolbarFlag) {\r\n const flag = toolbuttons.length > 5;\r\n const { showSearch = true } = this.props;\r\n const content = toolbuttons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, show, ...params } = item.props;\r\n if (index > 3) {\r\n return (\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n >\r\n <Button\r\n key={index}\r\n onClick={() => {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n onClick && onClick();\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n </div>\r\n );\r\n }\r\n });\r\n\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-tool-buttons\"))}\r\n style={{ marginLeft: 0 }}\r\n >\r\n {toolbuttons.map((item: any, index: any) => {\r\n if (flag) {\r\n if (index < 4) {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n } else if (index == 4) {\r\n return (\r\n <Popover\r\n content={content}\r\n title={null}\r\n placement=\"bottom\"\r\n key={index}\r\n open={this.state.moreOpen}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n this.setState({\r\n moreOpen: true,\r\n });\r\n } else {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n }\r\n }}\r\n // open={true}\r\n // overlayClassName={styles['pop-box']}\r\n >\r\n <Button type=\"primary\">\r\n 更多 <DownOutlined />\r\n </Button>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: index == toolbuttons.length - 1 ? 0 : 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n );\r\n }\r\n renderCloumnButton(columnButtons: any, rowRecord: any) {\r\n const { actionProps, tableProps = {} } = this.props;\r\n const { baseActionColumn } = config();\r\n const newButtons = [];\r\n const { rowKey = \"id\" } = tableProps;\r\n let key = \"\";\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(rowRecord);\r\n } else {\r\n key = rowRecord[rowKey];\r\n }\r\n let showIcon = false;\r\n if (actionProps?.showIcon === true || baseActionColumn.showIcon === true)\r\n showIcon = true;\r\n columnButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, recordShow, ...params } =\r\n item.props;\r\n if (recordShow) {\r\n if (typeof recordShow == \"string\") {\r\n try {\r\n const eventOption = {\r\n record: rowRecord,\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n };\r\n const Utils = { ...this.props.Uitls };\r\n let func = new Function(\"eventOption,Utils\", recordShow);\r\n const show = func(eventOption, Utils);\r\n show && newButtons.push(item);\r\n } catch (e) {\r\n let record = rowRecord;\r\n if (eval(recordShow)) {\r\n newButtons.push(item);\r\n }\r\n }\r\n } else if (typeof recordShow == \"function\") {\r\n const show = recordShow(rowRecord);\r\n show && newButtons.push(item);\r\n }\r\n } else {\r\n newButtons.push(item);\r\n }\r\n });\r\n let number = actionProps?.buttonNumber\r\n ? actionProps?.buttonNumber\r\n : baseActionColumn?.buttonNumber\r\n ? baseActionColumn?.buttonNumber\r\n : 3;\r\n let flag = false;\r\n if (number == \"all\") {\r\n flag = false;\r\n } else {\r\n flag = newButtons.length > number;\r\n }\r\n\r\n const content = newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, show, ...params } =\r\n item.props;\r\n if (index > Number(number) - 1) {\r\n return (\r\n <Button\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n key={index}\r\n onClick={() => {\r\n let data = { ...this.state.popopens };\r\n data[rowRecord.id] = false;\r\n this.setState({\r\n popopens: data,\r\n });\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n return newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, ...params } =\r\n item.props;\r\n if (flag) {\r\n if (index < number) {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n icon={icon}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n } else if (index == number) {\r\n return (\r\n <Popover\r\n placement=\"bottom\"\r\n title={null}\r\n content={content}\r\n trigger={[\"click\"]}\r\n key={index}\r\n open={this.state.popopens[key] || false}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n let data = { ...this.state.popopens };\r\n data[key] = true;\r\n this.setState({\r\n popopens: data,\r\n });\r\n } else {\r\n this.setState({\r\n popopens: {},\r\n });\r\n }\r\n }}\r\n // overlayClassName={styles['pop']}\r\n >\r\n <a className={getLess(styles, \"nsc-basepage-editor\")}>\r\n <EllipsisOutlined />\r\n </a>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type=\"link\"\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n // }\r\n }\r\n //树点击事件\r\n treeSelect(selectedKeys: any, obj: any) {\r\n let keyword = \"\";\r\n const {\r\n searchKey = \"key\",\r\n searchField = \"\",\r\n parantSelect = true,\r\n } = this.props.treeProps;\r\n const { treeSelectedKey } = this.state;\r\n const { selected, selectedNodes } = obj;\r\n\r\n if (selected) {\r\n keyword = selectedNodes[0].dataref.attribute[searchKey];\r\n if (parantSelect) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n } else {\r\n if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {\r\n if (selectedKeys[0] !== treeSelectedKey) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n this.setState({\r\n treeSelectedKey: keyword,\r\n treeSearchPrams: {},\r\n });\r\n }\r\n if (this.props.onTreeSelect) {\r\n this.props.onTreeSelect(selectedKeys, obj);\r\n return;\r\n }\r\n const fromValue = this.searchRef?.current?.getSearchValues() || {};\r\n searchField && this.tableLoad({ ...fromValue, [searchField]: keyword });\r\n this.props.onCallBacks?.treeSelectCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.treeSelectCallBack,\r\n { pageRef: this.props.pageRef, selectedKeys: selectedKeys, obj: obj },\r\n this.props.Utils\r\n );\r\n // utils.callback(this.props.onCallBacks?.treeSelectCallBack, this, [\r\n // selectedKeys,\r\n // obj,\r\n // ]);\r\n }\r\n resetSearch() {\r\n this.searchRef.current?.resetFields();\r\n }\r\n getText(props, text) {\r\n let newText = text;\r\n if (props?.data && props?.data?.length > 0) {\r\n let data = props.data;\r\n for (let i = 0; i < data?.length; i++) {\r\n if (data[i].value == text) {\r\n newText = data[i].label;\r\n }\r\n }\r\n }\r\n return newText;\r\n }\r\n setTableData(data) {\r\n this.tableRef.current?.store?.setData(data);\r\n }\r\n setTreeData(data) {\r\n this.treeRef.current?.store?.setData(data);\r\n }\r\n getSelectedKey = (selected) => {\r\n let res = [];\r\n for (let key in selected) {\r\n const keys = selected[key];\r\n if (keys.length > 0) {\r\n res = [...res, ...keys];\r\n }\r\n }\r\n return res;\r\n };\r\n\r\n convertQueryParams() {\r\n const { requestParams = {} } = this.props;\r\n let queryParams: any = requestParams.queryParams;\r\n if (queryParams && typeof queryParams == \"string\") {\r\n const Utils = this.props.Utils || {};\r\n let func = new Function(\"Utils\", queryParams);\r\n let converParams = func(Utils);\r\n queryParams = converParams;\r\n } else {\r\n queryParams = queryParams || {};\r\n }\r\n return queryParams;\r\n }\r\n\r\n // 计算表头高度的方法\r\n calculateTableHeaderHeight = () => {\r\n if (this.tableWrapperRef.current) {\r\n const tableHeader =\r\n this.tableWrapperRef.current.getElementsByClassName(\r\n \"ant-table-thead\"\r\n )[0];\r\n if (tableHeader) {\r\n const headerHeight = tableHeader.getBoundingClientRect().height;\r\n if (headerHeight !== this.state.tableHeaderHeight) {\r\n this.setState({\r\n tableHeaderHeight: headerHeight,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n throttleCalculateTableHeaderHeight = throttle(\r\n this.calculateTableHeaderHeight,\r\n 500\r\n );\r\n\r\n // 优化拖拽相关方法\r\n handleMouseDown(e: React.MouseEvent) {\r\n e.preventDefault();\r\n\r\n // 创建遮罩层以处理iframe场景\r\n const mask = document.createElement(\"div\");\r\n mask.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: transparent;\r\n z-index: 9999;\r\n cursor: col-resize;\r\n `;\r\n mask.id = \"drag-mask\";\r\n document.body.appendChild(mask);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const newWidth = e.screenX;\r\n // 限制最小100px,最大500px\r\n if (newWidth >= 50 && newWidth <= 800) {\r\n this.setState({ treeWidth: newWidth });\r\n }\r\n };\r\n\r\n const throttledMouseMove = throttle(handleMouseMove, 16);\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener(\"mousemove\", throttledMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n // 移除遮罩层\r\n const mask = document.getElementById(\"drag-mask\");\r\n if (mask) {\r\n document.body.removeChild(mask);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousemove\", throttledMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n }\r\n\r\n render() {\r\n const {\r\n columns = [],\r\n showSearch = true,\r\n children,\r\n submitUrl = \"\",\r\n tableProps = {},\r\n treeProps = {},\r\n formProps = {},\r\n formPageProps = {},\r\n showLeft = false,\r\n submitParams = {},\r\n showToolButton = true,\r\n buttons = [],\r\n editorForm = true,\r\n onShowForm,\r\n formChangeValid = true,\r\n className,\r\n toolButtonPosition = \"buttom\",\r\n actionProps,\r\n deletePosition = \"toolbar\",\r\n buttonClick = {},\r\n permission = { has: false },\r\n requestParams = {},\r\n requestUrls = {},\r\n } = this.props;\r\n const {\r\n store: tableStore = {},\r\n filterColumn = true,\r\n actionColumn = true,\r\n showRowSelection = true,\r\n columnOrder = true,\r\n expandable = {},\r\n parantSelect = true,\r\n title: tableTitle,\r\n ...othertableParams\r\n } = tableProps;\r\n let newTableStore = { ...tableStore };\r\n if (requestParams.queryParams) {\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams?.data || queryParams?.params || {};\r\n newTableStore.requestConfig = {\r\n params: { ...data, ...newTableStore.requestConfig?.params },\r\n };\r\n }\r\n const {\r\n store: treeStore = {},\r\n showSearch: treeSearch = true,\r\n titleAlias = \"title\",\r\n title: treeTitle,\r\n ...othertreeParams\r\n } = treeProps;\r\n\r\n let tableParams = {\r\n filterColumn,\r\n store: { ...newTableStore },\r\n ...othertableParams,\r\n } as any;\r\n const defaultValue: any = {};\r\n const columnButtons: any = [];\r\n const { elementHeight } = this.state;\r\n let permissionButtons = [];\r\n if (permission.has && permission.menuCode) {\r\n permissionButtons =\r\n getButtonPermissons(permission.menuCode).permissons || [];\r\n }\r\n const obj = convertColumns(columns, {});\r\n let tableColumn: any[] = getNewColumns(columns, this.props);\r\n const searchForms = obj.searchForms || [];\r\n const editorForms = obj.editorForms || [];\r\n const toolButtons: any = [];\r\n const { baseActionColumn } = config();\r\n let showIcon = true;\r\n if (actionProps?.showIcon === false) showIcon = false;\r\n else if (baseActionColumn.showIcon === false) showIcon = false;\r\n const buttonMap = {\r\n editor: { name: \"编辑\", code: \"editor\", icon: <EditOutlined /> },\r\n delete: { name: \"删除\", code: \"delete\", icon: <DeleteOutlined /> },\r\n search: { name: \"查看\", code: \"search\", icon: <EyeOutlined /> },\r\n };\r\n const returnButton = (code, show = \"\", defaultProps = {}) => {\r\n let props = {\r\n icon: showIcon ? buttonMap[code].icon : null,\r\n type: \"link\",\r\n ...defaultProps,\r\n } as any;\r\n\r\n if (show) {\r\n props = { ...props, recordShow: show };\r\n }\r\n return (\r\n <Button\r\n onClick={(record: any) => {\r\n if (code == \"delete\") {\r\n this.onDelete(record);\r\n } else {\r\n if (code == \"editor\" && buttonClick.onEditor) {\r\n converFunction(\r\n buttonClick.onEditor,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n } else if (code == \"search\" && buttonClick.onSearch) {\r\n converFunction(\r\n buttonClick.onSearch,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(record.attribute || record, code);\r\n return;\r\n }\r\n\r\n this.showForm(record.attribute || record, code, () => {\r\n let callBack =\r\n code == \"editor\"\r\n ? this.props.onCallBacks?.onEditorCallBack\r\n : this.props.onCallBacks?.onSearchCallBack;\r\n callBack &&\r\n converFunction(\r\n callBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }\r\n }}\r\n {...props}\r\n >\r\n {buttonMap[code]?.name}\r\n </Button>\r\n );\r\n };\r\n const checkPerssion = (code) => {\r\n if (!permission.has) {\r\n return true;\r\n } else {\r\n return permissionButtons.indexOf(code) > -1;\r\n }\r\n };\r\n buttons.map((item: any) => {\r\n if ((item == \"add\" || item.code == \"add\") && checkPerssion(\"add\")) {\r\n toolButtons.push(\r\n <Button\r\n type={\"primary\"}\r\n onClick={() => {\r\n const { onShowForm, buttonClick = {} } = this.props;\r\n if (buttonClick?.onAdd) {\r\n converFunction(\r\n buttonClick.onAdd,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(null, \"add\");\r\n return;\r\n }\r\n this.showForm(null, null, () => {\r\n this.props.onCallBacks?.onAddCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onAddCallBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }}\r\n icon={<PlusOutlined />}\r\n >\r\n 添加\r\n </Button>\r\n );\r\n } else if (\r\n (item == \"delete\" || item.code == \"delete\") &&\r\n checkPerssion(\"delete\")\r\n ) {\r\n if (deletePosition == \"toolbar\") {\r\n toolButtons.push(\r\n <Button\r\n // type={\"primary\"}\r\n onClick={this.onDelete.bind(this)}\r\n icon={<DeleteOutlined />}\r\n danger\r\n >\r\n 删除\r\n </Button>\r\n );\r\n } else {\r\n columnButtons.push(\r\n returnButton(item.code || item, item.recordShow, item.props || {})\r\n );\r\n }\r\n } else {\r\n if (checkPerssion(item.code ? item.code : item)) {\r\n columnButtons.push(\r\n returnButton(\r\n item.code ? item.code : item,\r\n item.recordShow,\r\n item.props || {}\r\n )\r\n );\r\n }\r\n }\r\n });\r\n\r\n if (Array.isArray(children)) {\r\n children.map((item: any) => {\r\n if (Array.isArray(item)) {\r\n item.map((child) => {\r\n if (\r\n child?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n toolButtons.push(child);\r\n } else if (\r\n (child?.props?.pageType == \"columnButton\" ||\r\n child?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n columnButtons.push(child);\r\n }\r\n });\r\n } else {\r\n if (\r\n item?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n toolButtons.push(item);\r\n } else if (\r\n (item?.props?.pageType == \"columnButton\" ||\r\n item?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n columnButtons.push(item);\r\n }\r\n }\r\n });\r\n } else if (children) {\r\n const { props }: any = children;\r\n if (props?.pageType == \"toolButton\" && checkPerssion(props?.code)) {\r\n toolButtons.push(children);\r\n } else if (\r\n (props?.pageType == \"columnButton\" ||\r\n props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(props?.code)\r\n ) {\r\n columnButtons.push(children);\r\n }\r\n }\r\n actionColumn &&\r\n tableColumn.push({\r\n title: \"操作\",\r\n dataIndex: \"action\",\r\n align: actionProps?.textAlign\r\n ? actionProps?.textAlign\r\n : baseActionColumn.textAlign\r\n ? baseActionColumn.textAlign\r\n : \"left\",\r\n width: actionProps?.width\r\n ? actionProps?.width\r\n : baseActionColumn.width\r\n ? baseActionColumn.width\r\n : 200,\r\n fixed: \"right\",\r\n render: (text: any, record: any) => {\r\n return (\r\n <div className={getLess(styles, \"nsc-basepage-action\")}>\r\n {this.renderCloumnButton(columnButtons, record)}\r\n </div>\r\n );\r\n },\r\n });\r\n\r\n if (columnOrder)\r\n tableColumn = [\r\n {\r\n title: \"序号\",\r\n width: 80,\r\n align: \"center\",\r\n render: (text, reacord, index) => {\r\n return <>{index + 1}</>;\r\n },\r\n },\r\n ...tableColumn,\r\n ];\r\n let searchFlag = showSearch && searchForms.length > 0;\r\n let { tableTool } = config();\r\n let toolFlag =\r\n showToolButton &&\r\n toolButtons.length > 0 &&\r\n toolButtonPosition == \"buttom\";\r\n let toolbarFlag = !(\r\n tableProps.toolbar == false ||\r\n tableProps.toolbar?.show == false ||\r\n tableProps.toolbar?.tools?.length == 0 ||\r\n tableTool?.show == false\r\n );\r\n let headerHeight = showSearch && searchForms.length > 0 ? 104 : 0; //头部搜索栏高度\r\n let toolHeight = tableTitle || toolFlag ? 50 : 0;\r\n let paddingHeight = 20 * 2; //上下间距\r\n let tableContentHeight =\r\n elementHeight - toolHeight - paddingHeight - headerHeight;\r\n let PaginationHeight = tableProps.pagination !== false ? 32 + 16 : 0; //32 为分页器高度,16为margin间距\r\n let tableHeight = tableContentHeight - PaginationHeight;\r\n let tableSrollHeight =\r\n tableContentHeight -\r\n (this.state.tableHeaderHeight > 0 ? this.state.tableHeaderHeight : 55) -\r\n PaginationHeight;\r\n // if (tableProps.pagination !== false) {\r\n const scroll = tableParams.scroll;\r\n tableParams = {\r\n ...tableParams,\r\n scroll: { x: \"max-content\", y: tableSrollHeight, ...scroll },\r\n };\r\n // }\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage\"), className)}\r\n ref={this.pageRef}\r\n >\r\n {this.props.pageTitle && (\r\n <div className={cls(getLess(styles, \"nsc-basepage-title\"))}>\r\n {this.props.pageTitle}\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-pane\"))}\r\n style={{ display: \"flex\" }}\r\n >\r\n {showLeft && (\r\n <div\r\n className={getLess(styles, \"nsc-basepage-left\")}\r\n style={{ width: this.state.treeWidth }}\r\n >\r\n {treeTitle && (\r\n <div className={getLess(styles, \"tree-title\")}>{treeTitle}</div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"tree-content\"), {\r\n [getLess(styles, \"tree-content-notitle\")]: !treeTitle,\r\n })}\r\n >\r\n <div\r\n className=\"tree-drag\"\r\n onMouseDown={this.handleMouseDown.bind(this)}\r\n ></div>\r\n <Tree\r\n store={{ ...treeStore }}\r\n showIcon={false}\r\n checkable={false}\r\n searchable={treeSearch}\r\n onSelect={this.treeSelect.bind(this)}\r\n selectedKeys={[this.state.treeSelectedKey]}\r\n titleAlias={titleAlias}\r\n ref={this.treeRef}\r\n {...othertreeParams}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-right\"), {\r\n [getLess(styles, \"nsc-basepage-no-left-right\")]: !showLeft,\r\n })}\r\n style={{\r\n width: `calc(100% - ${\r\n this.state.treeWidth - (showLeft ? 24 : 0)\r\n }px)`,\r\n }}\r\n >\r\n {showSearch && searchForms.length > 0 && (\r\n <div className={getLess(styles, \"nsc-basepage-headersearch\")}>\r\n <HeaderSearch\r\n searchForms={searchForms}\r\n toolButtonPosition={toolButtonPosition}\r\n onSearch={this.onSearch.bind(this)}\r\n onReset={() => {\r\n if (this.props.onReset) {\r\n this.props.onReset();\r\n return;\r\n }\r\n this.searchRef.current?.resetFields();\r\n this.tableLoad({});\r\n }}\r\n ref={this.searchRef}\r\n searchFormProps={this.props.searchFormProps}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-content\"), {\r\n [getLess(styles, \"nsc-basepage-content-gap\")]: !searchFlag,\r\n })}\r\n ref={this.pageContentRef}\r\n >\r\n {(tableTitle || toolFlag) && (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-table-title\"), {\r\n [getLess(styles, \"nsc-basepage-title-width\")]: !toolbarFlag,\r\n })}\r\n >\r\n <div>{tableTitle}</div>\r\n {toolFlag && this.renderToolButtons(toolButtons, toolbarFlag)}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-table\"),\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top\")]: !toolbarFlag,\r\n },\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top2\")]:\r\n toolbarFlag && !toolFlag,\r\n }\r\n )}\r\n ref={this.tableWrapperRef}\r\n style={{ height: tableContentHeight }}\r\n >\r\n <Table\r\n ref={this.tableRef}\r\n columns={tableColumn}\r\n expandable={{\r\n expandIcon: ({ expanded, onExpand, record }) => {\r\n return (\r\n <>\r\n {expanded &&\r\n record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <DownOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <RightOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n },\r\n ...expandable,\r\n }}\r\n columnOrder={true}\r\n onChange={(pagination) => {\r\n const { currentPage } = this.state;\r\n if (currentPage !== pagination.current) {\r\n this.setState({\r\n currentPage: pagination.current,\r\n });\r\n }\r\n }}\r\n toolbar={{\r\n onToolClick: {\r\n onRefresh: () => {\r\n const params = this.getSearchValues();\r\n this.tableLoad(params);\r\n },\r\n },\r\n ...tableProps.toolbar,\r\n }}\r\n showRowSelection={showRowSelection}\r\n style={{ height: tableHeight }}\r\n {...tableParams}\r\n // pagination={false}\r\n />\r\n {/* <div></div> */}\r\n </div>\r\n </div>\r\n </div>\r\n {editorForm && (\r\n <EditorForm\r\n ref={this.editorRef}\r\n callBack={() => {\r\n this.props.onCallBacks?.onSumbitCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onSumbitCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n this.tableReload();\r\n }}\r\n forms={editorForms}\r\n submitUrl={submitUrl}\r\n submitParams={submitParams}\r\n onSubmit={this.props.onSubmit}\r\n defaultValue={defaultValue}\r\n onHideForm={this.props.onHideForm}\r\n onFormChange={this.props.onFormChange}\r\n formType={this.props.formType || \"auto\"}\r\n changeValid={formChangeValid}\r\n Utils={this.props.Utils}\r\n requestObject={{\r\n addUrl: requestUrls.addUrl,\r\n editorUrl: requestUrls.editorUrl,\r\n addParams: requestParams.addParams,\r\n editorParams: requestParams.editorParams,\r\n }}\r\n funcs={this.props.funcs}\r\n {...formProps}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default BasePage;\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","PureComponent","Table","Tree","Button","Modal","Popover","message","EditorForm","cls","DownOutlined","EyeOutlined","EditOutlined","RightOutlined","PlusOutlined","EllipsisOutlined","DeleteOutlined","converFunction","getLess","request","config","getStorage","getButtonPermissons","HeaderSearch","convertColumns","getNewColumns","throttle","styles","BasePage","constructor","props","_type","_size","_defineProperty","createRef","checkedTreeKeys","name","userType","account","state","value","deptId","onSearch","selected","res","key","keys","length","tableWrapperRef","current","tableHeader","getElementsByClassName","headerHeight","getBoundingClientRect","height","tableHeaderHeight","setState","calculateTableHeaderHeight","storePrefix","type","content","size","selectedRowKeys","selectedRowDatas","treeSelectedKey","expand","formType","tableSize","treeSearchPrams","popopens","moreOpen","elementHeight","permissionButtons","queryParams","buttonsLoading","treeWidth","showLeft","componentDidMount","_this$pageContentRef$","initData","permisson","pageContentRef","clientHeight","window","addEventListener","throttleCalculateTableHeaderHeight","setTimeout","componentDidUpdate","_this$pageRef$current","pageRef","componentWillUnmount","removeEventListener","setSearchParams","params","callBack","_this$searchRef$curre","searchRef","doSubmit","data","_this$editorRef$curre","label","arguments","undefined","editorRef","showForm","_this$editorRef","editorflag","newValue","_objectSpread","show","hideForm","_this$editorRef$curre2","setLoading","loading","_this$editorRef$curre3","setEditFormValues","_this$editorRef$curre4","setFormValue","getEditFormValues","_this$editorRef$curre5","getFormValue","onDelete","_this$tableRef$curren","_this$tableRef$curren2","deleteUrl","deleteParams","deletePosition","buttonClick","requestParams","requestUrls","requestConfig","_this","tableRef","getSelectedRowKeys","getSelectedRowDatas","url","warning","confirm","onOk","record","ids","id","funcs","Utils","Error","dataParams","otherParams","_objectWithoutProperties","_excluded","defaultParams","method","autoPrefix","join","finalParams","then","code","_this$searchRef","_this$props$onCallBac","_this$props$onCallBac2","success","getSearchValues","onCallBacks","onDeleteCallBack","tableLoad","error","catch","console","log","_tableStore$requestCo","_this$tableRef$curren3","defaultRequestConfig","tableProps","store","tableStore","convertQueryParams","requestConig","storeConfig","storeParams","otherStoreConfig","_excluded2","load","_tableStore$requestCo2","_this$props$onCallBac3","onQueryCallBack","tableReload","_this$tableRef$curren4","autoLoad","reload","callback","_res$data","records","currentPage","_this$tableRef$curren5","treeLoad","_this$treeRef$current","treeRef","_this$tableRef$curren6","_this$tableRef$curren7","setSelectedRowKeys","_this$tableRef$curren8","setSelectedRowDatas","_this$tableRef$curren9","resetSelectedRowKeys","_this$tableRef$curren10","_this$searchRef2","fromValue","getChildrenData","rowKey","resKey","childNodes","children","map","item","index","renderToolButtons","toolbuttons","toolbarFlag","flag","showSearch","_item$props","pageType","onClick","icon","_excluded3","createElement","className","_extends","style","marginLeft","marginRight","title","placement","open","onOpenChange","renderCloumnButton","columnButtons","rowRecord","actionProps","baseActionColumn","newButtons","showIcon","_item$props2","recordShow","_excluded4","eventOption","Uitls","func","Function","push","e","eval","number","buttonNumber","_item$props3","_excluded5","Number","_item$props4","_excluded6","trigger","treeSelect","selectedKeys","obj","_this$searchRef3","_this$props$onCallBac4","_this$props$onCallBac5","keyword","searchKey","searchField","parantSelect","treeProps","selectedNodes","dataref","attribute","isLeaf","onTreeSelect","treeSelectCallBack","resetSearch","_this$searchRef$curre2","resetFields","getText","text","_props$data","newText","i","setTableData","_this$tableRef$curren11","setData","setTreeData","_this$treeRef$current2","converParams","handleMouseDown","preventDefault","mask","document","cssText","body","appendChild","handleMouseMove","newWidth","screenX","throttledMouseMove","handleMouseUp","getElementById","removeChild","render","_this2","_tableProps$toolbar","_tableProps$toolbar2","columns","submitUrl","formProps","formPageProps","submitParams","showToolButton","buttons","editorForm","onShowForm","formChangeValid","toolButtonPosition","permission","has","filterColumn","actionColumn","showRowSelection","columnOrder","expandable","tableTitle","othertableParams","_excluded7","newTableStore","_newTableStore$reques","treeStore","treeSearch","titleAlias","treeTitle","othertreeParams","_excluded8","tableParams","listeners","_this$props$onCallBac6","_this$props$onCallBac7","tableLoadCallBack","defaultValue","menuCode","permissons","tableColumn","searchForms","editorForms","toolButtons","buttonMap","editor","delete","search","returnButton","_buttonMap$code","defaultProps","onEditor","_this2$props$onCallBa","_this2$props$onCallBa2","onEditorCallBack","onSearchCallBack","checkPerssion","indexOf","onAdd","_this$props$onCallBac8","_this$props$onCallBac9","onAddCallBack","bind","danger","Array","isArray","child","_child$props","_child$props2","_child$props3","_child$props4","_child$props5","_item$props5","_item$props6","_item$props7","_item$props8","_item$props9","dataIndex","align","textAlign","width","fixed","reacord","Fragment","searchFlag","tableTool","toolFlag","toolbar","tools","toolHeight","paddingHeight","tableContentHeight","PaginationHeight","pagination","tableHeight","tableSrollHeight","scroll","x","y","ref","pageTitle","display","onMouseDown","checkable","searchable","onSelect","concat","onReset","_this$searchRef$curre3","searchFormProps","expandIcon","_ref","_record$childNodes","_record$childNodes2","expanded","onExpand","onChange","onToolClick","onRefresh","_this$props$onCallBac10","_this$props$onCallBac11","onSumbitCallBack","forms","onSubmit","onHideForm","onFormChange","changeValid","requestObject","addUrl","editorUrl","addParams","editorParams"],"sources":["../../../src/components/page/BasePage/index.tsx"],"sourcesContent":["import React, { PureComponent, ReactNode } from \"react\";\r\nimport Table from \"../../base/table\";\r\nimport Tree from \"../../base/tree\";\r\nimport Button from \"../../base/button\";\r\nimport Modal from \"../../base/modal\";\r\nimport Popover from \"../../base/popover\";\r\nimport message from \"../../base/message\";\r\nimport EditorForm, { FormPageProps } from \"../FormPage/index\";\r\nimport cls from \"classnames\";\r\nimport \"./index.module.less\";\r\nimport Store, { PageStore, StoreProps } from \"@bj-nsc/msn\";\r\nimport { utils } from \"@bj-nsc/msn/lib/utils\";\r\nimport {\r\n DownOutlined,\r\n EyeOutlined,\r\n EditOutlined,\r\n RightOutlined,\r\n PlusOutlined,\r\n EllipsisOutlined,\r\n DeleteOutlined,\r\n} from \"@ant-design/icons\";\r\nimport { converFunction, getLess, getNode, simplifyColumns } from \"../../utils\";\r\nimport request from \"nsc-request\";\r\nimport config from \"../../config\";\r\nimport { getStorage, px2vw, getButtonPermissons } from \"@bj-nsc/functions\";\r\nimport HeaderSearch from \"../HeaderSearch\";\r\nimport { PaginationProps } from \"antd\";\r\nimport nscfile from \"nsc-file\";\r\nimport { convertColumns, getNewColumns } from \"./utils\";\r\nimport isEqual from \"lodash/isEqual\";\r\nimport throttle from \"lodash/throttle\";\r\nimport CompoundedSpace from \"antd/es/space\";\r\ntype ButtonItem =\r\n | string\r\n | {\r\n code: string;\r\n recordShow?: string | Function;\r\n props?: any;\r\n };\r\n\r\ninterface TableProps {\r\n actionColumn?: boolean; //是否显示操作列\r\n store?: StoreProps;\r\n filterColumn?: boolean; //是否显示过滤按钮\r\n showRowSelection?: boolean; //是否表格勾选列\r\n pagination?: boolean | PaginationProps; //是否显示分页\r\n columnOrder?: boolean; //是否显示表格序列\r\n [propsName: string]: any;\r\n}\r\nconst styles = null;\r\ninterface TreeProps {\r\n store?: StoreProps;\r\n showSearch?: boolean; //是否显示搜索框\r\n searchKey?: string; //搜索value对应的key\r\n searchField?: string; //查询对应的key\r\n titleAlias?: string; //树title对应的key,默认title\r\n nodePorps?: object;\r\n parantSelect?: boolean;\r\n [propsName: string]: any;\r\n}\r\ninterface FormProps extends FormPageProps {}\r\n\r\nexport interface NSCBaseBageProps {\r\n showSearch?: boolean; //是否显示头部搜索栏\r\n tableProps?: TableProps; //表格参数\r\n treeProps?: TreeProps; //左侧树参数\r\n submitParams?: Object; //添加参数,默认mothod:post, 参数通过data传递\r\n submitUrl?: string;\r\n onSubmit?: (value?: any, label?: any) => void;\r\n columns?: Array<Object>;\r\n showLeft?: boolean; //是否显示左侧目录树\r\n showToolButton?: boolean; //是否显示按钮栏\r\n editorForm?: boolean; //是否需要表单功能 , 为false 编辑,查看,新增功能均不可用\r\n deleteUrl?: string; //删除url\r\n onDelete?: (selectedKeys?: Array<string>) => void; //删除参数,默认mothod:post, 参数通过ids拼接传递给后台\r\n deletePosition?: \"toolbar\" | \"row\";\r\n deleteParams?: Object;\r\n children?: React.ReactNode;\r\n onSearch?: (value?: any) => void;\r\n onReset?: () => void;\r\n initData?: any; //初始化回调函数,在componentDidMount中调用\r\n buttons?: ButtonItem[]; //按钮集合 ['add','delete','search','editor']\r\n onShowForm?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onHideForm?: () => void; //打开表单回调\r\n onFormChange?: (changedValues?: any, allValues?: any) => void; //表单onChange回调\r\n formType?: \"modal\" | \"drawer\";\r\n formChangeValid?: boolean; //表单校验\r\n className?: any;\r\n toolButtonPosition?: \"right\" | \"buttom\";\r\n pageTitle?: string | ReactNode;\r\n formProps?: FormProps;\r\n actionProps?: {\r\n textAlign?: string;\r\n showIcon?: boolean;\r\n width?: number;\r\n buttonNumber?: number | \"all\";\r\n };\r\n searchFormProps?: { wrapperCol?: any; labelCol?: any };\r\n onTreeSelect?: (value?: any, editorFlag?: string) => void; //打开表单回调\r\n onCallBacks?: {\r\n treeSelectCallBack?: any; //树点击查询后回调\r\n onQueryCallBack?: any; //查询回调,查询数据后回调\r\n onSumbitCallBack?: any; //保存回调,保存数据成功后回调\r\n onDeleteCallBack?: any; //删除按钮回调,删除数据后执行\r\n onEditorCallBack?: any; //编辑按钮回调,打开弹框后执行\r\n onAddCallBack?: any; //添加按钮回调,打开弹框后执行\r\n onSearchCallBack?: any; //列表查询按钮回调,打开弹框后执行\r\n tableLoadCallBack?: any; //列表查询回调--load\r\n };\r\n pageType?: \"normal\" | \"tabspage\";\r\n formPageProps?: {};\r\n buttonClick?: {\r\n onAdd?: () => void;\r\n onEditor?: (value?: any) => void;\r\n onSearch?: (value?: any) => void;\r\n onDelete?: (value?: any) => void;\r\n };\r\n permission?: {\r\n has?: boolean;\r\n menuCode?: string;\r\n };\r\n requestParams?: {\r\n //需要额外传的固定请求参数\r\n addParams?: Object; //新增固定参数\r\n editorParams?: Object; //编辑固定参数\r\n queryParams?: Object; //查询固定参数\r\n deleteParams?: Object; //删除固定参数\r\n };\r\n requestUrls?: {\r\n addUrl?: string; //新增url\r\n editorUrl?: string; //编辑url\r\n deleteUrl?: string; //删除url\r\n };\r\n funcs?: any;\r\n requestConfig?: any;\r\n [propsName: string]: any;\r\n}\r\n\r\nclass BasePage extends PureComponent<NSCBaseBageProps, any> {\r\n tableRef = React.createRef<any>();\r\n treeRef = React.createRef<any>();\r\n searchRef = React.createRef<any>();\r\n editorRef = React.createRef<any>();\r\n pageRef = React.createRef<any>();\r\n pageContentRef = React.createRef<any>();\r\n dateFormat = {} as any;\r\n tableWrapperRef = React.createRef<HTMLDivElement>();\r\n static convertColumns = convertColumns;\r\n constructor(props: any) {\r\n super(props);\r\n let { storePrefix } = config();\r\n let type = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"formType\" : \"formType\"\r\n );\r\n type = type?.content;\r\n let size = getStorage(\r\n storePrefix ? storePrefix + \"-\" + \"tableSize\" : \"tableSize\"\r\n );\r\n size = size?.content;\r\n this.state = {\r\n type: \"add\",\r\n selectedRowKeys: [],\r\n selectedRowDatas: [],\r\n treeSelectedKey: \"\",\r\n expand: false,\r\n formType: type || \"modal\",\r\n tableSize: size || \"default\",\r\n treeSearchPrams: {},\r\n popopens: {},\r\n moreOpen: false,\r\n elementHeight: 0,\r\n permissionButtons: [],\r\n queryParams: {},\r\n tableHeaderHeight: 0, // 添加表头高度到state\r\n buttonsLoading: {},\r\n treeWidth: this.props.showLeft ? 260 : 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { initData, permisson = {} } = this.props;\r\n const elementHeight = this.pageContentRef.current?.clientHeight;\r\n\r\n // 添加窗口resize监听\r\n window.addEventListener(\"resize\", this.throttleCalculateTableHeaderHeight);\r\n\r\n // 初始计算表头高度\r\n setTimeout(this.calculateTableHeaderHeight, 0);\r\n\r\n this.setState({\r\n elementHeight,\r\n });\r\n initData && initData();\r\n }\r\n componentDidUpdate() {\r\n const elementHeight = this.pageRef.current?.clientHeight;\r\n if (elementHeight > this.state.elementHeight) {\r\n this.setState({\r\n elementHeight,\r\n });\r\n }\r\n }\r\n componentWillUnmount() {\r\n // 移除resize监听\r\n window.removeEventListener(\r\n \"resize\",\r\n this.throttleCalculateTableHeaderHeight\r\n );\r\n }\r\n setSearchParams(params, callBack) {\r\n this.searchRef.current?.setSearchParams(params);\r\n callBack && callBack(params);\r\n }\r\n doSubmit(data, label = \"编辑\") {\r\n this.editorRef.current?.doSubmit(data, label);\r\n }\r\n\r\n onSelect = (checkedTreeKeys: any) => {\r\n const { name, userType, account } = this.state;\r\n const value = { name, userType, account, deptId: checkedTreeKeys[0] };\r\n if (this.props.onSearch) {\r\n this.props.onSearch(value);\r\n }\r\n // this.tableLoad(value);\r\n };\r\n\r\n //显示表单\r\n showForm(value?: any, editorflag = \"add\", callBack?: any) {\r\n let newValue = value ? { ...value } : null;\r\n this.editorRef?.current?.show(newValue, editorflag, callBack);\r\n }\r\n\r\n //关闭表单\r\n hideForm() {\r\n this.editorRef.current?.hideForm();\r\n }\r\n\r\n setLoading(loading: boolean) {\r\n this.editorRef.current?.setLoading(loading);\r\n }\r\n\r\n setEditFormValues(value, type = \"编辑\") {\r\n this.editorRef.current?.setFormValue(value, type);\r\n }\r\n\r\n getEditFormValues() {\r\n return this.editorRef.current?.getFormValue();\r\n }\r\n\r\n //批量删除\r\n onDelete(data?: any) {\r\n const {\r\n deleteUrl,\r\n onDelete,\r\n deleteParams = {},\r\n deletePosition = \"toolbar\",\r\n buttonClick = {},\r\n requestParams = {},\r\n requestUrls = {},\r\n requestConfig = {},\r\n } = this.props;\r\n let _this = this;\r\n const selectedRowKeys = this.tableRef.current?.getSelectedRowKeys();\r\n const selectedRowDatas = this.tableRef.current?.getSelectedRowDatas();\r\n let url = requestUrls.deleteUrl ? requestUrls.deleteUrl : deleteUrl;\r\n let params: any = requestParams.deleteParams\r\n ? requestParams.deleteParams\r\n : deleteParams;\r\n if (deletePosition == \"toolbar\") {\r\n if (selectedRowKeys.length == 0) {\r\n message.warning(\"请选择要删除的数据!\");\r\n return;\r\n }\r\n }\r\n Modal.confirm({\r\n content: \"是否确认删除所选项?\",\r\n // centered:true,\r\n onOk: () => {\r\n if (buttonClick.onDelete) {\r\n converFunction(\r\n buttonClick.onDelete,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: deletePosition == \"toolbar\" ? selectedRowDatas : data,\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys : data?.id,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onDelete) {\r\n onDelete &&\r\n onDelete(deletePosition == \"toolbar\" ? selectedRowKeys : data);\r\n return;\r\n }\r\n if (!url) {\r\n throw new Error(\"url不能为空!\");\r\n }\r\n const { data: dataParams = {}, ...otherParams } = params;\r\n const defaultParams = {\r\n method: \"post\",\r\n autoPrefix: true,\r\n params: {\r\n ids: deletePosition == \"toolbar\" ? selectedRowKeys.join() : data.id,\r\n ...dataParams,\r\n },\r\n ...requestConfig,\r\n };\r\n let finalParams = {} as any;\r\n finalParams = { ...defaultParams, ...otherParams };\r\n request(url, {\r\n ...finalParams,\r\n })\r\n .then(function (res: any) {\r\n const { code } = res;\r\n if (code === 200) {\r\n message.success(\"删除成功!\");\r\n let value = _this.searchRef?.current?.getSearchValues();\r\n _this.props.onCallBacks?.onDeleteCallBack &&\r\n converFunction(\r\n _this.props.onCallBacks?.onDeleteCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n _this.tableLoad(value);\r\n } else {\r\n message.error(\"删除失败!\");\r\n }\r\n })\r\n .catch(function (error: any) {\r\n console.log(\"error\", error);\r\n });\r\n },\r\n });\r\n }\r\n tableLoad(params: any, requestConfig = {}) {\r\n const {\r\n requestConfig: defaultRequestConfig = {},\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore = {} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n const { requestConig: storeConfig = {} } = tableStore;\r\n const { params: storeParams = {}, ...otherStoreConfig } = storeConfig;\r\n this.tableRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...otherStoreConfig,\r\n ...requestConfig,\r\n params: { ...storeParams, ...finalParams },\r\n });\r\n }\r\n //查询\r\n onSearch(params) {\r\n const {\r\n onSearch,\r\n onCallBacks,\r\n requestParams = {},\r\n tableProps = {},\r\n } = this.props;\r\n const { store: tableStore={} } = tableProps;\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams.data || queryParams.params || {};\r\n let finalParams = {\r\n ...data,\r\n ...tableStore.requestConfig?.params,\r\n ...params,\r\n };\r\n if (onSearch) {\r\n onSearch({ ...finalParams, ...this.state.treeSearchPrams });\r\n return;\r\n }\r\n this.tableLoad({ ...finalParams, ...this.state.treeSearchPrams });\r\n onCallBacks?.onQueryCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onQueryCallBack,\r\n { pageRef: this.props.pageRef, params: params },\r\n this.props.Utils\r\n );\r\n }\r\n //表格重新加载\r\n tableReload(params = {}, autoLoad = true) {\r\n this.tableRef.current?.store?.reload({\r\n callback: (res) => {\r\n if (\r\n autoLoad &&\r\n res?.data?.records?.length == 0 &&\r\n this.state.currentPage !== 1\r\n ) {\r\n this.tableRef.current?.store?.reload({\r\n params: { current: 1, ...params },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n treeLoad(params: any, requestConfig = {}) {\r\n const { requestConfig: defaultRequestConfig = {} } = this.props;\r\n this.treeRef.current?.store.load({\r\n ...defaultRequestConfig,\r\n ...requestConfig,\r\n params: params,\r\n });\r\n }\r\n getSelectedRowKeys() {\r\n return this.tableRef.current?.getSelectedRowKeys();\r\n }\r\n getSelectedRowDatas() {\r\n return this.tableRef.current?.getSelectedRowDatas();\r\n }\r\n setSelectedRowKeys(data: Array<String | Number>) {\r\n return this.tableRef.current?.setSelectedRowKeys(data);\r\n }\r\n setSelectedRowDatas(data: Array<Object>) {\r\n return this.tableRef.current?.setSelectedRowDatas(data);\r\n }\r\n resetSelectedRowKeys() {\r\n return this.tableRef.current?.resetSelectedRowKeys();\r\n }\r\n\r\n getSearchValues() {\r\n const fromValue = this.searchRef?.current?.getSearchValues();\r\n return { ...fromValue, ...this.state.treeSearchPrams };\r\n }\r\n\r\n getChildrenData(data, keys = []) {\r\n const { tableProps } = this.props;\r\n const { rowKey = \"id\" } = tableProps;\r\n let resKey = [];\r\n let key = \"\";\r\n if (data.childNodes) {\r\n const children = data.childNodes;\r\n children.map((item, index) => {\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(item);\r\n } else {\r\n key = item[rowKey];\r\n }\r\n if (item.childNodes) {\r\n this.getChildrenData(item.childNodes, keys);\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n });\r\n } else {\r\n resKey = [...keys, key];\r\n }\r\n return resKey;\r\n }\r\n\r\n renderToolButtons(toolbuttons: any, toolbarFlag) {\r\n const flag = toolbuttons.length > 5;\r\n const { showSearch = true } = this.props;\r\n const content = toolbuttons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, show, ...params } = item.props;\r\n if (index > 3) {\r\n return (\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n >\r\n <Button\r\n key={index}\r\n onClick={() => {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n onClick && onClick();\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n </div>\r\n );\r\n }\r\n });\r\n\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-tool-buttons\"))}\r\n style={{ marginLeft: 0 }}\r\n >\r\n {toolbuttons.map((item: any, index: any) => {\r\n if (flag) {\r\n if (index < 4) {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n } else if (index == 4) {\r\n return (\r\n <Popover\r\n content={content}\r\n title={null}\r\n placement=\"bottom\"\r\n key={index}\r\n open={this.state.moreOpen}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n this.setState({\r\n moreOpen: true,\r\n });\r\n } else {\r\n this.setState({\r\n moreOpen: false,\r\n });\r\n }\r\n }}\r\n // open={true}\r\n // overlayClassName={styles['pop-box']}\r\n >\r\n <Button type=\"primary\">\r\n 更多 <DownOutlined />\r\n </Button>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <div\r\n key={index}\r\n style={{\r\n marginRight: index == toolbuttons.length - 1 ? 0 : 12,\r\n }}\r\n >\r\n {item}\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n );\r\n }\r\n renderCloumnButton(columnButtons: any, rowRecord: any) {\r\n const { actionProps, tableProps = {} } = this.props;\r\n const { baseActionColumn } = config();\r\n const newButtons = [];\r\n const { rowKey = \"id\" } = tableProps;\r\n let key = \"\";\r\n if (typeof rowKey == \"function\") {\r\n key = rowKey(rowRecord);\r\n } else {\r\n key = rowRecord[rowKey];\r\n }\r\n let showIcon = false;\r\n if (actionProps?.showIcon === true || baseActionColumn.showIcon === true)\r\n showIcon = true;\r\n columnButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, icon, recordShow, ...params } =\r\n item.props;\r\n if (recordShow) {\r\n if (typeof recordShow == \"string\") {\r\n try {\r\n const eventOption = {\r\n record: rowRecord,\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n };\r\n const Utils = { ...this.props.Uitls };\r\n let func = new Function(\"eventOption,Utils\", recordShow);\r\n const show = func(eventOption, Utils);\r\n show && newButtons.push(item);\r\n } catch (e) {\r\n let record = rowRecord;\r\n if (eval(recordShow)) {\r\n newButtons.push(item);\r\n }\r\n }\r\n } else if (typeof recordShow == \"function\") {\r\n const show = recordShow(rowRecord);\r\n show && newButtons.push(item);\r\n }\r\n } else {\r\n newButtons.push(item);\r\n }\r\n });\r\n let number = actionProps?.buttonNumber\r\n ? actionProps?.buttonNumber\r\n : baseActionColumn?.buttonNumber\r\n ? baseActionColumn?.buttonNumber\r\n : 3;\r\n let flag = false;\r\n if (number == \"all\") {\r\n flag = false;\r\n } else {\r\n flag = newButtons.length > number;\r\n }\r\n\r\n const content = newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, show, ...params } =\r\n item.props;\r\n if (index > Number(number) - 1) {\r\n return (\r\n <Button\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-editor\"),\r\n getLess(styles, \"nsc-basepage-content-item\")\r\n )}\r\n key={index}\r\n onClick={() => {\r\n let data = { ...this.state.popopens };\r\n data[rowRecord.id] = false;\r\n this.setState({\r\n popopens: data,\r\n });\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n return newButtons.map((item: any, index: any) => {\r\n const { children, pageType, onClick, recordShow, icon, ...params } =\r\n item.props;\r\n if (flag) {\r\n if (index < number) {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n icon={icon}\r\n {...params}\r\n type={\"link\"}\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n } else if (index == number) {\r\n return (\r\n <Popover\r\n placement=\"bottom\"\r\n title={null}\r\n content={content}\r\n trigger={[\"click\"]}\r\n key={index}\r\n open={this.state.popopens[key] || false}\r\n onOpenChange={(open) => {\r\n if (open) {\r\n let data = { ...this.state.popopens };\r\n data[key] = true;\r\n this.setState({\r\n popopens: data,\r\n });\r\n } else {\r\n this.setState({\r\n popopens: {},\r\n });\r\n }\r\n }}\r\n // overlayClassName={styles['pop']}\r\n >\r\n <a className={getLess(styles, \"nsc-basepage-editor\")}>\r\n <EllipsisOutlined />\r\n </a>\r\n </Popover>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return (\r\n <Button\r\n className={cls(getLess(styles, \"nsc-basepage-editor\"), {\r\n [getLess(styles, \"nsc-basepage-editor-first\")]: index === 0,\r\n })}\r\n key={index}\r\n onClick={() => {\r\n onClick && onClick(rowRecord);\r\n }}\r\n {...params}\r\n type=\"link\"\r\n >\r\n {showIcon !== false && (\r\n <span className={getLess(styles, \"nsc-basepage-icon\")}>\r\n {icon}\r\n </span>\r\n )}\r\n <span className={getLess(styles, \"nsc-basepage-text\")}>\r\n {children}\r\n </span>\r\n </Button>\r\n );\r\n }\r\n });\r\n // }\r\n }\r\n //树点击事件\r\n treeSelect(selectedKeys: any, obj: any) {\r\n let keyword = \"\";\r\n const {\r\n searchKey = \"key\",\r\n searchField = \"\",\r\n parantSelect = true,\r\n } = this.props.treeProps;\r\n const { treeSelectedKey } = this.state;\r\n const { selected, selectedNodes } = obj;\r\n\r\n if (selected) {\r\n keyword = selectedNodes[0].dataref.attribute[searchKey];\r\n if (parantSelect) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n } else {\r\n if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {\r\n if (selectedKeys[0] !== treeSelectedKey) {\r\n this.setState({\r\n treeSelectedKey: selectedKeys[0],\r\n treeSearchPrams: { [searchField]: keyword },\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n this.setState({\r\n treeSelectedKey: keyword,\r\n treeSearchPrams: {},\r\n });\r\n }\r\n if (this.props.onTreeSelect) {\r\n this.props.onTreeSelect(selectedKeys, obj);\r\n return;\r\n }\r\n const fromValue = this.searchRef?.current?.getSearchValues() || {};\r\n searchField && this.tableLoad({ ...fromValue, [searchField]: keyword });\r\n this.props.onCallBacks?.treeSelectCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.treeSelectCallBack,\r\n { pageRef: this.props.pageRef, selectedKeys: selectedKeys, obj: obj },\r\n this.props.Utils\r\n );\r\n // utils.callback(this.props.onCallBacks?.treeSelectCallBack, this, [\r\n // selectedKeys,\r\n // obj,\r\n // ]);\r\n }\r\n resetSearch() {\r\n this.searchRef.current?.resetFields();\r\n }\r\n getText(props, text) {\r\n let newText = text;\r\n if (props?.data && props?.data?.length > 0) {\r\n let data = props.data;\r\n for (let i = 0; i < data?.length; i++) {\r\n if (data[i].value == text) {\r\n newText = data[i].label;\r\n }\r\n }\r\n }\r\n return newText;\r\n }\r\n setTableData(data) {\r\n this.tableRef.current?.store?.setData(data);\r\n }\r\n setTreeData(data) {\r\n this.treeRef.current?.store?.setData(data);\r\n }\r\n getSelectedKey = (selected) => {\r\n let res = [];\r\n for (let key in selected) {\r\n const keys = selected[key];\r\n if (keys.length > 0) {\r\n res = [...res, ...keys];\r\n }\r\n }\r\n return res;\r\n };\r\n\r\n convertQueryParams() {\r\n const { requestParams = {} } = this.props;\r\n let queryParams: any = requestParams.queryParams;\r\n if (queryParams && typeof queryParams == \"string\") {\r\n const Utils = this.props.Utils || {};\r\n let func = new Function(\"Utils\", queryParams);\r\n let converParams = func(Utils);\r\n queryParams = converParams;\r\n } else {\r\n queryParams = queryParams || {};\r\n }\r\n return queryParams;\r\n }\r\n\r\n // 计算表头高度的方法\r\n calculateTableHeaderHeight = () => {\r\n if (this.tableWrapperRef.current) {\r\n const tableHeader =\r\n this.tableWrapperRef.current.getElementsByClassName(\r\n \"ant-table-thead\"\r\n )[0];\r\n if (tableHeader) {\r\n const headerHeight = tableHeader.getBoundingClientRect().height;\r\n if (headerHeight !== this.state.tableHeaderHeight) {\r\n this.setState({\r\n tableHeaderHeight: headerHeight,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n throttleCalculateTableHeaderHeight = throttle(\r\n this.calculateTableHeaderHeight,\r\n 500\r\n );\r\n\r\n // 优化拖拽相关方法\r\n handleMouseDown(e: React.MouseEvent) {\r\n e.preventDefault();\r\n\r\n // 创建遮罩层以处理iframe场景\r\n const mask = document.createElement(\"div\");\r\n mask.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: transparent;\r\n z-index: 9999;\r\n cursor: col-resize;\r\n `;\r\n mask.id = \"drag-mask\";\r\n document.body.appendChild(mask);\r\n\r\n const handleMouseMove = (e: MouseEvent) => {\r\n const newWidth = e.screenX;\r\n // 限制最小100px,最大500px\r\n if (newWidth >= 50 && newWidth <= 800) {\r\n this.setState({ treeWidth: newWidth });\r\n }\r\n };\r\n\r\n const throttledMouseMove = throttle(handleMouseMove, 16);\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener(\"mousemove\", throttledMouseMove);\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n // 移除遮罩层\r\n const mask = document.getElementById(\"drag-mask\");\r\n if (mask) {\r\n document.body.removeChild(mask);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousemove\", throttledMouseMove);\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n }\r\n\r\n render() {\r\n const {\r\n columns = [],\r\n showSearch = true,\r\n children,\r\n submitUrl = \"\",\r\n tableProps = {},\r\n treeProps = {},\r\n formProps = {},\r\n formPageProps = {},\r\n showLeft = false,\r\n submitParams = {},\r\n showToolButton = true,\r\n buttons = [],\r\n editorForm = true,\r\n onShowForm,\r\n formChangeValid = true,\r\n className,\r\n toolButtonPosition = \"buttom\",\r\n actionProps,\r\n deletePosition = \"toolbar\",\r\n buttonClick = {},\r\n permission = { has: false },\r\n requestParams = {},\r\n requestUrls = {},\r\n } = this.props;\r\n const {\r\n store: tableStore = {},\r\n filterColumn = true,\r\n actionColumn = true,\r\n showRowSelection = true,\r\n columnOrder = true,\r\n expandable = {},\r\n parantSelect = true,\r\n title: tableTitle,\r\n ...othertableParams\r\n } = tableProps;\r\n let newTableStore = { ...tableStore };\r\n if (requestParams.queryParams) {\r\n let queryParams: any = this.convertQueryParams();\r\n let data = queryParams?.data || queryParams?.params || {};\r\n newTableStore.requestConfig = {\r\n params: { ...data, ...newTableStore.requestConfig?.params },\r\n };\r\n }\r\n const {\r\n store: treeStore = {},\r\n showSearch: treeSearch = true,\r\n titleAlias = \"title\",\r\n title: treeTitle,\r\n ...othertreeParams\r\n } = treeProps;\r\n let _this = this;\r\n let tableParams = {\r\n filterColumn,\r\n store: {\r\n listeners: {\r\n load: (data) => {\r\n _this.props.onCallBacks?.tableLoadCallBack &&\r\n _this.props.onCallBacks?.tableLoadCallBack(data);\r\n },\r\n },\r\n ...newTableStore,\r\n },\r\n ...othertableParams,\r\n } as any;\r\n const defaultValue: any = {};\r\n const columnButtons: any = [];\r\n const { elementHeight } = this.state;\r\n let permissionButtons = [];\r\n if (permission.has && permission.menuCode) {\r\n permissionButtons =\r\n getButtonPermissons(permission.menuCode).permissons || [];\r\n }\r\n const obj = convertColumns(columns, {});\r\n let tableColumn: any[] = getNewColumns(columns, this.props);\r\n const searchForms = obj.searchForms || [];\r\n const editorForms = obj.editorForms || [];\r\n const toolButtons: any = [];\r\n const { baseActionColumn } = config();\r\n let showIcon = true;\r\n if (actionProps?.showIcon === false) showIcon = false;\r\n else if (baseActionColumn.showIcon === false) showIcon = false;\r\n const buttonMap = {\r\n editor: { name: \"编辑\", code: \"editor\", icon: <EditOutlined /> },\r\n delete: { name: \"删除\", code: \"delete\", icon: <DeleteOutlined /> },\r\n search: { name: \"查看\", code: \"search\", icon: <EyeOutlined /> },\r\n };\r\n const returnButton = (code, show = \"\", defaultProps = {}) => {\r\n let props = {\r\n icon: showIcon ? buttonMap[code].icon : null,\r\n type: \"link\",\r\n ...defaultProps,\r\n } as any;\r\n\r\n if (show) {\r\n props = { ...props, recordShow: show };\r\n }\r\n return (\r\n <Button\r\n onClick={(record: any) => {\r\n if (code == \"delete\") {\r\n this.onDelete(record);\r\n } else {\r\n if (code == \"editor\" && buttonClick.onEditor) {\r\n converFunction(\r\n buttonClick.onEditor,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n } else if (code == \"search\" && buttonClick.onSearch) {\r\n converFunction(\r\n buttonClick.onSearch,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(record.attribute || record, code);\r\n return;\r\n }\r\n\r\n this.showForm(record.attribute || record, code, () => {\r\n let callBack =\r\n code == \"editor\"\r\n ? this.props.onCallBacks?.onEditorCallBack\r\n : this.props.onCallBacks?.onSearchCallBack;\r\n callBack &&\r\n converFunction(\r\n callBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n record: record.attribute || record,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }\r\n }}\r\n {...props}\r\n >\r\n {buttonMap[code]?.name}\r\n </Button>\r\n );\r\n };\r\n const checkPerssion = (code) => {\r\n if (!permission.has) {\r\n return true;\r\n } else {\r\n return permissionButtons.indexOf(code) > -1;\r\n }\r\n };\r\n buttons.map((item: any) => {\r\n if ((item == \"add\" || item.code == \"add\") && checkPerssion(\"add\")) {\r\n toolButtons.push(\r\n <Button\r\n type={\"primary\"}\r\n onClick={() => {\r\n const { onShowForm, buttonClick = {} } = this.props;\r\n if (buttonClick?.onAdd) {\r\n converFunction(\r\n buttonClick.onAdd,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n return;\r\n }\r\n if (onShowForm) {\r\n onShowForm(null, \"add\");\r\n return;\r\n }\r\n this.showForm(null, null, () => {\r\n this.props.onCallBacks?.onAddCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onAddCallBack,\r\n {\r\n pageRef: this.props.pageRef,\r\n funcs: this.props.funcs,\r\n },\r\n this.props.Utils\r\n );\r\n });\r\n }}\r\n icon={<PlusOutlined />}\r\n >\r\n 添加\r\n </Button>\r\n );\r\n } else if (\r\n (item == \"delete\" || item.code == \"delete\") &&\r\n checkPerssion(\"delete\")\r\n ) {\r\n if (deletePosition == \"toolbar\") {\r\n toolButtons.push(\r\n <Button\r\n // type={\"primary\"}\r\n onClick={this.onDelete.bind(this)}\r\n icon={<DeleteOutlined />}\r\n danger\r\n >\r\n 删除\r\n </Button>\r\n );\r\n } else {\r\n columnButtons.push(\r\n returnButton(item.code || item, item.recordShow, item.props || {})\r\n );\r\n }\r\n } else {\r\n if (checkPerssion(item.code ? item.code : item)) {\r\n columnButtons.push(\r\n returnButton(\r\n item.code ? item.code : item,\r\n item.recordShow,\r\n item.props || {}\r\n )\r\n );\r\n }\r\n }\r\n });\r\n\r\n if (Array.isArray(children)) {\r\n children.map((item: any) => {\r\n if (Array.isArray(item)) {\r\n item.map((child) => {\r\n if (\r\n child?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n toolButtons.push(child);\r\n } else if (\r\n (child?.props?.pageType == \"columnButton\" ||\r\n child?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(child?.props?.code)\r\n ) {\r\n columnButtons.push(child);\r\n }\r\n });\r\n } else {\r\n if (\r\n item?.props?.pageType == \"toolButton\" &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n toolButtons.push(item);\r\n } else if (\r\n (item?.props?.pageType == \"columnButton\" ||\r\n item?.props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(item?.props?.code)\r\n ) {\r\n columnButtons.push(item);\r\n }\r\n }\r\n });\r\n } else if (children) {\r\n const { props }: any = children;\r\n if (props?.pageType == \"toolButton\" && checkPerssion(props?.code)) {\r\n toolButtons.push(children);\r\n } else if (\r\n (props?.pageType == \"columnButton\" ||\r\n props?.pageType == \"cloumnButton\") &&\r\n checkPerssion(props?.code)\r\n ) {\r\n columnButtons.push(children);\r\n }\r\n }\r\n actionColumn &&\r\n tableColumn.push({\r\n title: \"操作\",\r\n dataIndex: \"action\",\r\n align: actionProps?.textAlign\r\n ? actionProps?.textAlign\r\n : baseActionColumn.textAlign\r\n ? baseActionColumn.textAlign\r\n : \"left\",\r\n width: actionProps?.width\r\n ? actionProps?.width\r\n : baseActionColumn.width\r\n ? baseActionColumn.width\r\n : 200,\r\n fixed: \"right\",\r\n render: (text: any, record: any) => {\r\n return (\r\n <div className={getLess(styles, \"nsc-basepage-action\")}>\r\n {this.renderCloumnButton(columnButtons, record)}\r\n </div>\r\n );\r\n },\r\n });\r\n\r\n if (columnOrder)\r\n tableColumn = [\r\n {\r\n title: \"序号\",\r\n width: 80,\r\n align: \"center\",\r\n render: (text, reacord, index) => {\r\n return <>{index + 1}</>;\r\n },\r\n },\r\n ...tableColumn,\r\n ];\r\n let searchFlag = showSearch && searchForms.length > 0;\r\n let { tableTool } = config();\r\n let toolFlag =\r\n showToolButton &&\r\n toolButtons.length > 0 &&\r\n toolButtonPosition == \"buttom\";\r\n let toolbarFlag = !(\r\n tableProps.toolbar == false ||\r\n tableProps.toolbar?.show == false ||\r\n tableProps.toolbar?.tools?.length == 0 ||\r\n tableTool?.show == false\r\n );\r\n let headerHeight = showSearch && searchForms.length > 0 ? 104 : 0; //头部搜索栏高度\r\n let toolHeight = tableTitle || toolFlag ? 50 : 0;\r\n let paddingHeight = 20 * 2; //上下间距\r\n let tableContentHeight =\r\n elementHeight - toolHeight - paddingHeight - headerHeight;\r\n let PaginationHeight = tableProps.pagination !== false ? 32 + 16 : 0; //32 为分页器高度,16为margin间距\r\n let tableHeight = tableContentHeight - PaginationHeight;\r\n let tableSrollHeight =\r\n tableContentHeight -\r\n (this.state.tableHeaderHeight > 0 ? this.state.tableHeaderHeight : 55) -\r\n PaginationHeight;\r\n // if (tableProps.pagination !== false) {\r\n const scroll = tableParams.scroll;\r\n tableParams = {\r\n ...tableParams,\r\n scroll: { x: \"max-content\", y: tableSrollHeight, ...scroll },\r\n };\r\n // }\r\n return (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage\"), className)}\r\n ref={this.pageRef}\r\n >\r\n {this.props.pageTitle && (\r\n <div className={cls(getLess(styles, \"nsc-basepage-title\"))}>\r\n {this.props.pageTitle}\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-pane\"))}\r\n style={{ display: \"flex\" }}\r\n >\r\n {showLeft && (\r\n <div\r\n className={getLess(styles, \"nsc-basepage-left\")}\r\n style={{ width: this.state.treeWidth }}\r\n >\r\n {treeTitle && (\r\n <div className={getLess(styles, \"tree-title\")}>{treeTitle}</div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"tree-content\"), {\r\n [getLess(styles, \"tree-content-notitle\")]: !treeTitle,\r\n })}\r\n >\r\n <div\r\n className=\"tree-drag\"\r\n onMouseDown={this.handleMouseDown.bind(this)}\r\n ></div>\r\n <Tree\r\n store={{ ...treeStore }}\r\n showIcon={false}\r\n checkable={false}\r\n searchable={treeSearch}\r\n onSelect={this.treeSelect.bind(this)}\r\n selectedKeys={[this.state.treeSelectedKey]}\r\n titleAlias={titleAlias}\r\n ref={this.treeRef}\r\n {...othertreeParams}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-right\"), {\r\n [getLess(styles, \"nsc-basepage-no-left-right\")]: !showLeft,\r\n })}\r\n style={{\r\n width: `calc(100% - ${\r\n this.state.treeWidth - (showLeft ? 24 : 0)\r\n }px)`,\r\n }}\r\n >\r\n {showSearch && searchForms.length > 0 && (\r\n <div className={getLess(styles, \"nsc-basepage-headersearch\")}>\r\n <HeaderSearch\r\n searchForms={searchForms}\r\n toolButtonPosition={toolButtonPosition}\r\n onSearch={this.onSearch.bind(this)}\r\n onReset={() => {\r\n if (this.props.onReset) {\r\n this.props.onReset();\r\n return;\r\n }\r\n this.searchRef.current?.resetFields();\r\n this.tableLoad({});\r\n }}\r\n ref={this.searchRef}\r\n searchFormProps={this.props.searchFormProps}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-content\"), {\r\n [getLess(styles, \"nsc-basepage-content-gap\")]: !searchFlag,\r\n })}\r\n ref={this.pageContentRef}\r\n >\r\n {(tableTitle || toolFlag) && (\r\n <div\r\n className={cls(getLess(styles, \"nsc-basepage-table-title\"), {\r\n [getLess(styles, \"nsc-basepage-title-width\")]: !toolbarFlag,\r\n })}\r\n >\r\n <div>{tableTitle}</div>\r\n {toolFlag && this.renderToolButtons(toolButtons, toolbarFlag)}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={cls(\r\n getLess(styles, \"nsc-basepage-table\"),\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top\")]: !toolbarFlag,\r\n },\r\n {\r\n [getLess(styles, \"nsc-basepage-table-top2\")]:\r\n toolbarFlag && !toolFlag,\r\n }\r\n )}\r\n ref={this.tableWrapperRef}\r\n style={{ height: tableContentHeight }}\r\n >\r\n <Table\r\n ref={this.tableRef}\r\n columns={tableColumn}\r\n expandable={{\r\n expandIcon: ({ expanded, onExpand, record }) => {\r\n return (\r\n <>\r\n {expanded &&\r\n record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <DownOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : record.childNodes &&\r\n record.childNodes?.length > 0 ? (\r\n <RightOutlined\r\n onClick={(e) => onExpand(record, e)}\r\n className={getLess(styles, \"expand-icon\")}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n },\r\n ...expandable,\r\n }}\r\n columnOrder={true}\r\n onChange={(pagination) => {\r\n const { currentPage } = this.state;\r\n if (currentPage !== pagination.current) {\r\n this.setState({\r\n currentPage: pagination.current,\r\n });\r\n }\r\n }}\r\n toolbar={{\r\n onToolClick: {\r\n onRefresh: () => {\r\n const params = this.getSearchValues();\r\n this.tableLoad(params);\r\n },\r\n },\r\n ...tableProps.toolbar,\r\n }}\r\n showRowSelection={showRowSelection}\r\n style={{ height: tableHeight }}\r\n {...tableParams}\r\n // pagination={false}\r\n />\r\n {/* <div></div> */}\r\n </div>\r\n </div>\r\n </div>\r\n {editorForm && (\r\n <EditorForm\r\n ref={this.editorRef}\r\n callBack={() => {\r\n this.props.onCallBacks?.onSumbitCallBack &&\r\n converFunction(\r\n this.props.onCallBacks?.onSumbitCallBack,\r\n { pageRef: this.props.pageRef },\r\n this.props.Utils\r\n );\r\n this.tableReload();\r\n }}\r\n forms={editorForms}\r\n submitUrl={submitUrl}\r\n submitParams={submitParams}\r\n onSubmit={this.props.onSubmit}\r\n defaultValue={defaultValue}\r\n onHideForm={this.props.onHideForm}\r\n onFormChange={this.props.onFormChange}\r\n formType={this.props.formType || \"auto\"}\r\n changeValid={formChangeValid}\r\n Utils={this.props.Utils}\r\n requestObject={{\r\n addUrl: requestUrls.addUrl,\r\n editorUrl: requestUrls.editorUrl,\r\n addParams: requestParams.addParams,\r\n editorParams: requestParams.editorParams,\r\n }}\r\n funcs={this.props.funcs}\r\n {...formProps}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default BasePage;\r\n"],"mappings":"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"}
|