@1money/component-ui 0.0.70 → 0.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
- package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
- package/es/business/Select/Network/NetworkSelect.js +2 -2
- package/es/components/Accordion/Accordion.js +3 -2
- package/es/components/Calendar/Calendar.js +3 -2
- package/es/components/Carousel/Carousel.js +3 -2
- package/es/components/Checkbox/BaseCheckbox.js +3 -2
- package/es/components/Checkbox/Checkbox.js +2 -2
- package/es/components/Checkbox/CheckboxGroup.js +3 -2
- package/es/components/CoachMark/CoachMark.js +3 -2
- package/es/components/Copy/Copy.js +2 -2
- package/es/components/Dialog/Dialog.js +2 -2
- package/es/components/Drawer/Drawer.js +2 -2
- package/es/components/Input/Amount/Amount.js +2 -2
- package/es/components/Input/Input/Input.js +3 -2
- package/es/components/Input/Mask/Mask.js +3 -2
- package/es/components/Input/OTP/OTP.js +3 -2
- package/es/components/Input/Password/Password.js +3 -2
- package/es/components/Input/Search/Search.js +3 -2
- package/es/components/Input/TextArea/TextArea.js +3 -2
- package/es/components/Input/Trade/Trade.js +2 -2
- package/es/components/Input/useAmountInput.js +4 -2
- package/es/components/Input/useSyncRef.js +2 -2
- package/es/components/Navigation/Nav.js +2 -2
- package/es/components/Navigation/Navigation.js +5 -2
- package/es/components/Pagination/Pagination.js +2 -2
- package/es/components/Pagination/usePagination.js +3 -2
- package/es/components/Popconfirm/Popconfirm.js +2 -2
- package/es/components/Portal/Portal.js +2 -2
- package/es/components/ProForm/ProForm.d.ts +10 -2
- package/es/components/ProForm/ProForm.js +60 -24
- package/es/components/ProForm/ProFormDependency.js +4 -1
- package/es/components/ProForm/ProFormGroup.js +2 -2
- package/es/components/ProForm/ProFormItem.js +73 -36
- package/es/components/ProForm/ProFormList.js +3 -2
- package/es/components/ProForm/SchemaForm.d.ts +7 -0
- package/es/components/ProForm/SchemaForm.js +103 -0
- package/es/components/ProForm/Submitter.js +13 -3
- package/es/components/ProForm/context.d.ts +22 -3
- package/es/components/ProForm/context.js +49 -10
- package/es/components/ProForm/core/constants.d.ts +8 -1
- package/es/components/ProForm/core/constants.js +9 -6
- package/es/components/ProForm/core/hooks/useForm.js +174 -320
- package/es/components/ProForm/core/hooks/useFormCore.js +84 -178
- package/es/components/ProForm/core/interface.d.ts +33 -12
- package/es/components/ProForm/core/pathUtils.d.ts +6 -0
- package/es/components/ProForm/core/pathUtils.js +59 -0
- package/es/components/ProForm/core/runRules.d.ts +23 -0
- package/es/components/ProForm/core/runRules.js +233 -0
- package/es/components/ProForm/core/useFormItem.d.ts +10 -1
- package/es/components/ProForm/core/useFormItem.js +105 -61
- package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/es/components/ProForm/fields/createProFormField.js +64 -59
- package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
- package/es/components/ProForm/index.d.ts +11 -4
- package/es/components/ProForm/index.js +7 -2
- package/es/components/ProForm/interface.d.ts +89 -14
- package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DialogForm.js +2 -1
- package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DrawerForm.js +2 -1
- package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/es/components/ProForm/layouts/QueryFilter.js +79 -13
- package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
- package/es/components/ProForm/style/ProForm.css +6 -0
- package/es/components/ProForm/utils.d.ts +14 -3
- package/es/components/ProForm/utils.js +73 -70
- package/es/components/ProTable/ProTable.js +3 -2
- package/es/components/ProTable/core/useAwaitableReload.js +3 -2
- package/es/components/ProTable/useFetchData.js +4 -2
- package/es/components/Radio/Radio.js +3 -2
- package/es/components/Radio/RadioGroup.js +3 -2
- package/es/components/ResizeObserver/useResizeObserver.js +2 -2
- package/es/components/Segment/Segment.js +4 -2
- package/es/components/Select/Select.js +3 -2
- package/es/components/Select/SelectCustom.js +2 -2
- package/es/components/Select/useSelectShell.js +3 -2
- package/es/components/Slider/Slider.js +3 -2
- package/es/components/Switch/Switch.js +3 -2
- package/es/components/Table/Table.js +14 -28
- package/es/components/Table/VirtualTable.js +18 -28
- package/es/components/Table/core/columnUtil.d.ts +9 -0
- package/es/components/Table/core/columnUtil.js +34 -0
- package/es/components/Table/core/useTableColumns.d.ts +4 -13
- package/es/components/Table/core/useTableColumns.js +55 -24
- package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
- package/es/components/Table/core/useTableDataPipeline.js +66 -73
- package/es/components/Table/core/useTableExpand.js +3 -2
- package/es/components/Table/core/useTableSelection.js +7 -4
- package/es/components/Table/core/useTableSetup.js +4 -2
- package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
- package/es/components/Table/features/ExpandTrigger.js +14 -8
- package/es/components/Table/features/FilterTrigger.js +21 -17
- package/es/components/Table/features/SelectionColumn.d.ts +11 -6
- package/es/components/Table/features/SelectionColumn.js +12 -5
- package/es/components/Table/features/SortTrigger.d.ts +4 -2
- package/es/components/Table/features/SortTrigger.js +8 -3
- package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
- package/es/components/Table/internal/kernel/Cell/index.js +2 -2
- package/es/components/Table/internal/kernel/Table.js +3 -3
- package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
- package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
- package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
- package/es/components/Table/renderers/HeaderCell.js +3 -2
- package/es/components/Table/renderers/TableShell.d.ts +13 -0
- package/es/components/Table/renderers/TableShell.js +25 -0
- package/es/components/Table/style/Table.css +3 -0
- package/es/components/Tabs/Tabs.js +4 -2
- package/es/components/Tooltip/Tooltip.js +3 -2
- package/es/components/Tooltip/style/Tooltip.css +1 -0
- package/es/components/Tour/Tour.js +3 -2
- package/es/components/Trigger/Trigger.js +3 -2
- package/es/components/Typography/Typography.js +2 -2
- package/es/components/Typography/useTypographyEnhancements.js +3 -2
- package/es/components/Upload/Upload.js +2 -2
- package/es/components/Upload/UploadFileBar.js +2 -2
- package/es/components/VirtualList/VirtualList.js +3 -2
- package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
- package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
- package/es/index.css +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
- package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
- package/lib/business/Select/Network/NetworkSelect.js +3 -3
- package/lib/components/Accordion/Accordion.js +5 -4
- package/lib/components/Calendar/Calendar.js +6 -5
- package/lib/components/Carousel/Carousel.js +5 -4
- package/lib/components/Checkbox/BaseCheckbox.js +5 -4
- package/lib/components/Checkbox/Checkbox.js +3 -3
- package/lib/components/Checkbox/CheckboxGroup.js +7 -6
- package/lib/components/CoachMark/CoachMark.js +7 -6
- package/lib/components/Copy/Copy.js +3 -3
- package/lib/components/Dialog/Dialog.js +6 -6
- package/lib/components/Drawer/Drawer.js +10 -10
- package/lib/components/Input/Amount/Amount.js +6 -5
- package/lib/components/Input/Input/Input.js +7 -6
- package/lib/components/Input/Mask/Mask.js +9 -8
- package/lib/components/Input/OTP/OTP.js +9 -8
- package/lib/components/Input/Password/Password.js +6 -5
- package/lib/components/Input/Search/Search.js +8 -7
- package/lib/components/Input/TextArea/TextArea.js +5 -4
- package/lib/components/Input/Trade/Trade.js +5 -4
- package/lib/components/Input/useAmountInput.js +13 -11
- package/lib/components/Input/useSyncRef.js +4 -3
- package/lib/components/Navigation/Nav.js +3 -3
- package/lib/components/Navigation/Navigation.js +10 -7
- package/lib/components/Pagination/Pagination.js +4 -3
- package/lib/components/Pagination/usePagination.js +7 -6
- package/lib/components/Popconfirm/Popconfirm.js +3 -3
- package/lib/components/Portal/Portal.js +4 -4
- package/lib/components/ProForm/ProForm.d.ts +10 -2
- package/lib/components/ProForm/ProForm.js +66 -30
- package/lib/components/ProForm/ProFormDependency.js +4 -1
- package/lib/components/ProForm/ProFormGroup.js +3 -3
- package/lib/components/ProForm/ProFormItem.js +72 -34
- package/lib/components/ProForm/ProFormList.js +10 -9
- package/lib/components/ProForm/SchemaForm.d.ts +7 -0
- package/lib/components/ProForm/SchemaForm.js +110 -0
- package/lib/components/ProForm/Submitter.js +15 -5
- package/lib/components/ProForm/context.d.ts +22 -3
- package/lib/components/ProForm/context.js +49 -10
- package/lib/components/ProForm/core/constants.d.ts +8 -1
- package/lib/components/ProForm/core/constants.js +10 -7
- package/lib/components/ProForm/core/hooks/useForm.js +181 -327
- package/lib/components/ProForm/core/hooks/useFormCore.js +96 -190
- package/lib/components/ProForm/core/interface.d.ts +33 -12
- package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
- package/lib/components/ProForm/core/pathUtils.js +68 -0
- package/lib/components/ProForm/core/runRules.d.ts +23 -0
- package/lib/components/ProForm/core/runRules.js +242 -0
- package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
- package/lib/components/ProForm/core/useFormItem.js +106 -62
- package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/lib/components/ProForm/fields/createProFormField.js +63 -58
- package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
- package/lib/components/ProForm/index.d.ts +11 -4
- package/lib/components/ProForm/index.js +16 -1
- package/lib/components/ProForm/interface.d.ts +89 -14
- package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DialogForm.js +2 -1
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/lib/components/ProForm/layouts/QueryFilter.js +84 -18
- package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
- package/lib/components/ProForm/style/ProForm.css +6 -0
- package/lib/components/ProForm/utils.d.ts +14 -3
- package/lib/components/ProForm/utils.js +91 -74
- package/lib/components/ProTable/ProTable.js +10 -9
- package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
- package/lib/components/ProTable/useFetchData.js +15 -13
- package/lib/components/Radio/Radio.js +6 -5
- package/lib/components/Radio/RadioGroup.js +5 -4
- package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
- package/lib/components/Segment/Segment.js +7 -5
- package/lib/components/Select/Select.js +23 -22
- package/lib/components/Select/SelectCustom.js +8 -8
- package/lib/components/Select/useSelectShell.js +5 -4
- package/lib/components/Slider/Slider.js +6 -5
- package/lib/components/Switch/Switch.js +5 -4
- package/lib/components/Table/Table.js +13 -27
- package/lib/components/Table/VirtualTable.js +17 -27
- package/lib/components/Table/core/columnUtil.d.ts +9 -0
- package/lib/components/Table/core/columnUtil.js +42 -0
- package/lib/components/Table/core/useTableColumns.d.ts +4 -13
- package/lib/components/Table/core/useTableColumns.js +57 -26
- package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
- package/lib/components/Table/core/useTableDataPipeline.js +73 -80
- package/lib/components/Table/core/useTableExpand.js +6 -5
- package/lib/components/Table/core/useTableSelection.js +13 -10
- package/lib/components/Table/core/useTableSetup.js +8 -5
- package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
- package/lib/components/Table/features/ExpandTrigger.js +14 -8
- package/lib/components/Table/features/FilterTrigger.js +21 -17
- package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
- package/lib/components/Table/features/SelectionColumn.js +12 -5
- package/lib/components/Table/features/SortTrigger.d.ts +4 -2
- package/lib/components/Table/features/SortTrigger.js +8 -3
- package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
- package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
- package/lib/components/Table/internal/kernel/Table.js +7 -6
- package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
- package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
- package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
- package/lib/components/Table/renderers/HeaderCell.js +3 -2
- package/lib/components/Table/renderers/TableShell.d.ts +13 -0
- package/lib/components/Table/renderers/TableShell.js +31 -0
- package/lib/components/Table/style/Table.css +3 -0
- package/lib/components/Tabs/Tabs.js +7 -5
- package/lib/components/Tooltip/Tooltip.js +5 -4
- package/lib/components/Tooltip/style/Tooltip.css +1 -0
- package/lib/components/Tour/Tour.js +7 -6
- package/lib/components/Trigger/Trigger.js +5 -4
- package/lib/components/Typography/Typography.js +5 -4
- package/lib/components/Typography/useTypographyEnhancements.js +8 -7
- package/lib/components/Upload/Upload.js +5 -4
- package/lib/components/Upload/UploadFileBar.js +4 -3
- package/lib/components/VirtualList/VirtualList.js +8 -7
- package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
- package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +13 -1
- package/package.json +2 -2
- package/scripts/mcp-server/examples.generated.json +54 -0
- package/scripts/mcp-server/index.generated.json +1212 -80
|
@@ -8,17 +8,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useForm = exports["default"] = void 0;
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
13
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
-
var
|
|
15
|
+
var _useEventCallback = _interopRequireDefault(require("@1money/hooks/useEventCallback"));
|
|
16
|
+
var _useMemoizedFn = _interopRequireDefault(require("@1money/hooks/useMemoizedFn"));
|
|
17
|
+
var _useSafeState3 = _interopRequireDefault(require("@1money/hooks/useSafeState"));
|
|
16
18
|
var _useFormCore = require("./useFormCore");
|
|
19
|
+
var _pathUtils = require("../pathUtils");
|
|
20
|
+
var _runRules = require("../runRules");
|
|
17
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
19
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
20
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
21
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
22
23
|
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
23
24
|
function adopt(value) {
|
|
24
25
|
return value instanceof P ? value : new P(function (resolve) {
|
|
@@ -55,28 +56,6 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
55
56
|
return t;
|
|
56
57
|
};
|
|
57
58
|
// ---------------------------------------------------------------------------
|
|
58
|
-
// Helpers – resolve nested paths
|
|
59
|
-
// ---------------------------------------------------------------------------
|
|
60
|
-
function resolveValue(values, name) {
|
|
61
|
-
if (!name.includes('.')) return values[name];
|
|
62
|
-
var keys = name.split('.');
|
|
63
|
-
var current = values;
|
|
64
|
-
var _iterator = _createForOfIteratorHelper(keys),
|
|
65
|
-
_step;
|
|
66
|
-
try {
|
|
67
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
68
|
-
var key = _step.value;
|
|
69
|
-
if (current === null || current === undefined || (0, _typeof2["default"])(current) !== 'object') return undefined;
|
|
70
|
-
current = current[key];
|
|
71
|
-
}
|
|
72
|
-
} catch (err) {
|
|
73
|
-
_iterator.e(err);
|
|
74
|
-
} finally {
|
|
75
|
-
_iterator.f();
|
|
76
|
-
}
|
|
77
|
-
return current;
|
|
78
|
-
}
|
|
79
|
-
// ---------------------------------------------------------------------------
|
|
80
59
|
// useForm
|
|
81
60
|
// ---------------------------------------------------------------------------
|
|
82
61
|
var useForm = exports.useForm = function useForm() {
|
|
@@ -87,7 +66,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
87
66
|
_config$validateTrigg = config.validateTrigger,
|
|
88
67
|
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
89
68
|
var formCore = (0, _useFormCore.useFormCore)(config);
|
|
90
|
-
var _useSafeState = (0,
|
|
69
|
+
var _useSafeState = (0, _useSafeState3["default"])({}),
|
|
91
70
|
_useSafeState2 = (0, _slicedToArray2["default"])(_useSafeState, 2),
|
|
92
71
|
validating = _useSafeState2[0],
|
|
93
72
|
setValidating = _useSafeState2[1];
|
|
@@ -101,9 +80,9 @@ var useForm = exports.useForm = function useForm() {
|
|
|
101
80
|
// ---------------------------------------------------------------------------
|
|
102
81
|
// Async field validation – each rule is processed exactly once
|
|
103
82
|
// ---------------------------------------------------------------------------
|
|
104
|
-
var validateFieldAsync = (0,
|
|
83
|
+
var validateFieldAsync = (0, _useMemoizedFn["default"])(function (name, value, rules) {
|
|
105
84
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
106
|
-
var
|
|
85
|
+
var _yield$runRulesAsync, error, warning;
|
|
107
86
|
return _regenerator["default"].wrap(function (_context) {
|
|
108
87
|
while (1) switch (_context.prev = _context.next) {
|
|
109
88
|
case 0:
|
|
@@ -120,169 +99,23 @@ var useForm = exports.useForm = function useForm() {
|
|
|
120
99
|
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, true));
|
|
121
100
|
});
|
|
122
101
|
_context.prev = 2;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (!(rule.required && (value === undefined || value === null || value === ''))) {
|
|
133
|
-
_context.next = 5;
|
|
102
|
+
_context.next = 3;
|
|
103
|
+
return (0, _runRules.runRulesAsync)(name, value, formCore.getFieldsValue(), rules);
|
|
104
|
+
case 3:
|
|
105
|
+
_yield$runRulesAsync = _context.sent;
|
|
106
|
+
error = _yield$runRulesAsync.error;
|
|
107
|
+
warning = _yield$runRulesAsync.warning;
|
|
108
|
+
formCore.setFieldWarning(name, warning);
|
|
109
|
+
if (!(error !== null)) {
|
|
110
|
+
_context.next = 4;
|
|
134
111
|
break;
|
|
135
112
|
}
|
|
136
|
-
error = rule.message || "".concat(name, " is required");
|
|
137
113
|
formCore.setFieldError(name, error);
|
|
138
114
|
return _context.abrupt("return", {
|
|
139
115
|
isValid: false,
|
|
140
116
|
error: error
|
|
141
117
|
});
|
|
142
|
-
case
|
|
143
|
-
if (!(rule.min && typeof value === 'string' && value.length < rule.min)) {
|
|
144
|
-
_context.next = 6;
|
|
145
|
-
break;
|
|
146
|
-
}
|
|
147
|
-
_error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
|
|
148
|
-
formCore.setFieldError(name, _error);
|
|
149
|
-
return _context.abrupt("return", {
|
|
150
|
-
isValid: false,
|
|
151
|
-
error: _error
|
|
152
|
-
});
|
|
153
|
-
case 6:
|
|
154
|
-
if (!(rule.max && typeof value === 'string' && value.length > rule.max)) {
|
|
155
|
-
_context.next = 7;
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
_error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
|
|
159
|
-
formCore.setFieldError(name, _error2);
|
|
160
|
-
return _context.abrupt("return", {
|
|
161
|
-
isValid: false,
|
|
162
|
-
error: _error2
|
|
163
|
-
});
|
|
164
|
-
case 7:
|
|
165
|
-
if (!(rule.pattern && typeof value === 'string' && !rule.pattern.test(value))) {
|
|
166
|
-
_context.next = 8;
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
_error3 = rule.message || "".concat(name, " format is invalid");
|
|
170
|
-
formCore.setFieldError(name, _error3);
|
|
171
|
-
return _context.abrupt("return", {
|
|
172
|
-
isValid: false,
|
|
173
|
-
error: _error3
|
|
174
|
-
});
|
|
175
|
-
case 8:
|
|
176
|
-
if (!(rule["enum"] && Array.isArray(rule["enum"]) && value)) {
|
|
177
|
-
_context.next = 9;
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
if (rule["enum"].includes(value)) {
|
|
181
|
-
_context.next = 9;
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
_error4 = rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
185
|
-
formCore.setFieldError(name, _error4);
|
|
186
|
-
return _context.abrupt("return", {
|
|
187
|
-
isValid: false,
|
|
188
|
-
error: _error4
|
|
189
|
-
});
|
|
190
|
-
case 9:
|
|
191
|
-
if (!(rule.type === 'number' && value !== undefined && value !== null && value !== '')) {
|
|
192
|
-
_context.next = 10;
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
if (!(typeof value !== 'number' || isNaN(value))) {
|
|
196
|
-
_context.next = 10;
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
_error5 = rule.message || "".concat(name, " must be a number");
|
|
200
|
-
formCore.setFieldError(name, _error5);
|
|
201
|
-
return _context.abrupt("return", {
|
|
202
|
-
isValid: false,
|
|
203
|
-
error: _error5
|
|
204
|
-
});
|
|
205
|
-
case 10:
|
|
206
|
-
if (!(rule.type === 'email' && value)) {
|
|
207
|
-
_context.next = 11;
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
211
|
-
if (emailPattern.test(String(value))) {
|
|
212
|
-
_context.next = 11;
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
_error6 = rule.message || "".concat(name, " must be a valid email");
|
|
216
|
-
formCore.setFieldError(name, _error6);
|
|
217
|
-
return _context.abrupt("return", {
|
|
218
|
-
isValid: false,
|
|
219
|
-
error: _error6
|
|
220
|
-
});
|
|
221
|
-
case 11:
|
|
222
|
-
if (!(rule.type === 'url' && value)) {
|
|
223
|
-
_context.next = 14;
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
_context.prev = 12;
|
|
227
|
-
new URL(String(value));
|
|
228
|
-
_context.next = 14;
|
|
229
|
-
break;
|
|
230
|
-
case 13:
|
|
231
|
-
_context.prev = 13;
|
|
232
|
-
_t = _context["catch"](12);
|
|
233
|
-
_error7 = rule.message || "".concat(name, " must be a valid URL");
|
|
234
|
-
formCore.setFieldError(name, _error7);
|
|
235
|
-
return _context.abrupt("return", {
|
|
236
|
-
isValid: false,
|
|
237
|
-
error: _error7
|
|
238
|
-
});
|
|
239
|
-
case 14:
|
|
240
|
-
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
241
|
-
_context.next = 19;
|
|
242
|
-
break;
|
|
243
|
-
}
|
|
244
|
-
_context.prev = 15;
|
|
245
|
-
_context.next = 16;
|
|
246
|
-
return Promise.resolve(rule.validator(value, formCore.values));
|
|
247
|
-
case 16:
|
|
248
|
-
result = _context.sent;
|
|
249
|
-
if (!(result !== true && result !== undefined)) {
|
|
250
|
-
_context.next = 17;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
_error8 = typeof result === 'string' ? result : 'Validation failed';
|
|
254
|
-
formCore.setFieldError(name, _error8);
|
|
255
|
-
return _context.abrupt("return", {
|
|
256
|
-
isValid: false,
|
|
257
|
-
error: _error8
|
|
258
|
-
});
|
|
259
|
-
case 17:
|
|
260
|
-
_context.next = 19;
|
|
261
|
-
break;
|
|
262
|
-
case 18:
|
|
263
|
-
_context.prev = 18;
|
|
264
|
-
_t2 = _context["catch"](15);
|
|
265
|
-
errorMessage = _t2 instanceof Error ? _t2.message : 'Validation error';
|
|
266
|
-
formCore.setFieldError(name, errorMessage);
|
|
267
|
-
return _context.abrupt("return", {
|
|
268
|
-
isValid: false,
|
|
269
|
-
error: errorMessage
|
|
270
|
-
});
|
|
271
|
-
case 19:
|
|
272
|
-
_context.next = 4;
|
|
273
|
-
break;
|
|
274
|
-
case 20:
|
|
275
|
-
_context.next = 22;
|
|
276
|
-
break;
|
|
277
|
-
case 21:
|
|
278
|
-
_context.prev = 21;
|
|
279
|
-
_t3 = _context["catch"](3);
|
|
280
|
-
_iterator2.e(_t3);
|
|
281
|
-
case 22:
|
|
282
|
-
_context.prev = 22;
|
|
283
|
-
_iterator2.f();
|
|
284
|
-
return _context.finish(22);
|
|
285
|
-
case 23:
|
|
118
|
+
case 4:
|
|
286
119
|
if (formCore.errors[name]) {
|
|
287
120
|
formCore.setFieldError(name, null);
|
|
288
121
|
}
|
|
@@ -290,25 +123,25 @@ var useForm = exports.useForm = function useForm() {
|
|
|
290
123
|
isValid: true,
|
|
291
124
|
error: null
|
|
292
125
|
});
|
|
293
|
-
case
|
|
294
|
-
_context.prev =
|
|
126
|
+
case 5:
|
|
127
|
+
_context.prev = 5;
|
|
295
128
|
setValidating(function (prev) {
|
|
296
129
|
var newValidating = Object.assign({}, prev);
|
|
297
130
|
delete newValidating[name];
|
|
298
131
|
return newValidating;
|
|
299
132
|
});
|
|
300
|
-
return _context.finish(
|
|
301
|
-
case
|
|
133
|
+
return _context.finish(5);
|
|
134
|
+
case 6:
|
|
302
135
|
case "end":
|
|
303
136
|
return _context.stop();
|
|
304
137
|
}
|
|
305
|
-
}, _callee, null, [[2,,
|
|
138
|
+
}, _callee, null, [[2,, 5, 6]]);
|
|
306
139
|
}));
|
|
307
140
|
});
|
|
308
141
|
// ---------------------------------------------------------------------------
|
|
309
142
|
// Async field blur handler
|
|
310
143
|
// ---------------------------------------------------------------------------
|
|
311
|
-
var handleFieldBlur = (0,
|
|
144
|
+
var handleFieldBlur = (0, _useEventCallback["default"])(function (name) {
|
|
312
145
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
313
146
|
var rules;
|
|
314
147
|
return _regenerator["default"].wrap(function (_context2) {
|
|
@@ -317,13 +150,13 @@ var useForm = exports.useForm = function useForm() {
|
|
|
317
150
|
setExtraTouched(function (prev) {
|
|
318
151
|
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, true));
|
|
319
152
|
});
|
|
320
|
-
rules = formCore.
|
|
153
|
+
rules = formCore.getFieldRules(name);
|
|
321
154
|
if (!(rules && validateTrigger === 'onBlur')) {
|
|
322
155
|
_context2.next = 1;
|
|
323
156
|
break;
|
|
324
157
|
}
|
|
325
158
|
_context2.next = 1;
|
|
326
|
-
return validateFieldAsync(name, resolveValue(formCore.
|
|
159
|
+
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), rules);
|
|
327
160
|
case 1:
|
|
328
161
|
case "end":
|
|
329
162
|
return _context2.stop();
|
|
@@ -334,7 +167,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
334
167
|
// ---------------------------------------------------------------------------
|
|
335
168
|
// Validate all fields async
|
|
336
169
|
// ---------------------------------------------------------------------------
|
|
337
|
-
var validateFieldsAsync = (0,
|
|
170
|
+
var validateFieldsAsync = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
338
171
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
339
172
|
var fieldsToValidate, hasError, fieldErrors, validationPromises, error;
|
|
340
173
|
return _regenerator["default"].wrap(function (_context4) {
|
|
@@ -355,7 +188,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
355
188
|
break;
|
|
356
189
|
}
|
|
357
190
|
_context3.next = 1;
|
|
358
|
-
return validateFieldAsync(name, resolveValue(formCore.
|
|
191
|
+
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), rules);
|
|
359
192
|
case 1:
|
|
360
193
|
_yield$validateFieldA = _context3.sent;
|
|
361
194
|
isValid = _yield$validateFieldA.isValid;
|
|
@@ -379,7 +212,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
379
212
|
break;
|
|
380
213
|
}
|
|
381
214
|
error = new Error('Validation failed');
|
|
382
|
-
error.values = formCore.
|
|
215
|
+
error.values = formCore.getFieldsValue();
|
|
383
216
|
error.errors = fieldErrors;
|
|
384
217
|
throw error;
|
|
385
218
|
case 2:
|
|
@@ -388,11 +221,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
388
221
|
break;
|
|
389
222
|
}
|
|
390
223
|
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
391
|
-
acc[name] = resolveValue(formCore.
|
|
224
|
+
acc[name] = (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name);
|
|
392
225
|
return acc;
|
|
393
226
|
}, {}));
|
|
394
227
|
case 3:
|
|
395
|
-
return _context4.abrupt("return", formCore.
|
|
228
|
+
return _context4.abrupt("return", formCore.getFieldsValue());
|
|
396
229
|
case 4:
|
|
397
230
|
case "end":
|
|
398
231
|
return _context4.stop();
|
|
@@ -403,7 +236,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
403
236
|
// ---------------------------------------------------------------------------
|
|
404
237
|
// defineField – used by standalone (non-ProForm) consumers
|
|
405
238
|
// ---------------------------------------------------------------------------
|
|
406
|
-
var defineField = (0,
|
|
239
|
+
var defineField = (0, _useMemoizedFn["default"])(function (name) {
|
|
407
240
|
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
408
241
|
var _fieldOptions$rules = fieldOptions.rules,
|
|
409
242
|
rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
|
|
@@ -425,13 +258,13 @@ var useForm = exports.useForm = function useForm() {
|
|
|
425
258
|
formCore.unregisterField(name);
|
|
426
259
|
};
|
|
427
260
|
}, []); // Only register on mount
|
|
428
|
-
var handleFieldChange = (0,
|
|
261
|
+
var handleFieldChange = (0, _useEventCallback["default"])(function (value) {
|
|
429
262
|
formCore.setFieldValue(name, value);
|
|
430
263
|
if (validateTrigger === 'onChange') {
|
|
431
264
|
formCore.validateField(name, rules, value);
|
|
432
265
|
}
|
|
433
266
|
});
|
|
434
|
-
var handleBlur = (0,
|
|
267
|
+
var handleBlur = (0, _useEventCallback["default"])(function () {
|
|
435
268
|
handleFieldBlur(name);
|
|
436
269
|
});
|
|
437
270
|
var fieldProps = Object.assign({
|
|
@@ -488,13 +321,13 @@ var useForm = exports.useForm = function useForm() {
|
|
|
488
321
|
});
|
|
489
322
|
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
490
323
|
return FieldComponent;
|
|
491
|
-
}
|
|
324
|
+
});
|
|
492
325
|
// ---------------------------------------------------------------------------
|
|
493
326
|
// handleSubmit / handleReset – for <form> event handlers
|
|
494
327
|
// ---------------------------------------------------------------------------
|
|
495
|
-
var handleSubmit = (0,
|
|
328
|
+
var handleSubmit = (0, _useEventCallback["default"])(function (e) {
|
|
496
329
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
497
|
-
var validatedValues, typed,
|
|
330
|
+
var validatedValues, typed, _t;
|
|
498
331
|
return _regenerator["default"].wrap(function (_context5) {
|
|
499
332
|
while (1) switch (_context5.prev = _context5.next) {
|
|
500
333
|
case 0:
|
|
@@ -509,8 +342,8 @@ var useForm = exports.useForm = function useForm() {
|
|
|
509
342
|
break;
|
|
510
343
|
case 3:
|
|
511
344
|
_context5.prev = 3;
|
|
512
|
-
|
|
513
|
-
typed =
|
|
345
|
+
_t = _context5["catch"](1);
|
|
346
|
+
typed = _t;
|
|
514
347
|
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
515
348
|
values: typed.values,
|
|
516
349
|
errors: typed.errors
|
|
@@ -522,7 +355,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
522
355
|
}, _callee5, null, [[1, 3]]);
|
|
523
356
|
}));
|
|
524
357
|
});
|
|
525
|
-
var handleReset = (0,
|
|
358
|
+
var handleReset = (0, _useEventCallback["default"])(function (e) {
|
|
526
359
|
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
527
360
|
formCore.resetFields();
|
|
528
361
|
setExtraTouched({});
|
|
@@ -530,133 +363,152 @@ var useForm = exports.useForm = function useForm() {
|
|
|
530
363
|
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
531
364
|
});
|
|
532
365
|
// ---------------------------------------------------------------------------
|
|
533
|
-
// FormInstance – enhanced API for consumers
|
|
366
|
+
// FormInstance – enhanced API for consumers.
|
|
367
|
+
//
|
|
368
|
+
// Every method is wrapped in useMemoizedFn (stable identity, always reads the
|
|
369
|
+
// latest render's state) so the instance object itself is IDENTITY-STABLE for
|
|
370
|
+
// the lifetime of the form — this is what lets ProForm publish it through the
|
|
371
|
+
// stable context without re-rendering subscribers on each keystroke.
|
|
534
372
|
// ---------------------------------------------------------------------------
|
|
373
|
+
var getFieldError = (0, _useMemoizedFn["default"])(function (name) {
|
|
374
|
+
return formCore.errors[name];
|
|
375
|
+
});
|
|
376
|
+
var getFieldWarning = (0, _useMemoizedFn["default"])(function (name) {
|
|
377
|
+
return formCore.warnings[name];
|
|
378
|
+
});
|
|
379
|
+
var getFieldsError = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
380
|
+
if (!nameList) return formCore.errors;
|
|
381
|
+
var result = {};
|
|
382
|
+
nameList.forEach(function (name) {
|
|
383
|
+
if (formCore.errors[name]) {
|
|
384
|
+
result[name] = formCore.errors[name];
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
return result;
|
|
388
|
+
});
|
|
389
|
+
var isFieldTouched = (0, _useMemoizedFn["default"])(function (name) {
|
|
390
|
+
return allTouched[name] || false;
|
|
391
|
+
});
|
|
392
|
+
var isFieldsTouched = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
393
|
+
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
394
|
+
if (!nameList) {
|
|
395
|
+
return Object.keys(allTouched).some(function (key) {
|
|
396
|
+
return allTouched[key];
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
if (allFieldsTouched) {
|
|
400
|
+
return nameList.every(function (name) {
|
|
401
|
+
return allTouched[name];
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
return nameList.some(function (name) {
|
|
405
|
+
return allTouched[name];
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
var isFieldValidating = (0, _useMemoizedFn["default"])(function (name) {
|
|
409
|
+
return validating[name] || false;
|
|
410
|
+
});
|
|
411
|
+
var setFieldsError = (0, _useMemoizedFn["default"])(function (fieldsError) {
|
|
412
|
+
Object.entries(fieldsError).forEach(function (_ref) {
|
|
413
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
414
|
+
name = _ref2[0],
|
|
415
|
+
error = _ref2[1];
|
|
416
|
+
formCore.setFieldError(name, error);
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
var setFieldTouched = (0, _useMemoizedFn["default"])(function (name) {
|
|
420
|
+
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
421
|
+
setExtraTouched(function (prev) {
|
|
422
|
+
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, isTouched));
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
var setFieldsTouched = (0, _useMemoizedFn["default"])(function (fieldsTouch) {
|
|
426
|
+
setExtraTouched(function (prev) {
|
|
427
|
+
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
var resetFormFields = (0, _useMemoizedFn["default"])(function (fields) {
|
|
431
|
+
if (!fields) {
|
|
432
|
+
formCore.resetFields();
|
|
433
|
+
setExtraTouched({});
|
|
434
|
+
setValidating({});
|
|
435
|
+
} else {
|
|
436
|
+
var resetValues = {};
|
|
437
|
+
fields.forEach(function (field) {
|
|
438
|
+
var _a;
|
|
439
|
+
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
440
|
+
});
|
|
441
|
+
formCore.setFieldsValue(resetValues);
|
|
442
|
+
setExtraTouched(function (prev) {
|
|
443
|
+
var newTouched = Object.assign({}, prev);
|
|
444
|
+
fields.forEach(function (field) {
|
|
445
|
+
delete newTouched[field];
|
|
446
|
+
});
|
|
447
|
+
return newTouched;
|
|
448
|
+
});
|
|
449
|
+
setValidating(function (prev) {
|
|
450
|
+
var newValidating = Object.assign({}, prev);
|
|
451
|
+
fields.forEach(function (field) {
|
|
452
|
+
delete newValidating[field];
|
|
453
|
+
});
|
|
454
|
+
return newValidating;
|
|
455
|
+
});
|
|
456
|
+
fields.forEach(function (field) {
|
|
457
|
+
formCore.setFieldError(field, null);
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
var submitWithValidation = (0, _useMemoizedFn["default"])(function (callback) {
|
|
462
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
463
|
+
var validatedValues, _t2;
|
|
464
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
465
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
466
|
+
case 0:
|
|
467
|
+
_context6.prev = 0;
|
|
468
|
+
_context6.next = 1;
|
|
469
|
+
return validateFieldsAsync();
|
|
470
|
+
case 1:
|
|
471
|
+
validatedValues = _context6.sent;
|
|
472
|
+
if (!callback) {
|
|
473
|
+
_context6.next = 2;
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
_context6.next = 2;
|
|
477
|
+
return callback(validatedValues);
|
|
478
|
+
case 2:
|
|
479
|
+
return _context6.abrupt("return", validatedValues);
|
|
480
|
+
case 3:
|
|
481
|
+
_context6.prev = 3;
|
|
482
|
+
_t2 = _context6["catch"](0);
|
|
483
|
+
return _context6.abrupt("return", undefined);
|
|
484
|
+
case 4:
|
|
485
|
+
case "end":
|
|
486
|
+
return _context6.stop();
|
|
487
|
+
}
|
|
488
|
+
}, _callee6, null, [[0, 3]]);
|
|
489
|
+
}));
|
|
490
|
+
});
|
|
535
491
|
var formInstance = (0, _react.useMemo)(function () {
|
|
536
492
|
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
537
493
|
validateFields: validateFieldsAsync,
|
|
538
494
|
setFieldValue: formCore.setFieldValue,
|
|
539
|
-
getFieldError:
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
nameList.forEach(function (name) {
|
|
546
|
-
if (formCore.errors[name]) {
|
|
547
|
-
result[name] = formCore.errors[name];
|
|
548
|
-
}
|
|
549
|
-
});
|
|
550
|
-
return result;
|
|
551
|
-
},
|
|
552
|
-
isFieldTouched: function isFieldTouched(name) {
|
|
553
|
-
return allTouched[name] || false;
|
|
554
|
-
},
|
|
555
|
-
isFieldsTouched: function isFieldsTouched(nameList) {
|
|
556
|
-
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
557
|
-
if (!nameList) {
|
|
558
|
-
return Object.keys(allTouched).some(function (key) {
|
|
559
|
-
return allTouched[key];
|
|
560
|
-
});
|
|
561
|
-
}
|
|
562
|
-
if (allFieldsTouched) {
|
|
563
|
-
return nameList.every(function (name) {
|
|
564
|
-
return allTouched[name];
|
|
565
|
-
});
|
|
566
|
-
}
|
|
567
|
-
return nameList.some(function (name) {
|
|
568
|
-
return allTouched[name];
|
|
569
|
-
});
|
|
570
|
-
},
|
|
571
|
-
isFieldValidating: function isFieldValidating(name) {
|
|
572
|
-
return validating[name] || false;
|
|
573
|
-
},
|
|
495
|
+
getFieldError: getFieldError,
|
|
496
|
+
getFieldWarning: getFieldWarning,
|
|
497
|
+
getFieldsError: getFieldsError,
|
|
498
|
+
isFieldTouched: isFieldTouched,
|
|
499
|
+
isFieldsTouched: isFieldsTouched,
|
|
500
|
+
isFieldValidating: isFieldValidating,
|
|
574
501
|
setFieldError: formCore.setFieldError,
|
|
575
|
-
setFieldsError:
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
formCore.setFieldError(name, error);
|
|
581
|
-
});
|
|
582
|
-
},
|
|
583
|
-
setFieldTouched: function setFieldTouched(name) {
|
|
584
|
-
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
585
|
-
setExtraTouched(function (prev) {
|
|
586
|
-
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, isTouched));
|
|
587
|
-
});
|
|
588
|
-
},
|
|
589
|
-
setFieldsTouched: function setFieldsTouched(fieldsTouch) {
|
|
590
|
-
setExtraTouched(function (prev) {
|
|
591
|
-
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
592
|
-
});
|
|
593
|
-
},
|
|
594
|
-
resetFields: function resetFields(fields) {
|
|
595
|
-
if (!fields) {
|
|
596
|
-
formCore.resetFields();
|
|
597
|
-
setExtraTouched({});
|
|
598
|
-
setValidating({});
|
|
599
|
-
} else {
|
|
600
|
-
var resetValues = {};
|
|
601
|
-
fields.forEach(function (field) {
|
|
602
|
-
var _a;
|
|
603
|
-
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
604
|
-
});
|
|
605
|
-
formCore.setFieldsValue(resetValues);
|
|
606
|
-
setExtraTouched(function (prev) {
|
|
607
|
-
var newTouched = Object.assign({}, prev);
|
|
608
|
-
fields.forEach(function (field) {
|
|
609
|
-
delete newTouched[field];
|
|
610
|
-
});
|
|
611
|
-
return newTouched;
|
|
612
|
-
});
|
|
613
|
-
setValidating(function (prev) {
|
|
614
|
-
var newValidating = Object.assign({}, prev);
|
|
615
|
-
fields.forEach(function (field) {
|
|
616
|
-
delete newValidating[field];
|
|
617
|
-
});
|
|
618
|
-
return newValidating;
|
|
619
|
-
});
|
|
620
|
-
fields.forEach(function (field) {
|
|
621
|
-
formCore.setFieldError(field, null);
|
|
622
|
-
});
|
|
623
|
-
}
|
|
624
|
-
},
|
|
625
|
-
submit: function submit(callback) {
|
|
626
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
627
|
-
var validatedValues, _t5;
|
|
628
|
-
return _regenerator["default"].wrap(function (_context6) {
|
|
629
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
630
|
-
case 0:
|
|
631
|
-
_context6.prev = 0;
|
|
632
|
-
_context6.next = 1;
|
|
633
|
-
return validateFieldsAsync();
|
|
634
|
-
case 1:
|
|
635
|
-
validatedValues = _context6.sent;
|
|
636
|
-
if (!callback) {
|
|
637
|
-
_context6.next = 2;
|
|
638
|
-
break;
|
|
639
|
-
}
|
|
640
|
-
_context6.next = 2;
|
|
641
|
-
return callback(validatedValues);
|
|
642
|
-
case 2:
|
|
643
|
-
return _context6.abrupt("return", validatedValues);
|
|
644
|
-
case 3:
|
|
645
|
-
_context6.prev = 3;
|
|
646
|
-
_t5 = _context6["catch"](0);
|
|
647
|
-
return _context6.abrupt("return", undefined);
|
|
648
|
-
case 4:
|
|
649
|
-
case "end":
|
|
650
|
-
return _context6.stop();
|
|
651
|
-
}
|
|
652
|
-
}, _callee6, null, [[0, 3]]);
|
|
653
|
-
}));
|
|
654
|
-
},
|
|
502
|
+
setFieldsError: setFieldsError,
|
|
503
|
+
setFieldTouched: setFieldTouched,
|
|
504
|
+
setFieldsTouched: setFieldsTouched,
|
|
505
|
+
resetFields: resetFormFields,
|
|
506
|
+
submit: submitWithValidation,
|
|
655
507
|
defineField: defineField,
|
|
656
508
|
registerField: formCore.registerField,
|
|
657
509
|
unregisterField: formCore.unregisterField
|
|
658
510
|
});
|
|
659
|
-
}, [formCore,
|
|
511
|
+
}, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
|
|
660
512
|
// ---------------------------------------------------------------------------
|
|
661
513
|
// Internals – exposed for ProForm integration
|
|
662
514
|
// ---------------------------------------------------------------------------
|
|
@@ -664,11 +516,13 @@ var useForm = exports.useForm = function useForm() {
|
|
|
664
516
|
return {
|
|
665
517
|
values: formCore.values,
|
|
666
518
|
errors: formCore.errors,
|
|
519
|
+
warnings: formCore.warnings,
|
|
667
520
|
touched: allTouched,
|
|
668
521
|
validating: validating,
|
|
669
522
|
fieldRules: formCore.fieldRules,
|
|
670
523
|
setFieldValue: formCore.setFieldValue,
|
|
671
524
|
setFieldError: formCore.setFieldError,
|
|
525
|
+
setFieldWarning: formCore.setFieldWarning,
|
|
672
526
|
validateField: formCore.validateField,
|
|
673
527
|
validateFieldAsync: validateFieldAsync,
|
|
674
528
|
registerField: formCore.registerField,
|
|
@@ -676,11 +530,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
676
530
|
handleSubmit: handleSubmit,
|
|
677
531
|
handleReset: handleReset
|
|
678
532
|
};
|
|
679
|
-
}, [formCore.values, formCore.errors, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
533
|
+
}, [formCore.values, formCore.errors, formCore.warnings, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
680
534
|
return {
|
|
681
535
|
formInstance: formInstance,
|
|
682
536
|
internals: internals
|
|
683
537
|
};
|
|
684
538
|
};
|
|
685
539
|
var _default = exports["default"] = useForm;
|
|
686
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaG9va3MiLCJfdXNlRm9ybUNvcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwicmVzb2x2ZVZhbHVlIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJrZXlzIiwic3BsaXQiLCJjdXJyZW50IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJrZXkiLCJ1bmRlZmluZWQiLCJfdHlwZW9mMiIsImVyciIsInVzZUZvcm0iLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uUmVzZXQiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJmb3JtQ29yZSIsInVzZUZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsInVzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwidmFsaWRhdGluZyIsInNldFZhbGlkYXRpbmciLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwidXNlTWVtbyIsImFzc2lnbiIsInRvdWNoZWQiLCJ2YWxpZGF0ZUZpZWxkQXN5bmMiLCJ1c2VNZW1vaXplZEZuIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJydWxlIiwiZXJyb3IiLCJfZXJyb3IiLCJfZXJyb3IyIiwiX2Vycm9yMyIsIl9lcnJvcjQiLCJfZXJyb3I1IiwiZW1haWxQYXR0ZXJuIiwiX2Vycm9yNiIsIl9lcnJvcjciLCJfZXJyb3I4IiwiZXJyb3JNZXNzYWdlIiwiX3QiLCJfdDIiLCJfdDMiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJyZXF1aXJlZCIsIm1lc3NhZ2UiLCJjb25jYXQiLCJzZXRGaWVsZEVycm9yIiwibWluIiwibWF4IiwicGF0dGVybiIsImpvaW4iLCJ0eXBlIiwiaXNOYU4iLCJTdHJpbmciLCJVUkwiLCJ2YWxpZGF0b3IiLCJzZW50IiwiRXJyb3IiLCJmaW5pc2giLCJlcnJvcnMiLCJuZXdWYWxpZGF0aW5nIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0IiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkdmFsaWRhdGVGaWVsZEEiLCJfY29udGV4dDMiLCJhbGwiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsInVzZUNhbGxiYWNrIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfdDQiLCJfY29udGV4dDUiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZVJlc2V0IiwicmVzZXRGaWVsZHMiLCJmb3JtSW5zdGFuY2UiLCJ2YWxpZGF0ZUZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZHNFcnJvciIsImZvckVhY2giLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJzb21lIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwiZmllbGRzIiwicmVzZXRWYWx1ZXMiLCJmaWVsZCIsImluaXRpYWxWYWx1ZXMiLCJzZXRGaWVsZHNWYWx1ZSIsIm5ld1RvdWNoZWQiLCJzdWJtaXQiLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3Q1IiwiX2NvbnRleHQ2IiwiaW50ZXJuYWxzIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFBNEMsU0FBQUcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFMLHdCQUFBSyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLFFBQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQVcsMkJBQUFqQixDQUFBLEVBQUFGLENBQUEsUUFBQUcsQ0FBQSx5QkFBQWlCLE1BQUEsSUFBQWxCLENBQUEsQ0FBQWtCLE1BQUEsQ0FBQUMsUUFBQSxLQUFBbkIsQ0FBQSxxQkFBQUMsQ0FBQSxRQUFBbUIsS0FBQSxDQUFBQyxPQUFBLENBQUFyQixDQUFBLE1BQUFDLENBQUEsR0FBQXFCLDJCQUFBLENBQUF0QixDQUFBLE1BQUFGLENBQUEsSUFBQUUsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBdUIsTUFBQSxJQUFBdEIsQ0FBQSxLQUFBRCxDQUFBLEdBQUFDLENBQUEsT0FBQXVCLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBbkIsQ0FBQSxXQUFBQSxFQUFBLFdBQUFrQixFQUFBLElBQUF4QixDQUFBLENBQUF1QixNQUFBLEtBQUFJLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUE1QixDQUFBLENBQUF3QixFQUFBLFVBQUExQixDQUFBLFdBQUFBLEVBQUFFLENBQUEsVUFBQUEsQ0FBQSxLQUFBNkIsQ0FBQSxFQUFBSixDQUFBLGdCQUFBSyxTQUFBLGlKQUFBQyxDQUFBLEVBQUF2QixDQUFBLE9BQUFJLENBQUEsZ0JBQUFjLENBQUEsV0FBQUEsRUFBQSxJQUFBekIsQ0FBQSxHQUFBQSxDQUFBLENBQUFhLElBQUEsQ0FBQWQsQ0FBQSxNQUFBTSxDQUFBLFdBQUFBLEVBQUEsUUFBQU4sQ0FBQSxHQUFBQyxDQUFBLENBQUErQixJQUFBLFdBQUF4QixDQUFBLEdBQUFSLENBQUEsQ0FBQTJCLElBQUEsRUFBQTNCLENBQUEsS0FBQUYsQ0FBQSxXQUFBQSxFQUFBRSxDQUFBLElBQUFZLENBQUEsT0FBQW1CLENBQUEsR0FBQS9CLENBQUEsS0FBQTZCLENBQUEsV0FBQUEsRUFBQSxVQUFBckIsQ0FBQSxZQUFBUCxDQUFBLGNBQUFBLENBQUEsOEJBQUFXLENBQUEsUUFBQW1CLENBQUE7QUFBQSxTQUFBVCw0QkFBQXRCLENBQUEsRUFBQVEsQ0FBQSxRQUFBUixDQUFBLDJCQUFBQSxDQUFBLFNBQUFpQyxpQkFBQSxDQUFBakMsQ0FBQSxFQUFBUSxDQUFBLE9BQUFQLENBQUEsTUFBQWlDLFFBQUEsQ0FBQXBCLElBQUEsQ0FBQWQsQ0FBQSxFQUFBbUMsS0FBQSw2QkFBQWxDLENBQUEsSUFBQUQsQ0FBQSxDQUFBb0MsV0FBQSxLQUFBbkMsQ0FBQSxHQUFBRCxDQUFBLENBQUFvQyxXQUFBLENBQUFDLElBQUEsYUFBQXBDLENBQUEsY0FBQUEsQ0FBQSxHQUFBbUIsS0FBQSxDQUFBa0IsSUFBQSxDQUFBdEMsQ0FBQSxvQkFBQUMsQ0FBQSwrQ0FBQXNDLElBQUEsQ0FBQXRDLENBQUEsSUFBQWdDLGlCQUFBLENBQUFqQyxDQUFBLEVBQUFRLENBQUE7QUFBQSxTQUFBeUIsa0JBQUFqQyxDQUFBLEVBQUFRLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFSLENBQUEsQ0FBQXVCLE1BQUEsTUFBQWYsQ0FBQSxHQUFBUixDQUFBLENBQUF1QixNQUFBLFlBQUF6QixDQUFBLE1BQUFRLENBQUEsR0FBQWMsS0FBQSxDQUFBWixDQUFBLEdBQUFWLENBQUEsR0FBQVUsQ0FBQSxFQUFBVixDQUFBLElBQUFRLENBQUEsQ0FBQVIsQ0FBQSxJQUFBRSxDQUFBLENBQUFGLENBQUEsVUFBQVEsQ0FBQTtBQ0o1QyxJQUFJa0MsU0FBUyxHQUFJLFVBQVEsU0FBS0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDakIsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZZSxDQUFDLEdBQUdmLEtBQUssR0FBRyxJQUFJZSxDQUFDLENBQUMsVUFBVUcsT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ2xCLEtBQUssQ0FBQztJQUFFLENBQUMsQ0FBQztFQUFFO0VBQzNHLE9BQU8sS0FBS2UsQ0FBQyxLQUFLQSxDQUFDLEdBQUdJLE9BQU8sQ0FBQyxFQUFFLFVBQVVELE9BQU8sRUFBRUUsTUFBTSxFQUFFO0lBQ3ZELFNBQVNDLFNBQVNBLENBQUNyQixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVzQixJQUFJLENBQUNOLFNBQVMsQ0FBQ1osSUFBSSxDQUFDSixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPOUIsQ0FBQyxFQUFFO1FBQUVrRCxNQUFNLENBQUNsRCxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNxRCxRQUFRQSxDQUFDdkIsS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFc0IsSUFBSSxDQUFDTixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUNoQixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPOUIsQ0FBQyxFQUFFO1FBQUVrRCxNQUFNLENBQUNsRCxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzdGLFNBQVNvRCxJQUFJQSxDQUFDRSxNQUFNLEVBQUU7TUFBRUEsTUFBTSxDQUFDekIsSUFBSSxHQUFHbUIsT0FBTyxDQUFDTSxNQUFNLENBQUN4QixLQUFLLENBQUMsR0FBR2lCLEtBQUssQ0FBQ08sTUFBTSxDQUFDeEIsS0FBSyxDQUFDLENBQUN5QixJQUFJLENBQUNKLFNBQVMsRUFBRUUsUUFBUSxDQUFDO0lBQUU7SUFDN0dELElBQUksQ0FBQyxDQUFDTixTQUFTLEdBQUdBLFNBQVMsQ0FBQ1UsS0FBSyxDQUFDYixPQUFPLEVBQUVDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRVYsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RSxDQUFDLENBQUM7QUFDTixDQUFDO0FBQ0QsSUFBSXVCLE1BQU0sR0FBSSxVQUFRLFNBQUtBLE1BQU0sSUFBSyxVQUFVN0IsQ0FBQyxFQUFFNUIsQ0FBQyxFQUFFO0VBQ2xELElBQUlHLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUl1RCxDQUFDLElBQUk5QixDQUFDLEVBQUUsSUFBSWpCLE1BQU0sQ0FBQ2dELFNBQVMsQ0FBQzVDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDWSxDQUFDLEVBQUU4QixDQUFDLENBQUMsSUFBSTFELENBQUMsQ0FBQzRELE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRXZELENBQUMsQ0FBQ3VELENBQUMsQ0FBQyxHQUFHOUIsQ0FBQyxDQUFDOEIsQ0FBQyxDQUFDO0VBQ2YsSUFBSTlCLENBQUMsSUFBSSxJQUFJLElBQUksT0FBT2pCLE1BQU0sQ0FBQ2tELHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJNUMsQ0FBQyxHQUFHLENBQUMsRUFBRXlDLENBQUMsR0FBRy9DLE1BQU0sQ0FBQ2tELHFCQUFxQixDQUFDakMsQ0FBQyxDQUFDLEVBQUVYLENBQUMsR0FBR3lDLENBQUMsQ0FBQ2pDLE1BQU0sRUFBRVIsQ0FBQyxFQUFFLEVBQUU7SUFDcEUsSUFBSWpCLENBQUMsQ0FBQzRELE9BQU8sQ0FBQ0YsQ0FBQyxDQUFDekMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUlOLE1BQU0sQ0FBQ2dELFNBQVMsQ0FBQ0csb0JBQW9CLENBQUM5QyxJQUFJLENBQUNZLENBQUMsRUFBRThCLENBQUMsQ0FBQ3pDLENBQUMsQ0FBQyxDQUFDLEVBQzFFZCxDQUFDLENBQUN1RCxDQUFDLENBQUN6QyxDQUFDLENBQUMsQ0FBQyxHQUFHVyxDQUFDLENBQUM4QixDQUFDLENBQUN6QyxDQUFDLENBQUMsQ0FBQztFQUN6QjtFQUNKLE9BQU9kLENBQUM7QUFDWixDQUFDO0FESEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzRELFlBQVlBLENBQUNDLE1BQStCLEVBQUV6QixJQUFZLEVBQUE7RUFDakUsSUFBSSxDQUFDQSxJQUFJLENBQUMwQixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBT0QsTUFBTSxDQUFDekIsSUFBSSxDQUFDO0VBQzVDLElBQU0yQixJQUFJLEdBQUczQixJQUFJLENBQUM0QixLQUFLLENBQUMsR0FBRyxDQUFDO0VBQzVCLElBQUlDLE9BQU8sR0FBWUosTUFBTTtFQUFDLElBQUFLLFNBQUEsR0FBQWxELDBCQUFBLENBQ1orQyxJQUFJO0lBQUFJLEtBQUE7RUFBQTtJQUF0QixLQUFBRCxTQUFBLENBQUF6QyxDQUFBLE1BQUEwQyxLQUFBLEdBQUFELFNBQUEsQ0FBQTdELENBQUEsSUFBQXFCLElBQUEsR0FBd0I7TUFBQSxJQUFiMEMsR0FBRyxHQUFBRCxLQUFBLENBQUF4QyxLQUFBO01BQ1osSUFBSXNDLE9BQU8sS0FBSyxJQUFJLElBQUlBLE9BQU8sS0FBS0ksU0FBUyxJQUFJLElBQUFDLFFBQUEsYUFBT0wsT0FBTyxNQUFLLFFBQVEsRUFBRSxPQUFPSSxTQUFTO01BQzlGSixPQUFPLEdBQUlBLE9BQW1DLENBQUNHLEdBQUcsQ0FBQztJQUNyRDtFQUFDLFNBQUFHLEdBQUE7SUFBQUwsU0FBQSxDQUFBckUsQ0FBQSxDQUFBMEUsR0FBQTtFQUFBO0lBQUFMLFNBQUEsQ0FBQXRDLENBQUE7RUFBQTtFQUNELE9BQU9xQyxPQUFPO0FBQ2hCO0FBRUE7QUFDQTtBQUNBO0FBQ08sSUFBTU8sT0FBTyxHQUFBQyxPQUFBLENBQUFELE9BQUEsR0FBRyxTQUFWQSxPQUFPQSxDQUFBLEVBQWlEO0VBQUEsSUFBN0NFLE1BQUEsR0FBQUMsU0FBQSxDQUFBckQsTUFBQSxRQUFBcUQsU0FBQSxRQUFBTixTQUFBLEdBQUFNLFNBQUEsTUFBd0IsQ0FBQSxDQUFFO0VBQ2hELElBQ0VDLFFBQVEsR0FJTkYsTUFBTSxDQUpSRSxRQUFRO0lBQ1JDLGNBQWMsR0FHWkgsTUFBTSxDQUhSRyxjQUFjO0lBQ2RDLE9BQU8sR0FFTEosTUFBTSxDQUZSSSxPQUFPO0lBQUFDLHFCQUFBLEdBRUxMLE1BQU0sQ0FEUk0sZUFBZTtJQUFmQSxlQUFlLEdBQUFELHFCQUFBLGNBQUcsVUFBVSxHQUFBQSxxQkFBQTtFQUc5QixJQUFNRSxRQUFRLEdBQUcsSUFBQUMsd0JBQVcsRUFBQ1IsTUFBTSxDQUFDO0VBRXBDLElBQUFTLGFBQUEsR0FBb0MsSUFBQUMsbUJBQVksRUFBMEIsQ0FBQSxDQUFFLENBQUM7SUFBQUMsY0FBQSxPQUFBQyxlQUFBLGFBQUFILGFBQUE7SUFBdEVJLFVBQVUsR0FBQUYsY0FBQTtJQUFFRyxhQUFhLEdBQUFILGNBQUE7RUFDaEMsSUFBQUksU0FBQSxHQUF3QyxJQUFBQyxlQUFRLEVBQTBCLENBQUEsQ0FBRSxDQUFDO0lBQUFDLFVBQUEsT0FBQUwsZUFBQSxhQUFBRyxTQUFBO0lBQXRFRyxZQUFZLEdBQUFELFVBQUE7SUFBRUUsZUFBZSxHQUFBRixVQUFBO0VBRXBDLElBQU1HLFVBQVUsR0FBRyxJQUFBQyxjQUFPLEVBQ3hCO0lBQUEsT0FBTXZGLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQXhGLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBTWYsUUFBUSxDQUFDZ0IsT0FBTyxDQUFBLEVBQUtMLFlBQVksQ0FBQTtFQUFBLENBQUcsRUFDaEQsQ0FBQ1gsUUFBUSxDQUFDZ0IsT0FBTyxFQUFFTCxZQUFZLENBQUMsQ0FDakM7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNTSxrQkFBa0IsR0FBRyxJQUFBQyxvQkFBYSxFQUN0QyxVQUNFL0QsSUFBWSxFQUNaVCxLQUFjLEVBQ2R5RSxLQUFhO0lBQUEsT0FDMEM3RCxTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUE4RCxZQUFBLFlBQUFDLElBQUEsQ0FBQSxTQUFBQyxRQUFBO01BQUEsSUFBQUMsVUFBQSxFQUFBQyxNQUFBLEVBQUFDLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBLEVBQUFDLE9BQUEsRUFBQUMsT0FBQSxFQUFBQyxPQUFBLEVBQUFDLE9BQUEsRUFBQUMsWUFBQSxFQUFBQyxPQUFBLEVBQUFDLE9BQUEsRUFBQWhFLE1BQUEsRUFBQWlFLE9BQUEsRUFBQUMsWUFBQSxFQUFBQyxFQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUFuQixZQUFBLFlBQUFvQixJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQTNGLElBQUE7VUFBQTtZQUFBLE1BQ25ELENBQUNxRSxLQUFLLElBQUlBLEtBQUssQ0FBQzlFLE1BQU0sS0FBSyxDQUFDO2NBQUFvRyxRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUEyRixRQUFBLENBQUFFLE1BQUEsV0FBUztjQUFFQyxPQUFPLEVBQUUsSUFBSTtjQUFFbEIsS0FBSyxFQUFFO1lBQUksQ0FBRTtVQUFBO1lBRXZFbkIsYUFBYSxDQUFDLFVBQUNtQyxJQUFJO2NBQUEsT0FBS25ILE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQXhGLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBTTJCLElBQUksQ0FBQSxNQUFBRyxnQkFBQSxpQkFBRzFGLElBQUksRUFBRyxJQUFJLENBQUEsQ0FBQTtZQUFBLENBQUcsQ0FBQztZQUFDc0YsUUFBQSxDQUFBQyxJQUFBO1lBQUFuQixVQUFBLEdBQUF4RiwwQkFBQSxDQUdoQ29GLEtBQUs7WUFBQXNCLFFBQUEsQ0FBQUMsSUFBQTtZQUFBbkIsVUFBQSxDQUFBL0UsQ0FBQTtVQUFBO1lBQUEsS0FBQWdGLE1BQUEsR0FBQUQsVUFBQSxDQUFBbkcsQ0FBQSxJQUFBcUIsSUFBQTtjQUFBZ0csUUFBQSxDQUFBM0YsSUFBQTtjQUFBO1lBQUE7WUFBYjJFLElBQUksR0FBQUQsTUFBQSxDQUFBOUUsS0FBQTtZQUFBLE1BR1grRSxJQUFJLENBQUNxQixRQUFRLEtBQ1pwRyxLQUFLLEtBQUswQyxTQUFTLElBQUkxQyxLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUssRUFBRSxDQUFDO2NBQUErRixRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUVqRDRFLEtBQUssR0FBR0QsSUFBSSxDQUFDc0IsT0FBTyxPQUFBQyxNQUFBLENBQU83RixJQUFJLGlCQUFjO1lBQ25ENkMsUUFBUSxDQUFDaUQsYUFBYSxDQUFDOUYsSUFBSSxFQUFFdUUsS0FBSyxDQUFDO1lBQUMsT0FBQWUsUUFBQSxDQUFBRSxNQUFBLFdBQzdCO2NBQUVDLE9BQU8sRUFBRSxLQUFLO2NBQUVsQixLQUFLLEVBQUxBO1lBQUssQ0FBRTtVQUFBO1lBQUEsTUFJOUJELElBQUksQ0FBQ3lCLEdBQUcsSUFBSSxPQUFPeEcsS0FBSyxLQUFLLFFBQVEsSUFBSUEsS0FBSyxDQUFDTCxNQUFNLEdBQUdvRixJQUFJLENBQUN5QixHQUFHO2NBQUFULFFBQUEsQ0FBQTNGLElBQUE7Y0FBQTtZQUFBO1lBQzVENEUsTUFBSyxHQUNURCxJQUFJLENBQUNzQixPQUFPLE9BQUFDLE1BQUEsQ0FBTzdGLElBQUksd0JBQUE2RixNQUFBLENBQXFCdkIsSUFBSSxDQUFDeUIsR0FBRyxnQkFBYTtZQUNuRWxELFFBQVEsQ0FBQ2lELGFBQWEsQ0FBQzlGLElBQUksRUFBRXVFLE1BQUssQ0FBQztZQUFDLE9BQUFlLFFBQUEsQ0FBQUUsTUFBQSxXQUM3QjtjQUFFQyxPQUFPLEVBQUUsS0FBSztjQUFFbEIsS0FBSyxFQUFMQTtZQUFLLENBQUU7VUFBQTtZQUFBLE1BSTlCRCxJQUFJLENBQUMwQixHQUFHLElBQUksT0FBT3pHLEtBQUssS0FBSyxRQUFRLElBQUlBLEtBQUssQ0FBQ0wsTUFBTSxHQUFHb0YsSUFBSSxDQUFDMEIsR0FBRztjQUFBVixRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUM1RDRFLE9BQUssR0FDVEQsSUFBSSxDQUFDc0IsT0FBTyxPQUFBQyxNQUFBLENBQU83RixJQUFJLDRCQUFBNkYsTUFBQSxDQUF5QnZCLElBQUksQ0FBQzBCLEdBQUcsZ0JBQWE7WUFDdkVuRCxRQUFRLENBQUNpRCxhQUFhLENBQUM5RixJQUFJLEVBQUV1RSxPQUFLLENBQUM7WUFBQyxPQUFBZSxRQUFBLENBQUFFLE1BQUEsV0FDN0I7Y0FBRUMsT0FBTyxFQUFFLEtBQUs7Y0FBRWxCLEtBQUssRUFBTEE7WUFBSyxDQUFFO1VBQUE7WUFBQSxNQUk5QkQsSUFBSSxDQUFDMkIsT0FBTyxJQUFJLE9BQU8xRyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMrRSxJQUFJLENBQUMyQixPQUFPLENBQUMvRixJQUFJLENBQUNYLEtBQUssQ0FBQztjQUFBK0YsUUFBQSxDQUFBM0YsSUFBQTtjQUFBO1lBQUE7WUFDbEU0RSxPQUFLLEdBQUdELElBQUksQ0FBQ3NCLE9BQU8sT0FBQUMsTUFBQSxDQUFPN0YsSUFBSSx1QkFBb0I7WUFDekQ2QyxRQUFRLENBQUNpRCxhQUFhLENBQUM5RixJQUFJLEVBQUV1RSxPQUFLLENBQUM7WUFBQyxPQUFBZSxRQUFBLENBQUFFLE1BQUEsV0FDN0I7Y0FBRUMsT0FBTyxFQUFFLEtBQUs7Y0FBRWxCLEtBQUssRUFBTEE7WUFBSyxDQUFFO1VBQUE7WUFBQSxNQUk5QkQsSUFBSSxRQUFLLElBQUl2RixLQUFLLENBQUNDLE9BQU8sQ0FBQ3NGLElBQUksUUFBSyxDQUFDLElBQUkvRSxLQUFLO2NBQUErRixRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUFBLElBQzNDMkUsSUFBSSxRQUFLLENBQUM1QyxRQUFRLENBQUNuQyxLQUFLLENBQUM7Y0FBQStGLFFBQUEsQ0FBQTNGLElBQUE7Y0FBQTtZQUFBO1lBQ3RCNEUsT0FBSyxHQUNURCxJQUFJLENBQUNzQixPQUFPLE9BQUFDLE1BQUEsQ0FBTzdGLElBQUksc0JBQUE2RixNQUFBLENBQW1CdkIsSUFBSSxRQUFLLENBQUM0QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUU7WUFDbEVyRCxRQUFRLENBQUNpRCxhQUFhLENBQUM5RixJQUFJLEVBQUV1RSxPQUFLLENBQUM7WUFBQyxPQUFBZSxRQUFBLENBQUFFLE1BQUEsV0FDN0I7Y0FBRUMsT0FBTyxFQUFFLEtBQUs7Y0FBRWxCLEtBQUssRUFBTEE7WUFBSyxDQUFFO1VBQUE7WUFBQSxNQUtoQ0QsSUFBSSxDQUFDNkIsSUFBSSxLQUFLLFFBQVEsSUFBSTVHLEtBQUssS0FBSzBDLFNBQVMsSUFBSTFDLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBSyxFQUFFO2NBQUErRixRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUFBLE1BQzdFLE9BQU9KLEtBQUssS0FBSyxRQUFRLElBQUk2RyxLQUFLLENBQUM3RyxLQUFLLENBQUM7Y0FBQStGLFFBQUEsQ0FBQTNGLElBQUE7Y0FBQTtZQUFBO1lBQ3JDNEUsT0FBSyxHQUFHRCxJQUFJLENBQUNzQixPQUFPLE9BQUFDLE1BQUEsQ0FBTzdGLElBQUksc0JBQW1CO1lBQ3hENkMsUUFBUSxDQUFDaUQsYUFBYSxDQUFDOUYsSUFBSSxFQUFFdUUsT0FBSyxDQUFDO1lBQUMsT0FBQWUsUUFBQSxDQUFBRSxNQUFBLFdBQzdCO2NBQUVDLE9BQU8sRUFBRSxLQUFLO2NBQUVsQixLQUFLLEVBQUxBO1lBQUssQ0FBRTtVQUFBO1lBQUEsTUFJaENELElBQUksQ0FBQzZCLElBQUksS0FBSyxPQUFPLElBQUk1RyxLQUFLO2NBQUErRixRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUMxQmtGLFlBQVksR0FBRyw0QkFBNEI7WUFBQSxJQUM1Q0EsWUFBWSxDQUFDM0UsSUFBSSxDQUFDbUcsTUFBTSxDQUFDOUcsS0FBSyxDQUFDLENBQUM7Y0FBQStGLFFBQUEsQ0FBQTNGLElBQUE7Y0FBQTtZQUFBO1lBQzdCNEUsT0FBSyxHQUFHRCxJQUFJLENBQUNzQixPQUFPLE9BQUFDLE1BQUEsQ0FBTzdGLElBQUksMkJBQXdCO1lBQzdENkMsUUFBUSxDQUFDaUQsYUFBYSxDQUFDOUYsSUFBSSxFQUFFdUUsT0FBSyxDQUFDO1lBQUMsT0FBQWUsUUFBQSxDQUFBRSxNQUFBLFdBQzdCO2NBQUVDLE9BQU8sRUFBRSxLQUFLO2NBQUVsQixLQUFLLEVBQUxBO1lBQUssQ0FBRTtVQUFBO1lBQUEsTUFJaENELElBQUksQ0FBQzZCLElBQUksS0FBSyxLQUFLLElBQUk1RyxLQUFLO2NBQUErRixRQUFBLENBQUEzRixJQUFBO2NBQUE7WUFBQTtZQUFBMkYsUUFBQSxDQUFBQyxJQUFBO1lBRTVCLElBQUllLEdBQUcsQ0FBQ0QsTUFBTSxDQUFDOUcsS0FBSyxDQUFDLENBQUM7WUFBQytGLFFBQUEsQ0FBQTNGLElBQUE7WUFBQTtVQUFBO1lBQUEyRixRQUFBLENBQUFDLElBQUE7WUFBQUwsRUFBQSxHQUFBSSxRQUFBO1lBRWpCZixPQUFLLEdBQUdELElBQUksQ0FBQ3NCLE9BQU8sT0FBQUMsTUFBQSxDQUFPN0YsSUFBSSx5QkFBc0I7WUFDM0Q2QyxRQUFRLENBQUNpRCxhQUFhLENBQUM5RixJQUFJLEVBQUV1RSxPQUFLLENBQUM7WUFBQyxPQUFBZSxRQUFBLENBQUFFLE1BQUEsV0FDN0I7Y0FBRUMsT0FBTyxFQUFFLEtBQUs7Y0FBRWxCLEtBQUssRUFBTEE7WUFBSyxDQUFFO1VBQUE7WUFBQSxNQUtoQ0QsSUFBSSxDQUFDaUMsU0FBUyxJQUFJLE9BQU9qQyxJQUFJLENBQUNpQyxTQUFTLEtBQUssVUFBVTtjQUFBakIsUUFBQSxDQUFBM0YsSUFBQTtjQUFBO1lBQUE7WUFBQTJGLFFBQUEsQ0FBQUMsSUFBQTtZQUFBRCxRQUFBLENBQUEzRixJQUFBO1lBRXZDLE9BQU1lLE9BQU8sQ0FBQ0QsT0FBTyxDQUNsQzZELElBQUksQ0FBQ2lDLFNBQVMsQ0FBQ2hILEtBQUssRUFBRXNELFFBQVEsQ0FBQ3BCLE1BQWlDLENBQUMsQ0FDbEU7VUFBQTtZQUZLVixNQUFNLEdBQUF1RSxRQUFBLENBQUFrQixJQUFBO1lBQUEsTUFHUnpGLE1BQU0sS0FBSyxJQUFJLElBQUlBLE1BQU0sS0FBS2tCLFNBQVM7Y0FBQXFELFFBQUEsQ0FBQTNGLElBQUE7Y0FBQTtZQUFBO1lBQ25DNEUsT0FBSyxHQUNULE9BQU94RCxNQUFNLEtBQUssUUFBUSxHQUFHQSxNQUFNLEdBQUcsbUJBQW1CO1lBQzNEOEIsUUFBUSxDQUFDaUQsYUFBYSxDQUFDOUYsSUFBSSxFQUFFdUUsT0FBSyxDQUFDO1lBQUMsT0FBQWUsUUFBQSxDQUFBRSxNQUFBLFdBQzdCO2NBQUVDLE9BQU8sRUFBRSxLQUFLO2NBQUVsQixLQUFLLEVBQUxBO1lBQUssQ0FBRTtVQUFBO1lBQUFlLFFBQUEsQ0FBQTNGLElBQUE7WUFBQTtVQUFBO1lBQUEyRixRQUFBLENBQUFDLElBQUE7WUFBQUosR0FBQSxHQUFBRyxRQUFBO1lBRzVCTCxZQUFZLEdBQ2hCRSxHQUFBLFlBQWVzQixLQUFLLEdBQUd0QixHQUFBLENBQUlTLE9BQU8sR0FBRyxrQkFBa0I7WUFDekQvQyxRQUFRLENBQUNpRCxhQUFhLENBQUM5RixJQUFJLEVBQUVpRixZQUFZLENBQUM7WUFBQyxPQUFBSyxRQUFBLENBQUFFLE1BQUEsV0FDcEM7Y0FBRUMsT0FBTyxFQUFFLEtBQUs7Y0FBRWxCLEtBQUssRUFBRVU7WUFBWSxDQUFFO1VBQUE7WUFBQUssUUFBQSxDQUFBM0YsSUFBQTtZQUFBO1VBQUE7WUFBQTJGLFFBQUEsQ0FBQTNGLElBQUE7WUFBQTtVQUFBO1lBQUEyRixRQUFBLENBQUFDLElBQUE7WUFBQUgsR0FBQSxHQUFBRSxRQUFBO1lBQUFsQixVQUFBLENBQUEzRyxDQUFBLENBQUEySCxHQUFBO1VBQUE7WUFBQUUsUUFBQSxDQUFBQyxJQUFBO1lBQUFuQixVQUFBLENBQUE1RSxDQUFBO1lBQUEsT0FBQThGLFFBQUEsQ0FBQW9CLE1BQUE7VUFBQTtZQUtwRCxJQUFJN0QsUUFBUSxDQUFDOEQsTUFBTSxDQUFDM0csSUFBSSxDQUFDLEVBQUU7Y0FDekI2QyxRQUFRLENBQUNpRCxhQUFhLENBQUM5RixJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3BDO1lBQUMsT0FBQXNGLFFBQUEsQ0FBQUUsTUFBQSxXQUNNO2NBQUVDLE9BQU8sRUFBRSxJQUFJO2NBQUVsQixLQUFLLEVBQUU7WUFBSSxDQUFFO1VBQUE7WUFBQWUsUUFBQSxDQUFBQyxJQUFBO1lBRXJDbkMsYUFBYSxDQUFDLFVBQUNtQyxJQUFJLEVBQUk7Y0FDckIsSUFBTXFCLGFBQWEsR0FBQXhJLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBUTJCLElBQUksQ0FBRTtjQUNqQyxPQUFPcUIsYUFBYSxDQUFDNUcsSUFBSSxDQUFDO2NBQzFCLE9BQU80RyxhQUFhO1lBQ3RCLENBQUMsQ0FBQztZQUFDLE9BQUF0QixRQUFBLENBQUFvQixNQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFwQixRQUFBLENBQUF1QixJQUFBO1FBQUE7TUFBQSxHQUFBMUMsT0FBQTtJQUFBLENBRU4sRUFBQTtFQUFBLEVBQ0Y7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNMkMsZUFBZSxHQUFHLElBQUFDLHVCQUFnQixFQUFDLFVBQU8vRyxJQUFZO0lBQUEsT0FBSUcsU0FBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxlQUFBOEQsWUFBQSxZQUFBQyxJQUFBLENBQUEsU0FBQThDLFNBQUE7TUFBQSxJQUFBaEQsS0FBQTtNQUFBLE9BQUFDLFlBQUEsWUFBQW9CLElBQUEsV0FBQTRCLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBMUIsSUFBQSxHQUFBMEIsU0FBQSxDQUFBdEgsSUFBQTtVQUFBO1lBQzlEOEQsZUFBZSxDQUFDLFVBQUM4QixJQUFJO2NBQUEsT0FBS25ILE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQXhGLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBTTJCLElBQUksQ0FBQSxNQUFBRyxnQkFBQSxpQkFBRzFGLElBQUksRUFBRyxJQUFJLENBQUEsQ0FBQTtZQUFBLENBQUcsQ0FBQztZQUVoRGdFLEtBQUssR0FBR25CLFFBQVEsQ0FBQ3FFLFVBQVUsQ0FBQ2xILElBQUksQ0FBQztZQUFBLE1BQ25DZ0UsS0FBSyxJQUFJcEIsZUFBZSxLQUFLLFFBQVE7Y0FBQXFFLFNBQUEsQ0FBQXRILElBQUE7Y0FBQTtZQUFBO1lBQUFzSCxTQUFBLENBQUF0SCxJQUFBO1lBQ3ZDLE9BQU1tRSxrQkFBa0IsQ0FBQzlELElBQUksRUFBRXdCLFlBQVksQ0FBQ3FCLFFBQVEsQ0FBQ3BCLE1BQU0sRUFBRXpCLElBQUksQ0FBQyxFQUFFZ0UsS0FBSyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFpRCxTQUFBLENBQUFKLElBQUE7UUFBQTtNQUFBLEdBQUFHLFFBQUE7SUFBQSxDQUU3RSxFQUFBO0VBQUEsRUFBQztFQUVGO0VBQ0E7RUFDQTtFQUNBLElBQU1HLG1CQUFtQixHQUFHLElBQUFwRCxvQkFBYSxFQUN2QyxVQUFPcUQsUUFBbUI7SUFBQSxPQUFzQ2pILFNBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsZUFBQThELFlBQUEsWUFBQUMsSUFBQSxDQUFBLFNBQUFtRCxTQUFBO01BQUEsSUFBQUMsZ0JBQUEsRUFBQUMsUUFBQSxFQUFBQyxXQUFBLEVBQUFDLGtCQUFBLEVBQUFsRCxLQUFBO01BQUEsT0FBQU4sWUFBQSxZQUFBb0IsSUFBQSxXQUFBcUMsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFuQyxJQUFBLEdBQUFtQyxTQUFBLENBQUEvSCxJQUFBO1VBQUE7WUFDeEQySCxnQkFBZ0IsR0FBR0YsUUFBUSxJQUFJaEosTUFBTSxDQUFDdUQsSUFBSSxDQUFDa0IsUUFBUSxDQUFDcUUsVUFBVSxDQUFDO1lBQ2pFSyxRQUFRLEdBQUcsS0FBSztZQUNkQyxXQUFXLEdBQTJCLENBQUEsQ0FBRTtZQUV4Q0Msa0JBQWtCLEdBQUdILGdCQUFnQixDQUFDSyxHQUFHLENBQUMsVUFBTzNILElBQUk7Y0FBQSxPQUFJRyxTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUE4RCxZQUFBLFlBQUFDLElBQUEsQ0FBQSxTQUFBMEQsU0FBQTtnQkFBQSxJQUFBNUQsS0FBQSxFQUFBNkQscUJBQUEsRUFBQXBDLE9BQUEsRUFBQWxCLEtBQUE7Z0JBQUEsT0FBQU4sWUFBQSxZQUFBb0IsSUFBQSxXQUFBeUMsU0FBQTtrQkFBQSxrQkFBQUEsU0FBQSxDQUFBdkMsSUFBQSxHQUFBdUMsU0FBQSxDQUFBbkksSUFBQTtvQkFBQTtzQkFDdkRxRSxLQUFLLEdBQUduQixRQUFRLENBQUNxRSxVQUFVLENBQUNsSCxJQUFJLENBQUM7c0JBQUEsS0FDbkNnRSxLQUFLO3dCQUFBOEQsU0FBQSxDQUFBbkksSUFBQTt3QkFBQTtzQkFBQTtzQkFBQW1JLFNBQUEsQ0FBQW5JLElBQUE7c0JBQ29CLE9BQU1tRSxrQkFBa0IsQ0FDakQ5RCxJQUFJLEVBQ0p3QixZQUFZLENBQUNxQixRQUFRLENBQUNwQixNQUFNLEVBQUV6QixJQUFJLENBQUMsRUFDbkNnRSxLQUFLLENBQ047b0JBQUE7c0JBQUE2RCxxQkFBQSxHQUFBQyxTQUFBLENBQUF0QixJQUFBO3NCQUpPZixPQUFPLEdBQUFvQyxxQkFBQSxDQUFQcEMsT0FBTztzQkFBRWxCLEtBQUssR0FBQXNELHFCQUFBLENBQUx0RCxLQUFLO3NCQUt0QixJQUFJLENBQUNrQixPQUFPLElBQUlsQixLQUFLLEVBQUU7d0JBQ3JCZ0QsUUFBUSxHQUFHLElBQUk7d0JBQ2ZDLFdBQVcsQ0FBQ3hILElBQUksQ0FBQyxHQUFHdUUsS0FBSztzQkFDM0I7b0JBQUM7b0JBQUE7c0JBQUEsT0FBQXVELFNBQUEsQ0FBQWpCLElBQUE7a0JBQUE7Z0JBQUEsR0FBQWUsUUFBQTtjQUFBLENBRUosRUFBQTtZQUFBLEVBQUM7WUFBQUYsU0FBQSxDQUFBL0gsSUFBQTtZQUVGLE9BQU1lLE9BQU8sQ0FBQ3FILEdBQUcsQ0FBQ04sa0JBQWtCLENBQUM7VUFBQTtZQUFBLEtBRWpDRixRQUFRO2NBQUFHLFNBQUEsQ0FBQS9ILElBQUE7Y0FBQTtZQUFBO1lBQ0o0RSxLQUFLLEdBQUcsSUFBSWtDLEtBQUssQ0FBQyxtQkFBbUIsQ0FHMUM7WUFDRGxDLEtBQUssQ0FBQzlDLE1BQU0sR0FBR29CLFFBQVEsQ0FBQ3BCLE1BQU07WUFDOUI4QyxLQUFLLENBQUNvQyxNQUFNLEdBQUdhLFdBQVc7WUFBQyxNQUNyQmpELEtBQUs7VUFBQTtZQUFBLEtBR1Q2QyxRQUFRO2NBQUFNLFNBQUEsQ0FBQS9ILElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQStILFNBQUEsQ0FBQWxDLE1BQUEsV0FDSDRCLFFBQVEsQ0FBQ1ksTUFBTSxDQUEwQixVQUFDQyxHQUFHLEVBQUVqSSxJQUFJLEVBQUk7Y0FDNURpSSxHQUFHLENBQUNqSSxJQUFJLENBQUMsR0FBR3dCLFlBQVksQ0FBQ3FCLFFBQVEsQ0FBQ3BCLE1BQU0sRUFBRXpCLElBQUksQ0FBQztjQUMvQyxPQUFPaUksR0FBRztZQUNaLENBQUMsRUFBRSxDQUFBLENBQUUsQ0FBQztVQUFBO1lBQUEsT0FBQVAsU0FBQSxDQUFBbEMsTUFBQSxXQUdEM0MsUUFBUSxDQUFDcEIsTUFBTTtVQUFBO1VBQUE7WUFBQSxPQUFBaUcsU0FBQSxDQUFBYixJQUFBO1FBQUE7TUFBQSxHQUFBUSxRQUFBO0lBQUEsQ0FDdkIsRUFBQTtFQUFBLEVBQ0Y7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNYSxXQUFXLEdBQUcsSUFBQUMsa0JBQVcsRUFDN0IsVUFBQ25JLElBQVksRUFBb0U7SUFBQSxJQUFsRW9JLFlBQUEsR0FBQTdGLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQU4sU0FBQSxHQUFBTSxTQUFBLE1BQTZCLENBQUEsQ0FBRTtJQUM1QyxJQUFBOEYsbUJBQUEsR0FBdUJELFlBQVksQ0FBM0JwRSxLQUFLO01BQUxBLEtBQUssR0FBQXFFLG1CQUFBLGNBQUcsRUFBRSxHQUFBQSxtQkFBQTtJQUVsQixJQUFNQyxjQUFjLGdCQUFrQyxJQUFBQyxXQUFJLEVBQ3hELFVBQUNDLEVBQThCLEVBQUk7TUM3Qy9CLElBQUlDLEVBQUU7TUFDTixJRDRDREMsUUFBUSxHQUFRRixFQUFZLENBQTVCRSxRQUFRO1FBQUVDLE1BQU0sR0FBQUgsRUFBWSxDQUFsQkcsTUFBTTtRQUFLQyxLQUFLLEdBQUExSCxNQUFBLENBQUFzSCxFQUFBLEVBQTVCLENBQUEsVUFBQSxFQUFBLFFBQUEsQ0FBOEIsQ0FBRjtNQUMzQixJQUFNSyxVQUFVLEdBQUcsQ0FBQUosRUFBQSxHQUFBNUYsUUFBUSxDQUFDcEIsTUFBTSxDQUFDekIsSUFBSSxDQUFDLE1BQUEsSUFBQSxJQUFBeUksRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksRUFBRTtNQUM5QyxJQUFNSyxVQUFVLEdBQUdqRyxRQUFRLENBQUM4RCxNQUFNLENBQUMzRyxJQUFJLENBQUM7TUFDeEMsSUFBTStJLFlBQVksR0FBR3JGLFVBQVUsQ0FBQzFELElBQUksQ0FBQztNQUNyQyxJQUFNZ0osZUFBZSxHQUFHN0YsVUFBVSxDQUFDbkQsSUFBSSxDQUFDO01BRXhDLElBQUFpSixnQkFBUyxFQUFDLFlBQUs7UUFDYixJQUFNQyxhQUFhLEdBQUdyRyxRQUFRLENBQUNzRyxhQUFhLENBQUNuSixJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDa0osYUFBYSxJQUFJbEYsS0FBSyxDQUFDOUUsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN0QzJELFFBQVEsQ0FBQ3VHLGFBQWEsQ0FBQ3BKLElBQUksRUFBRWdFLEtBQUssQ0FBQztRQUNyQztRQUNBLE9BQU8sWUFBSztVQUNWbkIsUUFBUSxDQUFDd0csZUFBZSxDQUFDckosSUFBSSxDQUFDO1FBQ2hDLENBQUM7TUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUVSLElBQU1zSixpQkFBaUIsR0FBRyxJQUFBdkMsdUJBQWdCLEVBQUMsVUFBQ3hILEtBQWMsRUFBSTtRQUM1RHNELFFBQVEsQ0FBQzBHLGFBQWEsQ0FBQ3ZKLElBQUksRUFBRVQsS0FBSyxDQUFDO1FBQ25DLElBQUlxRCxlQUFlLEtBQUssVUFBVSxFQUFFO1VBQ2xDQyxRQUFRLENBQUMyRyxhQUFhLENBQUN4SixJQUFJLEVBQUVnRSxLQUFLLEVBQUV6RSxLQUFLLENBQUM7UUFDNUM7TUFDRixDQUFDLENBQUM7TUFFRixJQUFNa0ssVUFBVSxHQUFHLElBQUExQyx1QkFBZ0IsRUFBQyxZQUFLO1FBQ3ZDRCxlQUFlLENBQUM5RyxJQUFJLENBQUM7TUFDdkIsQ0FBQyxDQUFDO01BRUYsSUFBTTBKLFVBQVUsR0FBQXRMLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQTtRQUNkNUQsSUFBSSxFQUFKQSxJQUFJO1FBQ0pULEtBQUssRUFBRXNKLFVBQVU7UUFDakJ0RSxLQUFLLEVBQUV1RSxVQUFVO1FBQ2pCakYsT0FBTyxFQUFFa0YsWUFBWTtRQUNyQjVGLFVBQVUsRUFBRTZGLGVBQWU7UUFDM0JXLFFBQVEsRUFBRUwsaUJBQWlCO1FBQzNCTSxNQUFNLEVBQUVIO01BQVUsQ0FBQSxFQUNmYixLQUFLLENBQ1Q7TUFFRCxJQUFNaUIsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSXBNLENBQVUsRUFBSTtRQ3pEbkMsSUFBSStLLEVBQUU7UUQwRFYsSUFBTWpKLEtBQUssR0FDVDlCLENBQUMsSUFBSSxJQUFBeUUsUUFBQSxhQUFPekUsQ0FBQyxNQUFLLFFBQVEsSUFBSSxRQUFRLElBQUlBLENBQUMsR0FDdENBLENBQXlDLENBQUNxTSxNQUFNLENBQUN2SyxLQUFLLEdBQ3ZEOUIsQ0FBQztRQUNQNkwsaUJBQWlCLENBQUMvSixLQUFLLENBQUM7UUFDeEIsSUFDRSxhQUFBd0ssaUJBQUssQ0FBQ0MsY0FBYyxDQUFDdEIsUUFBUSxDQUFDLEtBQzlCLENBQUFGLEVBQUEsR0FBQ0UsUUFBUSxDQUFDRSxLQUFpQyxNQUFBLElBQUEsSUFBQUosRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVtQixRQUFRLENBQUEsRUFDckQ7VUFDRWpCLFFBQVEsQ0FBQ0UsS0FBaUMsQ0FBQ2UsUUFBaUMsQ0FBQ3BLLEtBQUssQ0FBQztRQUN2RjtNQUNGLENBQUM7TUFFRCxJQUFNMEssZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFBLEVBQVE7UUM1RHZCLElBQUl6QixFQUFFO1FENkRWaUIsVUFBVSxDQUFBLENBQUU7UUFDWixJQUNFLGFBQUFNLGlCQUFLLENBQUNDLGNBQWMsQ0FBQ3RCLFFBQVEsQ0FBQyxLQUM5QixDQUFBRixFQUFBLEdBQUNFLFFBQVEsQ0FBQ0UsS0FBaUMsTUFBQSxJQUFBLElBQUFKLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFb0IsTUFBTSxDQUFBLEVBQ25EO1VBQ0VsQixRQUFRLENBQUNFLEtBQWlDLENBQUNnQixNQUFxQixDQUFBLENBQUU7UUFDdEU7TUFDRixDQUFDO01BRUQsSUFBSWpCLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQzFDLE9BQU9BLE1BQU0sQ0FBQ2UsVUFBVSxDQUFDO01BQzNCO01BRUEsSUFBSSxPQUFPaEIsUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUNsQyxPQUFRQSxRQUFtRCxDQUFDZ0IsVUFBVSxDQUF1QjtNQUMvRjtNQUVBLGlCQUFJSyxpQkFBSyxDQUFDQyxjQUFjLENBQUN0QixRQUFRLENBQUMsRUFBRTtRQUNsQyxJQUFNd0IsV0FBVyxHQUFBOUwsTUFBQSxDQUFBd0YsTUFBQSxDQUFBeEYsTUFBQSxDQUFBd0YsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUNaOEYsVUFBVSxDQUFBLEVBQUE7VUFDYkMsUUFBUSxFQUFFRSxpQkFBaUI7VUFDM0JELE1BQU0sRUFBRUs7UUFBZSxDQUFBLENBQ3hCO1FBQ0Qsb0JBQU9GLGlCQUFLLENBQUNJLFlBQVksQ0FBQ3pCLFFBQThCLEVBQUV3QixXQUFXLENBQUM7TUFDeEU7TUFFQSxJQUFJbkwsS0FBSyxDQUFDQyxPQUFPLENBQUMwSixRQUFRLENBQUMsRUFBRTtRQUMzQixvQkFBT3FCLGlCQUFLLENBQUNLLGFBQWEsQ0FBQW5KLEtBQUEsQ0FBbkI4SSxpQkFBSyxHQUNWTSxlQUFRLEVBQ1IsSUFBSSxFQUFBeEUsTUFBQSxLQUFBeUUsbUJBQUEsYUFDRDVCLFFBQVEsQ0FBQ2YsR0FBRyxDQUFDLFVBQUM0QyxLQUFLLEVBQUVDLEtBQUssRUFBSTtVQUMvQixpQkFBSVQsaUJBQUssQ0FBQ0MsY0FBYyxDQUFDTyxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFNTCxZQUFXLEdBQUE5TCxNQUFBLENBQUF3RixNQUFBLENBQUF4RixNQUFBLENBQUF3RixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ1o4RixVQUFVLENBQUEsRUFBQTtjQUNiMUgsR0FBRyxFQUFFdUksS0FBSyxDQUFDdkksR0FBRyxJQUFJd0ksS0FBSztjQUN2QmIsUUFBUSxFQUFFRSxpQkFBaUI7Y0FDM0JELE1BQU0sRUFBRUs7WUFBZSxDQUFBLENBQ3hCO1lBQ0Qsb0JBQU9GLGlCQUFLLENBQUNJLFlBQVksQ0FBQ0ksS0FBMkIsRUFBRUwsWUFBVyxDQUFDO1VBQ3JFO1VBQ0EsT0FBT0ssS0FBSztRQUNkLENBQUMsQ0FBQyxHQUNIO01BQ0g7TUFFQSxPQUFPLElBQUk7SUFDYixDQUFDLENBQ0Y7SUFFRGpDLGNBQWMsQ0FBQ21DLFdBQVcsWUFBQTVFLE1BQUEsQ0FBWTdGLElBQUksTUFBRztJQUU3QyxPQUFPc0ksY0FBYztFQUN2QixDQUFDLEVBQ0QsQ0FDRXpGLFFBQVEsRUFDUmEsVUFBVSxFQUNWUCxVQUFVLEVBQ1ZQLGVBQWUsRUFDZmtFLGVBQWUsQ0FDaEIsQ0FDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU00RCxZQUFZLEdBQUcsSUFBQTNELHVCQUFnQixFQUFDLFVBQU90SixDQUFhO0lBQUEsT0FBSTBDLFNBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsZUFBQThELFlBQUEsWUFBQUMsSUFBQSxDQUFBLFNBQUF5RyxTQUFBO01BQUEsSUFBQUMsZUFBQSxFQUFBQyxLQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBN0csWUFBQSxZQUFBb0IsSUFBQSxXQUFBMEYsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF4RixJQUFBLEdBQUF3RixTQUFBLENBQUFwTCxJQUFBO1VBQUE7WUFDNURsQyxDQUFDLEtBQUEsSUFBQSxJQUFEQSxDQUFDLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQURBLENBQUMsQ0FBRXVOLGNBQWMsQ0FBQSxDQUFFO1lBQUNELFNBQUEsQ0FBQXhGLElBQUE7WUFBQXdGLFNBQUEsQ0FBQXBMLElBQUE7WUFFTSxPQUFNd0gsbUJBQW1CLENBQUEsQ0FBRTtVQUFBO1lBQTdDeUQsZUFBZSxHQUFBRyxTQUFBLENBQUF2RSxJQUFBO1lBQ3JCaEUsUUFBUSxLQUFBLElBQUEsSUFBUkEsUUFBUSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFSQSxRQUFRLENBQUdvSSxlQUFlLENBQUM7WUFBQ0csU0FBQSxDQUFBcEwsSUFBQTtZQUFBO1VBQUE7WUFBQW9MLFNBQUEsQ0FBQXhGLElBQUE7WUFBQXVGLEdBQUEsR0FBQUMsU0FBQTtZQUV0QkYsS0FBSyxHQUFBQyxHQUFBO1lBSVhySSxjQUFjLEtBQUEsSUFBQSxJQUFkQSxjQUFjLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQWRBLGNBQWMsQ0FBRztjQUFFaEIsTUFBTSxFQUFFb0osS0FBSyxDQUFDcEosTUFBTTtjQUFFa0YsTUFBTSxFQUFFa0UsS0FBSyxDQUFDbEU7WUFBTSxDQUFFLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQW9FLFNBQUEsQ0FBQWxFLElBQUE7UUFBQTtNQUFBLEdBQUE4RCxRQUFBO0lBQUEsQ0FFcEUsRUFBQTtFQUFBLEVBQUM7RUFFRixJQUFNTSxXQUFXLEdBQUcsSUFBQWxFLHVCQUFnQixFQUFDLFVBQUN0SixDQUFhLEVBQUk7SUFDckRBLENBQUMsS0FBQSxJQUFBLElBQURBLENBQUMsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBREEsQ0FBQyxDQUFFdU4sY0FBYyxDQUFBLENBQUU7SUFDbkJuSSxRQUFRLENBQUNxSSxXQUFXLENBQUEsQ0FBRTtJQUN0QnpILGVBQWUsQ0FBQyxDQUFBLENBQUUsQ0FBQztJQUNuQkwsYUFBYSxDQUFDLENBQUEsQ0FBRSxDQUFDO0lBQ2pCVixPQUFPLEtBQUEsSUFBQSxJQUFQQSxPQUFPLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVBBLE9BQU8sQ0FBQSxDQUFJO0VBQ2IsQ0FBQyxDQUFDO0VBRUY7RUFDQTtFQUNBO0VBQ0EsSUFBTXlJLFlBQVksR0FBaUIsSUFBQXhILGNBQU8sRUFDeEM7SUFBQSxPQUFNdkYsTUFBQSxDQUFBd0YsTUFBQSxDQUFBeEYsTUFBQSxDQUFBd0YsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUNEZixRQUFRLENBQUNzSSxZQUFZLENBQUEsRUFBQTtNQUV4QkMsY0FBYyxFQUFFakUsbUJBQW1CO01BQ25Db0MsYUFBYSxFQUFFMUcsUUFBUSxDQUFDMEcsYUFBYTtNQUVyQzhCLGFBQWEsRUFBRSxTQUFmQSxhQUFhQSxDQUFHckwsSUFBWTtRQUFBLE9BQUs2QyxRQUFRLENBQUM4RCxNQUFNLENBQUMzRyxJQUFJLENBQUM7TUFBQTtNQUN0RHNMLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBR2xFLFFBQW1CLEVBQUk7UUFDdEMsSUFBSSxDQUFDQSxRQUFRLEVBQUUsT0FBT3ZFLFFBQVEsQ0FBQzhELE1BQU07UUFDckMsSUFBTTVGLE1BQU0sR0FBMkIsQ0FBQSxDQUFFO1FBQ3pDcUcsUUFBUSxDQUFDbUUsT0FBTyxDQUFDLFVBQUN2TCxJQUFJLEVBQUk7VUFDeEIsSUFBSTZDLFFBQVEsQ0FBQzhELE1BQU0sQ0FBQzNHLElBQUksQ0FBQyxFQUFFO1lBQ3pCZSxNQUFNLENBQUNmLElBQUksQ0FBQyxHQUFHNkMsUUFBUSxDQUFDOEQsTUFBTSxDQUFDM0csSUFBSSxDQUFDO1VBQ3RDO1FBQ0YsQ0FBQyxDQUFDO1FBQ0YsT0FBT2UsTUFBTTtNQUNmLENBQUM7TUFDRHlLLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBR3hMLElBQVk7UUFBQSxPQUFLMEQsVUFBVSxDQUFDMUQsSUFBSSxDQUFDLElBQUksS0FBSztNQUFBO01BQzNEeUwsZUFBZSxFQUFFLFNBQWpCQSxlQUFlQSxDQUFHckUsUUFBbUIsRUFBOEI7UUFBQSxJQUE1QnNFLGdCQUFnQixHQUFBbkosU0FBQSxDQUFBckQsTUFBQSxRQUFBcUQsU0FBQSxRQUFBTixTQUFBLEdBQUFNLFNBQUEsTUFBRyxLQUFLO1FBQzdELElBQUksQ0FBQzZFLFFBQVEsRUFBRTtVQUNiLE9BQU9oSixNQUFNLENBQUN1RCxJQUFJLENBQUMrQixVQUFVLENBQUMsQ0FBQ2lJLElBQUksQ0FBQyxVQUFDM0osR0FBRztZQUFBLE9BQUswQixVQUFVLENBQUMxQixHQUFHLENBQUM7VUFBQSxFQUFDO1FBQy9EO1FBQ0EsSUFBSTBKLGdCQUFnQixFQUFFO1VBQ3BCLE9BQU90RSxRQUFRLENBQUN3RSxLQUFLLENBQUMsVUFBQzVMLElBQUk7WUFBQSxPQUFLMEQsVUFBVSxDQUFDMUQsSUFBSSxDQUFDO1VBQUEsRUFBQztRQUNuRDtRQUNBLE9BQU9vSCxRQUFRLENBQUN1RSxJQUFJLENBQUMsVUFBQzNMLElBQUk7VUFBQSxPQUFLMEQsVUFBVSxDQUFDMUQsSUFBSSxDQUFDO1FBQUEsRUFBQztNQUNsRCxDQUFDO01BQ0Q2TCxpQkFBaUIsRUFBRSxTQUFuQkEsaUJBQWlCQSxDQUFHN0wsSUFBWTtRQUFBLE9BQUttRCxVQUFVLENBQUNuRCxJQUFJLENBQUMsSUFBSSxLQUFLO01BQUE7TUFDOUQ4RixhQUFhLEVBQUVqRCxRQUFRLENBQUNpRCxhQUFhO01BQ3JDZ0csY0FBYyxFQUFFLFNBQWhCQSxjQUFjQSxDQUFHQyxXQUFtQyxFQUFJO1FBQ3REM04sTUFBTSxDQUFDNE4sT0FBTyxDQUFDRCxXQUFXLENBQUMsQ0FBQ1IsT0FBTyxDQUFDLFVBQUFVLElBQUEsRUFBa0I7VUFBQSxJQUFBQyxLQUFBLE9BQUFoSixlQUFBLGFBQUErSSxJQUFBO1lBQWhCak0sSUFBSSxHQUFBa00sS0FBQTtZQUFFM0gsS0FBSyxHQUFBMkgsS0FBQTtVQUMvQ3JKLFFBQVEsQ0FBQ2lELGFBQWEsQ0FBQzlGLElBQUksRUFBRXVFLEtBQUssQ0FBQztRQUNyQyxDQUFDLENBQUM7TUFDSixDQUFDO01BQ0Q0SCxlQUFlLEVBQUUsU0FBakJBLGVBQWVBLENBQUduTSxJQUFZLEVBQXNCO1FBQUEsSUFBcEJvTSxTQUFTLEdBQUE3SixTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFOLFNBQUEsR0FBQU0sU0FBQSxNQUFHLElBQUk7UUFDOUNrQixlQUFlLENBQUMsVUFBQzhCLElBQUk7VUFBQSxPQUFLbkgsTUFBQSxDQUFBd0YsTUFBQSxDQUFBeEYsTUFBQSxDQUFBd0YsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFNMkIsSUFBSSxDQUFBLE1BQUFHLGdCQUFBLGlCQUFHMUYsSUFBSSxFQUFHb00sU0FBUyxDQUFBLENBQUE7UUFBQSxDQUFHLENBQUM7TUFDN0QsQ0FBQztNQUNEQyxnQkFBZ0IsRUFBRSxTQUFsQkEsZ0JBQWdCQSxDQUFHQyxXQUFvQyxFQUFJO1FBQ3pEN0ksZUFBZSxDQUFDLFVBQUM4QixJQUFJO1VBQUEsT0FBS25ILE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQXhGLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBTTJCLElBQUksQ0FBQSxFQUFLK0csV0FBVyxDQUFBO1FBQUEsQ0FBRyxDQUFDO01BQzFELENBQUM7TUFDRHBCLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFHcUIsTUFBaUIsRUFBSTtRQUNqQyxJQUFJLENBQUNBLE1BQU0sRUFBRTtVQUNYMUosUUFBUSxDQUFDcUksV0FBVyxDQUFBLENBQUU7VUFDdEJ6SCxlQUFlLENBQUMsQ0FBQSxDQUFFLENBQUM7VUFDbkJMLGFBQWEsQ0FBQyxDQUFBLENBQUUsQ0FBQztRQUNuQixDQUFDLE1BQU07VUFDTCxJQUFNb0osV0FBVyxHQUE0QixDQUFBLENBQUU7VUFDL0NELE1BQU0sQ0FBQ2hCLE9BQU8sQ0FBQyxVQUFDa0IsS0FBSyxFQUFJO1lDdkdmLElBQUlqRSxFQUFFO1lEd0dkZ0UsV0FBVyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUFqRSxFQUFBLEdBQUFsRyxNQUFNLENBQUNvSyxhQUFhLE1BQUEsSUFBQSxJQUFBbEUsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQSxDQUFFLEVBQUVpRSxLQUFLLENBQUM7VUFDMUQsQ0FBQyxDQUFDO1VBQ0Y1SixRQUFRLENBQUM4SixjQUFjLENBQUNILFdBQVcsQ0FBQztVQUVwQy9JLGVBQWUsQ0FBQyxVQUFDOEIsSUFBSSxFQUFJO1lBQ3ZCLElBQU1xSCxVQUFVLEdBQUF4TyxNQUFBLENBQUF3RixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVEyQixJQUFJLENBQUU7WUFDOUJnSCxNQUFNLENBQUNoQixPQUFPLENBQUMsVUFBQ2tCLEtBQUssRUFBSTtjQUN2QixPQUFPRyxVQUFVLENBQUNILEtBQUssQ0FBQztZQUMxQixDQUFDLENBQUM7WUFDRixPQUFPRyxVQUFVO1VBQ25CLENBQUMsQ0FBQztVQUVGeEosYUFBYSxDQUFDLFVBQUNtQyxJQUFJLEVBQUk7WUFDckIsSUFBTXFCLGFBQWEsR0FBQXhJLE1BQUEsQ0FBQXdGLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBUTJCLElBQUksQ0FBRTtZQUNqQ2dILE1BQU0sQ0FBQ2hCLE9BQU8sQ0FBQyxVQUFDa0IsS0FBSyxFQUFJO2NBQ3ZCLE9BQU83RixhQUFhLENBQUM2RixLQUFLLENBQUM7WUFDN0IsQ0FBQyxDQUFDO1lBQ0YsT0FBTzdGLGFBQWE7VUFDdEIsQ0FBQyxDQUFDO1VBRUYyRixNQUFNLENBQUNoQixPQUFPLENBQUMsVUFBQ2tCLEtBQUssRUFBSTtZQUN2QjVKLFFBQVEsQ0FBQ2lELGFBQWEsQ0FBQzJHLEtBQUssRUFBRSxJQUFJLENBQUM7VUFDckMsQ0FBQyxDQUFDO1FBQ0o7TUFDRixDQUFDO01BQ0RJLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUNKQyxRQUFvRTtRQUFBLE9BQ2xFM00sU0FBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxlQUFBOEQsWUFBQSxZQUFBQyxJQUFBLENBQUEsU0FBQTZJLFNBQUE7VUFBQSxJQUFBbkMsZUFBQSxFQUFBb0MsR0FBQTtVQUFBLE9BQUEvSSxZQUFBLFlBQUFvQixJQUFBLFdBQUE0SCxTQUFBO1lBQUEsa0JBQUFBLFNBQUEsQ0FBQTFILElBQUEsR0FBQTBILFNBQUEsQ0FBQXROLElBQUE7Y0FBQTtnQkFBQXNOLFNBQUEsQ0FBQTFILElBQUE7Z0JBQUEwSCxTQUFBLENBQUF0TixJQUFBO2dCQUV3QixPQUFNd0gsbUJBQW1CLENBQUEsQ0FBRTtjQUFBO2dCQUE3Q3lELGVBQWUsR0FBQXFDLFNBQUEsQ0FBQXpHLElBQUE7Z0JBQUEsS0FDakJzRyxRQUFRO2tCQUFBRyxTQUFBLENBQUF0TixJQUFBO2tCQUFBO2dCQUFBO2dCQUFBc04sU0FBQSxDQUFBdE4sSUFBQTtnQkFDVixPQUFNbU4sUUFBUSxDQUFDbEMsZUFBZSxDQUFDO2NBQUE7Z0JBQUEsT0FBQXFDLFNBQUEsQ0FBQXpILE1BQUEsV0FFMUJvRixlQUFlO2NBQUE7Z0JBQUFxQyxTQUFBLENBQUExSCxJQUFBO2dCQUFBeUgsR0FBQSxHQUFBQyxTQUFBO2dCQUFBLE9BQUFBLFNBQUEsQ0FBQXpILE1BQUEsV0FFZnZELFNBQVM7Y0FBQTtjQUFBO2dCQUFBLE9BQUFnTCxTQUFBLENBQUFwRyxJQUFBO1lBQUE7VUFBQSxHQUFBa0csUUFBQTtRQUFBLENBRW5CLEVBQUE7TUFBQTtNQUNEN0UsV0FBVyxFQUFYQSxXQUFXO01BQ1hrQixhQUFhLEVBQUV2RyxRQUFRLENBQUN1RyxhQUFhO01BQ3JDQyxlQUFlLEVBQUV4RyxRQUFRLENBQUN3RztJQUFlLENBQUEsQ0FBQTtFQUFBLENBQ3pDLEVBQ0YsQ0FDRXhHLFFBQVEsRUFDUmEsVUFBVSxFQUNWUCxVQUFVLEVBQ1ZnRSxtQkFBbUIsRUFDbkJlLFdBQVcsRUFDWDVGLE1BQU0sQ0FBQ29LLGFBQWEsRUFDcEJ0SixhQUFhLENBQ2QsQ0FDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU04SixTQUFTLEdBQXFCLElBQUF2SixjQUFPLEVBQ3pDO0lBQUEsT0FBTztNQUNMbEMsTUFBTSxFQUFFb0IsUUFBUSxDQUFDcEIsTUFBTTtNQUN2QmtGLE1BQU0sRUFBRTlELFFBQVEsQ0FBQzhELE1BQU07TUFDdkI5QyxPQUFPLEVBQUVILFVBQVU7TUFDbkJQLFVBQVUsRUFBVkEsVUFBVTtNQUNWK0QsVUFBVSxFQUFFckUsUUFBUSxDQUFDcUUsVUFBVTtNQUMvQnFDLGFBQWEsRUFBRTFHLFFBQVEsQ0FBQzBHLGFBQWE7TUFDckN6RCxhQUFhLEVBQUVqRCxRQUFRLENBQUNpRCxhQUFhO01BQ3JDMEQsYUFBYSxFQUFFM0csUUFBUSxDQUFDMkcsYUFBYTtNQUNyQzFGLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCc0YsYUFBYSxFQUFFdkcsUUFBUSxDQUFDdUcsYUFBYTtNQUNyQ0MsZUFBZSxFQUFFeEcsUUFBUSxDQUFDd0csZUFBZTtNQUN6Q3FCLFlBQVksRUFBWkEsWUFBWTtNQUNaTyxXQUFXLEVBQVhBO0lDbkhGLENEb0hDO0VBQUEsQ0FBQyxFQUNGLENBQ0VwSSxRQUFRLENBQUNwQixNQUFNLEVBQ2ZvQixRQUFRLENBQUM4RCxNQUFNLEVBQ2ZqRCxVQUFVLEVBQ1ZQLFVBQVUsRUFDVk4sUUFBUSxDQUFDcUUsVUFBVSxFQUNuQnJFLFFBQVEsQ0FBQzBHLGFBQWEsRUFDdEIxRyxRQUFRLENBQUNpRCxhQUFhLEVBQ3RCakQsUUFBUSxDQUFDMkcsYUFBYSxFQUN0QjFGLGtCQUFrQixFQUNsQmpCLFFBQVEsQ0FBQ3VHLGFBQWEsRUFDdEJ2RyxRQUFRLENBQUN3RyxlQUFlLEVBQ3hCcUIsWUFBWSxFQUNaTyxXQUFXLENBQ1osQ0FDRjtFQUVELE9BQU87SUFBRUUsWUFBWSxFQUFaQSxZQUFZO0lBQUUrQixTQUFTLEVBQVRBO0VBQVMsQ0FBRTtBQUNwQyxDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBOUssT0FBQSxjQUVhRCxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIG1lbW8sIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV2ZW50Q2FsbGJhY2ssIHVzZU1lbW9pemVkRm4sIHVzZVNhZmVTdGF0ZSB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGVscGVycyDigJMgcmVzb2x2ZSBuZXN0ZWQgcGF0aHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gcmVzb2x2ZVZhbHVlKHZhbHVlcywgbmFtZSkge1xuICAgIGlmICghbmFtZS5pbmNsdWRlcygnLicpKVxuICAgICAgICByZXR1cm4gdmFsdWVzW25hbWVdO1xuICAgIGNvbnN0IGtleXMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSB2YWx1ZXM7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHVzZUZvcm1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IHVzZUZvcm0gPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25SZXNldCwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKGNvbmZpZyk7XG4gICAgY29uc3QgW3ZhbGlkYXRpbmcsIHNldFZhbGlkYXRpbmddID0gdXNlU2FmZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbZXh0cmFUb3VjaGVkLCBzZXRFeHRyYVRvdWNoZWRdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IGFsbFRvdWNoZWQgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLnRvdWNoZWQpLCBleHRyYVRvdWNoZWQpKSwgW2Zvcm1Db3JlLnRvdWNoZWQsIGV4dHJhVG91Y2hlZF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIHZhbGlkYXRpb24g4oCTIGVhY2ggcnVsZSBpcyBwcm9jZXNzZWQgZXhhY3RseSBvbmNlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZEFzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUsIHJ1bGVzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHRydWUgfSkpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucmVxdWlyZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBpcyByZXF1aXJlZGA7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWluXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUubWluICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoIDwgcnVsZS5taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhdCBsZWFzdCAke3J1bGUubWlufSBjaGFyYWN0ZXJzYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBtYXhcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5tYXggJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiBydWxlLm1heCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAke3J1bGUubWF4fSBjaGFyYWN0ZXJzYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUucGF0dGVybiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFydWxlLnBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gZm9ybWF0IGlzIGludmFsaWRgO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVudW1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS5lbnVtICYmIEFycmF5LmlzQXJyYXkocnVsZS5lbnVtKSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bGUuZW51bS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgb25lIG9mICR7cnVsZS5lbnVtLmpvaW4oJywgJyl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gdHlwZSBjaGVja3NcbiAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSBudW1iZXJgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSAnZW1haWwnICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtYWlsUGF0dGVybiA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVtYWlsUGF0dGVybi50ZXN0KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgZW1haWxgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSAndXJsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVSTChTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBVUkxgO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjdXN0b20gdmFsaWRhdG9yIChzeW5jIG9yIGFzeW5jKSDigJQgZXhlY3V0ZWQgZXhhY3RseSBvbmNlXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudmFsaWRhdG9yICYmIHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgUHJvbWlzZS5yZXNvbHZlKHJ1bGUudmFsaWRhdG9yKHZhbHVlLCBmb3JtQ29yZS52YWx1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yOiBlcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtQ29yZS5lcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbGlkYXRpbmc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCBibHVyIGhhbmRsZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVGaWVsZEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHRydWUgfSkpKTtcbiAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICBpZiAocnVsZXMgJiYgdmFsaWRhdGVUcmlnZ2VyID09PSAnb25CbHVyJykge1xuICAgICAgICAgICAgeWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpLCBydWxlcyk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGUgYWxsIGZpZWxkcyBhc3luY1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRzQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkc1RvVmFsaWRhdGUgPSBuYW1lTGlzdCB8fCBPYmplY3Qua2V5cyhmb3JtQ29yZS5maWVsZFJ1bGVzKTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Qcm9taXNlcyA9IGZpZWxkc1RvVmFsaWRhdGUubWFwKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgICAgIGlmIChydWxlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNWYWxpZCwgZXJyb3IgfSA9IHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS52YWx1ZXM7XG4gICAgICAgICAgICBlcnJvci5lcnJvcnMgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW25hbWVdID0gcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybUNvcmUudmFsdWVzO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VDYWxsYmFjaygobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IChfYiA9IGZvcm1Db3JlLnZhbHVlc1tuYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgICAgICAgICBjb25zdCBmaWVsZEVycm9yID0gZm9ybUNvcmUuZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRUb3VjaGVkID0gYWxsVG91Y2hlZFtuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsaWRhdGluZyA9IHZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAuLi5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsga2V5OiBjaGlsZC5rZXkgfHwgaW5kZXgsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICBoYW5kbGVGaWVsZEJsdXIsXG4gICAgXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gaGFuZGxlU3VibWl0IC8gaGFuZGxlUmVzZXQg4oCTIGZvciA8Zm9ybT4gZXZlbnQgaGFuZGxlcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IGVycjtcbiAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlczogdHlwZWQudmFsdWVzLCBlcnJvcnM6IHR5cGVkLmVycm9ycyB9KTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgIHNldFZhbGlkYXRpbmcoe30pO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGb3JtSW5zdGFuY2Ug4oCTIGVuaGFuY2VkIEFQSSBmb3IgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS5mb3JtSW5zdGFuY2UpLCB7IHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc0FzeW5jLCBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLCBnZXRGaWVsZEVycm9yOiAobmFtZSkgPT4gZm9ybUNvcmUuZXJyb3JzW25hbWVdLCBnZXRGaWVsZHNFcnJvcjogKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtQ29yZS5lcnJvcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIGlzRmllbGRUb3VjaGVkOiAobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSB8fCBmYWxzZSwgaXNGaWVsZHNUb3VjaGVkOiAobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsRmllbGRzVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3Quc29tZSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH0sIGlzRmllbGRWYWxpZGF0aW5nOiAobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSwgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvciwgc2V0RmllbGRzRXJyb3I6IChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3IpLmZvckVhY2goKFtuYW1lLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBzZXRGaWVsZFRvdWNoZWQ6IChuYW1lLCBpc1RvdWNoZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogaXNUb3VjaGVkIH0pKSk7XG4gICAgICAgIH0sIHNldEZpZWxkc1RvdWNoZWQ6IChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgZmllbGRzVG91Y2gpKSk7XG4gICAgICAgIH0sIHJlc2V0RmllbGRzOiAoZmllbGRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRWYWx1ZXNbZmllbGRdID0gKChfYSA9IGNvbmZpZy5pbml0aWFsVmFsdWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fSlbZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlKHJlc2V0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUb3VjaGVkW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb3VjaGVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKGZpZWxkLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgc3VibWl0OiAoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgZGVmaW5lRmllbGQsIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkIH0pKSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHNBc3luYyxcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgICAgIGNvbmZpZy5pbml0aWFsVmFsdWVzLFxuICAgICAgICBzZXRWYWxpZGF0aW5nLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEludGVybmFscyDigJMgZXhwb3NlZCBmb3IgUHJvRm9ybSBpbnRlZ3JhdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGludGVybmFscyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgdmFsdWVzOiBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogZm9ybUNvcmUuZXJyb3JzLFxuICAgICAgICB0b3VjaGVkOiBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkOiBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIH0pLCBbXG4gICAgICAgIGZvcm1Db3JlLnZhbHVlcyxcbiAgICAgICAgZm9ybUNvcmUuZXJyb3JzLFxuICAgICAgICBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICBdKTtcbiAgICByZXR1cm4geyBmb3JtSW5zdGFuY2UsIGludGVybmFscyB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
540
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZUZvcm1Db3JlIiwiX3BhdGhVdGlscyIsIl9ydW5SdWxlcyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwidXNlRm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwidXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJ1c2VNZW1vIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl95aWVsZCRydW5SdWxlc0FzeW5jIiwiZXJyb3IiLCJ3YXJuaW5nIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkyIiwicnVuUnVsZXNBc3luYyIsImdldEZpZWxkc1ZhbHVlIiwic2VudCIsInNldEZpZWxkV2FybmluZyIsInNldEZpZWxkRXJyb3IiLCJlcnJvcnMiLCJuZXdWYWxpZGF0aW5nIiwiZmluaXNoIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImdldEZpZWxkUnVsZXMiLCJyZXNvbHZlVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsImZpZWxkUnVsZXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jb250ZXh0MyIsImFsbCIsIkVycm9yIiwidmFsdWVzIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJtZW1vIiwiX2EiLCJfYiIsImNoaWxkcmVuIiwicmVuZGVyIiwicHJvcHMiLCJmaWVsZFZhbHVlIiwiZmllbGRFcnJvciIsImZpZWxkVG91Y2hlZCIsImZpZWxkVmFsaWRhdGluZyIsInVzZUVmZmVjdCIsImV4aXN0aW5nUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YyIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfdCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZFdhcm5pbmciLCJ3YXJuaW5ncyIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJyZXNldEZvcm1GaWVsZHMiLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdFdpdGhWYWxpZGF0aW9uIiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90MiIsIl9jb250ZXh0NiIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwic3VibWl0IiwiaW50ZXJuYWxzIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUCxPQUFBO0FBQTRDLFNBQUFRLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQ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RUFBbEJBLGtCQUFrQjtNQUNsQmtFLGFBQWEsRUFBRW5GLFFBQVEsQ0FBQ21GLGFBQWE7TUFDckNDLGVBQWUsRUFBRXBGLFFBQVEsQ0FBQ29GLGVBQWU7TUFDekMwQixZQUFZLEVBQVpBLFlBQVk7TUFDWk8sV0FBVyxFQUFYQTtJQ2pHRixDRGtHQztFQUFBLENBQUMsRUFDRixDQUNFckgsUUFBUSxDQUFDZ0UsTUFBTSxFQUNmaEUsUUFBUSxDQUFDc0MsTUFBTSxFQUNmdEMsUUFBUSxDQUFDeUgsUUFBUSxFQUNqQjVHLFVBQVUsRUFDVlAsVUFBVSxFQUNWTixRQUFRLENBQUN5RCxVQUFVLEVBQ25CekQsUUFBUSxDQUFDc0YsYUFBYSxFQUN0QnRGLFFBQVEsQ0FBQ3FDLGFBQWEsRUFDdEJyQyxRQUFRLENBQUNvQyxlQUFlLEVBQ3hCcEMsUUFBUSxDQUFDdUYsYUFBYSxFQUN0QnRFLGtCQUFrQixFQUNsQmpCLFFBQVEsQ0FBQ21GLGFBQWEsRUFDdEJuRixRQUFRLENBQUNvRixlQUFlLEVBQ3hCMEIsWUFBWSxFQUNaTyxXQUFXLENBQ1osQ0FDRjtFQUVELE9BQU87SUFBRWtDLFlBQVksRUFBWkEsWUFBWTtJQUFFRyxTQUFTLEVBQVRBO0VBQVMsQ0FBRTtBQUNwQyxDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBcEssT0FBQSxjQUVhRCxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNBc3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKF9iID0gZm9ybUNvcmUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRvdWNoZWQgPSBhbGxUb3VjaGVkW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWxpZGF0aW5nID0gdmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCwgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3QgcmVuZGVyJ3Mgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IGZvcm1Db3JlLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBmaWVsZHNUb3VjaCkpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvdWNoZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcixcbiAgICAgICAgZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBnZXRGaWVsZHNFcnJvcixcbiAgICAgICAgaXNGaWVsZFRvdWNoZWQsXG4gICAgICAgIGlzRmllbGRzVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLFxuICAgICAgICBzZXRGaWVsZFRvdWNoZWQsXG4gICAgICAgIHNldEZpZWxkc1RvdWNoZWQsIHJlc2V0RmllbGRzOiByZXNldEZvcm1GaWVsZHMsIHN1Ym1pdDogc3VibWl0V2l0aFZhbGlkYXRpb24sIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUuZm9ybUluc3RhbmNlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGZvcm1Db3JlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmc6IGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgZm9ybUNvcmUud2FybmluZ3MsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|