@i-novus/n2o-components 1.0.0
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/index.js +0 -0
- package/lib/display/Alerts/Alert.d.ts +2 -0
- package/lib/display/Alerts/Alert.js +121 -0
- package/lib/display/Alerts/AlertSection.d.ts +18 -0
- package/lib/display/Alerts/AlertSection.js +64 -0
- package/lib/display/Alerts/AlertWrapper.d.ts +6 -0
- package/lib/display/Alerts/AlertWrapper.js +39 -0
- package/lib/display/Alerts/DefaultAlert.d.ts +6 -0
- package/lib/display/Alerts/DefaultAlert.js +125 -0
- package/lib/display/Alerts/LoaderAlert.d.ts +5 -0
- package/lib/display/Alerts/LoaderAlert.js +36 -0
- package/lib/display/Alerts/types.d.ts +49 -0
- package/lib/display/Alerts/types.js +24 -0
- package/lib/display/Alerts/utils.d.ts +15 -0
- package/lib/display/Alerts/utils.js +102 -0
- package/lib/display/Badge/Badge.d.ts +16 -0
- package/lib/display/Badge/Badge.js +77 -0
- package/lib/display/Badge/enums.d.ts +9 -0
- package/lib/display/Badge/enums.js +23 -0
- package/lib/display/Badge/utils.d.ts +9 -0
- package/lib/display/Badge/utils.js +49 -0
- package/lib/display/Block.d.ts +369 -0
- package/lib/display/Block.js +38 -0
- package/lib/display/CodeViewer/CodeViewer.d.ts +13 -0
- package/lib/display/CodeViewer/CodeViewer.js +96 -0
- package/lib/display/Drawer/Drawer.d.ts +25 -0
- package/lib/display/Drawer/Drawer.js +99 -0
- package/lib/display/DropdownCustomItem.d.ts +7 -0
- package/lib/display/DropdownCustomItem.js +23 -0
- package/lib/display/Filter/Buttons.d.ts +11 -0
- package/lib/display/Filter/Buttons.js +42 -0
- package/lib/display/Filter/Filter.d.ts +8 -0
- package/lib/display/Filter/Filter.js +38 -0
- package/lib/display/HelpPopover.d.ts +16 -0
- package/lib/display/HelpPopover.js +104 -0
- package/lib/display/Html.d.ts +8 -0
- package/lib/display/Html.js +29 -0
- package/lib/display/Icon/Icon.d.ts +11 -0
- package/lib/display/Icon/Icon.js +42 -0
- package/lib/display/Image/Image.d.ts +30 -0
- package/lib/display/Image/Image.js +93 -0
- package/lib/display/Image/ImageInfo.d.ts +7 -0
- package/lib/display/Image/ImageInfo.js +23 -0
- package/lib/display/InputIcon.d.ts +13 -0
- package/lib/display/InputIcon.js +33 -0
- package/lib/display/NavItemImage/NavItemImage.d.ts +9 -0
- package/lib/display/NavItemImage/NavItemImage.js +35 -0
- package/lib/display/OutputList.d.ts +12 -0
- package/lib/display/OutputList.js +46 -0
- package/lib/display/OutputListItem.d.ts +10 -0
- package/lib/display/OutputListItem.js +58 -0
- package/lib/display/OutputText.d.ts +15 -0
- package/lib/display/OutputText.js +170 -0
- package/lib/display/Pagination/Pagination.d.ts +2 -0
- package/lib/display/Pagination/Pagination.js +273 -0
- package/lib/display/Pagination/PaginationButton.d.ts +13 -0
- package/lib/display/Pagination/PaginationButton.js +53 -0
- package/lib/display/Pagination/types.d.ts +62 -0
- package/lib/display/Pagination/types.js +36 -0
- package/lib/display/PopoverConfirm/PopoverConfirm.d.ts +30 -0
- package/lib/display/PopoverConfirm/PopoverConfirm.js +87 -0
- package/lib/display/ProgressControl/ProgressControl.d.ts +17 -0
- package/lib/display/ProgressControl/ProgressControl.js +68 -0
- package/lib/display/Slider.d.ts +23 -0
- package/lib/display/Slider.js +107 -0
- package/lib/display/Status.d.ts +9 -0
- package/lib/display/Status.js +40 -0
- package/lib/display/StatusText/StatusText.d.ts +10 -0
- package/lib/display/StatusText/StatusText.js +35 -0
- package/lib/display/StatusText/types.d.ts +18 -0
- package/lib/display/StatusText/types.js +19 -0
- package/lib/display/StatusText/utils.d.ts +3 -0
- package/lib/display/StatusText/utils.js +29 -0
- package/lib/display/Text.d.ts +12 -0
- package/lib/display/Text.js +38 -0
- package/lib/display/Typography/Base.d.ts +32 -0
- package/lib/display/Typography/Base.js +259 -0
- package/lib/display/Typography/ContentEditable.d.ts +15 -0
- package/lib/display/Typography/ContentEditable.js +86 -0
- package/lib/display/Typography/Paragraph.d.ts +4 -0
- package/lib/display/Typography/Paragraph.js +23 -0
- package/lib/display/Typography/Text.d.ts +9 -0
- package/lib/display/Typography/Text.js +37 -0
- package/lib/display/Typography/Title.d.ts +7 -0
- package/lib/display/Typography/Title.js +28 -0
- package/lib/display/Typography/utils.d.ts +13 -0
- package/lib/display/Typography/utils.js +75 -0
- package/lib/helpers/HelpPopover.d.ts +9 -0
- package/lib/helpers/HelpPopover.js +46 -0
- package/lib/helpers/withRightPlaceholder.d.ts +9 -0
- package/lib/helpers/withRightPlaceholder.js +35 -0
- package/lib/inputs/Checkbox/Checkbox.d.ts +29 -0
- package/lib/inputs/Checkbox/Checkbox.js +117 -0
- package/lib/inputs/Checkbox/CheckboxControl.d.ts +7 -0
- package/lib/inputs/Checkbox/CheckboxControl.js +33 -0
- package/lib/inputs/CheckboxGroup/CheckboxGroup.d.ts +11 -0
- package/lib/inputs/CheckboxGroup/CheckboxGroup.js +84 -0
- package/lib/inputs/CodeEditor/CodeEditor.d.ts +21 -0
- package/lib/inputs/CodeEditor/CodeEditor.js +85 -0
- package/lib/inputs/DatePicker/Calendar.d.ts +65 -0
- package/lib/inputs/DatePicker/Calendar.js +556 -0
- package/lib/inputs/DatePicker/CalendarHeader.d.ts +26 -0
- package/lib/inputs/DatePicker/CalendarHeader.js +213 -0
- package/lib/inputs/DatePicker/Clock.d.ts +10 -0
- package/lib/inputs/DatePicker/Clock.js +45 -0
- package/lib/inputs/DatePicker/DateInput.d.ts +44 -0
- package/lib/inputs/DatePicker/DateInput.js +262 -0
- package/lib/inputs/DatePicker/DateInputGroup.d.ts +20 -0
- package/lib/inputs/DatePicker/DateInputGroup.js +77 -0
- package/lib/inputs/DatePicker/DateInterval.d.ts +24 -0
- package/lib/inputs/DatePicker/DateInterval.js +92 -0
- package/lib/inputs/DatePicker/DatePicker.d.ts +22 -0
- package/lib/inputs/DatePicker/DatePicker.js +36 -0
- package/lib/inputs/DatePicker/DateTimeControl.d.ts +98 -0
- package/lib/inputs/DatePicker/DateTimeControl.js +452 -0
- package/lib/inputs/DatePicker/Day.d.ts +14 -0
- package/lib/inputs/DatePicker/Day.js +50 -0
- package/lib/inputs/DatePicker/PopUp.d.ts +19 -0
- package/lib/inputs/DatePicker/PopUp.js +71 -0
- package/lib/inputs/DatePicker/types.d.ts +31 -0
- package/lib/inputs/DatePicker/types.js +25 -0
- package/lib/inputs/DatePicker/utils.d.ts +39 -0
- package/lib/inputs/DatePicker/utils.js +304 -0
- package/lib/inputs/Input.d.ts +51 -0
- package/lib/inputs/Input.js +200 -0
- package/lib/inputs/InputMask/InputMask.d.ts +23 -0
- package/lib/inputs/InputMask/InputMask.js +310 -0
- package/lib/inputs/InputMoney/InputMoney.d.ts +101 -0
- package/lib/inputs/InputMoney/InputMoney.js +258 -0
- package/lib/inputs/InputNumber/InputNumber.d.ts +29 -0
- package/lib/inputs/InputNumber/InputNumber.js +316 -0
- package/lib/inputs/InputNumber/index.d.ts +1 -0
- package/lib/inputs/InputNumber/index.js +14 -0
- package/lib/inputs/InputNumber/types.d.ts +18 -0
- package/lib/inputs/InputNumber/types.js +14 -0
- package/lib/inputs/InputNumber/utils.d.ts +6 -0
- package/lib/inputs/InputNumber/utils.js +86 -0
- package/lib/inputs/InputPassword/InputPassword.d.ts +10 -0
- package/lib/inputs/InputPassword/InputPassword.js +81 -0
- package/lib/inputs/InputSelect/InputAddon.d.ts +17 -0
- package/lib/inputs/InputSelect/InputAddon.js +31 -0
- package/lib/inputs/InputSelect/InputContent.d.ts +63 -0
- package/lib/inputs/InputSelect/InputContent.js +188 -0
- package/lib/inputs/InputSelect/InputSelect.d.ts +296 -0
- package/lib/inputs/InputSelect/InputSelect.js +795 -0
- package/lib/inputs/InputSelect/InputSelectGroup.d.ts +43 -0
- package/lib/inputs/InputSelect/InputSelectGroup.js +113 -0
- package/lib/inputs/InputSelect/PopupItems.d.ts +55 -0
- package/lib/inputs/InputSelect/PopupItems.js +357 -0
- package/lib/inputs/InputSelect/PopupList.d.ts +82 -0
- package/lib/inputs/InputSelect/PopupList.js +138 -0
- package/lib/inputs/InputSelect/SelectedItems.d.ts +17 -0
- package/lib/inputs/InputSelect/SelectedItems.js +125 -0
- package/lib/inputs/InputSelect/constants.d.ts +4 -0
- package/lib/inputs/InputSelect/constants.js +15 -0
- package/lib/inputs/InputSelect/types.d.ts +16 -0
- package/lib/inputs/InputSelect/types.js +16 -0
- package/lib/inputs/InputSelect/utils.d.ts +9 -0
- package/lib/inputs/InputSelect/utils.js +142 -0
- package/lib/inputs/InputSelectTree/InputSelectTree.d.ts +114 -0
- package/lib/inputs/InputSelectTree/InputSelectTree.js +466 -0
- package/lib/inputs/InputSelectTree/TreeSelectNode.d.ts +36 -0
- package/lib/inputs/InputSelectTree/TreeSelectNode.js +63 -0
- package/lib/inputs/InputSelectTree/allProps.d.ts +123 -0
- package/lib/inputs/InputSelectTree/allProps.js +48 -0
- package/lib/inputs/InputSelectTree/until.d.ts +4 -0
- package/lib/inputs/InputSelectTree/until.js +83 -0
- package/lib/inputs/InputText.d.ts +41 -0
- package/lib/inputs/InputText.js +170 -0
- package/lib/inputs/NumberPicker/NumberPicker.d.ts +15 -0
- package/lib/inputs/NumberPicker/NumberPicker.js +129 -0
- package/lib/inputs/NumberPicker/NumberPickerButton.d.ts +8 -0
- package/lib/inputs/NumberPicker/NumberPickerButton.js +64 -0
- package/lib/inputs/NumberPicker/index.d.ts +1 -0
- package/lib/inputs/NumberPicker/index.js +14 -0
- package/lib/inputs/NumberPicker/utils.d.ts +2 -0
- package/lib/inputs/NumberPicker/utils.js +31 -0
- package/lib/inputs/RadioGroup/default/Group.d.ts +15 -0
- package/lib/inputs/RadioGroup/default/Group.js +63 -0
- package/lib/inputs/RadioGroup/default/Input.d.ts +17 -0
- package/lib/inputs/RadioGroup/default/Input.js +77 -0
- package/lib/inputs/RadioGroup/tabs/Group.d.ts +3 -0
- package/lib/inputs/RadioGroup/tabs/Group.js +24 -0
- package/lib/inputs/RadioGroup/tabs/Input.d.ts +3 -0
- package/lib/inputs/RadioGroup/tabs/Input.js +21 -0
- package/lib/inputs/Rating/Rating.d.ts +30 -0
- package/lib/inputs/Rating/Rating.js +212 -0
- package/lib/inputs/Select/Popup.d.ts +31 -0
- package/lib/inputs/Select/Popup.js +131 -0
- package/lib/inputs/Select/Select.d.ts +225 -0
- package/lib/inputs/Select/Select.js +705 -0
- package/lib/inputs/Select/SelectInput.d.ts +19 -0
- package/lib/inputs/Select/SelectInput.js +85 -0
- package/lib/inputs/Select/utils.d.ts +1 -0
- package/lib/inputs/Select/utils.js +28 -0
- package/lib/inputs/Switch/Switch.d.ts +11 -0
- package/lib/inputs/Switch/Switch.js +41 -0
- package/lib/inputs/TextArea.d.ts +12 -0
- package/lib/inputs/TextArea.js +54 -0
- package/lib/inputs/TextEditor/TextEditor.d.ts +11 -0
- package/lib/inputs/TextEditor/TextEditor.js +89 -0
- package/lib/inputs/TimePicker/TimePicker.d.ts +50 -0
- package/lib/inputs/TimePicker/TimePicker.js +398 -0
- package/lib/inputs/utils.d.ts +5 -0
- package/lib/inputs/utils.js +39 -0
- package/lib/layouts/ScrollContainer.d.ts +218 -0
- package/lib/layouts/ScrollContainer.js +128 -0
- package/lib/layouts/Spinner/CoverSpinner.d.ts +29 -0
- package/lib/layouts/Spinner/CoverSpinner.js +153 -0
- package/lib/layouts/Spinner/InlineSpinner.d.ts +5 -0
- package/lib/layouts/Spinner/InlineSpinner.js +27 -0
- package/lib/layouts/Spinner/Spinner.d.ts +31 -0
- package/lib/layouts/Spinner/Spinner.js +178 -0
- package/lib/styles/components/Calendar.scss +125 -0
- package/lib/styles/components/CalendarHeader.scss +75 -0
- package/lib/styles/components/DateInputGroup.scss +39 -0
- package/lib/styles/components/DatePicker.scss +18 -0
- package/lib/styles/components/Day.scss +29 -0
- package/lib/styles/components/OutputList.scss +14 -0
- package/lib/styles/components/OutputText.scss +50 -0
- package/lib/styles/controls/CodeEditor.scss +4 -0
- package/lib/styles/controls/InputNumber.scss +36 -0
- package/lib/styles/controls/InputPassword.scss +17 -0
- package/lib/styles/controls/InputText.scss +59 -0
- package/lib/styles/controls/NumberPicker.scss +36 -0
- package/lib/styles/controls/ProgressControl.scss +3 -0
- package/lib/styles/controls/Slider.scss +32 -0
- package/lib/styles/controls/Switch.scss +105 -0
- package/lib/styles/controls/TextEditor.scss +23 -0
- package/lib/styles/controls/TimePicker.scss +32 -0
- package/lib/styles/n2o/variables.scss +328 -0
- package/lib/styles/theme/variables.scss +81 -0
- package/lib/styles/variables.scss +10 -0
- package/lib/types.d.ts +25 -0
- package/lib/types.js +6 -0
- package/lib/utils/id.d.ts +3 -0
- package/lib/utils/id.js +46 -0
- package/lib/utils/isEmptyModel.d.ts +1 -0
- package/lib/utils/isEmptyModel.js +21 -0
- package/lib/utils/parseFormatter.js +153 -0
- package/package.json +196 -0
|
@@ -0,0 +1,705 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.Select = void 0;
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
+
|
|
16
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
17
|
+
|
|
18
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
|
+
|
|
20
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
21
|
+
|
|
22
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
23
|
+
|
|
24
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
25
|
+
|
|
26
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
27
|
+
|
|
28
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
29
|
+
|
|
30
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
31
|
+
|
|
32
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
33
|
+
|
|
34
|
+
var _reactOnclickoutside = _interopRequireDefault(require("react-onclickoutside"));
|
|
35
|
+
|
|
36
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
37
|
+
|
|
38
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
39
|
+
|
|
40
|
+
var _first = _interopRequireDefault(require("lodash/first"));
|
|
41
|
+
|
|
42
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
43
|
+
|
|
44
|
+
var _find = _interopRequireDefault(require("lodash/find"));
|
|
45
|
+
|
|
46
|
+
var _reactstrap = require("reactstrap");
|
|
47
|
+
|
|
48
|
+
var _InputSelectGroup = require("../InputSelect/InputSelectGroup");
|
|
49
|
+
|
|
50
|
+
var _PopupList = require("../InputSelect/PopupList");
|
|
51
|
+
|
|
52
|
+
var _utils = require("./utils");
|
|
53
|
+
|
|
54
|
+
var _Popup = require("./Popup");
|
|
55
|
+
|
|
56
|
+
var _SelectInput = require("./SelectInput");
|
|
57
|
+
|
|
58
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
59
|
+
|
|
60
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
61
|
+
|
|
62
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
63
|
+
|
|
64
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
65
|
+
|
|
66
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
67
|
+
|
|
68
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* N2OSelect
|
|
72
|
+
* @reactProps {boolean} loading - флаг анимации загрузки
|
|
73
|
+
* @reactProps {array} options - данные
|
|
74
|
+
* @reactProps {string} valueFieldId - значение ключа value в данных
|
|
75
|
+
* @reactProps {string} labelFieldId - значение ключа label в данных
|
|
76
|
+
* @reactProps {string} iconFieldId - поле для иконки
|
|
77
|
+
* @reactProps {string} imageFieldId - поле для картинки
|
|
78
|
+
* @reactProps {string} statusFieldId - поле для статуса
|
|
79
|
+
* @reactProps {object} badge - данные для баджа
|
|
80
|
+
* @reactProps {boolean} disabled - флаг неактивности
|
|
81
|
+
* @reactProps {array} disabledValues - неактивные данные
|
|
82
|
+
* @reactProps {string} enabledFieldId - поле для активности
|
|
83
|
+
* @reactProps {string} filter - варианты фильтрации
|
|
84
|
+
* @reactProps {string} value - текущее значение
|
|
85
|
+
* @reactProps {function} onInput - callback при вводе в инпут
|
|
86
|
+
* @reactProps {function} onChange - callback при выборе значения или вводе
|
|
87
|
+
* @reactProps {string} placeHolder - подсказка в инпуте
|
|
88
|
+
* @reactProps {boolean} resetOnBlur - фича, при которой сбрасывается значение контрола, если оно не выбрано из popup
|
|
89
|
+
* @reactProps {function} onClose - callback на закрытие попапа
|
|
90
|
+
* @reactProps {string} groupFieldId - поле для группировки
|
|
91
|
+
* @reactProps {boolean} closePopupOnSelect - флаг закрытия попапа при выборе
|
|
92
|
+
* @reactProps {boolean} hasCheckboxes - флаг наличия чекбоксов
|
|
93
|
+
* @reactProps {string} format - формат
|
|
94
|
+
* @reactProps {boolean} searchByTap - поиск по нажатию кнопки
|
|
95
|
+
*/
|
|
96
|
+
var selectType = {
|
|
97
|
+
SINGLE: 'single',
|
|
98
|
+
CHECKBOXES: 'checkboxes'
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
function getSelected(value) {
|
|
102
|
+
if (Array.isArray(value)) {
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!(0, _isEmpty["default"])(value)) {
|
|
107
|
+
return [value];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
var SelectComponent = /*#__PURE__*/function (_React$Component) {
|
|
114
|
+
(0, _inherits2["default"])(SelectComponent, _React$Component);
|
|
115
|
+
|
|
116
|
+
var _super = _createSuper(SelectComponent);
|
|
117
|
+
|
|
118
|
+
function SelectComponent(props) {
|
|
119
|
+
var _this;
|
|
120
|
+
|
|
121
|
+
(0, _classCallCheck2["default"])(this, SelectComponent);
|
|
122
|
+
_this = _super.call(this, props);
|
|
123
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "control", null);
|
|
124
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleDataSearch", function (input, delay, callback) {
|
|
125
|
+
var _this$props = _this.props,
|
|
126
|
+
onSearch = _this$props.onSearch,
|
|
127
|
+
filter = _this$props.filter,
|
|
128
|
+
options = _this$props.options,
|
|
129
|
+
labelFieldId = _this$props.labelFieldId;
|
|
130
|
+
|
|
131
|
+
if (filter) {
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
133
|
+
var filterFunc = function filterFunc(item) {
|
|
134
|
+
return String.prototype[filter].call(item, input);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
var filteredOptions = options.filter(function (item) {
|
|
138
|
+
return filterFunc(item[labelFieldId].toString());
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
_this.setState({
|
|
142
|
+
options: filteredOptions
|
|
143
|
+
});
|
|
144
|
+
} else {
|
|
145
|
+
onSearch(input, delay === false ? delay : true, callback);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
var _this$props2 = _this.props,
|
|
149
|
+
value = _this$props2.value,
|
|
150
|
+
_options = _this$props2.options,
|
|
151
|
+
type = _this$props2.type;
|
|
152
|
+
_this.state = {
|
|
153
|
+
value: '',
|
|
154
|
+
isExpanded: false,
|
|
155
|
+
options: _options,
|
|
156
|
+
selected: getSelected(value),
|
|
157
|
+
hasCheckboxes: type === selectType.CHECKBOXES
|
|
158
|
+
};
|
|
159
|
+
_this.control = null;
|
|
160
|
+
_this.n2oSelectRef = /*#__PURE__*/(0, _react.createRef)();
|
|
161
|
+
_this.handleButtonClick = _this.handleButtonClick.bind((0, _assertThisInitialized2["default"])(_this));
|
|
162
|
+
_this.handleInputChange = _this.handleInputChange.bind((0, _assertThisInitialized2["default"])(_this));
|
|
163
|
+
_this.handleInputFocus = _this.handleInputFocus.bind((0, _assertThisInitialized2["default"])(_this));
|
|
164
|
+
_this.hideOptionsList = _this.hideOptionsList.bind((0, _assertThisInitialized2["default"])(_this));
|
|
165
|
+
_this.handleItemSelect = _this.handleItemSelect.bind((0, _assertThisInitialized2["default"])(_this));
|
|
166
|
+
_this.removeSelectedItem = _this.removeSelectedItem.bind((0, _assertThisInitialized2["default"])(_this));
|
|
167
|
+
_this.clearSelected = _this.clearSelected.bind((0, _assertThisInitialized2["default"])(_this));
|
|
168
|
+
_this.handleSearchButton = _this.handleSearchButton.bind((0, _assertThisInitialized2["default"])(_this));
|
|
169
|
+
_this.handleOnBlur = _this.handleOnBlur.bind((0, _assertThisInitialized2["default"])(_this));
|
|
170
|
+
_this.setControlRef = _this.setControlRef.bind((0, _assertThisInitialized2["default"])(_this));
|
|
171
|
+
return _this;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
(0, _createClass2["default"])(SelectComponent, [{
|
|
175
|
+
key: "componentDidMount",
|
|
176
|
+
value: function componentDidMount() {
|
|
177
|
+
var _this$props3 = this.props,
|
|
178
|
+
initial = _this$props3.initial,
|
|
179
|
+
options = _this$props3.options,
|
|
180
|
+
valueFieldId = _this$props3.valueFieldId;
|
|
181
|
+
|
|
182
|
+
if (Array.isArray(initial)) {
|
|
183
|
+
this.setStateFromInitial(initial, options, valueFieldId);
|
|
184
|
+
}
|
|
185
|
+
} // eslint-disable-next-line react/no-deprecated
|
|
186
|
+
|
|
187
|
+
}, {
|
|
188
|
+
key: "componentWillReceiveProps",
|
|
189
|
+
value: function componentWillReceiveProps(nextProps) {
|
|
190
|
+
var options = this.props.options;
|
|
191
|
+
var state = {};
|
|
192
|
+
|
|
193
|
+
if (!(0, _isEqual["default"])(options, nextProps.options)) {
|
|
194
|
+
state.options = nextProps.options;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
this.setState(state);
|
|
198
|
+
}
|
|
199
|
+
}, {
|
|
200
|
+
key: "componentDidUpdate",
|
|
201
|
+
value: function componentDidUpdate(prevProps) {
|
|
202
|
+
var _this$props4 = this.props,
|
|
203
|
+
initial = _this$props4.initial,
|
|
204
|
+
options = _this$props4.options,
|
|
205
|
+
valueFieldId = _this$props4.valueFieldId,
|
|
206
|
+
value = _this$props4.value;
|
|
207
|
+
|
|
208
|
+
if (Array.isArray(initial) && !(0, _isEqual["default"])(initial, prevProps.initial)) {
|
|
209
|
+
this.setStateFromInitial(initial, options, valueFieldId);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (!(0, _isEqual["default"])(value, prevProps.value)) {
|
|
214
|
+
this.setState({
|
|
215
|
+
selected: getSelected(value)
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Хак для мапинга айдишников, которые берутся из адресной строки в виде строк, но ожидается число
|
|
221
|
+
* TODO удалить после того, как починится поведение парсинга адресной строки будет опираться на указанные типы
|
|
222
|
+
* @param {Array.<object>} [initial]
|
|
223
|
+
* @param options
|
|
224
|
+
* @param {String} valueFieldId
|
|
225
|
+
* @private
|
|
226
|
+
*/
|
|
227
|
+
|
|
228
|
+
}, {
|
|
229
|
+
key: "setStateFromInitial",
|
|
230
|
+
value: function setStateFromInitial(initial, options, valueFieldId) {
|
|
231
|
+
var mapOptions = function mapOptions(options) {
|
|
232
|
+
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'string';
|
|
233
|
+
return options.map(function (option) {
|
|
234
|
+
return _objectSpread(_objectSpread({}, option), (0, _defineProperty2["default"])({}, valueFieldId, type === 'number' ? Number(option[valueFieldId]) : String(option[valueFieldId])));
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
if ((0, _isEmpty["default"])(options)) {
|
|
239
|
+
this.setState({
|
|
240
|
+
selected: mapOptions(initial)
|
|
241
|
+
});
|
|
242
|
+
} else {
|
|
243
|
+
var selected = options.filter(function (option) {
|
|
244
|
+
var idType = (0, _typeof2["default"])(option[valueFieldId]);
|
|
245
|
+
return (0, _find["default"])(mapOptions(initial, idType), option);
|
|
246
|
+
});
|
|
247
|
+
this.setState({
|
|
248
|
+
selected: selected
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Удаляет элемент из списка выбранных
|
|
254
|
+
* @param item - элемент
|
|
255
|
+
* @private
|
|
256
|
+
*/
|
|
257
|
+
|
|
258
|
+
}, {
|
|
259
|
+
key: "removeSelectedItem",
|
|
260
|
+
value: function removeSelectedItem(item) {
|
|
261
|
+
var _this$props5 = this.props,
|
|
262
|
+
valueFieldId = _this$props5.valueFieldId,
|
|
263
|
+
onChange = _this$props5.onChange;
|
|
264
|
+
var stateSelected = this.state.selected;
|
|
265
|
+
var selected = typeof stateSelected !== 'string' ? stateSelected.filter(function (i) {
|
|
266
|
+
return i[valueFieldId] !== item[valueFieldId];
|
|
267
|
+
}) : stateSelected;
|
|
268
|
+
this.setState({
|
|
269
|
+
selected: selected
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
if (onChange) {
|
|
273
|
+
onChange(selected);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Изменение видимости попапа
|
|
278
|
+
* @param newIsExpanded - новое значение видимости
|
|
279
|
+
* @private
|
|
280
|
+
*/
|
|
281
|
+
|
|
282
|
+
}, {
|
|
283
|
+
key: "changePopUpVision",
|
|
284
|
+
value: function changePopUpVision(newIsExpanded) {
|
|
285
|
+
var _this$props6 = this.props,
|
|
286
|
+
fetchData = _this$props6.fetchData,
|
|
287
|
+
onClose = _this$props6.onClose;
|
|
288
|
+
var isExpanded = this.state.isExpanded;
|
|
289
|
+
|
|
290
|
+
if (isExpanded === newIsExpanded) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
var onOpen = fetchData({
|
|
295
|
+
page: 1
|
|
296
|
+
});
|
|
297
|
+
this.setState({
|
|
298
|
+
isExpanded: newIsExpanded
|
|
299
|
+
}, newIsExpanded ? onOpen : onClose);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Обрабатывает нажатие на кнопку
|
|
303
|
+
* @private
|
|
304
|
+
*/
|
|
305
|
+
|
|
306
|
+
}, {
|
|
307
|
+
key: "handleButtonClick",
|
|
308
|
+
value: function handleButtonClick() {
|
|
309
|
+
var disabled = this.props.disabled;
|
|
310
|
+
var isExpanded = this.state.isExpanded;
|
|
311
|
+
|
|
312
|
+
if (!disabled) {
|
|
313
|
+
this.changePopUpVision(!isExpanded);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Обрабатывает форкус на инпуте
|
|
318
|
+
* @private
|
|
319
|
+
*/
|
|
320
|
+
|
|
321
|
+
}, {
|
|
322
|
+
key: "handleInputFocus",
|
|
323
|
+
value: function handleInputFocus() {
|
|
324
|
+
this.changePopUpVision(true);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Скрывает popUp
|
|
328
|
+
* @private
|
|
329
|
+
*/
|
|
330
|
+
|
|
331
|
+
}, {
|
|
332
|
+
key: "hideOptionsList",
|
|
333
|
+
value: function hideOptionsList() {
|
|
334
|
+
this.changePopUpVision(false);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Уставнавливает новое значение инпута
|
|
338
|
+
* @param newValue - новое значение
|
|
339
|
+
* @private
|
|
340
|
+
*/
|
|
341
|
+
|
|
342
|
+
}, {
|
|
343
|
+
key: "setNewValue",
|
|
344
|
+
value: function setNewValue(newValue) {
|
|
345
|
+
this.setState({
|
|
346
|
+
value: newValue
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Удаляет выбранные элементы
|
|
351
|
+
* @private
|
|
352
|
+
*/
|
|
353
|
+
|
|
354
|
+
}, {
|
|
355
|
+
key: "clearSelected",
|
|
356
|
+
value: function clearSelected(e) {
|
|
357
|
+
e.stopPropagation();
|
|
358
|
+
e.preventDefault();
|
|
359
|
+
var _this$props7 = this.props,
|
|
360
|
+
disabled = _this$props7.disabled,
|
|
361
|
+
onChange = _this$props7.onChange,
|
|
362
|
+
onBlur = _this$props7.onBlur;
|
|
363
|
+
|
|
364
|
+
if (disabled) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
this.setState({
|
|
369
|
+
selected: []
|
|
370
|
+
});
|
|
371
|
+
onChange(null);
|
|
372
|
+
onBlur(null);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Выполняет поиск элементов для popUp, если установлен фильтр
|
|
376
|
+
* @param input - значение для поиска
|
|
377
|
+
* @param {boolean} delay
|
|
378
|
+
* @param {Function} callback
|
|
379
|
+
* @private
|
|
380
|
+
*/
|
|
381
|
+
|
|
382
|
+
}, {
|
|
383
|
+
key: "insertSelected",
|
|
384
|
+
value:
|
|
385
|
+
/**
|
|
386
|
+
* Устанавливает выбранный элемент
|
|
387
|
+
* @param item - элемент массива options
|
|
388
|
+
* @private
|
|
389
|
+
*/
|
|
390
|
+
function insertSelected(item) {
|
|
391
|
+
var _this$props8 = this.props,
|
|
392
|
+
onChange = _this$props8.onChange,
|
|
393
|
+
onBlur = _this$props8.onBlur;
|
|
394
|
+
var _this$state = this.state,
|
|
395
|
+
stateSelected = _this$state.selected,
|
|
396
|
+
hasCheckboxes = _this$state.hasCheckboxes;
|
|
397
|
+
var selected = [item];
|
|
398
|
+
var value = item;
|
|
399
|
+
|
|
400
|
+
if (hasCheckboxes) {
|
|
401
|
+
selected = [].concat((0, _toConsumableArray2["default"])(stateSelected || []), [item]);
|
|
402
|
+
value = selected;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
this.setState({
|
|
406
|
+
selected: selected
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
if (onChange) {
|
|
410
|
+
onChange(value);
|
|
411
|
+
onBlur(value);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Обрабатывает изменение инпута
|
|
416
|
+
* @param newValue - новое значение
|
|
417
|
+
* @private
|
|
418
|
+
*/
|
|
419
|
+
|
|
420
|
+
}, {
|
|
421
|
+
key: "handleInputChange",
|
|
422
|
+
value: function handleInputChange(newValue) {
|
|
423
|
+
var _this$props9 = this.props,
|
|
424
|
+
searchByTap = _this$props9.searchByTap,
|
|
425
|
+
onChange = _this$props9.onChange,
|
|
426
|
+
onInput = _this$props9.onInput,
|
|
427
|
+
resetOnBlur = _this$props9.resetOnBlur;
|
|
428
|
+
this.setNewValue(newValue);
|
|
429
|
+
|
|
430
|
+
if (!searchByTap) {
|
|
431
|
+
this.handleDataSearch(newValue);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
if (!resetOnBlur) {
|
|
435
|
+
onChange(newValue);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
onInput(newValue);
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Обрабатывает поиск по нажатию
|
|
442
|
+
* @private
|
|
443
|
+
*/
|
|
444
|
+
|
|
445
|
+
}, {
|
|
446
|
+
key: "handleSearchButton",
|
|
447
|
+
value: function handleSearchButton() {
|
|
448
|
+
var value = this.state.value;
|
|
449
|
+
this.handleDataSearch(value);
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Очищает инпут и результаты поиска
|
|
453
|
+
* @private
|
|
454
|
+
*/
|
|
455
|
+
|
|
456
|
+
}, {
|
|
457
|
+
key: "clearSearchField",
|
|
458
|
+
value: function clearSearchField() {
|
|
459
|
+
var options = this.props.options;
|
|
460
|
+
this.setState({
|
|
461
|
+
value: '',
|
|
462
|
+
options: options
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Обрабатывает выбор элемента из popUp
|
|
467
|
+
* @param item - элемент массива options
|
|
468
|
+
* @private
|
|
469
|
+
*/
|
|
470
|
+
|
|
471
|
+
}, {
|
|
472
|
+
key: "handleItemSelect",
|
|
473
|
+
value: function handleItemSelect(item) {
|
|
474
|
+
var closePopupOnSelect = this.props.closePopupOnSelect;
|
|
475
|
+
this.insertSelected(item);
|
|
476
|
+
|
|
477
|
+
if (closePopupOnSelect) {
|
|
478
|
+
this.hideOptionsList();
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
this.clearSearchField();
|
|
482
|
+
|
|
483
|
+
if (this.control) {
|
|
484
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
485
|
+
this.control.focus();
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Обрабатывает поведение инпута при потери фокуса, если есть resetOnBlur
|
|
490
|
+
* @private
|
|
491
|
+
*/
|
|
492
|
+
|
|
493
|
+
}, {
|
|
494
|
+
key: "handleResetOnBlur",
|
|
495
|
+
value: function handleResetOnBlur() {
|
|
496
|
+
var selected = this.state.selected;
|
|
497
|
+
var _this$props10 = this.props,
|
|
498
|
+
resetOnBlur = _this$props10.resetOnBlur,
|
|
499
|
+
options = _this$props10.options;
|
|
500
|
+
|
|
501
|
+
if (resetOnBlur && !selected) {
|
|
502
|
+
this.setState({
|
|
503
|
+
value: '',
|
|
504
|
+
options: options
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Обрабатывает клик за пределы компонента
|
|
510
|
+
* вызывается библиотекой react-onclickoutside
|
|
511
|
+
*/
|
|
512
|
+
|
|
513
|
+
}, {
|
|
514
|
+
key: "handleClickOutside",
|
|
515
|
+
value: function handleClickOutside() {
|
|
516
|
+
var _this$props11 = this.props,
|
|
517
|
+
onBlur = _this$props11.onBlur,
|
|
518
|
+
value = _this$props11.value;
|
|
519
|
+
var isExpanded = this.state.isExpanded;
|
|
520
|
+
|
|
521
|
+
if (isExpanded) {
|
|
522
|
+
this.hideOptionsList();
|
|
523
|
+
onBlur(value);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}, {
|
|
527
|
+
key: "handleOnBlur",
|
|
528
|
+
value: function handleOnBlur(e) {
|
|
529
|
+
e.preventDefault();
|
|
530
|
+
this.handleResetOnBlur();
|
|
531
|
+
}
|
|
532
|
+
}, {
|
|
533
|
+
key: "setControlRef",
|
|
534
|
+
value: function setControlRef(el) {
|
|
535
|
+
this.control = el;
|
|
536
|
+
}
|
|
537
|
+
}, {
|
|
538
|
+
key: "renderPlaceholder",
|
|
539
|
+
value: function renderPlaceholder() {
|
|
540
|
+
var _this$props12 = this.props,
|
|
541
|
+
_this$props12$selectF = _this$props12.selectFormat,
|
|
542
|
+
selectFormat = _this$props12$selectF === void 0 ? 'Объектов {size} шт' : _this$props12$selectF,
|
|
543
|
+
_this$props12$selectF2 = _this$props12.selectFormatOne,
|
|
544
|
+
selectFormatOne = _this$props12$selectF2 === void 0 ? '' : _this$props12$selectF2,
|
|
545
|
+
_this$props12$selectF3 = _this$props12.selectFormatFew,
|
|
546
|
+
selectFormatFew = _this$props12$selectF3 === void 0 ? '' : _this$props12$selectF3,
|
|
547
|
+
_this$props12$selectF4 = _this$props12.selectFormatMany,
|
|
548
|
+
selectFormatMany = _this$props12$selectF4 === void 0 ? '' : _this$props12$selectF4;
|
|
549
|
+
var _this$state2 = this.state,
|
|
550
|
+
selected = _this$state2.selected,
|
|
551
|
+
hasCheckboxes = _this$state2.hasCheckboxes;
|
|
552
|
+
var selectedCount = selected.length;
|
|
553
|
+
var text;
|
|
554
|
+
|
|
555
|
+
if (!(0, _isEmpty["default"])(selectFormatOne) && !(0, _isEmpty["default"])(selectFormatFew) && !(0, _isEmpty["default"])(selectFormatMany) && selectedCount >= 1 && hasCheckboxes) {
|
|
556
|
+
text = (0, _utils.getNoun)(selectedCount, selectFormatOne, selectFormatFew, selectFormatMany).replace('{size}', "".concat(selectedCount));
|
|
557
|
+
} else if (selectedCount >= 1 && hasCheckboxes) {
|
|
558
|
+
text = selectFormat.replace('{size}', "".concat(selectedCount));
|
|
559
|
+
} else {
|
|
560
|
+
text = null;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
return text;
|
|
564
|
+
}
|
|
565
|
+
}, {
|
|
566
|
+
key: "renderValue",
|
|
567
|
+
value: function renderValue() {
|
|
568
|
+
var _this$props13 = this.props,
|
|
569
|
+
labelFieldId = _this$props13.labelFieldId,
|
|
570
|
+
_this$props13$placeho = _this$props13.placeholder,
|
|
571
|
+
placeholder = _this$props13$placeho === void 0 ? '' : _this$props13$placeho;
|
|
572
|
+
var selected = this.state.selected;
|
|
573
|
+
|
|
574
|
+
if ((0, _isEmpty["default"])(selected)) {
|
|
575
|
+
return placeholder;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
var _selected = (0, _slicedToArray2["default"])(selected, 1),
|
|
579
|
+
selectedElement = _selected[0];
|
|
580
|
+
|
|
581
|
+
return (0, _get["default"])(selectedElement, labelFieldId);
|
|
582
|
+
}
|
|
583
|
+
}, {
|
|
584
|
+
key: "render",
|
|
585
|
+
value: function render() {
|
|
586
|
+
var _this$props14 = this.props,
|
|
587
|
+
loading = _this$props14.loading,
|
|
588
|
+
className = _this$props14.className,
|
|
589
|
+
valueFieldId = _this$props14.valueFieldId,
|
|
590
|
+
labelFieldId = _this$props14.labelFieldId,
|
|
591
|
+
iconFieldId = _this$props14.iconFieldId,
|
|
592
|
+
disabled = _this$props14.disabled,
|
|
593
|
+
disabledValues = _this$props14.disabledValues,
|
|
594
|
+
enabledFieldId = _this$props14.enabledFieldId,
|
|
595
|
+
imageFieldId = _this$props14.imageFieldId,
|
|
596
|
+
statusFieldId = _this$props14.statusFieldId,
|
|
597
|
+
groupFieldId = _this$props14.groupFieldId,
|
|
598
|
+
descriptionFieldId = _this$props14.descriptionFieldId,
|
|
599
|
+
format = _this$props14.format,
|
|
600
|
+
placeholder = _this$props14.placeholder,
|
|
601
|
+
badge = _this$props14.badge,
|
|
602
|
+
fetchData = _this$props14.fetchData,
|
|
603
|
+
page = _this$props14.page,
|
|
604
|
+
hasSearch = _this$props14.hasSearch,
|
|
605
|
+
cleanable = _this$props14.cleanable,
|
|
606
|
+
style = _this$props14.style;
|
|
607
|
+
|
|
608
|
+
var inputSelectStyle = _objectSpread({
|
|
609
|
+
width: '100%'
|
|
610
|
+
}, style);
|
|
611
|
+
|
|
612
|
+
var _this$state3 = this.state,
|
|
613
|
+
selected = _this$state3.selected,
|
|
614
|
+
isExpanded = _this$state3.isExpanded,
|
|
615
|
+
hasCheckboxes = _this$state3.hasCheckboxes,
|
|
616
|
+
value = _this$state3.value,
|
|
617
|
+
options = _this$state3.options;
|
|
618
|
+
var title = (0, _get["default"])((0, _first["default"])(selected), "".concat(labelFieldId));
|
|
619
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
620
|
+
className: "n2o-input-select",
|
|
621
|
+
title: title,
|
|
622
|
+
style: inputSelectStyle,
|
|
623
|
+
onBlur: this.handleOnBlur,
|
|
624
|
+
ref: this.n2oSelectRef
|
|
625
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
626
|
+
innerRef: this.setControlRef,
|
|
627
|
+
onClick: this.handleButtonClick
|
|
628
|
+
}, /*#__PURE__*/_react["default"].createElement(_InputSelectGroup.InputSelectGroup, {
|
|
629
|
+
className: className,
|
|
630
|
+
isExpanded: isExpanded,
|
|
631
|
+
loading: loading,
|
|
632
|
+
disabled: disabled,
|
|
633
|
+
iconFieldId: iconFieldId,
|
|
634
|
+
imageFieldId: imageFieldId,
|
|
635
|
+
cleanable: cleanable,
|
|
636
|
+
selected: selected,
|
|
637
|
+
onClearClick: this.clearSelected
|
|
638
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
639
|
+
className: "valueText"
|
|
640
|
+
}, hasCheckboxes ? this.renderPlaceholder() : this.renderValue()))), /*#__PURE__*/_react["default"].createElement(_Popup.Popup, {
|
|
641
|
+
isExpanded: isExpanded,
|
|
642
|
+
inputSelect: this.n2oSelectRef.current
|
|
643
|
+
}, /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, hasSearch && /*#__PURE__*/_react["default"].createElement(_SelectInput.N2OSelectInput, {
|
|
644
|
+
placeholder: placeholder || '',
|
|
645
|
+
onChange: this.handleInputChange,
|
|
646
|
+
onSearch: this.handleSearchButton,
|
|
647
|
+
value: value
|
|
648
|
+
}), /*#__PURE__*/_react["default"].createElement(_PopupList.PopupList, {
|
|
649
|
+
options: options,
|
|
650
|
+
valueFieldId: valueFieldId,
|
|
651
|
+
labelFieldId: labelFieldId,
|
|
652
|
+
iconFieldId: iconFieldId,
|
|
653
|
+
imageFieldId: imageFieldId,
|
|
654
|
+
statusFieldId: statusFieldId,
|
|
655
|
+
badge: badge,
|
|
656
|
+
descriptionFieldId: descriptionFieldId,
|
|
657
|
+
enabledFieldId: enabledFieldId,
|
|
658
|
+
onSelect: this.handleItemSelect,
|
|
659
|
+
fetchData: fetchData,
|
|
660
|
+
page: page,
|
|
661
|
+
isExpanded: isExpanded,
|
|
662
|
+
selected: selected,
|
|
663
|
+
disabledValues: disabledValues,
|
|
664
|
+
groupFieldId: groupFieldId,
|
|
665
|
+
hasCheckboxes: hasCheckboxes,
|
|
666
|
+
onRemoveItem: this.removeSelectedItem,
|
|
667
|
+
format: format,
|
|
668
|
+
loading: loading
|
|
669
|
+
}))));
|
|
670
|
+
}
|
|
671
|
+
}]);
|
|
672
|
+
return SelectComponent;
|
|
673
|
+
}(_react["default"].Component);
|
|
674
|
+
|
|
675
|
+
(0, _defineProperty2["default"])(SelectComponent, "defaultProps", {
|
|
676
|
+
cleanable: true,
|
|
677
|
+
valueFieldId: 'id',
|
|
678
|
+
labelFieldId: 'name',
|
|
679
|
+
iconFieldId: 'icon',
|
|
680
|
+
loading: false,
|
|
681
|
+
disabled: false,
|
|
682
|
+
disabledValues: [],
|
|
683
|
+
resetOnBlur: false,
|
|
684
|
+
searchByTap: false,
|
|
685
|
+
hasSearch: false,
|
|
686
|
+
options: [],
|
|
687
|
+
value: {},
|
|
688
|
+
descriptionFieldId: '',
|
|
689
|
+
enabledFieldId: '',
|
|
690
|
+
statusFieldId: '',
|
|
691
|
+
groupFieldId: '',
|
|
692
|
+
imageFieldId: '',
|
|
693
|
+
closePopupOnSelect: true,
|
|
694
|
+
onSearch: function onSearch() {},
|
|
695
|
+
onChange: function onChange() {},
|
|
696
|
+
fetchData: function fetchData() {
|
|
697
|
+
return function () {};
|
|
698
|
+
},
|
|
699
|
+
onInput: function onInput() {},
|
|
700
|
+
onClose: function onClose() {},
|
|
701
|
+
onBlur: function onBlur() {}
|
|
702
|
+
});
|
|
703
|
+
var Select = (0, _reactOnclickoutside["default"])(SelectComponent);
|
|
704
|
+
exports.Select = Select;
|
|
705
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnB1dHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsic2VsZWN0VHlwZSIsIlNJTkdMRSIsIkNIRUNLQk9YRVMiLCJnZXRTZWxlY3RlZCIsInZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiU2VsZWN0Q29tcG9uZW50IiwicHJvcHMiLCJpbnB1dCIsImRlbGF5IiwiY2FsbGJhY2siLCJvblNlYXJjaCIsImZpbHRlciIsIm9wdGlvbnMiLCJsYWJlbEZpZWxkSWQiLCJmaWx0ZXJGdW5jIiwiaXRlbSIsIlN0cmluZyIsInByb3RvdHlwZSIsImNhbGwiLCJmaWx0ZXJlZE9wdGlvbnMiLCJ0b1N0cmluZyIsInNldFN0YXRlIiwidHlwZSIsInN0YXRlIiwiaXNFeHBhbmRlZCIsInNlbGVjdGVkIiwiaGFzQ2hlY2tib3hlcyIsImNvbnRyb2wiLCJuMm9TZWxlY3RSZWYiLCJoYW5kbGVCdXR0b25DbGljayIsImJpbmQiLCJoYW5kbGVJbnB1dENoYW5nZSIsImhhbmRsZUlucHV0Rm9jdXMiLCJoaWRlT3B0aW9uc0xpc3QiLCJoYW5kbGVJdGVtU2VsZWN0IiwicmVtb3ZlU2VsZWN0ZWRJdGVtIiwiY2xlYXJTZWxlY3RlZCIsImhhbmRsZVNlYXJjaEJ1dHRvbiIsImhhbmRsZU9uQmx1ciIsInNldENvbnRyb2xSZWYiLCJpbml0aWFsIiwidmFsdWVGaWVsZElkIiwic2V0U3RhdGVGcm9tSW5pdGlhbCIsIm5leHRQcm9wcyIsInByZXZQcm9wcyIsIm1hcE9wdGlvbnMiLCJtYXAiLCJvcHRpb24iLCJOdW1iZXIiLCJpZFR5cGUiLCJvbkNoYW5nZSIsInN0YXRlU2VsZWN0ZWQiLCJpIiwibmV3SXNFeHBhbmRlZCIsImZldGNoRGF0YSIsIm9uQ2xvc2UiLCJvbk9wZW4iLCJwYWdlIiwiZGlzYWJsZWQiLCJjaGFuZ2VQb3BVcFZpc2lvbiIsIm5ld1ZhbHVlIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0Iiwib25CbHVyIiwic2VhcmNoQnlUYXAiLCJvbklucHV0IiwicmVzZXRPbkJsdXIiLCJzZXROZXdWYWx1ZSIsImhhbmRsZURhdGFTZWFyY2giLCJjbG9zZVBvcHVwT25TZWxlY3QiLCJpbnNlcnRTZWxlY3RlZCIsImNsZWFyU2VhcmNoRmllbGQiLCJmb2N1cyIsImhhbmRsZVJlc2V0T25CbHVyIiwiZWwiLCJzZWxlY3RGb3JtYXQiLCJzZWxlY3RGb3JtYXRPbmUiLCJzZWxlY3RGb3JtYXRGZXciLCJzZWxlY3RGb3JtYXRNYW55Iiwic2VsZWN0ZWRDb3VudCIsImxlbmd0aCIsInRleHQiLCJyZXBsYWNlIiwicGxhY2Vob2xkZXIiLCJzZWxlY3RlZEVsZW1lbnQiLCJsb2FkaW5nIiwiY2xhc3NOYW1lIiwiaWNvbkZpZWxkSWQiLCJkaXNhYmxlZFZhbHVlcyIsImVuYWJsZWRGaWVsZElkIiwiaW1hZ2VGaWVsZElkIiwic3RhdHVzRmllbGRJZCIsImdyb3VwRmllbGRJZCIsImRlc2NyaXB0aW9uRmllbGRJZCIsImZvcm1hdCIsImJhZGdlIiwiaGFzU2VhcmNoIiwiY2xlYW5hYmxlIiwic3R5bGUiLCJpbnB1dFNlbGVjdFN0eWxlIiwid2lkdGgiLCJ0aXRsZSIsInJlbmRlclBsYWNlaG9sZGVyIiwicmVuZGVyVmFsdWUiLCJjdXJyZW50IiwiUmVhY3QiLCJDb21wb25lbnQiLCJTZWxlY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBTUEsVUFBVSxHQUFHO0FBQ2ZDLEVBQUFBLE1BQU0sRUFBRSxRQURPO0FBRWZDLEVBQUFBLFVBQVUsRUFBRTtBQUZHLENBQW5COztBQWVBLFNBQVNDLFdBQVQsQ0FBcUJDLEtBQXJCLEVBQTRDO0FBQ3hDLE1BQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixLQUFkLENBQUosRUFBMEI7QUFDdEIsV0FBT0EsS0FBUDtBQUNIOztBQUNELE1BQUksQ0FBQyx5QkFBUUEsS0FBUixDQUFMLEVBQXFCO0FBQ2pCLFdBQU8sQ0FBQ0EsS0FBRCxDQUFQO0FBQ0g7O0FBRUQsU0FBTyxFQUFQO0FBQ0g7O0lBRUtHLGU7Ozs7O0FBTUYsMkJBQVlDLEtBQVosRUFBMEI7QUFBQTs7QUFBQTtBQUN0Qiw4QkFBTUEsS0FBTjtBQURzQixnR0FMa0IsSUFLbEI7QUFBQSx5R0E4TVksVUFBQ0MsS0FBRCxFQUFRQyxLQUFSLEVBQWVDLFFBQWYsRUFBNEI7QUFDOUQsd0JBQW9ELE1BQUtILEtBQXpEO0FBQUEsVUFBUUksUUFBUixlQUFRQSxRQUFSO0FBQUEsVUFBa0JDLE1BQWxCLGVBQWtCQSxNQUFsQjtBQUFBLFVBQTBCQyxPQUExQixlQUEwQkEsT0FBMUI7QUFBQSxVQUFtQ0MsWUFBbkMsZUFBbUNBLFlBQW5DOztBQUVBLFVBQUlGLE1BQUosRUFBWTtBQUNSO0FBQ0EsWUFBTUcsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQ0MsSUFBRDtBQUFBLGlCQUFvQkMsTUFBTSxDQUFDQyxTQUFQLENBQWlCTixNQUFqQixDQUFELENBQXlDTyxJQUF6QyxDQUE4Q0gsSUFBOUMsRUFBb0RSLEtBQXBELENBQW5CO0FBQUEsU0FBbkI7O0FBQ0EsWUFBTVksZUFBZSxHQUFHUCxPQUFPLENBQUNELE1BQVIsQ0FBZSxVQUFBSSxJQUFJO0FBQUEsaUJBQUlELFVBQVUsQ0FBQ0MsSUFBSSxDQUFDRixZQUFELENBQUosQ0FBb0NPLFFBQXBDLEVBQUQsQ0FBZDtBQUFBLFNBQW5CLENBQXhCOztBQUVBLGNBQUtDLFFBQUwsQ0FBYztBQUFFVCxVQUFBQSxPQUFPLEVBQUVPO0FBQVgsU0FBZDtBQUNILE9BTkQsTUFNTztBQUNIVCxRQUFBQSxRQUFRLENBQUNILEtBQUQsRUFBUUMsS0FBSyxLQUFLLEtBQVYsR0FBa0JBLEtBQWxCLEdBQTBCLElBQWxDLEVBQXdDQyxRQUF4QyxDQUFSO0FBQ0g7QUFDSixLQTFOeUI7QUFFdEIsdUJBQWlDLE1BQUtILEtBQXRDO0FBQUEsUUFBUUosS0FBUixnQkFBUUEsS0FBUjtBQUFBLFFBQWVVLFFBQWYsZ0JBQWVBLE9BQWY7QUFBQSxRQUF3QlUsSUFBeEIsZ0JBQXdCQSxJQUF4QjtBQUVBLFVBQUtDLEtBQUwsR0FBYTtBQUNUckIsTUFBQUEsS0FBSyxFQUFFLEVBREU7QUFFVHNCLE1BQUFBLFVBQVUsRUFBRSxLQUZIO0FBR1RaLE1BQUFBLE9BQU8sRUFBUEEsUUFIUztBQUlUYSxNQUFBQSxRQUFRLEVBQUV4QixXQUFXLENBQUNDLEtBQUQsQ0FKWjtBQUtUd0IsTUFBQUEsYUFBYSxFQUFFSixJQUFJLEtBQUt4QixVQUFVLENBQUNFO0FBTDFCLEtBQWI7QUFRQSxVQUFLMkIsT0FBTCxHQUFlLElBQWY7QUFDQSxVQUFLQyxZQUFMLGdCQUFvQix1QkFBcEI7QUFFQSxVQUFLQyxpQkFBTCxHQUF5QixNQUFLQSxpQkFBTCxDQUF1QkMsSUFBdkIsZ0RBQXpCO0FBQ0EsVUFBS0MsaUJBQUwsR0FBeUIsTUFBS0EsaUJBQUwsQ0FBdUJELElBQXZCLGdEQUF6QjtBQUNBLFVBQUtFLGdCQUFMLEdBQXdCLE1BQUtBLGdCQUFMLENBQXNCRixJQUF0QixnREFBeEI7QUFDQSxVQUFLRyxlQUFMLEdBQXVCLE1BQUtBLGVBQUwsQ0FBcUJILElBQXJCLGdEQUF2QjtBQUNBLFVBQUtJLGdCQUFMLEdBQXdCLE1BQUtBLGdCQUFMLENBQXNCSixJQUF0QixnREFBeEI7QUFDQSxVQUFLSyxrQkFBTCxHQUEwQixNQUFLQSxrQkFBTCxDQUF3QkwsSUFBeEIsZ0RBQTFCO0FBQ0EsVUFBS00sYUFBTCxHQUFxQixNQUFLQSxhQUFMLENBQW1CTixJQUFuQixnREFBckI7QUFDQSxVQUFLTyxrQkFBTCxHQUEwQixNQUFLQSxrQkFBTCxDQUF3QlAsSUFBeEIsZ0RBQTFCO0FBQ0EsVUFBS1EsWUFBTCxHQUFvQixNQUFLQSxZQUFMLENBQWtCUixJQUFsQixnREFBcEI7QUFDQSxVQUFLUyxhQUFMLEdBQXFCLE1BQUtBLGFBQUwsQ0FBbUJULElBQW5CLGdEQUFyQjtBQXhCc0I7QUF5QnpCOzs7O1dBRUQsNkJBQW9CO0FBQ2hCLHlCQUEyQyxLQUFLeEIsS0FBaEQ7QUFBQSxVQUFRa0MsT0FBUixnQkFBUUEsT0FBUjtBQUFBLFVBQWlCNUIsT0FBakIsZ0JBQWlCQSxPQUFqQjtBQUFBLFVBQTBCNkIsWUFBMUIsZ0JBQTBCQSxZQUExQjs7QUFFQSxVQUFJdEMsS0FBSyxDQUFDQyxPQUFOLENBQWNvQyxPQUFkLENBQUosRUFBNEI7QUFDeEIsYUFBS0UsbUJBQUwsQ0FBeUJGLE9BQXpCLEVBQWtDNUIsT0FBbEMsRUFBMkM2QixZQUEzQztBQUNIO0FBQ0osSyxDQUVEOzs7O1dBQ0EsbUNBQTBCRSxTQUExQixFQUE0QztBQUN4QyxVQUFRL0IsT0FBUixHQUFvQixLQUFLTixLQUF6QixDQUFRTSxPQUFSO0FBQ0EsVUFBTVcsS0FBSyxHQUFHLEVBQWQ7O0FBRUEsVUFBSSxDQUFDLHlCQUFRWCxPQUFSLEVBQWlCK0IsU0FBUyxDQUFDL0IsT0FBM0IsQ0FBTCxFQUEwQztBQUN0Q1csUUFBQUEsS0FBSyxDQUFDWCxPQUFOLEdBQWdCK0IsU0FBUyxDQUFDL0IsT0FBMUI7QUFDSDs7QUFDRCxXQUFLUyxRQUFMLENBQWNFLEtBQWQ7QUFDSDs7O1dBRUQsNEJBQW1CcUIsU0FBbkIsRUFBcUM7QUFDakMseUJBQWtELEtBQUt0QyxLQUF2RDtBQUFBLFVBQVFrQyxPQUFSLGdCQUFRQSxPQUFSO0FBQUEsVUFBaUI1QixPQUFqQixnQkFBaUJBLE9BQWpCO0FBQUEsVUFBMEI2QixZQUExQixnQkFBMEJBLFlBQTFCO0FBQUEsVUFBd0N2QyxLQUF4QyxnQkFBd0NBLEtBQXhDOztBQUVBLFVBQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjb0MsT0FBZCxLQUEwQixDQUFDLHlCQUFRQSxPQUFSLEVBQWlCSSxTQUFTLENBQUNKLE9BQTNCLENBQS9CLEVBQW9FO0FBQ2hFLGFBQUtFLG1CQUFMLENBQXlCRixPQUF6QixFQUFrQzVCLE9BQWxDLEVBQTJDNkIsWUFBM0M7QUFFQTtBQUNIOztBQUNELFVBQUksQ0FBQyx5QkFBUXZDLEtBQVIsRUFBZTBDLFNBQVMsQ0FBQzFDLEtBQXpCLENBQUwsRUFBc0M7QUFDbEMsYUFBS21CLFFBQUwsQ0FBYztBQUNWSSxVQUFBQSxRQUFRLEVBQUV4QixXQUFXLENBQUNDLEtBQUQ7QUFEWCxTQUFkO0FBR0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDSSw2QkFBb0JzQyxPQUFwQixFQUErQzVCLE9BQS9DLEVBQTBFNkIsWUFBMUUsRUFBK0c7QUFDM0csVUFBTUksVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQ2pDLE9BQUQ7QUFBQSxZQUE0QlUsSUFBNUIsdUVBQW1DLFFBQW5DO0FBQUEsZUFBZ0RWLE9BQU8sQ0FBQ2tDLEdBQVIsQ0FBWSxVQUFBQyxNQUFNO0FBQUEsaURBQzlFQSxNQUQ4RSx3Q0FHNUVOLFlBSDRFLEVBSXpFbkIsSUFBSSxLQUFLLFFBQVQsR0FDTTBCLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDTixZQUFELENBQVAsQ0FEWixHQUVNekIsTUFBTSxDQUFDK0IsTUFBTSxDQUFDTixZQUFELENBQVAsQ0FONkQ7QUFBQSxTQUFsQixDQUFoRDtBQUFBLE9BQW5COztBQVVBLFVBQUkseUJBQVE3QixPQUFSLENBQUosRUFBc0I7QUFDbEIsYUFBS1MsUUFBTCxDQUFjO0FBQ1ZJLFVBQUFBLFFBQVEsRUFBRW9CLFVBQVUsQ0FBQ0wsT0FBRDtBQURWLFNBQWQ7QUFHSCxPQUpELE1BSU87QUFDSCxZQUFNZixRQUFRLEdBQUdiLE9BQU8sQ0FBQ0QsTUFBUixDQUFlLFVBQUNvQyxNQUFELEVBQVk7QUFDeEMsY0FBTUUsTUFBTSw0QkFBVUYsTUFBTSxDQUFDTixZQUFELENBQWhCLENBQVo7QUFFQSxpQkFBTyxzQkFBS0ksVUFBVSxDQUFDTCxPQUFELEVBQVVTLE1BQVYsQ0FBZixFQUFrQ0YsTUFBbEMsQ0FBUDtBQUNILFNBSmdCLENBQWpCO0FBTUEsYUFBSzFCLFFBQUwsQ0FBYztBQUNWSSxVQUFBQSxRQUFRLEVBQVJBO0FBRFUsU0FBZDtBQUdIO0FBQ0o7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0ksNEJBQW1CVixJQUFuQixFQUFrQztBQUM5Qix5QkFBbUMsS0FBS1QsS0FBeEM7QUFBQSxVQUFRbUMsWUFBUixnQkFBUUEsWUFBUjtBQUFBLFVBQXNCUyxRQUF0QixnQkFBc0JBLFFBQXRCO0FBQ0EsVUFBa0JDLGFBQWxCLEdBQW9DLEtBQUs1QixLQUF6QyxDQUFRRSxRQUFSO0FBQ0EsVUFBTUEsUUFBUSxHQUFHLE9BQU8wQixhQUFQLEtBQXlCLFFBQXpCLEdBQW9DQSxhQUFhLENBQUN4QyxNQUFkLENBQ2pELFVBQUF5QyxDQUFDO0FBQUEsZUFBSUEsQ0FBQyxDQUFDWCxZQUFELENBQUQsS0FBb0IxQixJQUFJLENBQUMwQixZQUFELENBQTVCO0FBQUEsT0FEZ0QsQ0FBcEMsR0FFYlUsYUFGSjtBQUlBLFdBQUs5QixRQUFMLENBQWM7QUFDVkksUUFBQUEsUUFBUSxFQUFSQTtBQURVLE9BQWQ7O0FBR0EsVUFBSXlCLFFBQUosRUFBYztBQUNWQSxRQUFBQSxRQUFRLENBQUN6QixRQUFELENBQVI7QUFDSDtBQUNKO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNJLDJCQUFrQjRCLGFBQWxCLEVBQXNEO0FBQ2xELHlCQUErQixLQUFLL0MsS0FBcEM7QUFBQSxVQUFRZ0QsU0FBUixnQkFBUUEsU0FBUjtBQUFBLFVBQW1CQyxPQUFuQixnQkFBbUJBLE9BQW5CO0FBQ0EsVUFBUS9CLFVBQVIsR0FBdUIsS0FBS0QsS0FBNUIsQ0FBUUMsVUFBUjs7QUFFQSxVQUFJQSxVQUFVLEtBQUs2QixhQUFuQixFQUFrQztBQUFFO0FBQVE7O0FBRTVDLFVBQU1HLE1BQU0sR0FBR0YsU0FBUyxDQUFDO0FBQUVHLFFBQUFBLElBQUksRUFBRTtBQUFSLE9BQUQsQ0FBeEI7QUFFQSxXQUFLcEMsUUFBTCxDQUNJO0FBQ0lHLFFBQUFBLFVBQVUsRUFBRTZCO0FBRGhCLE9BREosRUFJSUEsYUFBYSxHQUFHRyxNQUFILEdBQVlELE9BSjdCO0FBTUg7QUFFRDtBQUNKO0FBQ0E7QUFDQTs7OztXQUNJLDZCQUFvQjtBQUNoQixVQUFRRyxRQUFSLEdBQXFCLEtBQUtwRCxLQUExQixDQUFRb0QsUUFBUjtBQUNBLFVBQVFsQyxVQUFSLEdBQXVCLEtBQUtELEtBQTVCLENBQVFDLFVBQVI7O0FBRUEsVUFBSSxDQUFDa0MsUUFBTCxFQUFlO0FBQ1gsYUFBS0MsaUJBQUwsQ0FBdUIsQ0FBQ25DLFVBQXhCO0FBQ0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBOzs7O1dBQ0ksNEJBQW1CO0FBQ2YsV0FBS21DLGlCQUFMLENBQXVCLElBQXZCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTs7OztXQUNJLDJCQUFrQjtBQUNkLFdBQUtBLGlCQUFMLENBQXVCLEtBQXZCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0kscUJBQVlDLFFBQVosRUFBc0M7QUFDbEMsV0FBS3ZDLFFBQUwsQ0FBYztBQUNWbkIsUUFBQUEsS0FBSyxFQUFFMEQ7QUFERyxPQUFkO0FBR0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTs7OztXQUNJLHVCQUFjQyxDQUFkLEVBQXdCO0FBQ3BCQSxNQUFBQSxDQUFDLENBQUNDLGVBQUY7QUFDQUQsTUFBQUEsQ0FBQyxDQUFDRSxjQUFGO0FBRUEseUJBQXVDLEtBQUt6RCxLQUE1QztBQUFBLFVBQVFvRCxRQUFSLGdCQUFRQSxRQUFSO0FBQUEsVUFBa0JSLFFBQWxCLGdCQUFrQkEsUUFBbEI7QUFBQSxVQUE0QmMsTUFBNUIsZ0JBQTRCQSxNQUE1Qjs7QUFFQSxVQUFJTixRQUFKLEVBQWM7QUFDVjtBQUNIOztBQUVELFdBQUtyQyxRQUFMLENBQWM7QUFDVkksUUFBQUEsUUFBUSxFQUFFO0FBREEsT0FBZDtBQUdBeUIsTUFBQUEsUUFBUSxDQUFDLElBQUQsQ0FBUjtBQUNBYyxNQUFBQSxNQUFNLENBQUMsSUFBRCxDQUFOO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFlSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0ksNEJBQWVqRCxJQUFmLEVBQThCO0FBQzFCLHlCQUE2QixLQUFLVCxLQUFsQztBQUFBLFVBQVE0QyxRQUFSLGdCQUFRQSxRQUFSO0FBQUEsVUFBa0JjLE1BQWxCLGdCQUFrQkEsTUFBbEI7QUFDQSx3QkFBbUQsS0FBS3pDLEtBQXhEO0FBQUEsVUFBa0I0QixhQUFsQixlQUFRMUIsUUFBUjtBQUFBLFVBQWlDQyxhQUFqQyxlQUFpQ0EsYUFBakM7QUFDQSxVQUFJRCxRQUFRLEdBQUcsQ0FBQ1YsSUFBRCxDQUFmO0FBQ0EsVUFBSWIsS0FBMEIsR0FBR2EsSUFBakM7O0FBRUEsVUFBSVcsYUFBSixFQUFtQjtBQUNmRCxRQUFBQSxRQUFRLGlEQUFRMEIsYUFBYSxJQUFJLEVBQXpCLElBQThCcEMsSUFBOUIsRUFBUjtBQUNBYixRQUFBQSxLQUFLLEdBQUd1QixRQUFSO0FBQ0g7O0FBRUQsV0FBS0osUUFBTCxDQUFjO0FBQ1ZJLFFBQUFBLFFBQVEsRUFBUkE7QUFEVSxPQUFkOztBQUlBLFVBQUl5QixRQUFKLEVBQWM7QUFDVkEsUUFBQUEsUUFBUSxDQUFDaEQsS0FBRCxDQUFSO0FBQ0E4RCxRQUFBQSxNQUFNLENBQUM5RCxLQUFELENBQU47QUFDSDtBQUNKO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNJLDJCQUFrQjBELFFBQWxCLEVBQW9DO0FBQ2hDLHlCQUF3RCxLQUFLdEQsS0FBN0Q7QUFBQSxVQUFRMkQsV0FBUixnQkFBUUEsV0FBUjtBQUFBLFVBQXFCZixRQUFyQixnQkFBcUJBLFFBQXJCO0FBQUEsVUFBK0JnQixPQUEvQixnQkFBK0JBLE9BQS9CO0FBQUEsVUFBd0NDLFdBQXhDLGdCQUF3Q0EsV0FBeEM7QUFFQSxXQUFLQyxXQUFMLENBQWlCUixRQUFqQjs7QUFFQSxVQUFJLENBQUNLLFdBQUwsRUFBa0I7QUFDZCxhQUFLSSxnQkFBTCxDQUFzQlQsUUFBdEI7QUFDSDs7QUFDRCxVQUFJLENBQUNPLFdBQUwsRUFBa0I7QUFDZGpCLFFBQUFBLFFBQVEsQ0FBQ1UsUUFBRCxDQUFSO0FBQ0g7O0FBQ0RNLE1BQUFBLE9BQU8sQ0FBQ04sUUFBRCxDQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTs7OztXQUNJLDhCQUFxQjtBQUNqQixVQUFRMUQsS0FBUixHQUFrQixLQUFLcUIsS0FBdkIsQ0FBUXJCLEtBQVI7QUFFQSxXQUFLbUUsZ0JBQUwsQ0FBc0JuRSxLQUF0QjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7Ozs7V0FDSSw0QkFBbUI7QUFDZixVQUFRVSxPQUFSLEdBQW9CLEtBQUtOLEtBQXpCLENBQVFNLE9BQVI7QUFFQSxXQUFLUyxRQUFMLENBQWM7QUFDVm5CLFFBQUFBLEtBQUssRUFBRSxFQURHO0FBRVZVLFFBQUFBLE9BQU8sRUFBUEE7QUFGVSxPQUFkO0FBSUg7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0ksMEJBQWlCRyxJQUFqQixFQUFnQztBQUM1QixVQUFRdUQsa0JBQVIsR0FBK0IsS0FBS2hFLEtBQXBDLENBQVFnRSxrQkFBUjtBQUVBLFdBQUtDLGNBQUwsQ0FBb0J4RCxJQUFwQjs7QUFFQSxVQUFJdUQsa0JBQUosRUFBd0I7QUFDcEIsYUFBS3JDLGVBQUw7QUFDSDs7QUFFRCxXQUFLdUMsZ0JBQUw7O0FBRUEsVUFBSSxLQUFLN0MsT0FBVCxFQUFrQjtBQUNkO0FBQ0MsYUFBS0EsT0FBTixDQUFzQjhDLEtBQXRCO0FBQ0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBOzs7O1dBQ0ksNkJBQW9CO0FBQ2hCLFVBQVFoRCxRQUFSLEdBQXFCLEtBQUtGLEtBQTFCLENBQVFFLFFBQVI7QUFDQSwwQkFBaUMsS0FBS25CLEtBQXRDO0FBQUEsVUFBUTZELFdBQVIsaUJBQVFBLFdBQVI7QUFBQSxVQUFxQnZELE9BQXJCLGlCQUFxQkEsT0FBckI7O0FBRUEsVUFBSXVELFdBQVcsSUFBSSxDQUFDMUMsUUFBcEIsRUFBOEI7QUFDMUIsYUFBS0osUUFBTCxDQUFjO0FBQ1ZuQixVQUFBQSxLQUFLLEVBQUUsRUFERztBQUVWVSxVQUFBQSxPQUFPLEVBQVBBO0FBRlUsU0FBZDtBQUlIO0FBQ0o7QUFFRDtBQUNKO0FBQ0E7QUFDQTs7OztXQUNJLDhCQUFxQjtBQUNqQiwwQkFBMEIsS0FBS04sS0FBL0I7QUFBQSxVQUFRMEQsTUFBUixpQkFBUUEsTUFBUjtBQUFBLFVBQWdCOUQsS0FBaEIsaUJBQWdCQSxLQUFoQjtBQUNBLFVBQVFzQixVQUFSLEdBQXVCLEtBQUtELEtBQTVCLENBQVFDLFVBQVI7O0FBRUEsVUFBSUEsVUFBSixFQUFnQjtBQUNaLGFBQUtTLGVBQUw7QUFDQStCLFFBQUFBLE1BQU0sQ0FBQzlELEtBQUQsQ0FBTjtBQUNIO0FBQ0o7OztXQUVELHNCQUFhMkQsQ0FBYixFQUE0QztBQUN4Q0EsTUFBQUEsQ0FBQyxDQUFDRSxjQUFGO0FBQ0EsV0FBS1csaUJBQUw7QUFDSDs7O1dBRUQsdUJBQWNDLEVBQWQsRUFBcUM7QUFDakMsV0FBS2hELE9BQUwsR0FBZWdELEVBQWY7QUFDSDs7O1dBRUQsNkJBQW9CO0FBQ2hCLDBCQUtJLEtBQUtyRSxLQUxUO0FBQUEsZ0RBQ0lzRSxZQURKO0FBQUEsVUFDSUEsWUFESixzQ0FDbUIsb0JBRG5CO0FBQUEsaURBRUlDLGVBRko7QUFBQSxVQUVJQSxlQUZKLHVDQUVzQixFQUZ0QjtBQUFBLGlEQUdJQyxlQUhKO0FBQUEsVUFHSUEsZUFISix1Q0FHc0IsRUFIdEI7QUFBQSxpREFJSUMsZ0JBSko7QUFBQSxVQUlJQSxnQkFKSix1Q0FJdUIsRUFKdkI7QUFPQSx5QkFBb0MsS0FBS3hELEtBQXpDO0FBQUEsVUFBUUUsUUFBUixnQkFBUUEsUUFBUjtBQUFBLFVBQWtCQyxhQUFsQixnQkFBa0JBLGFBQWxCO0FBQ0EsVUFBTXNELGFBQWEsR0FBR3ZELFFBQVEsQ0FBQ3dELE1BQS9CO0FBQ0EsVUFBSUMsSUFBSjs7QUFFQSxVQUNJLENBQUMseUJBQVFMLGVBQVIsQ0FBRCxJQUNBLENBQUMseUJBQVFDLGVBQVIsQ0FERCxJQUVBLENBQUMseUJBQVFDLGdCQUFSLENBRkQsSUFHQUMsYUFBYSxJQUFJLENBSGpCLElBSUF0RCxhQUxKLEVBTUU7QUFDRXdELFFBQUFBLElBQUksR0FBRyxvQkFDSEYsYUFERyxFQUVISCxlQUZHLEVBR0hDLGVBSEcsRUFJSEMsZ0JBSkcsRUFLTEksT0FMSyxDQUtHLFFBTEgsWUFLZ0JILGFBTGhCLEVBQVA7QUFNSCxPQWJELE1BYU8sSUFBSUEsYUFBYSxJQUFJLENBQWpCLElBQXNCdEQsYUFBMUIsRUFBeUM7QUFDNUN3RCxRQUFBQSxJQUFJLEdBQUdOLFlBQVksQ0FBQ08sT0FBYixDQUFxQixRQUFyQixZQUFrQ0gsYUFBbEMsRUFBUDtBQUNILE9BRk0sTUFFQTtBQUNIRSxRQUFBQSxJQUFJLEdBQUcsSUFBUDtBQUNIOztBQUVELGFBQU9BLElBQVA7QUFDSDs7O1dBRUQsdUJBQWM7QUFDViwwQkFBMkMsS0FBSzVFLEtBQWhEO0FBQUEsVUFBUU8sWUFBUixpQkFBUUEsWUFBUjtBQUFBLGdEQUFzQnVFLFdBQXRCO0FBQUEsVUFBc0JBLFdBQXRCLHNDQUFvQyxFQUFwQztBQUNBLFVBQVEzRCxRQUFSLEdBQXFCLEtBQUtGLEtBQTFCLENBQVFFLFFBQVI7O0FBRUEsVUFBSSx5QkFBUUEsUUFBUixDQUFKLEVBQXVCO0FBQ25CLGVBQU8yRCxXQUFQO0FBQ0g7O0FBRUQsc0RBQTBCM0QsUUFBMUI7QUFBQSxVQUFPNEQsZUFBUDs7QUFFQSxhQUFPLHFCQUFJQSxlQUFKLEVBQXFCeEUsWUFBckIsQ0FBUDtBQUNIOzs7V0FFRCxrQkFBUztBQUNMLDBCQXFCSSxLQUFLUCxLQXJCVDtBQUFBLFVBQ0lnRixPQURKLGlCQUNJQSxPQURKO0FBQUEsVUFFSUMsU0FGSixpQkFFSUEsU0FGSjtBQUFBLFVBR0k5QyxZQUhKLGlCQUdJQSxZQUhKO0FBQUEsVUFJSTVCLFlBSkosaUJBSUlBLFlBSko7QUFBQSxVQUtJMkUsV0FMSixpQkFLSUEsV0FMSjtBQUFBLFVBTUk5QixRQU5KLGlCQU1JQSxRQU5KO0FBQUEsVUFPSStCLGNBUEosaUJBT0lBLGNBUEo7QUFBQSxVQVFJQyxjQVJKLGlCQVFJQSxjQVJKO0FBQUEsVUFTSUMsWUFUSixpQkFTSUEsWUFUSjtBQUFBLFVBVUlDLGFBVkosaUJBVUlBLGFBVko7QUFBQSxVQVdJQyxZQVhKLGlCQVdJQSxZQVhKO0FBQUEsVUFZSUMsa0JBWkosaUJBWUlBLGtCQVpKO0FBQUEsVUFhSUMsTUFiSixpQkFhSUEsTUFiSjtBQUFBLFVBY0lYLFdBZEosaUJBY0lBLFdBZEo7QUFBQSxVQWVJWSxLQWZKLGlCQWVJQSxLQWZKO0FBQUEsVUFnQkkxQyxTQWhCSixpQkFnQklBLFNBaEJKO0FBQUEsVUFpQklHLElBakJKLGlCQWlCSUEsSUFqQko7QUFBQSxVQWtCSXdDLFNBbEJKLGlCQWtCSUEsU0FsQko7QUFBQSxVQW1CSUMsU0FuQkosaUJBbUJJQSxTQW5CSjtBQUFBLFVBb0JJQyxLQXBCSixpQkFvQklBLEtBcEJKOztBQXNCQSxVQUFNQyxnQkFBZ0I7QUFBS0MsUUFBQUEsS0FBSyxFQUFFO0FBQVosU0FBdUJGLEtBQXZCLENBQXRCOztBQUVBLHlCQUFnRSxLQUFLNUUsS0FBckU7QUFBQSxVQUFRRSxRQUFSLGdCQUFRQSxRQUFSO0FBQUEsVUFBa0JELFVBQWxCLGdCQUFrQkEsVUFBbEI7QUFBQSxVQUE4QkUsYUFBOUIsZ0JBQThCQSxhQUE5QjtBQUFBLFVBQTZDeEIsS0FBN0MsZ0JBQTZDQSxLQUE3QztBQUFBLFVBQW9EVSxPQUFwRCxnQkFBb0RBLE9BQXBEO0FBRUEsVUFBTTBGLEtBQUssR0FBRyxxQkFBSSx1QkFBTTdFLFFBQU4sQ0FBSixZQUF3QlosWUFBeEIsRUFBZDtBQUVBLDBCQUNJO0FBQ0ksUUFBQSxTQUFTLEVBQUMsa0JBRGQ7QUFFSSxRQUFBLEtBQUssRUFBRXlGLEtBRlg7QUFHSSxRQUFBLEtBQUssRUFBRUYsZ0JBSFg7QUFJSSxRQUFBLE1BQU0sRUFBRSxLQUFLOUQsWUFKakI7QUFLSSxRQUFBLEdBQUcsRUFBRSxLQUFLVjtBQUxkLHNCQU9JLGdDQUFDLGtCQUFEO0FBQVEsUUFBQSxRQUFRLEVBQUUsS0FBS1csYUFBdkI7QUFBc0MsUUFBQSxPQUFPLEVBQUUsS0FBS1Y7QUFBcEQsc0JBQ0ksZ0NBQUMsa0NBQUQ7QUFDSSxRQUFBLFNBQVMsRUFBRTBELFNBRGY7QUFFSSxRQUFBLFVBQVUsRUFBRS9ELFVBRmhCO0FBR0ksUUFBQSxPQUFPLEVBQUU4RCxPQUhiO0FBSUksUUFBQSxRQUFRLEVBQUU1QixRQUpkO0FBS0ksUUFBQSxXQUFXLEVBQUU4QixXQUxqQjtBQU1JLFFBQUEsWUFBWSxFQUFFRyxZQU5sQjtBQU9JLFFBQUEsU0FBUyxFQUFFTyxTQVBmO0FBUUksUUFBQSxRQUFRLEVBQUV6RSxRQVJkO0FBU0ksUUFBQSxZQUFZLEVBQUUsS0FBS1c7QUFUdkIsc0JBV0k7QUFBTSxRQUFBLFNBQVMsRUFBQztBQUFoQixTQUVRVixhQUFhLEdBQ1AsS0FBSzZFLGlCQUFMLEVBRE8sR0FFUCxLQUFLQyxXQUFMLEVBSmQsQ0FYSixDQURKLENBUEosZUE0QkksZ0NBQUMsWUFBRDtBQUFPLFFBQUEsVUFBVSxFQUFFaEYsVUFBbkI7QUFBK0IsUUFBQSxXQUFXLEVBQUUsS0FBS0ksWUFBTCxDQUFrQjZFO0FBQTlELHNCQUNJLGtFQUNLUixTQUFTLGlCQUNOLGdDQUFDLDJCQUFEO0FBQ0ksUUFBQSxXQUFXLEVBQUViLFdBQVcsSUFBSSxFQURoQztBQUVJLFFBQUEsUUFBUSxFQUFFLEtBQUtyRCxpQkFGbkI7QUFHSSxRQUFBLFFBQVEsRUFBRSxLQUFLTSxrQkFIbkI7QUFJSSxRQUFBLEtBQUssRUFBRW5DO0FBSlgsUUFGUixlQVNJLGdDQUFDLG9CQUFEO0FBQ0ksUUFBQSxPQUFPLEVBQUVVLE9BRGI7QUFFSSxRQUFBLFlBQVksRUFBRTZCLFlBRmxCO0FBR0ksUUFBQSxZQUFZLEVBQUU1QixZQUhsQjtBQUlJLFFBQUEsV0FBVyxFQUFFMkUsV0FKakI7QUFLSSxRQUFBLFlBQVksRUFBRUcsWUFMbEI7QUFNSSxRQUFBLGFBQWEsRUFBRUMsYUFObkI7QUFPSSxRQUFBLEtBQUssRUFBRUksS0FQWDtBQVFJLFFBQUEsa0JBQWtCLEVBQUVGLGtCQVJ4QjtBQVNJLFFBQUEsY0FBYyxFQUFFSixjQVRwQjtBQVVJLFFBQUEsUUFBUSxFQUFFLEtBQUt4RCxnQkFWbkI7QUFXSSxRQUFBLFNBQVMsRUFBRW9CLFNBWGY7QUFZSSxRQUFBLElBQUksRUFBRUcsSUFaVjtBQWFJLFFBQUEsVUFBVSxFQUFFakMsVUFiaEI7QUFjSSxRQUFBLFFBQVEsRUFBRUMsUUFkZDtBQWVJLFFBQUEsY0FBYyxFQUFFZ0UsY0FmcEI7QUFnQkksUUFBQSxZQUFZLEVBQUVJLFlBaEJsQjtBQWlCSSxRQUFBLGFBQWEsRUFBRW5FLGFBakJuQjtBQWtCSSxRQUFBLFlBQVksRUFBRSxLQUFLUyxrQkFsQnZCO0FBbUJJLFFBQUEsTUFBTSxFQUFFNEQsTUFuQlo7QUFvQkksUUFBQSxPQUFPLEVBQUVUO0FBcEJiLFFBVEosQ0FESixDQTVCSixDQURKO0FBaUVIOzs7RUFoZnlCb0Isa0JBQU1DLFM7O2lDQUE5QnRHLGUsa0JBa2ZvQjtBQUNsQjZGLEVBQUFBLFNBQVMsRUFBRSxJQURPO0FBRWxCekQsRUFBQUEsWUFBWSxFQUFFLElBRkk7QUFHbEI1QixFQUFBQSxZQUFZLEVBQUUsTUFISTtBQUlsQjJFLEVBQUFBLFdBQVcsRUFBRSxNQUpLO0FBS2xCRixFQUFBQSxPQUFPLEVBQUUsS0FMUztBQU1sQjVCLEVBQUFBLFFBQVEsRUFBRSxLQU5RO0FBT2xCK0IsRUFBQUEsY0FBYyxFQUFFLEVBUEU7QUFRbEJ0QixFQUFBQSxXQUFXLEVBQUUsS0FSSztBQVNsQkYsRUFBQUEsV0FBVyxFQUFFLEtBVEs7QUFVbEJnQyxFQUFBQSxTQUFTLEVBQUUsS0FWTztBQVdsQnJGLEVBQUFBLE9BQU8sRUFBRSxFQVhTO0FBWWxCVixFQUFBQSxLQUFLLEVBQUUsRUFaVztBQWFsQjRGLEVBQUFBLGtCQUFrQixFQUFFLEVBYkY7QUFjbEJKLEVBQUFBLGNBQWMsRUFBRSxFQWRFO0FBZWxCRSxFQUFBQSxhQUFhLEVBQUUsRUFmRztBQWdCbEJDLEVBQUFBLFlBQVksRUFBRSxFQWhCSTtBQWlCbEJGLEVBQUFBLFlBQVksRUFBRSxFQWpCSTtBQWtCbEJyQixFQUFBQSxrQkFBa0IsRUFBRSxJQWxCRjtBQW1CbEI1RCxFQUFBQSxRQW5Ca0Isc0JBbUJQLENBQUUsQ0FuQks7QUFvQmxCd0MsRUFBQUEsUUFwQmtCLHNCQW9CUCxDQUFFLENBcEJLO0FBcUJsQkksRUFBQUEsU0FBUyxFQUFFO0FBQUEsV0FBTSxZQUFNLENBQUUsQ0FBZDtBQUFBLEdBckJPO0FBc0JsQlksRUFBQUEsT0F0QmtCLHFCQXNCUixDQUFFLENBdEJNO0FBdUJsQlgsRUFBQUEsT0F2QmtCLHFCQXVCUixDQUFFLENBdkJNO0FBd0JsQlMsRUFBQUEsTUF4QmtCLG9CQXdCVCxDQUFFO0FBeEJPLEM7QUF3SW5CLElBQU00QyxNQUFNLEdBQUcscUNBQWV2RyxlQUFmLENBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgRm9jdXNFdmVudCwgUmVmT2JqZWN0LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBvbkNsaWNrT3V0c2lkZSBmcm9tICdyZWFjdC1vbmNsaWNrb3V0c2lkZSdcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJ1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0J1xuaW1wb3J0IGZpcnN0IGZyb20gJ2xvZGFzaC9maXJzdCdcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5J1xuaW1wb3J0IGZpbmQgZnJvbSAnbG9kYXNoL2ZpbmQnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdyZWFjdHN0cmFwJ1xuXG5pbXBvcnQgeyBJbnB1dFNlbGVjdEdyb3VwIH0gZnJvbSAnLi4vSW5wdXRTZWxlY3QvSW5wdXRTZWxlY3RHcm91cCdcbmltcG9ydCB7IEZpbHRlciwgVE9wdGlvbiB9IGZyb20gJy4uL0lucHV0U2VsZWN0L3R5cGVzJ1xuaW1wb3J0IHsgQmFkZ2VUeXBlLCBQb3B1cExpc3QgfSBmcm9tICcuLi9JbnB1dFNlbGVjdC9Qb3B1cExpc3QnXG5cbmltcG9ydCB7IGdldE5vdW4gfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgUG9wdXAgfSBmcm9tICcuL1BvcHVwJ1xuaW1wb3J0IHsgTjJPU2VsZWN0SW5wdXQgfSBmcm9tICcuL1NlbGVjdElucHV0J1xuXG4vKipcbiAqIE4yT1NlbGVjdFxuICogQHJlYWN0UHJvcHMge2Jvb2xlYW59IGxvYWRpbmcgLSDRhNC70LDQsyDQsNC90LjQvNCw0YbQuNC4INC30LDQs9GA0YPQt9C60LhcbiAqIEByZWFjdFByb3BzIHthcnJheX0gb3B0aW9ucyAtINC00LDQvdC90YvQtVxuICogQHJlYWN0UHJvcHMge3N0cmluZ30gdmFsdWVGaWVsZElkIC0g0LfQvdCw0YfQtdC90LjQtSDQutC70Y7Rh9CwIHZhbHVlINCyINC00LDQvdC90YvRhVxuICogQHJlYWN0UHJvcHMge3N0cmluZ30gbGFiZWxGaWVsZElkIC0g0LfQvdCw0YfQtdC90LjQtSDQutC70Y7Rh9CwIGxhYmVsINCyINC00LDQvdC90YvRhVxuICogQHJlYWN0UHJvcHMge3N0cmluZ30gaWNvbkZpZWxkSWQgLSDQv9C+0LvQtSDQtNC70Y8g0LjQutC+0L3QutC4XG4gKiBAcmVhY3RQcm9wcyB7c3RyaW5nfSBpbWFnZUZpZWxkSWQgLSDQv9C+0LvQtSDQtNC70Y8g0LrQsNGA0YLQuNC90LrQuFxuICogQHJlYWN0UHJvcHMge3N0cmluZ30gc3RhdHVzRmllbGRJZCAtINC/0L7Qu9C1INC00LvRjyDRgdGC0LDRgtGD0YHQsFxuICogQHJlYWN0UHJvcHMge29iamVjdH0gYmFkZ2UgLSDQtNCw0L3QvdGL0LUg0LTQu9GPINCx0LDQtNC20LBcbiAqIEByZWFjdFByb3BzIHtib29sZWFufSBkaXNhYmxlZCAtINGE0LvQsNCzINC90LXQsNC60YLQuNCy0L3QvtGB0YLQuFxuICogQHJlYWN0UHJvcHMge2FycmF5fSBkaXNhYmxlZFZhbHVlcyAtINC90LXQsNC60YLQuNCy0L3Ri9C1INC00LDQvdC90YvQtVxuICogQHJlYWN0UHJvcHMge3N0cmluZ30gZW5hYmxlZEZpZWxkSWQgLSDQv9C+0LvQtSDQtNC70Y8g0LDQutGC0LjQstC90L7RgdGC0LhcbiAqIEByZWFjdFByb3BzIHtzdHJpbmd9IGZpbHRlciAtINCy0LDRgNC40LDQvdGC0Ysg0YTQuNC70YzRgtGA0LDRhtC40LhcbiAqIEByZWFjdFByb3BzIHtzdHJpbmd9IHZhbHVlIC0g0YLQtdC60YPRidC10LUg0LfQvdCw0YfQtdC90LjQtVxuICogQHJlYWN0UHJvcHMge2Z1bmN0aW9ufSBvbklucHV0IC0gY2FsbGJhY2sg0L/RgNC4INCy0LLQvtC00LUg0LIg0LjQvdC/0YPRglxuICogQHJlYWN0UHJvcHMge2Z1bmN0aW9ufSBvbkNoYW5nZSAtIGNhbGxiYWNrINC/0YDQuCDQstGL0LHQvtGA0LUg0LfQvdCw0YfQtdC90LjRjyDQuNC70Lgg0LLQstC+0LTQtVxuICogQHJlYWN0UHJvcHMge3N0cmluZ30gcGxhY2VIb2xkZXIgLSDQv9C+0LTRgdC60LDQt9C60LAg0LIg0LjQvdC/0YPRgtC1XG4gKiBAcmVhY3RQcm9wcyB7Ym9vbGVhbn0gcmVzZXRPbkJsdXIgLSDRhNC40YfQsCwg0L/RgNC4INC60L7RgtC+0YDQvtC5INGB0LHRgNCw0YHRi9Cy0LDQtdGC0YHRjyDQt9C90LDRh9C10L3QuNC1INC60L7QvdGC0YDQvtC70LAsINC10YHQu9C4INC+0L3QviDQvdC1INCy0YvQsdGA0LDQvdC+INC40LcgcG9wdXBcbiAqIEByZWFjdFByb3BzIHtmdW5jdGlvbn0gb25DbG9zZSAtIGNhbGxiYWNrINC90LAg0LfQsNC60YDRi9GC0LjQtSDQv9C+0L/QsNC/0LBcbiAqIEByZWFjdFByb3BzIHtzdHJpbmd9IGdyb3VwRmllbGRJZCAtINC/0L7Qu9C1INC00LvRjyDQs9GA0YPQv9C/0LjRgNC+0LLQutC4XG4gKiBAcmVhY3RQcm9wcyB7Ym9vbGVhbn0gY2xvc2VQb3B1cE9uU2VsZWN0IC0g0YTQu9Cw0LMg0LfQsNC60YDRi9GC0LjRjyDQv9C+0L/QsNC/0LAg0L/RgNC4INCy0YvQsdC+0YDQtVxuICogQHJlYWN0UHJvcHMge2Jvb2xlYW59IGhhc0NoZWNrYm94ZXMgLSDRhNC70LDQsyDQvdCw0LvQuNGH0LjRjyDRh9C10LrQsdC+0LrRgdC+0LJcbiAqIEByZWFjdFByb3BzIHtzdHJpbmd9IGZvcm1hdCAtINGE0L7RgNC80LDRglxuICogQHJlYWN0UHJvcHMge2Jvb2xlYW59IHNlYXJjaEJ5VGFwIC0g0L/QvtC40YHQuiDQv9C+INC90LDQttCw0YLQuNGOINC60L3QvtC/0LrQuFxuICovXG5cbmNvbnN0IHNlbGVjdFR5cGUgPSB7XG4gICAgU0lOR0xFOiAnc2luZ2xlJyxcbiAgICBDSEVDS0JPWEVTOiAnY2hlY2tib3hlcycsXG59XG5cbnR5cGUgU3RhdGUgPSB7XG4gICAgaGFzQ2hlY2tib3hlczogYm9vbGVhbixcbiAgICBpbnB1dD86IHN0cmluZ1xuICAgIGlzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IFRPcHRpb25bXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHNlbGVjdGVkOiBhbnlbXVxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0ZWQodmFsdWU6IFByb3BzWyd2YWx1ZSddKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICBpZiAoIWlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbdmFsdWVdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG59XG5cbmNsYXNzIFNlbGVjdENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgICBwcml2YXRlIGNvbnRyb2w6IG51bGwgfCBIVE1MQnV0dG9uRWxlbWVudCA9IG51bGxcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbjJvU2VsZWN0UmVmOiBSZWZPYmplY3Q8YW55PlxuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICBjb25zdCB7IHZhbHVlLCBvcHRpb25zLCB0eXBlIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBnZXRTZWxlY3RlZCh2YWx1ZSksXG4gICAgICAgICAgICBoYXNDaGVja2JveGVzOiB0eXBlID09PSBzZWxlY3RUeXBlLkNIRUNLQk9YRVMsXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSBudWxsXG4gICAgICAgIHRoaXMubjJvU2VsZWN0UmVmID0gY3JlYXRlUmVmKClcblxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNsaWNrID0gdGhpcy5oYW5kbGVCdXR0b25DbGljay5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UgPSB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlLmJpbmQodGhpcylcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dEZvY3VzID0gdGhpcy5oYW5kbGVJbnB1dEZvY3VzLmJpbmQodGhpcylcbiAgICAgICAgdGhpcy5oaWRlT3B0aW9uc0xpc3QgPSB0aGlzLmhpZGVPcHRpb25zTGlzdC5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuaGFuZGxlSXRlbVNlbGVjdCA9IHRoaXMuaGFuZGxlSXRlbVNlbGVjdC5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRJdGVtID0gdGhpcy5yZW1vdmVTZWxlY3RlZEl0ZW0uYmluZCh0aGlzKVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0ZWQgPSB0aGlzLmNsZWFyU2VsZWN0ZWQuYmluZCh0aGlzKVxuICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaEJ1dHRvbiA9IHRoaXMuaGFuZGxlU2VhcmNoQnV0dG9uLmJpbmQodGhpcylcbiAgICAgICAgdGhpcy5oYW5kbGVPbkJsdXIgPSB0aGlzLmhhbmRsZU9uQmx1ci5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFJlZiA9IHRoaXMuc2V0Q29udHJvbFJlZi5iaW5kKHRoaXMpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5pdGlhbCwgb3B0aW9ucywgdmFsdWVGaWVsZElkIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGVGcm9tSW5pdGlhbChpbml0aWFsLCBvcHRpb25zLCB2YWx1ZUZpZWxkSWQpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGVwcmVjYXRlZFxuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzOiBQcm9wcykge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHRoaXMucHJvcHNcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7fSBhcyBTdGF0ZVxuXG4gICAgICAgIGlmICghaXNFcXVhbChvcHRpb25zLCBuZXh0UHJvcHMub3B0aW9ucykpIHtcbiAgICAgICAgICAgIHN0YXRlLm9wdGlvbnMgPSBuZXh0UHJvcHMub3B0aW9uc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUHJvcHMpIHtcbiAgICAgICAgY29uc3QgeyBpbml0aWFsLCBvcHRpb25zLCB2YWx1ZUZpZWxkSWQsIHZhbHVlIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbCkgJiYgIWlzRXF1YWwoaW5pdGlhbCwgcHJldlByb3BzLmluaXRpYWwpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlRnJvbUluaXRpYWwoaW5pdGlhbCwgb3B0aW9ucywgdmFsdWVGaWVsZElkKVxuXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwodmFsdWUsIHByZXZQcm9wcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBnZXRTZWxlY3RlZCh2YWx1ZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KXQsNC6INC00LvRjyDQvNCw0L/QuNC90LPQsCDQsNC50LTQuNGI0L3QuNC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0LHQtdGA0YPRgtGB0Y8g0LjQtyDQsNC00YDQtdGB0L3QvtC5INGB0YLRgNC+0LrQuCDQsiDQstC40LTQtSDRgdGC0YDQvtC6LCDQvdC+INC+0LbQuNC00LDQtdGC0YHRjyDRh9C40YHQu9C+XG4gICAgICogVE9ETyDRg9C00LDQu9C40YLRjCDQv9C+0YHQu9C1INGC0L7Qs9C+LCDQutCw0Log0L/QvtGH0LjQvdC40YLRgdGPINC/0L7QstC10LTQtdC90LjQtSDQv9Cw0YDRgdC40L3Qs9CwINCw0LTRgNC10YHQvdC+0Lkg0YHRgtGA0L7QutC4INCx0YPQtNC10YIg0L7Qv9C40YDQsNGC0YzRgdGPINC90LAg0YPQutCw0LfQsNC90L3Ri9C1INGC0LjQv9GLXG4gICAgICogQHBhcmFtIHtBcnJheS48b2JqZWN0Pn0gW2luaXRpYWxdXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVGaWVsZElkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXRTdGF0ZUZyb21Jbml0aWFsKGluaXRpYWw6IFByb3BzWydvcHRpb25zJ10sIG9wdGlvbnM6IFByb3BzWydvcHRpb25zJ10sIHZhbHVlRmllbGRJZDogUHJvcHNbJ3ZhbHVlRmllbGRJZCddKSB7XG4gICAgICAgIGNvbnN0IG1hcE9wdGlvbnMgPSAob3B0aW9uczogUHJvcHNbJ29wdGlvbnMnXSwgdHlwZSA9ICdzdHJpbmcnKSA9PiBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZElkXTpcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKG9wdGlvblt2YWx1ZUZpZWxkSWQgYXMga2V5b2YgVE9wdGlvbl0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyhvcHRpb25bdmFsdWVGaWVsZElkIGFzIGtleW9mIFRPcHRpb25dKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGlmIChpc0VtcHR5KG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogbWFwT3B0aW9ucyhpbml0aWFsKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFR5cGUgPSB0eXBlb2Ygb3B0aW9uW3ZhbHVlRmllbGRJZCBhcyBrZXlvZiBUT3B0aW9uXVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmQobWFwT3B0aW9ucyhpbml0aWFsLCBpZFR5cGUpLCBvcHRpb24pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDRjdC70LXQvNC10L3RgiDQuNC3INGB0L/QuNGB0LrQsCDQstGL0LHRgNCw0L3QvdGL0YVcbiAgICAgKiBAcGFyYW0gaXRlbSAtINGN0LvQtdC80LXQvdGCXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmVTZWxlY3RlZEl0ZW0oaXRlbTogVE9wdGlvbikge1xuICAgICAgICBjb25zdCB7IHZhbHVlRmllbGRJZCwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHNcbiAgICAgICAgY29uc3QgeyBzZWxlY3RlZDogc3RhdGVTZWxlY3RlZCB9ID0gdGhpcy5zdGF0ZVxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHR5cGVvZiBzdGF0ZVNlbGVjdGVkICE9PSAnc3RyaW5nJyA/IHN0YXRlU2VsZWN0ZWQuZmlsdGVyKFxuICAgICAgICAgICAgaSA9PiBpW3ZhbHVlRmllbGRJZF0gIT09IGl0ZW1bdmFsdWVGaWVsZElkIGFzIGtleW9mIFRPcHRpb25dLFxuICAgICAgICApIDogc3RhdGVTZWxlY3RlZFxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgICAgb25DaGFuZ2Uoc2VsZWN0ZWQpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmNC30LzQtdC90LXQvdC40LUg0LLQuNC00LjQvNC+0YHRgtC4INC/0L7Qv9Cw0L/QsFxuICAgICAqIEBwYXJhbSBuZXdJc0V4cGFuZGVkIC0g0L3QvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INCy0LjQtNC40LzQvtGB0YLQuFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY2hhbmdlUG9wVXBWaXNpb24obmV3SXNFeHBhbmRlZDogU3RhdGVbJ2lzRXhwYW5kZWQnXSkge1xuICAgICAgICBjb25zdCB7IGZldGNoRGF0YSwgb25DbG9zZSB9ID0gdGhpcy5wcm9wc1xuICAgICAgICBjb25zdCB7IGlzRXhwYW5kZWQgfSA9IHRoaXMuc3RhdGVcblxuICAgICAgICBpZiAoaXNFeHBhbmRlZCA9PT0gbmV3SXNFeHBhbmRlZCkgeyByZXR1cm4gfVxuXG4gICAgICAgIGNvbnN0IG9uT3BlbiA9IGZldGNoRGF0YSh7IHBhZ2U6IDEgfSlcblxuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ6IG5ld0lzRXhwYW5kZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3SXNFeHBhbmRlZCA/IG9uT3BlbiA6IG9uQ2xvc2UsXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0L3QsNC20LDRgtC40LUg0L3QsCDQutC90L7Qv9C60YNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGhhbmRsZUJ1dHRvbkNsaWNrKCkge1xuICAgICAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IHsgaXNFeHBhbmRlZCB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUG9wVXBWaXNpb24oIWlzRXhwYW5kZWQpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0YTQvtGA0LrRg9GBINC90LAg0LjQvdC/0YPRgtC1XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dEZvY3VzKCkge1xuICAgICAgICB0aGlzLmNoYW5nZVBvcFVwVmlzaW9uKHRydWUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQutGA0YvQstCw0LXRgiBwb3BVcFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGlkZU9wdGlvbnNMaXN0KCkge1xuICAgICAgICB0aGlzLmNoYW5nZVBvcFVwVmlzaW9uKGZhbHNlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0LLQvdCw0LLQu9C40LLQsNC10YIg0L3QvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INC40L3Qv9GD0YLQsFxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSAtINC90L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TmV3VmFsdWUobmV3VmFsdWU6IFN0YXRlWyd2YWx1ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINCy0YvQsdGA0LDQvdC90YvQtSDRjdC70LXQvNC10L3RgtGLXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkKGU6IEV2ZW50KSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgeyBkaXNhYmxlZCwgb25DaGFuZ2UsIG9uQmx1ciB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgfSlcbiAgICAgICAgb25DaGFuZ2UobnVsbClcbiAgICAgICAgb25CbHVyKG51bGwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC/0L7QuNGB0Log0Y3Qu9C10LzQtdC90YLQvtCyINC00LvRjyBwb3BVcCwg0LXRgdC70Lgg0YPRgdGC0LDQvdC+0LLQu9C10L0g0YTQuNC70YzRgtGAXG4gICAgICogQHBhcmFtIGlucHV0IC0g0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0L/QvtC40YHQutCwXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZWxheVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBoYW5kbGVEYXRhU2VhcmNoOiBQcm9wc1snb25TZWFyY2gnXSA9IChpbnB1dCwgZGVsYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgb25TZWFyY2gsIGZpbHRlciwgb3B0aW9ucywgbGFiZWxGaWVsZElkIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckZ1bmMgPSAoaXRlbTogVE9wdGlvbikgPT4gKFN0cmluZy5wcm90b3R5cGVbZmlsdGVyIGFzIGFueV0gYXMgYW55KS5jYWxsKGl0ZW0sIGlucHV0KVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoaXRlbSA9PiBmaWx0ZXJGdW5jKGl0ZW1bbGFiZWxGaWVsZElkIGFzIGtleW9mIFRPcHRpb25dLnRvU3RyaW5nKCkpKVxuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlYXJjaChpbnB1dCwgZGVsYXkgPT09IGZhbHNlID8gZGVsYXkgOiB0cnVlLCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINCy0YvQsdGA0LDQvdC90YvQuSDRjdC70LXQvNC10L3RglxuICAgICAqIEBwYXJhbSBpdGVtIC0g0Y3Qu9C10LzQtdC90YIg0LzQsNGB0YHQuNCy0LAgb3B0aW9uc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaW5zZXJ0U2VsZWN0ZWQoaXRlbTogVE9wdGlvbikge1xuICAgICAgICBjb25zdCB7IG9uQ2hhbmdlLCBvbkJsdXIgfSA9IHRoaXMucHJvcHNcbiAgICAgICAgY29uc3QgeyBzZWxlY3RlZDogc3RhdGVTZWxlY3RlZCwgaGFzQ2hlY2tib3hlcyB9ID0gdGhpcy5zdGF0ZVxuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBbaXRlbV1cbiAgICAgICAgbGV0IHZhbHVlOiBUT3B0aW9uIHwgVE9wdGlvbltdID0gaXRlbVxuXG4gICAgICAgIGlmIChoYXNDaGVja2JveGVzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IFsuLi4oc3RhdGVTZWxlY3RlZCB8fCBbXSksIGl0ZW1dXG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUpXG4gICAgICAgICAgICBvbkJsdXIodmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0LjQt9C80LXQvdC10L3QuNC1INC40L3Qv9GD0YLQsFxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSAtINC90L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UobmV3VmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB7IHNlYXJjaEJ5VGFwLCBvbkNoYW5nZSwgb25JbnB1dCwgcmVzZXRPbkJsdXIgfSA9IHRoaXMucHJvcHNcblxuICAgICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKVxuXG4gICAgICAgIGlmICghc2VhcmNoQnlUYXApIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YVNlYXJjaChuZXdWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc2V0T25CbHVyKSB7XG4gICAgICAgICAgICBvbkNoYW5nZShuZXdWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0KG5ld1ZhbHVlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDQv9C+0LjRgdC6INC/0L4g0L3QsNC20LDRgtC40Y5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGhhbmRsZVNlYXJjaEJ1dHRvbigpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRGF0YVNlYXJjaCh2YWx1ZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGH0LjRidCw0LXRgiDQuNC90L/Rg9GCINC4INGA0LXQt9GD0LvRjNGC0LDRgtGLINC/0L7QuNGB0LrQsFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY2xlYXJTZWFyY2hGaWVsZCgpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDQstGL0LHQvtGAINGN0LvQtdC80LXQvdGC0LAg0LjQtyBwb3BVcFxuICAgICAqIEBwYXJhbSBpdGVtIC0g0Y3Qu9C10LzQtdC90YIg0LzQsNGB0YHQuNCy0LAgb3B0aW9uc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGFuZGxlSXRlbVNlbGVjdChpdGVtOiBUT3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgY2xvc2VQb3B1cE9uU2VsZWN0IH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgdGhpcy5pbnNlcnRTZWxlY3RlZChpdGVtKVxuXG4gICAgICAgIGlmIChjbG9zZVBvcHVwT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU9wdGlvbnNMaXN0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2hGaWVsZCgpXG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICh0aGlzLmNvbnRyb2wgYXMgYW55KS5mb2N1cygpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0L/QvtCy0LXQtNC10L3QuNC1INC40L3Qv9GD0YLQsCDQv9GA0Lgg0L/QvtGC0LXRgNC4INGE0L7QutGD0YHQsCwg0LXRgdC70Lgg0LXRgdGC0YwgcmVzZXRPbkJsdXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGhhbmRsZVJlc2V0T25CbHVyKCkge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGVkIH0gPSB0aGlzLnN0YXRlXG4gICAgICAgIGNvbnN0IHsgcmVzZXRPbkJsdXIsIG9wdGlvbnMgfSA9IHRoaXMucHJvcHNcblxuICAgICAgICBpZiAocmVzZXRPbkJsdXIgJiYgIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0LrQu9C40Log0LfQsCDQv9GA0LXQtNC10LvRiyDQutC+0LzQv9C+0L3QtdC90YLQsFxuICAgICAqINCy0YvQt9GL0LLQsNC10YLRgdGPINCx0LjQsdC70LjQvtGC0LXQutC+0LkgcmVhY3Qtb25jbGlja291dHNpZGVcbiAgICAgKi9cbiAgICBoYW5kbGVDbGlja091dHNpZGUoKSB7XG4gICAgICAgIGNvbnN0IHsgb25CbHVyLCB2YWx1ZSB9ID0gdGhpcy5wcm9wc1xuICAgICAgICBjb25zdCB7IGlzRXhwYW5kZWQgfSA9IHRoaXMuc3RhdGVcblxuICAgICAgICBpZiAoaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlT3B0aW9uc0xpc3QoKVxuICAgICAgICAgICAgb25CbHVyKHZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlT25CbHVyKGU6IEZvY3VzRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICB0aGlzLmhhbmRsZVJlc2V0T25CbHVyKClcbiAgICB9XG5cbiAgICBzZXRDb250cm9sUmVmKGVsOiBIVE1MQnV0dG9uRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSBlbFxuICAgIH1cblxuICAgIHJlbmRlclBsYWNlaG9sZGVyKCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzZWxlY3RGb3JtYXQgPSAn0J7QsdGK0LXQutGC0L7QsiB7c2l6ZX0g0YjRgicsXG4gICAgICAgICAgICBzZWxlY3RGb3JtYXRPbmUgPSAnJyxcbiAgICAgICAgICAgIHNlbGVjdEZvcm1hdEZldyA9ICcnLFxuICAgICAgICAgICAgc2VsZWN0Rm9ybWF0TWFueSA9ICcnLFxuICAgICAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWQsIGhhc0NoZWNrYm94ZXMgfSA9IHRoaXMuc3RhdGVcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IHNlbGVjdGVkLmxlbmd0aFxuICAgICAgICBsZXQgdGV4dFxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc0VtcHR5KHNlbGVjdEZvcm1hdE9uZSkgJiZcbiAgICAgICAgICAgICFpc0VtcHR5KHNlbGVjdEZvcm1hdEZldykgJiZcbiAgICAgICAgICAgICFpc0VtcHR5KHNlbGVjdEZvcm1hdE1hbnkpICYmXG4gICAgICAgICAgICBzZWxlY3RlZENvdW50ID49IDEgJiZcbiAgICAgICAgICAgIGhhc0NoZWNrYm94ZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0ZXh0ID0gZ2V0Tm91bihcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50LFxuICAgICAgICAgICAgICAgIHNlbGVjdEZvcm1hdE9uZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RGb3JtYXRGZXcsXG4gICAgICAgICAgICAgICAgc2VsZWN0Rm9ybWF0TWFueSxcbiAgICAgICAgICAgICkucmVwbGFjZSgne3NpemV9JywgYCR7c2VsZWN0ZWRDb3VudH1gKVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ291bnQgPj0gMSAmJiBoYXNDaGVja2JveGVzKSB7XG4gICAgICAgICAgICB0ZXh0ID0gc2VsZWN0Rm9ybWF0LnJlcGxhY2UoJ3tzaXplfScsIGAke3NlbGVjdGVkQ291bnR9YClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHQgPSBudWxsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dFxuICAgIH1cblxuICAgIHJlbmRlclZhbHVlKCkge1xuICAgICAgICBjb25zdCB7IGxhYmVsRmllbGRJZCwgcGxhY2Vob2xkZXIgPSAnJyB9ID0gdGhpcy5wcm9wc1xuICAgICAgICBjb25zdCB7IHNlbGVjdGVkIH0gPSB0aGlzLnN0YXRlXG5cbiAgICAgICAgaWYgKGlzRW1wdHkoc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXJcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtzZWxlY3RlZEVsZW1lbnRdID0gc2VsZWN0ZWRcblxuICAgICAgICByZXR1cm4gZ2V0KHNlbGVjdGVkRWxlbWVudCwgbGFiZWxGaWVsZElkKVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbG9hZGluZyxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHZhbHVlRmllbGRJZCxcbiAgICAgICAgICAgIGxhYmVsRmllbGRJZCxcbiAgICAgICAgICAgIGljb25GaWVsZElkLFxuICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICBkaXNhYmxlZFZhbHVlcyxcbiAgICAgICAgICAgIGVuYWJsZWRGaWVsZElkLFxuICAgICAgICAgICAgaW1hZ2VGaWVsZElkLFxuICAgICAgICAgICAgc3RhdHVzRmllbGRJZCxcbiAgICAgICAgICAgIGdyb3VwRmllbGRJZCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uRmllbGRJZCxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgYmFkZ2UsXG4gICAgICAgICAgICBmZXRjaERhdGEsXG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgaGFzU2VhcmNoLFxuICAgICAgICAgICAgY2xlYW5hYmxlLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgIH0gPSB0aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IGlucHV0U2VsZWN0U3R5bGUgPSB7IHdpZHRoOiAnMTAwJScsIC4uLnN0eWxlIH1cblxuICAgICAgICBjb25zdCB7IHNlbGVjdGVkLCBpc0V4cGFuZGVkLCBoYXNDaGVja2JveGVzLCB2YWx1ZSwgb3B0aW9ucyB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIGNvbnN0IHRpdGxlID0gZ2V0KGZpcnN0KHNlbGVjdGVkKSwgYCR7bGFiZWxGaWVsZElkfWApXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJuMm8taW5wdXQtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgb25CbHVyPXt0aGlzLmhhbmRsZU9uQmx1cn1cbiAgICAgICAgICAgICAgICByZWY9e3RoaXMubjJvU2VsZWN0UmVmfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gaW5uZXJSZWY9e3RoaXMuc2V0Q29udHJvbFJlZn0gb25DbGljaz17dGhpcy5oYW5kbGVCdXR0b25DbGlja30+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFNlbGVjdEdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e2lzRXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkZpZWxkSWQ9e2ljb25GaWVsZElkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VGaWVsZElkPXtpbWFnZUZpZWxkSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhbmFibGU9e2NsZWFuYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXJDbGljaz17dGhpcy5jbGVhclNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ2YWx1ZVRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoZWNrYm94ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucmVuZGVyVmFsdWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9JbnB1dFNlbGVjdEdyb3VwPlxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxQb3B1cCBpc0V4cGFuZGVkPXtpc0V4cGFuZGVkfSBpbnB1dFNlbGVjdD17dGhpcy5uMm9TZWxlY3RSZWYuY3VycmVudH0+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aGFzU2VhcmNoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TjJPU2VsZWN0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e3RoaXMuaGFuZGxlU2VhcmNoQnV0dG9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8UG9wdXBMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkSWQ9e3ZhbHVlRmllbGRJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbEZpZWxkSWQ9e2xhYmVsRmllbGRJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uRmllbGRJZD17aWNvbkZpZWxkSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VGaWVsZElkPXtpbWFnZUZpZWxkSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzRmllbGRJZD17c3RhdHVzRmllbGRJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRnZT17YmFkZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25GaWVsZElkPXtkZXNjcmlwdGlvbkZpZWxkSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEZpZWxkSWQ9e2VuYWJsZWRGaWVsZElkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLmhhbmRsZUl0ZW1TZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hEYXRhPXtmZXRjaERhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZT17cGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtpc0V4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFZhbHVlcz17ZGlzYWJsZWRWYWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZElkPXtncm91cEZpZWxkSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hlY2tib3hlcz17aGFzQ2hlY2tib3hlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlbW92ZUl0ZW09e3RoaXMucmVtb3ZlU2VsZWN0ZWRJdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD17Zm9ybWF0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICA8L1BvcHVwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBjbGVhbmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlRmllbGRJZDogJ2lkJyxcbiAgICAgICAgbGFiZWxGaWVsZElkOiAnbmFtZScsXG4gICAgICAgIGljb25GaWVsZElkOiAnaWNvbicsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIGRpc2FibGVkVmFsdWVzOiBbXSxcbiAgICAgICAgcmVzZXRPbkJsdXI6IGZhbHNlLFxuICAgICAgICBzZWFyY2hCeVRhcDogZmFsc2UsXG4gICAgICAgIGhhc1NlYXJjaDogZmFsc2UsXG4gICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICB2YWx1ZToge30sXG4gICAgICAgIGRlc2NyaXB0aW9uRmllbGRJZDogJycsXG4gICAgICAgIGVuYWJsZWRGaWVsZElkOiAnJyxcbiAgICAgICAgc3RhdHVzRmllbGRJZDogJycsXG4gICAgICAgIGdyb3VwRmllbGRJZDogJycsXG4gICAgICAgIGltYWdlRmllbGRJZDogJycsXG4gICAgICAgIGNsb3NlUG9wdXBPblNlbGVjdDogdHJ1ZSxcbiAgICAgICAgb25TZWFyY2goKSB7fSxcbiAgICAgICAgb25DaGFuZ2UoKSB7fSxcbiAgICAgICAgZmV0Y2hEYXRhOiAoKSA9PiAoKSA9PiB7fSxcbiAgICAgICAgb25JbnB1dCgpIHt9LFxuICAgICAgICBvbkNsb3NlKCkge30sXG4gICAgICAgIG9uQmx1cigpIHt9LFxuICAgIH0gYXMgUHJvcHNcbn1cblxudHlwZSBQcm9wcyA9IHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0LTQu9GPIGJhZGdlXG4gICAgICovXG4gICAgYmFkZ2U/OiBCYWRnZVR5cGUsXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICAgIGNsZWFuYWJsZTogYm9vbGVhbixcbiAgICBjbG9zZVBvcHVwT25TZWxlY3Q6IGJvb2xlYW4sXG4gICAgZGVzY3JpcHRpb25GaWVsZElkOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICog0KTQu9Cw0LMg0LDQutGC0LjQstC90L7RgdGC0LhcbiAgICAgKi9cbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiDQndC10LDQutGC0LjQstC90YvQtSDQtNCw0L3QvdGL0LVcbiAgICAgKi9cbiAgICBkaXNhYmxlZFZhbHVlczogW10sXG4gICAgLyoqXG4gICAgICog0JrQu9GO0YcgZW5hYmxlZCDQsiDQtNCw0L3QvdGL0YVcbiAgICAgKi9cbiAgICBlbmFibGVkRmllbGRJZDogc3RyaW5nLFxuICAgIGZldGNoRGF0YShhcmc6IG9iamVjdCk6ICgpID0+IHZvaWQsXG4gICAgLyoqXG4gICAgICog0KTQuNC70YzRgtGA0LDRhtC40Y9cbiAgICAgKi9cbiAgICBmaWx0ZXI/OiBGaWx0ZXIsXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQsNGCXG4gICAgICovXG4gICAgZm9ybWF0Pzogc3RyaW5nLFxuICAgIGdyb3VwRmllbGRJZDogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqINCk0LvQsNCzINC90LDQu9C40YfQuNGPINC/0L7QuNGB0LrQsFxuICAgICAqL1xuICAgIGhhc1NlYXJjaDogYm9vbGVhbixcbiAgICAvKipcbiAgICAgKiDQmtC70Y7RhyBpY29uINCyINC00LDQvdC90YvRhVxuICAgICAqL1xuICAgIGljb25GaWVsZElkOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICog0JrQu9GO0YcgaW1hZ2Ug0LIg0LTQsNC90L3Ri9GFXG4gICAgICovXG4gICAgaW1hZ2VGaWVsZElkOiBzdHJpbmcsXG4gICAgaW5pdGlhbD86IHN0cmluZyB8IG51bWJlcixcbiAgICAvKipcbiAgICAgKiDQmtC70Y7RhyBsYWJlbCDQsiDQtNCw0L3QvdGL0YVcbiAgICAgKi9cbiAgICBsYWJlbEZpZWxkSWQ6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiDQpNC70LDQsyDQt9Cw0LPRgNGD0LfQutC4XG4gICAgICovXG4gICAgbG9hZGluZzogYm9vbGVhbixcbiAgICBvbkJsdXIoYXJnOiBQcm9wc1sndmFsdWUnXSk6IHZvaWQsXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sg0L3QsCDQuNC30LzQtdC90LXQvdC40LVcbiAgICAgKi9cbiAgICBvbkNoYW5nZShhcmc6IFRPcHRpb24gfCBUT3B0aW9uW10gfCBudWxsIHwgc3RyaW5nKTogdm9pZCxcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayDQvdCwINC30LDQutGA0YvRgtC40LUg0L/QvtC/0LDQv9CwXG4gICAgICovXG4gICAgb25DbG9zZSgpOiB2b2lkLFxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrINC/0YDQuCDQstCy0L7QtNC1INCyINC40L3Qv9GD0YJcbiAgICAgKi9cbiAgICBvbklucHV0KGlucHV0OiBzdHJpbmcpOiB2b2lkLFxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrINC90LAg0L/QvtC40YHQulxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25TZWFyY2goaW5wdXQ6IFN0YXRlWydpbnB1dCddLCBkZWxheT86IGJvb2xlYW4sIGNhbGxiYWNrPzogYW55KTogdm9pZCxcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LVcbiAgICAgKi9cbiAgICBvcHRpb25zOiBUT3B0aW9uW10sXG4gICAgcGFnZT86IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBQbGFjZWhvbGRlciDQutC+0L3RgtGA0L7Qu9CwXG4gICAgICovXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICog0KHQsdGA0L7RgSDQt9C90LDRh9C10L3QuNGPINC/0YDQuCDQv9C+0YLQtdGA0LUg0YTQvtC60YPRgdCwXG4gICAgICovXG4gICAgcmVzZXRPbkJsdXI6IGJvb2xlYW4sXG4gICAgLyoqXG4gICAgICog0J/QvtC40YHQuiDQv9C+INC90LDQttCw0YLQuNGOINC60L3QvtC/0LrQuFxuICAgICAqL1xuICAgIHNlYXJjaEJ5VGFwOiBib29sZWFuLFxuICAgIHNlbGVjdEZvcm1hdD86IHN0cmluZyxcbiAgICBzZWxlY3RGb3JtYXRGZXc/OiBzdHJpbmcsXG4gICAgc2VsZWN0Rm9ybWF0TWFueT86IHN0cmluZyxcbiAgICBzZWxlY3RGb3JtYXRPbmU/OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICog0JrQu9GO0YcgaW1hZ2Ug0LIg0LTQsNC90L3Ri9GFXG4gICAgICovXG4gICAgc3RhdHVzRmllbGRJZDogc3RyaW5nLFxuICAgIHN0eWxlPzogb2JqZWN0LFxuICAgIHR5cGU/OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICog0JfQvdCw0YfQtdC90LjQtVxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IGFueSxcbiAgICAvKipcbiAgICAgKiDQmtC70Y7RhyBpZCDQsiDQtNCw0L3QvdGL0YVcbiAgICAgKi9cbiAgICB2YWx1ZUZpZWxkSWQ6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgU2VsZWN0ID0gb25DbGlja091dHNpZGUoU2VsZWN0Q29tcG9uZW50KVxuIl19
|