@kaspernj/api-maker 1.0.2017 → 1.0.2019
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/build/table/filters/index.js +2 -5
- package/build/table/table.js +9 -4
- package/build/use-styles.js +26 -16
- package/package.json +1 -1
- package/src/table/filters/index.jsx +1 -3
- package/src/table/table.jsx +10 -3
- package/src/use-styles.js +30 -18
|
@@ -7,16 +7,13 @@ import LoadSearchModal from "./load-search-modal";
|
|
|
7
7
|
import SaveSearchModal from "./save-search-modal";
|
|
8
8
|
import Params from "../../params";
|
|
9
9
|
import PropTypes from "prop-types";
|
|
10
|
-
import
|
|
10
|
+
import { TableSearch } from "models";
|
|
11
11
|
import memo from "set-state-compare/src/memo";
|
|
12
12
|
import { shapeComponent } from "set-state-compare/src/shape-component";
|
|
13
13
|
import React from "react";
|
|
14
14
|
import useI18n from "i18n-on-steroids/src/use-i18n";
|
|
15
15
|
import useQueryParams from "on-location-changed/build/use-query-params";
|
|
16
16
|
import { View } from "react-native";
|
|
17
|
-
const {
|
|
18
|
-
TableSearch
|
|
19
|
-
} = models;
|
|
20
17
|
export default memo(shapeComponent(class ApiMakerTableFilters extends BaseComponent {
|
|
21
18
|
static propTypes = {
|
|
22
19
|
currentUser: PropTypes.object,
|
|
@@ -181,4 +178,4 @@ export default memo(shapeComponent(class ApiMakerTableFilters extends BaseCompon
|
|
|
181
178
|
};
|
|
182
179
|
hasAnyFilters = () => Object.keys(this.currentFilters()).length > 0;
|
|
183
180
|
}));
|
|
184
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29tcG9uZW50IiwiZGlnZyIsImRpZ3MiLCJGaWx0ZXIiLCJGaWx0ZXJGb3JtIiwiTG9hZFNlYXJjaE1vZGFsIiwiU2F2ZVNlYXJjaE1vZGFsIiwiUGFyYW1zIiwiUHJvcFR5cGVzIiwibW9kZWxzIiwibWVtbyIsInNoYXBlQ29tcG9uZW50IiwiUmVhY3QiLCJ1c2VJMThuIiwidXNlUXVlcnlQYXJhbXMiLCJWaWV3IiwiVGFibGVTZWFyY2giLCJBcGlNYWtlclRhYmxlRmlsdGVycyIsInByb3BUeXBlcyIsImN1cnJlbnRVc2VyIiwib2JqZWN0IiwibW9kZWxDbGFzcyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwicXVlcnlOYW1lIiwic3RyaW5nIiwicXVlcnlTTmFtZSIsInNldHVwIiwidCIsIm5hbWVzcGFjZSIsInF1ZXJ5UGFyYW1zIiwidXNlU3RhdGVzIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwic2hvd0xvYWRTZWFyY2hNb2RhbCIsInNob3dTYXZlU2VhcmNoTW9kYWwiLCJyZW5kZXIiLCJwcm9wcyIsInN0YXRlIiwiY3VycmVudEZpbHRlcnMiLCJjcmVhdGVFbGVtZW50IiwiZGF0YVNldCIsImNsYXNzIiwic3R5bGUiLCJhbGlnbkl0ZW1zIiwia2V5IiwiZmlsdGVySW5kZXgiLCJvbkFwcGx5Q2xpY2tlZCIsInF1ZXJ5U2VhcmNoTmFtZSIsIm9uRWRpdFNlYXJjaFByZXNzZWQiLCJvblJlcXVlc3RDbG9zZSIsInNlYXJjaCIsIm1hcCIsImZpbHRlckRhdGEiLCJfZXh0ZW5kcyIsIm9uQ2xpY2siLCJ0dCIsIm9uRmlsdGVyQ2xpY2tlZCIsIm9uUmVtb3ZlQ2xpY2tlZCIsImNsYXNzTmFtZSIsImZsZXhEaXJlY3Rpb24iLCJtYXJnaW5Ub3AiLCJvbkFkZEZpbHRlckNsaWNrZWQiLCJkZWZhdWx0VmFsdWUiLCJGcmFnbWVudCIsIm9uU2F2ZVNlYXJjaENsaWNrZWQiLCJtYXJnaW5MZWZ0Iiwib25Mb2FkU2VhcmNoQ2xpY2tlZCIsImN1cnJlbnRGaWx0ZXIiLCJKU09OIiwicGFyc2UiLCJlIiwicHJldmVudERlZmF1bHQiLCJuZXdGaWx0ZXJJbmRleCIsImxlbmd0aCIsInNldFN0YXRlIiwib25SZXF1ZXN0Q2xvc2VMb2FkU2VhcmNoTW9kYWwiLCJzZWFyY2hQYXJhbXMiLCJuZXdQYXJhbXMiLCJjaGFuZ2VQYXJhbXMiLCJvblJlcXVlc3RDbG9zZVNhdmVTZWFyY2hNb2RhbCIsImhhc0FueUZpbHRlcnMiLCJGbGFzaE1lc3NhZ2UiLCJhbGVydCIsIk9iamVjdCIsImtleXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvZmlsdGVycy9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uLy4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgRmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiXG5pbXBvcnQgRmlsdGVyRm9ybSBmcm9tIFwiLi9maWx0ZXItZm9ybVwiXG5pbXBvcnQgTG9hZFNlYXJjaE1vZGFsIGZyb20gXCIuL2xvYWQtc2VhcmNoLW1vZGFsXCJcbmltcG9ydCBTYXZlU2VhcmNoTW9kYWwgZnJvbSBcIi4vc2F2ZS1zZWFyY2gtbW9kYWxcIlxuaW1wb3J0IFBhcmFtcyBmcm9tIFwiLi4vLi4vcGFyYW1zXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0ICogYXMgbW9kZWxzIGZyb20gXCJtb2RlbHNcIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9tZW1vXCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvc2hhcGUtY29tcG9uZW50XCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHVzZUkxOG4gZnJvbSBcImkxOG4tb24tc3Rlcm9pZHMvc3JjL3VzZS1pMThuXCJcbmltcG9ydCB1c2VRdWVyeVBhcmFtcyBmcm9tIFwib24tbG9jYXRpb24tY2hhbmdlZC9idWlsZC91c2UtcXVlcnktcGFyYW1zXCJcbmltcG9ydCB7Vmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5cbmNvbnN0IHtUYWJsZVNlYXJjaH0gPSBtb2RlbHNcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBBcGlNYWtlclRhYmxlRmlsdGVycyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGN1cnJlbnRVc2VyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcXVlcnlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcXVlcnlTTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnRhYmxlLmZpbHRlcnNcIn0pXG5cbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuICAgIHRoaXMudCA9IHRcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBmaWx0ZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dMb2FkU2VhcmNoTW9kYWw6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dTYXZlU2VhcmNoTW9kYWw6IGZhbHNlXG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzcywgcXVlcnlTTmFtZX0gPSBkaWdzKHRoaXMucHJvcHMsIFwibW9kZWxDbGFzc1wiLCBcInF1ZXJ5U05hbWVcIilcbiAgICBjb25zdCB7Y3VycmVudFVzZXJ9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtmaWx0ZXIsIHNob3dMb2FkU2VhcmNoTW9kYWwsIHNob3dTYXZlU2VhcmNoTW9kYWx9ID0gZGlncyh0aGlzLnN0YXRlLCBcImZpbHRlclwiLCBcInNob3dMb2FkU2VhcmNoTW9kYWxcIiwgXCJzaG93U2F2ZVNlYXJjaE1vZGFsXCIpXG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLmN1cnJlbnRGaWx0ZXJzKClcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBkYXRhU2V0PXt7Y2xhc3M6IFwiYXBpLW1ha2VyLS10YWJsZS0tZmlsdGVyc1wifX0gc3R5bGU9e3thbGlnbkl0ZW1zOiBcImZsZXgtc3RhcnRcIn19PlxuICAgICAgICB7ZmlsdGVyICYmXG4gICAgICAgICAgPEZpbHRlckZvcm1cbiAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAga2V5PXtgZmlsdGVyLSR7ZmlsdGVyLmZpbHRlckluZGV4fWB9XG4gICAgICAgICAgICBtb2RlbENsYXNzPXttb2RlbENsYXNzfVxuICAgICAgICAgICAgb25BcHBseUNsaWNrZWQ9e2RpZ2codGhpcywgXCJvbkFwcGx5Q2xpY2tlZFwiKX1cbiAgICAgICAgICAgIHF1ZXJ5U2VhcmNoTmFtZT17cXVlcnlTTmFtZX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHtzaG93TG9hZFNlYXJjaE1vZGFsICYmXG4gICAgICAgICAgPExvYWRTZWFyY2hNb2RhbFxuICAgICAgICAgICAgY3VycmVudFVzZXI9e2N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgbW9kZWxDbGFzcz17bW9kZWxDbGFzc31cbiAgICAgICAgICAgIG9uRWRpdFNlYXJjaFByZXNzZWQ9e2RpZ2codGhpcywgXCJvbkVkaXRTZWFyY2hQcmVzc2VkXCIpfVxuICAgICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e2RpZ2codGhpcywgXCJvblJlcXVlc3RDbG9zZUxvYWRTZWFyY2hNb2RhbFwiKX1cbiAgICAgICAgICAgIHF1ZXJ5U2VhcmNoTmFtZT17cXVlcnlTTmFtZX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHtzaG93U2F2ZVNlYXJjaE1vZGFsICYmXG4gICAgICAgICAgPFNhdmVTZWFyY2hNb2RhbFxuICAgICAgICAgICAgY3VycmVudEZpbHRlcnM9e2RpZ2codGhpcywgXCJjdXJyZW50RmlsdGVyc1wiKX1cbiAgICAgICAgICAgIGN1cnJlbnRVc2VyPXtjdXJyZW50VXNlcn1cbiAgICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXtkaWdnKHRoaXMsIFwib25SZXF1ZXN0Q2xvc2VTYXZlU2VhcmNoTW9kYWxcIil9XG4gICAgICAgICAgICBzZWFyY2g9e3Nob3dTYXZlU2VhcmNoTW9kYWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7Y3VycmVudEZpbHRlcnM/Lm1hcCgoZmlsdGVyRGF0YSwgZmlsdGVySW5kZXgpID0+XG4gICAgICAgICAgPEZpbHRlclxuICAgICAgICAgICAga2V5PXtmaWx0ZXJJbmRleH1cbiAgICAgICAgICAgIGZpbHRlckluZGV4PXtmaWx0ZXJJbmRleH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudHQub25GaWx0ZXJDbGlja2VkfVxuICAgICAgICAgICAgb25SZW1vdmVDbGlja2VkPXt0aGlzLnR0Lm9uUmVtb3ZlQ2xpY2tlZH1cbiAgICAgICAgICAgIHsuLi5maWx0ZXJEYXRhfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxWaWV3IGNsYXNzTmFtZT1cImZpbHRlci1hY3Rpb25zXCIgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBtYXJnaW5Ub3A6IDEwfX0+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJhZGQtbmV3LWZpbHRlci1idXR0b25cIiBvbkNsaWNrPXt0aGlzLnR0Lm9uQWRkRmlsdGVyQ2xpY2tlZH0+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmFkZF9uZXdfZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiQWRkIG5ldyBmaWx0ZXJcIn0pfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHtjdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJzYXZlLXNlYXJjaC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLnR0Lm9uU2F2ZVNlYXJjaENsaWNrZWR9IHN0eWxlPXt7bWFyZ2luTGVmdDogMTB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy50KFwiLnNhdmVfc2VhcmNoXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2F2ZSBzZWFyY2hcIn0pfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJsb2FkLXNlYXJjaC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLnR0Lm9uTG9hZFNlYXJjaENsaWNrZWR9IHN0eWxlPXt7bWFyZ2luTGVmdDogMTB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRfc2VhcmNoXCIsIHtkZWZhdWx0VmFsdWU6IFwiTG9hZCBzZWFyY2hcIn0pfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGN1cnJlbnRGaWx0ZXJzID0gKCkgPT4ge1xuICAgIGNvbnN0IHtxdWVyeVNOYW1lfSA9IGRpZ3ModGhpcy5wcm9wcywgXCJxdWVyeVNOYW1lXCIpXG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLnF1ZXJ5UGFyYW1zW3F1ZXJ5U05hbWVdIHx8IFtdXG5cbiAgICByZXR1cm4gY3VycmVudEZpbHRlcnMubWFwKChjdXJyZW50RmlsdGVyKSA9PiBKU09OLnBhcnNlKGN1cnJlbnRGaWx0ZXIpKVxuICB9XG5cbiAgb25BZGRGaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIGNvbnN0IG5ld0ZpbHRlckluZGV4ID0gdGhpcy5jdXJyZW50RmlsdGVycygpLmxlbmd0aFxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgZmlsdGVySW5kZXg6IG5ld0ZpbHRlckluZGV4XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uQXBwbHlDbGlja2VkID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7ZmlsdGVyOiB1bmRlZmluZWR9KVxuXG4gIG9uRWRpdFNlYXJjaFByZXNzZWQgPSAoe3NlYXJjaH0pID0+IHtcbiAgICB0aGlzLm9uUmVxdWVzdENsb3NlTG9hZFNlYXJjaE1vZGFsKClcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNob3dTYXZlU2VhcmNoTW9kYWw6IHNlYXJjaFxuICAgIH0pXG4gIH1cblxuICBvbkZpbHRlckNsaWNrZWQgPSAoZmlsdGVyKSA9PiB0aGlzLnNldFN0YXRlKHtmaWx0ZXJ9KVxuXG4gIG9uTG9hZFNlYXJjaENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzaG93TG9hZFNlYXJjaE1vZGFsOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIG9uUmVtb3ZlQ2xpY2tlZCA9ICh7ZmlsdGVySW5kZXh9KSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5U05hbWV9ID0gZGlncyh0aGlzLnByb3BzLCBcInF1ZXJ5U05hbWVcIilcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBQYXJhbXMucGFyc2UoKVtxdWVyeVNOYW1lXSB8fCB7fVxuXG4gICAgZGVsZXRlIHNlYXJjaFBhcmFtc1tmaWx0ZXJJbmRleF1cblxuICAgIGNvbnN0IG5ld1BhcmFtcyA9IHt9XG5cbiAgICBuZXdQYXJhbXNbcXVlcnlTTmFtZV0gPSBzZWFyY2hQYXJhbXNcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMobmV3UGFyYW1zKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBmaWx0ZXI6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RDbG9zZUxvYWRTZWFyY2hNb2RhbCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Nob3dMb2FkU2VhcmNoTW9kYWw6IGZhbHNlfSlcbiAgb25SZXF1ZXN0Q2xvc2VTYXZlU2VhcmNoTW9kYWwgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtzaG93U2F2ZVNlYXJjaE1vZGFsOiB1bmRlZmluZWR9KVxuXG4gIG9uU2F2ZVNlYXJjaENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgaWYgKHRoaXMuaGFzQW55RmlsdGVycygpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93U2F2ZVNlYXJjaE1vZGFsOiBuZXcgVGFibGVTZWFyY2goKX0pXG4gICAgfSBlbHNlIHtcbiAgICAgIEZsYXNoTWVzc2FnZS5hbGVydCh0aGlzLnQoXCIubm9fZmlsdGVyc19oYXNfYmVlbl9zZXRcIiwge2RlZmF1bHRWYWx1ZTogXCJObyBmaWx0ZXJzIGhhcyBiZWVuIHNldFwifSkpXG4gICAgfVxuICB9XG5cbiAgaGFzQW55RmlsdGVycyA9ICgpID0+IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudEZpbHRlcnMoKSkubGVuZ3RoID4gMFxufSkpXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxhQUFhLE1BQU0sc0JBQXNCO0FBQ2hELFNBQVFDLElBQUksRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDcEMsT0FBT0MsTUFBTSxNQUFNLFVBQVU7QUFDN0IsT0FBT0MsVUFBVSxNQUFNLGVBQWU7QUFDdEMsT0FBT0MsZUFBZSxNQUFNLHFCQUFxQjtBQUNqRCxPQUFPQyxlQUFlLE1BQU0scUJBQXFCO0FBQ2pELE9BQU9DLE1BQU0sTUFBTSxjQUFjO0FBQ2pDLE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU8sS0FBS0MsTUFBTSxNQUFNLFFBQVE7QUFDaEMsT0FBT0MsSUFBSSxNQUFNLDRCQUE0QjtBQUM3QyxTQUFRQyxjQUFjLFFBQU8sdUNBQXVDO0FBQ3BFLE9BQU9DLEtBQUssTUFBTSxPQUFPO0FBQ3pCLE9B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
|
|
181
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29tcG9uZW50IiwiZGlnZyIsImRpZ3MiLCJGaWx0ZXIiLCJGaWx0ZXJGb3JtIiwiTG9hZFNlYXJjaE1vZGFsIiwiU2F2ZVNlYXJjaE1vZGFsIiwiUGFyYW1zIiwiUHJvcFR5cGVzIiwiVGFibGVTZWFyY2giLCJtZW1vIiwic2hhcGVDb21wb25lbnQiLCJSZWFjdCIsInVzZUkxOG4iLCJ1c2VRdWVyeVBhcmFtcyIsIlZpZXciLCJBcGlNYWtlclRhYmxlRmlsdGVycyIsInByb3BUeXBlcyIsImN1cnJlbnRVc2VyIiwib2JqZWN0IiwibW9kZWxDbGFzcyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwicXVlcnlOYW1lIiwic3RyaW5nIiwicXVlcnlTTmFtZSIsInNldHVwIiwidCIsIm5hbWVzcGFjZSIsInF1ZXJ5UGFyYW1zIiwidXNlU3RhdGVzIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwic2hvd0xvYWRTZWFyY2hNb2RhbCIsInNob3dTYXZlU2VhcmNoTW9kYWwiLCJyZW5kZXIiLCJwcm9wcyIsInN0YXRlIiwiY3VycmVudEZpbHRlcnMiLCJjcmVhdGVFbGVtZW50IiwiZGF0YVNldCIsImNsYXNzIiwic3R5bGUiLCJhbGlnbkl0ZW1zIiwia2V5IiwiZmlsdGVySW5kZXgiLCJvbkFwcGx5Q2xpY2tlZCIsInF1ZXJ5U2VhcmNoTmFtZSIsIm9uRWRpdFNlYXJjaFByZXNzZWQiLCJvblJlcXVlc3RDbG9zZSIsInNlYXJjaCIsIm1hcCIsImZpbHRlckRhdGEiLCJfZXh0ZW5kcyIsIm9uQ2xpY2siLCJ0dCIsIm9uRmlsdGVyQ2xpY2tlZCIsIm9uUmVtb3ZlQ2xpY2tlZCIsImNsYXNzTmFtZSIsImZsZXhEaXJlY3Rpb24iLCJtYXJnaW5Ub3AiLCJvbkFkZEZpbHRlckNsaWNrZWQiLCJkZWZhdWx0VmFsdWUiLCJGcmFnbWVudCIsIm9uU2F2ZVNlYXJjaENsaWNrZWQiLCJtYXJnaW5MZWZ0Iiwib25Mb2FkU2VhcmNoQ2xpY2tlZCIsImN1cnJlbnRGaWx0ZXIiLCJKU09OIiwicGFyc2UiLCJlIiwicHJldmVudERlZmF1bHQiLCJuZXdGaWx0ZXJJbmRleCIsImxlbmd0aCIsInNldFN0YXRlIiwib25SZXF1ZXN0Q2xvc2VMb2FkU2VhcmNoTW9kYWwiLCJzZWFyY2hQYXJhbXMiLCJuZXdQYXJhbXMiLCJjaGFuZ2VQYXJhbXMiLCJvblJlcXVlc3RDbG9zZVNhdmVTZWFyY2hNb2RhbCIsImhhc0FueUZpbHRlcnMiLCJGbGFzaE1lc3NhZ2UiLCJhbGVydCIsIk9iamVjdCIsImtleXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUvZmlsdGVycy9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uLy4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgRmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiXG5pbXBvcnQgRmlsdGVyRm9ybSBmcm9tIFwiLi9maWx0ZXItZm9ybVwiXG5pbXBvcnQgTG9hZFNlYXJjaE1vZGFsIGZyb20gXCIuL2xvYWQtc2VhcmNoLW1vZGFsXCJcbmltcG9ydCBTYXZlU2VhcmNoTW9kYWwgZnJvbSBcIi4vc2F2ZS1zZWFyY2gtbW9kYWxcIlxuaW1wb3J0IFBhcmFtcyBmcm9tIFwiLi4vLi4vcGFyYW1zXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtUYWJsZVNlYXJjaH0gZnJvbSBcIm1vZGVsc1wiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9zaGFwZS1jb21wb25lbnRcIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG5cIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL2J1aWxkL3VzZS1xdWVyeS1wYXJhbXNcIlxuaW1wb3J0IHtWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBBcGlNYWtlclRhYmxlRmlsdGVycyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGN1cnJlbnRVc2VyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcXVlcnlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcXVlcnlTTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnRhYmxlLmZpbHRlcnNcIn0pXG5cbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuICAgIHRoaXMudCA9IHRcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBmaWx0ZXI6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dMb2FkU2VhcmNoTW9kYWw6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dTYXZlU2VhcmNoTW9kYWw6IGZhbHNlXG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzcywgcXVlcnlTTmFtZX0gPSBkaWdzKHRoaXMucHJvcHMsIFwibW9kZWxDbGFzc1wiLCBcInF1ZXJ5U05hbWVcIilcbiAgICBjb25zdCB7Y3VycmVudFVzZXJ9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtmaWx0ZXIsIHNob3dMb2FkU2VhcmNoTW9kYWwsIHNob3dTYXZlU2VhcmNoTW9kYWx9ID0gZGlncyh0aGlzLnN0YXRlLCBcImZpbHRlclwiLCBcInNob3dMb2FkU2VhcmNoTW9kYWxcIiwgXCJzaG93U2F2ZVNlYXJjaE1vZGFsXCIpXG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLmN1cnJlbnRGaWx0ZXJzKClcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBkYXRhU2V0PXt7Y2xhc3M6IFwiYXBpLW1ha2VyLS10YWJsZS0tZmlsdGVyc1wifX0gc3R5bGU9e3thbGlnbkl0ZW1zOiBcImZsZXgtc3RhcnRcIn19PlxuICAgICAgICB7ZmlsdGVyICYmXG4gICAgICAgICAgPEZpbHRlckZvcm1cbiAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAga2V5PXtgZmlsdGVyLSR7ZmlsdGVyLmZpbHRlckluZGV4fWB9XG4gICAgICAgICAgICBtb2RlbENsYXNzPXttb2RlbENsYXNzfVxuICAgICAgICAgICAgb25BcHBseUNsaWNrZWQ9e2RpZ2codGhpcywgXCJvbkFwcGx5Q2xpY2tlZFwiKX1cbiAgICAgICAgICAgIHF1ZXJ5U2VhcmNoTmFtZT17cXVlcnlTTmFtZX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHtzaG93TG9hZFNlYXJjaE1vZGFsICYmXG4gICAgICAgICAgPExvYWRTZWFyY2hNb2RhbFxuICAgICAgICAgICAgY3VycmVudFVzZXI9e2N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgbW9kZWxDbGFzcz17bW9kZWxDbGFzc31cbiAgICAgICAgICAgIG9uRWRpdFNlYXJjaFByZXNzZWQ9e2RpZ2codGhpcywgXCJvbkVkaXRTZWFyY2hQcmVzc2VkXCIpfVxuICAgICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e2RpZ2codGhpcywgXCJvblJlcXVlc3RDbG9zZUxvYWRTZWFyY2hNb2RhbFwiKX1cbiAgICAgICAgICAgIHF1ZXJ5U2VhcmNoTmFtZT17cXVlcnlTTmFtZX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHtzaG93U2F2ZVNlYXJjaE1vZGFsICYmXG4gICAgICAgICAgPFNhdmVTZWFyY2hNb2RhbFxuICAgICAgICAgICAgY3VycmVudEZpbHRlcnM9e2RpZ2codGhpcywgXCJjdXJyZW50RmlsdGVyc1wiKX1cbiAgICAgICAgICAgIGN1cnJlbnRVc2VyPXtjdXJyZW50VXNlcn1cbiAgICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXtkaWdnKHRoaXMsIFwib25SZXF1ZXN0Q2xvc2VTYXZlU2VhcmNoTW9kYWxcIil9XG4gICAgICAgICAgICBzZWFyY2g9e3Nob3dTYXZlU2VhcmNoTW9kYWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7Y3VycmVudEZpbHRlcnM/Lm1hcCgoZmlsdGVyRGF0YSwgZmlsdGVySW5kZXgpID0+XG4gICAgICAgICAgPEZpbHRlclxuICAgICAgICAgICAga2V5PXtmaWx0ZXJJbmRleH1cbiAgICAgICAgICAgIGZpbHRlckluZGV4PXtmaWx0ZXJJbmRleH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudHQub25GaWx0ZXJDbGlja2VkfVxuICAgICAgICAgICAgb25SZW1vdmVDbGlja2VkPXt0aGlzLnR0Lm9uUmVtb3ZlQ2xpY2tlZH1cbiAgICAgICAgICAgIHsuLi5maWx0ZXJEYXRhfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxWaWV3IGNsYXNzTmFtZT1cImZpbHRlci1hY3Rpb25zXCIgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBtYXJnaW5Ub3A6IDEwfX0+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJhZGQtbmV3LWZpbHRlci1idXR0b25cIiBvbkNsaWNrPXt0aGlzLnR0Lm9uQWRkRmlsdGVyQ2xpY2tlZH0+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmFkZF9uZXdfZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiQWRkIG5ldyBmaWx0ZXJcIn0pfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHtjdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJzYXZlLXNlYXJjaC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLnR0Lm9uU2F2ZVNlYXJjaENsaWNrZWR9IHN0eWxlPXt7bWFyZ2luTGVmdDogMTB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy50KFwiLnNhdmVfc2VhcmNoXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2F2ZSBzZWFyY2hcIn0pfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJsb2FkLXNlYXJjaC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLnR0Lm9uTG9hZFNlYXJjaENsaWNrZWR9IHN0eWxlPXt7bWFyZ2luTGVmdDogMTB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRfc2VhcmNoXCIsIHtkZWZhdWx0VmFsdWU6IFwiTG9hZCBzZWFyY2hcIn0pfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGN1cnJlbnRGaWx0ZXJzID0gKCkgPT4ge1xuICAgIGNvbnN0IHtxdWVyeVNOYW1lfSA9IGRpZ3ModGhpcy5wcm9wcywgXCJxdWVyeVNOYW1lXCIpXG4gICAgY29uc3QgY3VycmVudEZpbHRlcnMgPSB0aGlzLnF1ZXJ5UGFyYW1zW3F1ZXJ5U05hbWVdIHx8IFtdXG5cbiAgICByZXR1cm4gY3VycmVudEZpbHRlcnMubWFwKChjdXJyZW50RmlsdGVyKSA9PiBKU09OLnBhcnNlKGN1cnJlbnRGaWx0ZXIpKVxuICB9XG5cbiAgb25BZGRGaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIGNvbnN0IG5ld0ZpbHRlckluZGV4ID0gdGhpcy5jdXJyZW50RmlsdGVycygpLmxlbmd0aFxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgZmlsdGVySW5kZXg6IG5ld0ZpbHRlckluZGV4XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uQXBwbHlDbGlja2VkID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7ZmlsdGVyOiB1bmRlZmluZWR9KVxuXG4gIG9uRWRpdFNlYXJjaFByZXNzZWQgPSAoe3NlYXJjaH0pID0+IHtcbiAgICB0aGlzLm9uUmVxdWVzdENsb3NlTG9hZFNlYXJjaE1vZGFsKClcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNob3dTYXZlU2VhcmNoTW9kYWw6IHNlYXJjaFxuICAgIH0pXG4gIH1cblxuICBvbkZpbHRlckNsaWNrZWQgPSAoZmlsdGVyKSA9PiB0aGlzLnNldFN0YXRlKHtmaWx0ZXJ9KVxuXG4gIG9uTG9hZFNlYXJjaENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzaG93TG9hZFNlYXJjaE1vZGFsOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIG9uUmVtb3ZlQ2xpY2tlZCA9ICh7ZmlsdGVySW5kZXh9KSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5U05hbWV9ID0gZGlncyh0aGlzLnByb3BzLCBcInF1ZXJ5U05hbWVcIilcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBQYXJhbXMucGFyc2UoKVtxdWVyeVNOYW1lXSB8fCB7fVxuXG4gICAgZGVsZXRlIHNlYXJjaFBhcmFtc1tmaWx0ZXJJbmRleF1cblxuICAgIGNvbnN0IG5ld1BhcmFtcyA9IHt9XG5cbiAgICBuZXdQYXJhbXNbcXVlcnlTTmFtZV0gPSBzZWFyY2hQYXJhbXNcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMobmV3UGFyYW1zKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBmaWx0ZXI6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RDbG9zZUxvYWRTZWFyY2hNb2RhbCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Nob3dMb2FkU2VhcmNoTW9kYWw6IGZhbHNlfSlcbiAgb25SZXF1ZXN0Q2xvc2VTYXZlU2VhcmNoTW9kYWwgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtzaG93U2F2ZVNlYXJjaE1vZGFsOiB1bmRlZmluZWR9KVxuXG4gIG9uU2F2ZVNlYXJjaENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgaWYgKHRoaXMuaGFzQW55RmlsdGVycygpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93U2F2ZVNlYXJjaE1vZGFsOiBuZXcgVGFibGVTZWFyY2goKX0pXG4gICAgfSBlbHNlIHtcbiAgICAgIEZsYXNoTWVzc2FnZS5hbGVydCh0aGlzLnQoXCIubm9fZmlsdGVyc19oYXNfYmVlbl9zZXRcIiwge2RlZmF1bHRWYWx1ZTogXCJObyBmaWx0ZXJzIGhhcyBiZWVuIHNldFwifSkpXG4gICAgfVxuICB9XG5cbiAgaGFzQW55RmlsdGVycyA9ICgpID0+IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudEZpbHRlcnMoKSkubGVuZ3RoID4gMFxufSkpXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxhQUFhLE1BQU0sc0JBQXNCO0FBQ2hELFNBQVFDLElBQUksRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDcEMsT0FBT0MsTUFBTSxNQUFNLFVBQVU7QUFDN0IsT0FBT0MsVUFBVSxNQUFNLGVBQWU7QUFDdEMsT0FBT0MsZUFBZSxNQUFNLHFCQUFxQjtBQUNqRCxPQUFPQyxlQUFlLE1BQU0scUJBQXFCO0FBQ2pELE9BQU9DLE1BQU0sTUFBTSxjQUFjO0FBQ2pDLE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLFNBQVFDLFdBQVcsUUFBTyxRQUFRO0FBQ2xDLE9BQU9DLElBQUksTUFBTSw0QkFBNEI7QUFDN0MsU0FBUUMsY0FBYyxRQUFPLHVDQUF1QztBQUNwRSxPQUFPQyxLQUFLLE1BQU0sT0FBTztBQUN6QixPQUFPQyxPQUFPLE1BQU0sK0JBQStCO0FBQ25ELE9BQU9DLGNBQWMsTUFBTSw0Q0FBNEM7QUFDdkUsU0FBUUMsSUFBSSxRQUFPLGNBQWM7QUFFakMsZUFBZUwsSUFBSSxDQUFDQyxjQUFjLENBQUMsTUFBTUssb0JBQW9CLFNBQVNoQixhQUFhLENBQUM7RUFDbEYsT0FBT2lCLFNBQVMsR0FBRztJQUNqQkMsV0FBVyxFQUFFVixTQUFTLENBQUNXLE1BQU07SUFDN0JDLFVBQVUsRUFBRVosU0FBUyxDQUFDYSxJQUFJLENBQUNDLFVBQVU7SUFDckNDLFNBQVMsRUFBRWYsU0FBUyxDQUFDZ0IsTUFBTSxDQUFDRixVQUFVO0lBQ3RDRyxVQUFVLEVBQUVqQixTQUFTLENBQUNnQixNQUFNLENBQUNGO0VBQy9CLENBQUM7RUFFREksS0FBS0EsQ0FBQSxFQUFHO0lBQ04sTUFBTTtNQUFDQztJQUFDLENBQUMsR0FBR2QsT0FBTyxDQUFDO01BQUNlLFNBQVMsRUFBRTtJQUE0QixDQUFDLENBQUM7SUFFOUQsSUFBSSxDQUFDQyxXQUFXLEdBQUdmLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQ2EsQ0FBQyxHQUFHQSxDQUFDO0lBQ1YsSUFBSSxDQUFDRyxTQUFTLENBQUM7TUFDYkMsTUFBTSxFQUFFQyxTQUFTO01BQ2pCQyxtQkFBbUIsRUFBRUQsU0FBUztNQUM5QkUsbUJBQW1CLEVBQUU7SUFDdkIsQ0FBQyxDQUFDO0VBQ0o7RUFFQUMsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsTUFBTTtNQUFDZixVQUFVO01BQUVLO0lBQVUsQ0FBQyxHQUFHdkIsSUFBSSxDQUFDLElBQUksQ0FBQ2tDLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzdFLE1BQU07TUFBQ2xCO0lBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQ2tCLEtBQUs7SUFDaEMsTUFBTTtNQUFDTCxNQUFNO01BQUVFLG1CQUFtQjtNQUFFQztJQUFtQixDQUFDLEdBQUdoQyxJQUFJLENBQUMsSUFBSSxDQUFDbUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztJQUNuSSxNQUFNQyxjQUFjLEdBQUcsSUFBSSxDQUFDQSxjQUFjLENBQUMsQ0FBQztJQUU1QyxvQkFDRTFCLEtBQUEsQ0FBQTJCLGFBQUEsQ0FBQ3hCLElBQUk7TUFBQ3lCLE9BQU8sRUFBRTtRQUFDQyxLQUFLLEVBQUU7TUFBMkIsQ0FBRTtNQUFDQyxLQUFLLEVBQUU7UUFBQ0MsVUFBVSxFQUFFO01BQVk7SUFBRSxHQUNwRlosTUFBTSxpQkFDTG5CLEtBQUEsQ0FBQTJCLGFBQUEsQ0FBQ25DLFVBQVU7TUFDVDJCLE1BQU0sRUFBRUEsTUFBTztNQUNmYSxHQUFHLEVBQUUsVUFBVWIsTUFBTSxDQUFDYyxXQUFXLEVBQUc7TUFDcEN6QixVQUFVLEVBQUVBLFVBQVc7TUFDdkIwQixjQUFjLEVBQUU3QyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFFO01BQzdDOEMsZUFBZSxFQUFFdEI7SUFBVyxDQUM3QixDQUFDLEVBRUhRLG1CQUFtQixpQkFDbEJyQixLQUFBLENBQUEyQixhQUFBLENBQUNsQyxlQUFlO01BQ2RhLFdBQVcsRUFBRUEsV0FBWTtNQUN6QkUsVUFBVSxFQUFFQSxVQUFXO01BQ3ZCNEIsbUJBQW1CLEVBQUUvQyxJQUFJLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFFO01BQ3ZEZ0QsY0FBYyxFQUFFaEQsSUFBSSxDQUFDLElBQUksRUFBRSwrQkFBK0IsQ0FBRTtNQUM1RDhDLGVBQWUsRUFBRXRCO0lBQVcsQ0FDN0IsQ0FBQyxFQUVIUyxtQkFBbUIsaUJBQ2xCdEIsS0FBQSxDQUFBMkIsYUFBQSxDQUFDakMsZUFBZTtNQUNkZ0MsY0FBYyxFQUFFckMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBRTtNQUM3Q2lCLFdBQVcsRUFBRUEsV0FBWTtNQUN6QitCLGNBQWMsRUFBRWhELElBQUksQ0FBQyxJQUFJLEVBQUUsK0JBQStCLENBQUU7TUFDNURpRCxNQUFNLEVBQUVoQjtJQUFvQixDQUM3QixDQUFDLEVBRUhJLGNBQWMsRUFBRWEsR0FBRyxDQUFDLENBQUNDLFVBQVUsRUFBRVAsV0FBVyxrQkFDM0NqQyxLQUFBLENBQUEyQixhQUFBLENBQUNwQyxNQUFNLEVBQUFrRCxRQUFBO01BQ0xULEdBQUcsRUFBRUMsV0FBWTtNQUNqQkEsV0FBVyxFQUFFQSxXQUFZO01BQ3pCUyxPQUFPLEVBQUUsSUFBSSxDQUFDQyxFQUFFLENBQUNDLGVBQWdCO01BQ2pDQyxlQUFlLEVBQUUsSUFBSSxDQUFDRixFQUFFLENBQUNFO0lBQWdCLEdBQ3JDTCxVQUFVLENBQ2YsQ0FDSCxDQUFDLGVBQ0R4QyxLQUFBLENBQUEyQixhQUFBLENBQUN4QixJQUFJO01BQUMyQyxTQUFTLEVBQUMsZ0JBQWdCO01BQUNoQixLQUFLLEVBQUU7UUFBQ2lCLGFBQWEsRUFBRSxLQUFLO1FBQUVDLFNBQVMsRUFBRTtNQUFFO0lBQUUsZ0JBQzVFaEQsS0FBQSxDQUFBMkIsYUFBQTtNQUFRbUIsU0FBUyxFQUFDLHVCQUF1QjtNQUFDSixPQUFPLEVBQUUsSUFBSSxDQUFDQyxFQUFFLENBQUNNO0lBQW1CLEdBQzNFLElBQUksQ0FBQ2xDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRTtNQUFDbUMsWUFBWSxFQUFFO0lBQWdCLENBQUMsQ0FDckQsQ0FBQyxFQUNSNUMsV0FBVyxpQkFDVk4sS0FBQSxDQUFBMkIsYUFBQSxDQUFBM0IsS0FBQSxDQUFBbUQsUUFBQSxxQkFDRW5ELEtBQUEsQ0FBQTJCLGFBQUE7TUFBUW1CLFNBQVMsRUFBQyxvQkFBb0I7TUFBQ0osT0FBTyxFQUFFLElBQUksQ0FBQ0MsRUFBRSxDQUFDUyxtQkFBb0I7TUFBQ3RCLEtBQUssRUFBRTtRQUFDdUIsVUFBVSxFQUFFO01BQUU7SUFBRSxHQUNsRyxJQUFJLENBQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFO01BQUNtQyxZQUFZLEVBQUU7SUFBYSxDQUFDLENBQy9DLENBQUMsZUFDVGxELEtBQUEsQ0FBQTJCLGFBQUE7TUFBUW1CLFNBQVMsRUFBQyxvQkFBb0I7TUFBQ0osT0FBTyxFQUFFLElBQUksQ0FBQ0MsRUFBRSxDQUFDVyxtQkFBb0I7TUFBQ3hCLEtBQUssRUFBRTtRQUFDdUIsVUFBVSxFQUFFO01BQUU7SUFBRSxHQUNsRyxJQUFJLENBQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFO01BQUNtQyxZQUFZLEVBQUU7SUFBYSxDQUFDLENBQy9DLENBQ1IsQ0FFQSxDQUNGLENBQUM7RUFFWDtFQUVBeEIsY0FBYyxHQUFHQSxDQUFBLEtBQU07SUFDckIsTUFBTTtNQUFDYjtJQUFVLENBQUMsR0FBR3ZCLElBQUksQ0FBQyxJQUFJLENBQUNrQyxLQUFLLEVBQUUsWUFBWSxDQUFDO0lBQ25ELE1BQU1FLGNBQWMsR0FBRyxJQUFJLENBQUNULFdBQVcsQ0FBQ0osVUFBVSxDQUFDLElBQUksRUFBRTtJQUV6RCxPQUFPYSxjQUFjLENBQUNhLEdBQUcsQ0FBRWdCLGFBQWEsSUFBS0MsSUFBSSxDQUFDQyxLQUFLLENBQUNGLGFBQWEsQ0FBQyxDQUFDO0VBQ3pFLENBQUM7RUFFRE4sa0JBQWtCLEdBQUlTLENBQUMsSUFBSztJQUMxQkEsQ0FBQyxDQUFDQyxjQUFjLENBQUMsQ0FBQztJQUVsQixNQUFNQyxjQUFjLEdBQUcsSUFBSSxDQUFDbEMsY0FBYyxDQUFDLENBQUMsQ0FBQ21DLE1BQU07SUFFbkQsSUFBSSxDQUFDQyxRQUFRLENBQUM7TUFDWjNDLE1BQU0sRUFBRTtRQUNOYyxXQUFXLEVBQUUyQjtNQUNmO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUVEMUIsY0FBYyxHQUFHQSxDQUFBLEtBQU0sSUFBSSxDQUFDNEIsUUFBUSxDQUFDO0lBQUMzQyxNQUFNLEVBQUVDO0VBQVMsQ0FBQyxDQUFDO0VBRXpEZ0IsbUJBQW1CLEdBQUdBLENBQUM7SUFBQ0U7RUFBTSxDQUFDLEtBQUs7SUFDbEMsSUFBSSxDQUFDeUIsNkJBQTZCLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUNELFFBQVEsQ0FBQztNQUNaeEMsbUJBQW1CLEVBQUVnQjtJQUN2QixDQUFDLENBQUM7RUFDSixDQUFDO0VBRURNLGVBQWUsR0FBSXpCLE1BQU0sSUFBSyxJQUFJLENBQUMyQyxRQUFRLENBQUM7SUFBQzNDO0VBQU0sQ0FBQyxDQUFDO0VBRXJEbUMsbUJBQW1CLEdBQUlJLENBQUMsSUFBSztJQUMzQkEsQ0FBQyxDQUFDQyxjQUFjLENBQUMsQ0FBQztJQUVsQixJQUFJLENBQUNHLFFBQVEsQ0FBQztNQUNaekMsbUJBQW1CLEVBQUU7SUFDdkIsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUVEd0IsZUFBZSxHQUFHQSxDQUFDO0lBQUNaO0VBQVcsQ0FBQyxLQUFLO0lBQ25DLE1BQU07TUFBQ3BCO0lBQVUsQ0FBQyxHQUFHdkIsSUFBSSxDQUFDLElBQUksQ0FBQ2tDLEtBQUssRUFBRSxZQUFZLENBQUM7SUFDbkQsTUFBTXdDLFlBQVksR0FBR3JFLE1BQU0sQ0FBQzhELEtBQUssQ0FBQyxDQUFDLENBQUM1QyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckQsT0FBT21ELFlBQVksQ0FBQy9CLFdBQVcsQ0FBQztJQUVoQyxNQUFNZ0MsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVwQkEsU0FBUyxDQUFDcEQsVUFBVSxDQUFDLEdBQUdtRCxZQUFZO0lBRXBDckUsTUFBTSxDQUFDdUUsWUFBWSxDQUFDRCxTQUFTLENBQUM7SUFFOUIsSUFBSSxDQUFDSCxRQUFRLENBQUM7TUFDWjNDLE1BQU0sRUFBRUM7SUFDVixDQUFDLENBQUM7RUFDSixDQUFDO0VBRUQyQyw2QkFBNkIsR0FBR0EsQ0FBQSxLQUFNLElBQUksQ0FBQ0QsUUFBUSxDQUFDO0lBQUN6QyxtQkFBbUIsRUFBRTtFQUFLLENBQUMsQ0FBQztFQUNqRjhDLDZCQUE2QixHQUFHQSxDQUFBLEtBQU0sSUFBSSxDQUFDTCxRQUFRLENBQUM7SUFBQ3hDLG1CQUFtQixFQUFFRjtFQUFTLENBQUMsQ0FBQztFQUVyRmdDLG1CQUFtQixHQUFJTSxDQUFDLElBQUs7SUFDM0JBLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7SUFFbEIsSUFBSSxJQUFJLENBQUNTLGFBQWEsQ0FBQyxDQUFDLEVBQUU7TUFDeEIsSUFBSSxDQUFDTixRQUFRLENBQUM7UUFBQ3hDLG1CQUFtQixFQUFFLElBQUl6QixXQUFXLENBQUM7TUFBQyxDQUFDLENBQUM7SUFDekQsQ0FBQyxNQUFNO01BQ0x3RSxZQUFZLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUN2RCxDQUFDLENBQUMsMEJBQTBCLEVBQUU7UUFBQ21DLFlBQVksRUFBRTtNQUF5QixDQUFDLENBQUMsQ0FBQztJQUNuRztFQUNGLENBQUM7RUFFRGtCLGFBQWEsR0FBR0EsQ0FBQSxLQUFNRyxNQUFNLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUM5QyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUNtQyxNQUFNLEdBQUcsQ0FBQztBQUNyRSxDQUFDLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
package/build/table/table.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { digg, digs } from "diggerize";
|
|
3
3
|
import React, { createContext, useContext, useMemo, useRef } from "react";
|
|
4
|
-
import { Animated, Pressable, View } from "react-native";
|
|
4
|
+
import { Animated, Platform, Pressable, View } from "react-native";
|
|
5
5
|
import BaseComponent from "../base-component";
|
|
6
6
|
import Card from "../bootstrap/card";
|
|
7
7
|
import classNames from "classnames";
|
|
@@ -17,6 +17,7 @@ import Header from "./components/header";
|
|
|
17
17
|
import HeaderColumn from "./header-column";
|
|
18
18
|
import HeaderSelect from "./header-select";
|
|
19
19
|
import Icon from "../utils/icon";
|
|
20
|
+
import { incorporate } from "incorporator";
|
|
20
21
|
import * as inflection from "inflection";
|
|
21
22
|
import memo from "set-state-compare/src/memo";
|
|
22
23
|
import modelClassRequire from "../model-class-require";
|
|
@@ -953,15 +954,19 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
953
954
|
});
|
|
954
955
|
};
|
|
955
956
|
submitFilter = () => {
|
|
956
|
-
const filterForm = digg(this.tt.filterFormRef, "current");
|
|
957
957
|
const {
|
|
958
958
|
appHistory
|
|
959
959
|
} = this.props;
|
|
960
|
-
const qParams = Params.serializeForm(filterForm);
|
|
961
960
|
const {
|
|
962
961
|
queryQName
|
|
963
962
|
} = this.s;
|
|
964
963
|
const changeParamsParams = {};
|
|
964
|
+
const qParams = this.s.filterForm.asObject();
|
|
965
|
+
if (Platform.OS == "web") {
|
|
966
|
+
const filterForm = digg(this.tt.filterFormRef, "current");
|
|
967
|
+
const navtiveFormParams = Params.serializeForm(filterForm);
|
|
968
|
+
incorporate(qParams, navtiveFormParams);
|
|
969
|
+
}
|
|
965
970
|
changeParamsParams[queryQName] = JSON.stringify(qParams);
|
|
966
971
|
Params.changeParams(changeParamsParams, {
|
|
967
972
|
appHistory
|
|
@@ -969,4 +974,4 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
969
974
|
};
|
|
970
975
|
submitFilterDebounce = debounce(this.tt.submitFilter);
|
|
971
976
|
}));
|
|
972
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiZGlncyIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwidXNlUmVmIiwiQW5pbWF0ZWQiLCJQcmVzc2FibGUiLCJWaWV3IiwiQmFzZUNvbXBvbmVudCIsIkNhcmQiLCJjbGFzc05hbWVzIiwiQ29sbGVjdGlvbiIsImNvbHVtblZpc2libGUiLCJkZWJvdW5jZSIsIkRyYWdnYWJsZVNvcnQiLCJFdmVudEVtaXR0ZXIiLCJGaWx0ZXJzIiwiRmxhdExpc3QiLCJGb3JtIiwiSGVhZGVyIiwiSGVhZGVyQ29sdW1uIiwiSGVhZGVyU2VsZWN0IiwiSWNvbiIsImluZmxlY3Rpb24iLCJtZW1vIiwibW9kZWxDbGFzc1JlcXVpcmUiLCJNb2RlbFJvdyIsIlBhZ2luYXRlIiwiUGFyYW1zIiwiUHJvcFR5cGVzIiwiUm93Iiwic2VsZWN0Q2FsY3VsYXRvciIsIlNlbGVjdCIsIlNldHRpbmdzIiwic2hhcGVDb21wb25lbnQiLCJUYWJsZVNldHRpbmdzIiwiVGV4dCIsInVuaXF1bml6ZSIsInVzZUJyZWFrcG9pbnQiLCJ1c2VDb2xsZWN0aW9uIiwidXNlSTE4biIsInVzZUV2ZW50RW1pdHRlciIsInVzZU1vZGVsRXZlbnQiLCJ1c2VRdWVyeVBhcmFtcyIsIldpZHRocyIsInBhZ2luYXRpb25PcHRpb25zIiwiV29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3giLCJsYXp5IiwiVGFibGVDb250ZXh0IiwiTGlzdEhlYWRlckNvbXBvbmVudCIsInNldHVwIiwidXNlU3RhdGVzIiwibGFzdFVwZGF0ZSIsIkRhdGUiLCJyZW5kZXIiLCJtZFVwIiwidGFibGVDb250ZXh0VmFsdWUiLCJ0YWJsZSIsImNvbGxlY3Rpb24iLCJldmVudHMiLCJxdWVyeVdpdGhvdXRQYWdpbmF0aW9uIiwidCIsInR0IiwicXVlcnkiLCJvbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkIiwiY3JlYXRlRWxlbWVudCIsImRhdGFTZXQiLCJjbGFzcyIsInN0eWxlIiwic3R5bGVGb3JSb3dIZWFkZXIiLCJwIiwid29ya3BsYWNlIiwicyIsImN1cnJlbnRXb3JrcGxhY2UiLCJzdHlsZUZvckhlYWRlciIsIndpZHRoIiwidW5kZWZpbmVkIiwibWFyZ2luSG9yaXpvbnRhbCIsIm1hcmdpbkxlZnQiLCJkZWZhdWx0VmFsdWUiLCJwcmVwYXJlZENvbHVtbnMiLCJGcmFnbWVudCIsImhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMiLCJ0eXBlIiwic2V0U3RhdGUiLCJBcGlNYWtlclRhYmxlIiwiZGVmYXVsdFByb3BzIiwiY2FyZCIsImN1cnJlbnRVc2VyIiwiZGVzdHJveUVuYWJsZWQiLCJmaWx0ZXJDYXJkIiwiZmlsdGVyU3VibWl0QnV0dG9uIiwibm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCIsIm5vUmVjb3Jkc0ZvdW5kQ29udGVudCIsInByZWxvYWRzIiwic2VsZWN0Iiwic3R5bGVVSSIsInByb3BUeXBlcyIsImFiaWxpdGllcyIsIm9iamVjdCIsImFjdGlvbnNDb250ZW50IiwiZnVuYyIsImFwcEhpc3RvcnkiLCJib29sIiwiaXNSZXF1aXJlZCIsImNsYXNzTmFtZSIsInN0cmluZyIsImluc3RhbmNlT2YiLCJjb2x1bW5zIiwib25lT2ZUeXBlIiwiYXJyYXkiLCJjb250cm9scyIsImRlZmF1bHREYXRlRm9ybWF0TmFtZSIsImRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWUiLCJkZWZhdWx0UGFyYW1zIiwiZGVzdHJveU1lc3NhZ2UiLCJlZGl0TW9kZWxQYXRoIiwiZmlsdGVyQ29udGVudCIsImZpbHRlclN1Ym1pdExhYmVsIiwibm9kZSIsImdyb3VwQnkiLCJoZWFkZXIiLCJpZGVudGlmaWVyIiwibW9kZWxDbGFzcyIsIm9uTW9kZWxzTG9hZGVkIiwicGFnaW5hdGVDb250ZW50IiwicGFnaW5hdGlvbkNvbXBvbmVudCIsInF1ZXJ5TWV0aG9kIiwicXVlcnlOYW1lIiwic2VsZWN0Q29sdW1ucyIsInN0eWxlcyIsInZpZXdNb2RlbFBhdGgiLCJkcmFnZ2FibGVTb3J0RXZlbnRzIiwidGFibGVTZXR0aW5ncyIsIm5hbWVzcGFjZSIsIm5hbWUiLCJicmVha3BvaW50IiwicXVlcnlQYXJhbXMiLCJzZXRJbnN0YW5jZSIsImZpbHRlckZvcm1SZWYiLCJjb2xsZWN0aW9uS2V5IiwibW9kZWxDbGFzc0RhdGEiLCJwcm9wcyIsInF1ZXJ5U05hbWUiLCJjb2x1bW5zQXNBcnJheSIsImN1cnJlbnRXb3JrcGxhY2VDb3VudCIsImZpbHRlckZvcm0iLCJjb2x1bW5zVG9TaG93IiwiZHJhZ2dlZENvbHVtbiIsInByZWxvYWQiLCJxdWVyeVFOYW1lIiwicXVlcnlQYWdlTmFtZSIsInJlc2l6aW5nIiwic2hvd0ZpbHRlcnMiLCJCb29sZWFuIiwic2hvd1NldHRpbmdzIiwidGFibGVTZXR0aW5nIiwidGFibGVTZXR0aW5nTG9hZGVkIiwidGFibGVTZXR0aW5nRnVsbENhY2hlS2V5Iiwid2lkdGhzIiwiY2FjaGVLZXkiLCJsb2FkQ3VycmVudFdvcmtwbGFjZSIsInRoZW4iLCJsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50IiwiaWQiLCJsb2FkVGFibGVTZXR0aW5nIiwib25MaW5rc0NyZWF0ZWQiLCJvbkxpbmtzRGVzdHJveWVkIiwiY29sbGVjdGlvblJlYWR5IiwiYWJpbGl0aWVzVG9Mb2FkIiwiaWZDb25kaXRpb24iLCJwYWdpbmF0aW9uIiwic3RhdGUiLCJjbG9uZSIsImV4Y2VwdCIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnRW5kQW5pbWF0aW9uIiwiZ2V0Q29sdW1uc1RvU2hvdyIsIml0ZW0iLCJhbmltYXRlZFpJbmRleCIsInNldFZhbHVlIiwiV29ya3BsYWNlIiwicmVzdWx0IiwiY3VycmVudCIsIldvcmtwbGFjZUxpbmsiLCJyYW5zYWNrIiwicmVzb3VyY2VfdHlwZV9lcSIsIndvcmtwbGFjZV9pZF9lcSIsImNvdW50IiwiZmlsdGVyIiwiY29sdW1uIiwidGFibGVTZXR0aW5nQ29sdW1uIiwic29ydCIsImEiLCJiIiwicG9zaXRpb24iLCJsb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MiLCJtZXJnZWRQcmVsb2FkcyIsImZ1bGxDYWNoZUtleSIsInVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5IiwiY29uY2F0IiwibW9kZWxzIiwib3ZlcmFsbENvdW50IiwicVBhcmFtcyIsInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50Iiwic2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCIsImFyZ3MiLCJFcnJvciIsIm9uTGF5b3V0Iiwib25Db250YWluZXJMYXlvdXQiLCJjb250YWluZXIiLCJjYXJkT3JUYWJsZSIsIm93bkFiaWxpdGllcyIsInB1c2giLCJsZW5ndGgiLCJtb2RlbENsYXNzTmFtZSIsIm1vZGVsTmFtZSIsImFiaWxpdHkiLCJyZXN0UHJvcHMiLCJoZWFkZXJDb250ZW50IiwiUGFnaW5hdGlvbkNvbXBvbmVudCIsImh1bWFuIiwiZmxhdExpc3RTdHlsZSIsIm92ZXJmbG93WCIsImJvcmRlciIsImJvcmRlclJhZGl1cyIsImZsYXRMaXN0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIl9leHRlbmRzIiwiZGF0YSIsImV4dHJhRGF0YSIsImtleUV4dHJhY3RvciIsImtleUV4dHJhdG9yIiwicmVuZGVySXRlbSIsInNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvciIsInRhYmxlQ29udHJvbHMiLCJmb290ZXIiLCJ0YWJsZUZvb3RlciIsImUiLCJuYXRpdmVFdmVudCIsImxheW91dCIsInRhYmxlV2lkdGgiLCJjcmVhdGVkIiwiYW1vdW50Q3JlYXRlZCIsInByZXZTdGF0ZSIsImRlc3Ryb3llZCIsImFtb3VudERlc3Ryb3llZCIsIm1vZGVsIiwic3VibWl0RmlsdGVyIiwic3VibWl0RmlsdGVyRGVib3VuY2UiLCJmb3JtUmVmIiwib25TdWJtaXQiLCJvbkZpbHRlckZvcm1TdWJtaXQiLCJzZXRGb3JtIiwic2V0U3RhdGVzIiwib25GaWx0ZXJDaGFuZ2VkIiwib25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5IiwibWFyZ2luVG9wIiwib25GaWx0ZXJDbGlja2VkIiwicHJldmVudERlZmF1bHQiLCJvblBlclBhZ2VDaGFuZ2VkIiwibmV3UGVyUGFnZVZhbHVlIiwicGVyS2V5IiwicGFyYW1zQ2hhbmdlIiwiY2hhbmdlUGFyYW1zIiwiaW5kZXgiLCJjb2x1bW5XaWR0aHMiLCJrZXkiLCJzdHlsZUZvckNvbHVtbiIsImNvbHVtbkluZGV4IiwiZXZlbiIsImRlZmF1bHRTdHlsZSIsImp1c3RpZnlDb250ZW50IiwicGFkZGluZyIsIm92ZXJmbG93IiwiT2JqZWN0IiwiYXNzaWduIiwiYmFja2dyb3VuZENvbG9yIiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJtYXJnaW5SaWdodCIsImJvcmRlclJpZ2h0IiwiYWN0dWFsU3R5bGUiLCJzdHlsZUZvckhlYWRlclRleHQiLCJmb250V2VpZ2h0Iiwic3R5bGVGb3JSb3ciLCJmbGV4Iiwib25QcmVzcyIsInNpemUiLCJvblJlcXVlc3RDbG9zZSIsIm9uUmVxdWVzdENsb3NlU2V0dGluZ3MiLCJvblNldHRpbmdzQ2xpY2tlZCIsImN1cnJlbnRQYWdlIiwidG90YWxDb3VudCIsInBlclBhZ2UiLCJ0byIsIk1hdGgiLCJtaW4iLCJmcm9tIiwidG90YWxfY291bnQiLCJzZWxlY3RlZCIsIm9uQ2hhbmdlIiwib3B0aW9ucyIsImpvaW4iLCJjb2x1bW5Qcm9wcyIsInRleHRDZW50ZXIiLCJ0ZXh0QWxpZ24iLCJ0ZXh0UmlnaHQiLCJoZWFkZXJQcm9wcyIsImhvcml6b250YWwiLCJkcmFnTGlzdGtleUV4dHJhY3RvciIsIm9uSXRlbU1vdmVkIiwib25SZW9yZGVyZWQiLCJkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50IiwiZHJhZ0xpc3RDYWNoZUtleUV4dHJhY3RvciIsImFuaW1hdGlvbkFyZ3MiLCJpdGVtSW5kZXgiLCJ4IiwieSIsImFuaW1hdGVkUG9zaXRpb24iLCJ0aW1pbmciLCJzdGFydCIsImZyb21JdGVtIiwiZnJvbVBvc2l0aW9uIiwidG9JdGVtIiwidG9Qb3NpdGlvbiIsIlRhYmxlU2V0dGluZ0NvbHVtbiIsImNvbnN0cnVjdG9yIiwidG9Db2x1bW4iLCJmaW5kIiwidXBkYXRlIiwiaXNBY3RpdmUiLCJ0b3VjaFByb3BzIiwiYW5pbWF0ZWRXaWR0aCIsImFjdGl2ZSIsImhlYWRlckNsYXNzTmFtZUZvckNvbHVtbiIsImNvbW1vblByb3BzIiwiaGVhZGVyTGFiZWxGb3JDb2x1bW4iLCJsYWJlbCIsImN1cnJlbnRNb2RlbENsYXNzIiwicGF0aCIsInBhdGhQYXJ0IiwicmVsYXRpb25zaGlwcyIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uc2hpcEluQXJyYXkiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiaHVtYW5BdHRyaWJ1dGVOYW1lIiwic2VyaWFsaXplRm9ybSIsImNoYW5nZVBhcmFtc1BhcmFtcyIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvdGFibGUuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgUmVhY3QsIHtjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VSZWZ9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQcmVzc2FibGUsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCBDYXJkIGZyb20gXCIuLi9ib290c3RyYXAvY2FyZFwiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQ29sbGVjdGlvbiBmcm9tIFwiLi4vY29sbGVjdGlvblwiXG5pbXBvcnQgY29sdW1uVmlzaWJsZSBmcm9tIFwiLi9jb2x1bW4tdmlzaWJsZVwiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBEcmFnZ2FibGVTb3J0IGZyb20gXCIuLi9kcmFnZ2FibGUtc29ydC9pbmRleFwiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIlxuaW1wb3J0IEZpbHRlcnMgZnJvbSBcIi4vZmlsdGVyc1wiXG5pbXBvcnQgRmxhdExpc3QgZnJvbSBcIi4vY29tcG9uZW50cy9mbGF0LWxpc3RcIlxuaW1wb3J0IHtGb3JtfSBmcm9tIFwiLi4vZm9ybVwiXG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvaGVhZGVyXCJcbmltcG9ydCBIZWFkZXJDb2x1bW4gZnJvbSBcIi4vaGVhZGVyLWNvbHVtblwiXG5pbXBvcnQgSGVhZGVyU2VsZWN0IGZyb20gXCIuL2hlYWRlci1zZWxlY3RcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL3V0aWxzL2ljb25cIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBNb2RlbFJvdyBmcm9tIFwiLi9tb2RlbC1yb3dcIlxuaW1wb3J0IFBhZ2luYXRlIGZyb20gXCIuLi9ib290c3RyYXAvcGFnaW5hdGVcIlxuaW1wb3J0IFBhcmFtcyBmcm9tIFwiLi4vcGFyYW1zXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJvdyBmcm9tIFwiLi9jb21wb25lbnRzL3Jvd1wiXG5pbXBvcnQgc2VsZWN0Q2FsY3VsYXRvciBmcm9tIFwiLi9zZWxlY3QtY2FsY3VsYXRvclwiXG5pbXBvcnQgU2VsZWN0IGZyb20gXCIuLi9pbnB1dHMvc2VsZWN0XCJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy9pbmRleFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3NoYXBlLWNvbXBvbmVudFwiXG5pbXBvcnQgVGFibGVTZXR0aW5ncyBmcm9tIFwiLi90YWJsZS1zZXR0aW5nc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdW5pcXVuaXplIGZyb20gXCJ1bmlxdW5pemVcIlxuaW1wb3J0IHVzZUJyZWFrcG9pbnQgZnJvbSBcIi4uL3VzZS1icmVha3BvaW50XCJcbmltcG9ydCB1c2VDb2xsZWN0aW9uIGZyb20gXCIuLi91c2UtY29sbGVjdGlvblwiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG5cIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZU1vZGVsRXZlbnQgZnJvbSBcIi4uL3VzZS1tb2RlbC1ldmVudFwiXG5pbXBvcnQgdXNlUXVlcnlQYXJhbXMgZnJvbSBcIm9uLWxvY2F0aW9uLWNoYW5nZWQvYnVpbGQvdXNlLXF1ZXJ5LXBhcmFtc1wiXG5pbXBvcnQgV2lkdGhzIGZyb20gXCIuL3dpZHRoc1wiXG5cbmNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzMwLCA2MCwgOTAsIFtcIkFsbFwiLCBcImFsbFwiXV1cbmNvbnN0IFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94ID0gUmVhY3QubGF6eSgoKSA9PiBpbXBvcnQoXCIuL3dvcmtlci1wbHVnaW5zLWNoZWNrLWFsbC1jaGVja2JveFwiKSlcbmNvbnN0IFRhYmxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBMaXN0SGVhZGVyQ29tcG9uZW50ID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBMaXN0SGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHNldHVwKCkge1xuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGxhc3RVcGRhdGU6IG5ldyBEYXRlKClcbiAgICB9KVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHttZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHRhYmxlQ29udGV4dFZhbHVlID0gdXNlQ29udGV4dChUYWJsZUNvbnRleHQpXG4gICAgY29uc3QgdGFibGUgPSB0YWJsZUNvbnRleHRWYWx1ZS50YWJsZVxuICAgIGNvbnN0IHtjb2xsZWN0aW9uLCBldmVudHMsIHF1ZXJ5V2l0aG91dFBhZ2luYXRpb24sIHR9ID0gdGFibGUudHRcbiAgICBjb25zdCB7cXVlcnl9ID0gZGlncyhjb2xsZWN0aW9uLCBcInF1ZXJ5XCIpXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIoZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcblxuICAgIHJldHVybiAoXG4gICAgICA8Um93IGRhdGFTZXQ9e3tjbGFzczogXCJhcGktbWFrZXIvdGFibGUvaGVhZGVyLXJvd1wifX0gc3R5bGU9e3RhYmxlLnN0eWxlRm9yUm93SGVhZGVyKCl9PlxuICAgICAgICB7dGFibGUucC53b3JrcGxhY2UgJiYgdGFibGUucy5jdXJyZW50V29ya3BsYWNlICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7d2lkdGg6IG1kVXAgPyA0MSA6IHVuZGVmaW5lZH19KX0+XG4gICAgICAgICAgICA8V29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgY3VycmVudFdvcmtwbGFjZT17dGFibGUucy5jdXJyZW50V29ya3BsYWNlfVxuICAgICAgICAgICAgICBxdWVyeT17cXVlcnlXaXRob3V0UGFnaW5hdGlvbn1cbiAgICAgICAgICAgICAgc3R5bGU9e3ttYXJnaW5Ib3Jpem9udGFsOiBcImF1dG9cIn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyFtZFVwICYmXG4gICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7bWFyZ2luTGVmdDogM319PlxuICAgICAgICAgICAgICAgIHt0KFwiLnNlbGVjdF9hbGxfZm91bmRcIiwge2RlZmF1bHRWYWx1ZTogXCJTZWxlY3QgYWxsIGZvdW5kXCJ9KX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICB9XG4gICAgICAgIHshbWRVcCAmJlxuICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge319KX0+XG4gICAgICAgICAgICA8SGVhZGVyU2VsZWN0IHByZXBhcmVkQ29sdW1ucz17dGFibGUucy5wcmVwYXJlZENvbHVtbnN9IHF1ZXJ5PXtxdWVyeX0gdGFibGU9e3RhYmxlfSAvPlxuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICB9XG4gICAgICAgIHttZFVwICYmXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHt0YWJsZS5oZWFkZXJzQ29udGVudEZyb21Db2x1bW5zKCl9XG4gICAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt9LCB0eXBlOiBcImFjdGlvbnNcIn0pfSAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICB9XG4gICAgICA8L1Jvdz5cbiAgICApXG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7bGFzdFVwZGF0ZTogbmV3IERhdGUoKX0pXG59KSlcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBBcGlNYWtlclRhYmxlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2FyZDogdHJ1ZSxcbiAgICBjdXJyZW50VXNlcjogbnVsbCxcbiAgICBkZXN0cm95RW5hYmxlZDogdHJ1ZSxcbiAgICBmaWx0ZXJDYXJkOiB0cnVlLFxuICAgIGZpbHRlclN1Ym1pdEJ1dHRvbjogdHJ1ZSxcbiAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB1bmRlZmluZWQsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB1bmRlZmluZWQsXG4gICAgcHJlbG9hZHM6IFtdLFxuICAgIHNlbGVjdDoge30sXG4gICAgc3R5bGVVSTogdHJ1ZSxcbiAgICB3b3JrcGxhY2U6IGZhbHNlXG4gIH1cblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFiaWxpdGllczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBhY3Rpb25zQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYXBwSGlzdG9yeTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xsZWN0aW9uOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihDb2xsZWN0aW9uKSxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5mdW5jXSksXG4gICAgY29udHJvbHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGN1cnJlbnRVc2VyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlZmF1bHREYXRlRm9ybWF0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlZmF1bHRQYXJhbXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVzdHJveUVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZGVzdHJveU1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZWRpdE1vZGVsUGF0aDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZmlsdGVyQ2FyZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBmaWx0ZXJDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJTdWJtaXRMYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gICAgZ3JvdXBCeTogUHJvcFR5cGVzLmFycmF5LFxuICAgIGhlYWRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBpZGVudGlmaWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk1vZGVsc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdpbmF0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwcmVsb2FkczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgcXVlcnlNZXRob2Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIHF1ZXJ5TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3Q6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc2VsZWN0Q29sdW1uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVVSTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB2aWV3TW9kZWxQYXRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB3b3JrcGxhY2U6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRcbiAgfVxuXG4gIGRyYWdnYWJsZVNvcnRFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIHRhYmxlU2V0dGluZ3MgPSBudWxsXG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge3R9ID0gdXNlSTE4bih7bmFtZXNwYWNlOiBcImpzLmFwaV9tYWtlci50YWJsZVwifSlcbiAgICBjb25zdCB7bmFtZTogYnJlYWtwb2ludCwgbWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHVzZVF1ZXJ5UGFyYW1zKClcblxuICAgIHRoaXMuc2V0SW5zdGFuY2Uoe1xuICAgICAgYnJlYWtwb2ludCxcbiAgICAgIGZpbHRlckZvcm1SZWY6IHVzZVJlZigpLFxuICAgICAgbWRVcCxcbiAgICAgIHRcbiAgICB9KVxuXG4gICAgY29uc3QgY29sbGVjdGlvbktleSA9IGRpZ2codGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJjb2xsZWN0aW9uS2V5XCIpXG4gICAgbGV0IHF1ZXJ5TmFtZSA9IHRoaXMucHJvcHMucXVlcnlOYW1lXG5cbiAgICBpZiAoIXF1ZXJ5TmFtZSkgcXVlcnlOYW1lID0gY29sbGVjdGlvbktleVxuXG4gICAgY29uc3QgcXVlcnlTTmFtZSA9IGAke3F1ZXJ5TmFtZX1fc2BcblxuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGNvbHVtbnM6ICgpID0+IHRoaXMuY29sdW1uc0FzQXJyYXkoKSxcbiAgICAgIGN1cnJlbnRXb3JrcGxhY2U6IHVuZGVmaW5lZCxcbiAgICAgIGN1cnJlbnRXb3JrcGxhY2VDb3VudDogbnVsbCxcbiAgICAgIGZpbHRlckZvcm06IG51bGwsXG4gICAgICBjb2x1bW5zVG9TaG93OiBudWxsLFxuICAgICAgZHJhZ2dlZENvbHVtbjogbnVsbCxcbiAgICAgIGlkZW50aWZpZXI6ICgpID0+IHRoaXMucHJvcHMuaWRlbnRpZmllciB8fCBgJHtjb2xsZWN0aW9uS2V5fS1kZWZhdWx0YCxcbiAgICAgIGxhc3RVcGRhdGU6ICgpID0+IG5ldyBEYXRlKCksXG4gICAgICBwcmVsb2FkOiB1bmRlZmluZWQsXG4gICAgICBwcmVwYXJlZENvbHVtbnM6IHVuZGVmaW5lZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHF1ZXJ5UU5hbWU6ICgpID0+IGAke3F1ZXJ5TmFtZX1fcWAsXG4gICAgICBxdWVyeVBhZ2VOYW1lOiAoKSA9PiBgJHtxdWVyeU5hbWV9X3BhZ2VgLFxuICAgICAgcXVlcnlTTmFtZSxcbiAgICAgIHJlc2l6aW5nOiBmYWxzZSxcbiAgICAgIHNob3dGaWx0ZXJzOiAoKSA9PiBCb29sZWFuKHF1ZXJ5UGFyYW1zW3F1ZXJ5U05hbWVdKSxcbiAgICAgIHNob3dTZXR0aW5nczogZmFsc2UsXG4gICAgICB0YWJsZVNldHRpbmc6IHVuZGVmaW5lZCxcbiAgICAgIHRhYmxlU2V0dGluZ0xvYWRlZDogZmFsc2UsXG4gICAgICB0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgICB3aWR0aHM6IG51bGxcbiAgICB9KVxuXG4gICAgdGhpcy50YWJsZUNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAoe1xuICAgICAgICBjYWNoZUtleTogdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSxcbiAgICAgICAgbGFzdFVwZGF0ZTogdGhpcy5zLmxhc3RVcGRhdGUsXG4gICAgICAgIHJlc2l6aW5nOiB0aGlzLnMucmVzaXppbmcsXG4gICAgICAgIHRhYmxlOiB0aGlzXG4gICAgICB9KSxcbiAgICAgIFt0aGlzLnMubGFzdFVwZGF0ZSwgdGhpcy5zLnJlc2l6aW5nLCB0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5XVxuICAgIClcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJvcHMud29ya3BsYWNlKSB7XG4gICAgICAgIHRoaXMubG9hZEN1cnJlbnRXb3JrcGxhY2UoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRDdXJyZW50V29ya3BsYWNlQ291bnQoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnAuY3VycmVudFVzZXI/LmlkKCldKVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMudHQudGFibGVTZXR0aW5ncyAmJiB0aGlzLnMud2lkdGgpIHtcbiAgICAgICAgdGhpcy5sb2FkVGFibGVTZXR0aW5nKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpLCB0aGlzLnMud2lkdGhdKVxuXG4gICAgdXNlTW9kZWxFdmVudCh0aGlzLnMuY3VycmVudFdvcmtwbGFjZSwgXCJ3b3JrcGxhY2VfbGlua3NfY3JlYXRlZFwiLCB0aGlzLnR0Lm9uTGlua3NDcmVhdGVkKVxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2Rlc3Ryb3llZFwiLCB0aGlzLnR0Lm9uTGlua3NEZXN0cm95ZWQpXG5cbiAgICBsZXQgY29sbGVjdGlvblJlYWR5ID0gdHJ1ZVxuICAgIGxldCBzZWxlY3RcblxuICAgIGlmICghdGhpcy5zLnByZXBhcmVkQ29sdW1ucykge1xuICAgICAgY29sbGVjdGlvblJlYWR5ID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY29sbGVjdGlvblJlYWR5KSB7XG4gICAgICBzZWxlY3QgPSBzZWxlY3RDYWxjdWxhdG9yKHt0YWJsZTogdGhpc30pXG4gICAgfVxuXG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdXNlQ29sbGVjdGlvbih7XG4gICAgICBhYmlsaXRpZXM6IHRoaXMuYWJpbGl0aWVzVG9Mb2FkKCksXG4gICAgICBkZWZhdWx0UGFyYW1zOiB0aGlzLnByb3BzLmRlZmF1bHRQYXJhbXMsXG4gICAgICBjb2xsZWN0aW9uOiB0aGlzLnByb3BzLmNvbGxlY3Rpb24sXG4gICAgICBncm91cEJ5OiB0aGlzLnByb3BzLmdyb3VwQnksXG4gICAgICBpZkNvbmRpdGlvbjogY29sbGVjdGlvblJlYWR5LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5wcm9wcy5tb2RlbENsYXNzLFxuICAgICAgb25Nb2RlbHNMb2FkZWQ6IHRoaXMucHJvcHMub25Nb2RlbHNMb2FkZWQsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IHRoaXMucHJvcHMubm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgIHByZWxvYWRzOiB0aGlzLnN0YXRlLnByZWxvYWQsXG4gICAgICBxdWVyeU1ldGhvZDogdGhpcy5wcm9wcy5xdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnM6IHRoaXMucHJvcHMuc2VsZWN0Q29sdW1uc1xuICAgIH0pXG4gICAgdGhpcy5xdWVyeVdpdGhvdXRQYWdpbmF0aW9uID0gdXNlTWVtbyhcbiAgICAgICgpID0+IHRoaXMuY29sbGVjdGlvbj8ucXVlcnk/LmNsb25lKCk/LmV4Y2VwdChcInBhZ2VcIiksXG4gICAgICBbdGhpcy5jb2xsZWN0aW9uLnF1ZXJ5XVxuICAgIClcblxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHMsIFwib25EcmFnU3RhcnRcIiwgdGhpcy50dC5vbkRyYWdTdGFydClcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ0VuZEFuaW1hdGlvblwiLCB0aGlzLnR0Lm9uRHJhZ0VuZEFuaW1hdGlvbilcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5ldmVudHMsIFwiY29sdW1uVmlzaWJpbGl0eVVwZGF0ZWRcIiwgdGhpcy50dC5vbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkKVxuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2NvbHVtbnNUb1Nob3c6IHRoaXMuZ2V0Q29sdW1uc1RvU2hvdyh0aGlzLnMuY29sdW1ucyksIGxhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxuICBvbkRyYWdTdGFydCA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoOTk5OSlcbiAgb25EcmFnRW5kQW5pbWF0aW9uID0gKHtpdGVtfSkgPT4gaXRlbS5hbmltYXRlZFpJbmRleC5zZXRWYWx1ZSgwKVxuXG4gIGFzeW5jIGxvYWRDdXJyZW50V29ya3BsYWNlKCkge1xuICAgIGNvbnN0IFdvcmtwbGFjZSA9IG1vZGVsQ2xhc3NSZXF1aXJlKFwiV29ya3BsYWNlXCIpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgV29ya3BsYWNlLmN1cnJlbnQoKVxuICAgIGNvbnN0IGN1cnJlbnRXb3JrcGxhY2UgPSBkaWdnKHJlc3VsdCwgXCJjdXJyZW50XCIsIDApXG5cbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50V29ya3BsYWNlfSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRDdXJyZW50V29ya3BsYWNlQ291bnQoKSB7XG4gICAgY29uc3QgV29ya3BsYWNlTGluayA9IG1vZGVsQ2xhc3NSZXF1aXJlKFwiV29ya3BsYWNlTGlua1wiKVxuICAgIGNvbnN0IGN1cnJlbnRXb3JrcGxhY2VDb3VudCA9IGF3YWl0IFdvcmtwbGFjZUxpbmtcbiAgICAgIC5yYW5zYWNrKHtcbiAgICAgICAgcmVzb3VyY2VfdHlwZV9lcTogdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lLFxuICAgICAgICB3b3JrcGxhY2VfaWRfZXE6IHRoaXMucy5jdXJyZW50V29ya3BsYWNlLmlkKClcbiAgICAgIH0pXG4gICAgICAuY291bnQoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZUNvdW50fSlcbiAgfVxuXG4gIGdldENvbHVtbnNUb1Nob3coY29sdW1ucykge1xuICAgIHJldHVybiBjb2x1bW5zXG4gICAgICAuZmlsdGVyKCh7Y29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW59KSA9PiBjb2x1bW5WaXNpYmxlKGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1uKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRhYmxlU2V0dGluZ0NvbHVtbi5wb3NpdGlvbigpIC0gYi50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRUYWJsZVNldHRpbmcoKSB7XG4gICAgdGhpcy50YWJsZVNldHRpbmdzID0gbmV3IFRhYmxlU2V0dGluZ3Moe3RhYmxlOiB0aGlzfSlcblxuICAgIGNvbnN0IHRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMudGFibGVTZXR0aW5ncy5sb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MoKVxuICAgIGNvbnN0IHtjb2x1bW5zLCBwcmVsb2FkfSA9IHRoaXMudGFibGVTZXR0aW5ncy5wcmVwYXJlZENvbHVtbnModGFibGVTZXR0aW5nKVxuICAgIGNvbnN0IHt3aWR0aH0gPSB0aGlzLnNcbiAgICBjb25zdCB3aWR0aHMgPSBuZXcgV2lkdGhzKHtjb2x1bW5zLCB0YWJsZTogdGhpcywgd2lkdGh9KVxuICAgIGNvbnN0IGNvbHVtbnNUb1Nob3cgPSB0aGlzLmdldENvbHVtbnNUb1Nob3coY29sdW1ucylcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbHVtbnNUb1Nob3csXG4gICAgICBwcmVwYXJlZENvbHVtbnM6IGNvbHVtbnMsXG4gICAgICBwcmVsb2FkOiB0aGlzLm1lcmdlZFByZWxvYWRzKHByZWxvYWQpLFxuICAgICAgdGFibGVTZXR0aW5nLFxuICAgICAgdGFibGVTZXR0aW5nTG9hZGVkOiB0cnVlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB0YWJsZVNldHRpbmcuZnVsbENhY2hlS2V5KCksXG4gICAgICB3aWR0aHNcbiAgICB9KVxuICB9XG5cbiAgdXBkYXRlU2V0dGluZ3NGdWxsQ2FjaGVLZXkgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHt0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk6IHRoaXMuc3RhdGUudGFibGVTZXR0aW5nLmZ1bGxDYWNoZUtleSgpfSlcblxuICBjb2x1bW5zQXNBcnJheSA9ICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuY29sdW1ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNvbHVtbnMoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNvbHVtbnNcbiAgfVxuXG4gIG1lcmdlZFByZWxvYWRzKHByZWxvYWQpIHtcbiAgICBjb25zdCB7cHJlbG9hZHN9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBtZXJnZWRQcmVsb2FkcyA9IFtdXG5cbiAgICBpZiAocHJlbG9hZHMpIG1lcmdlZFByZWxvYWRzID0gbWVyZ2VkUHJlbG9hZHMuY29uY2F0KHByZWxvYWRzKVxuICAgIGlmIChwcmVsb2FkKSBtZXJnZWRQcmVsb2FkcyA9IG1lcmdlZFByZWxvYWRzLmNvbmNhdChwcmVsb2FkKVxuXG4gICAgcmV0dXJuIHVuaXF1bml6ZShtZXJnZWRQcmVsb2FkcylcbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qge21vZGVsQ2xhc3MsIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsIG5vUmVjb3Jkc0ZvdW5kQ29udGVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y29sbGVjdGlvbiwgY3VycmVudFVzZXJ9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtxdWVyeU5hbWUsIHF1ZXJ5U05hbWUsIHNob3dGaWx0ZXJzfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGVscyxcbiAgICAgIG92ZXJhbGxDb3VudCxcbiAgICAgIHFQYXJhbXMsXG4gICAgICBxdWVyeSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudFxuICAgIH0gPSBkaWdzKFxuICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgXCJtb2RlbHNcIixcbiAgICAgIFwib3ZlcmFsbENvdW50XCIsXG4gICAgICBcInFQYXJhbXNcIixcbiAgICAgIFwicXVlcnlcIixcbiAgICAgIFwicmVzdWx0XCIsXG4gICAgICBcInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50XCIsXG4gICAgICBcInNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcIlxuICAgIClcblxuICAgIGlmIChjb2xsZWN0aW9uICYmIGNvbGxlY3Rpb24uYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSAhPSBtb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTW9kZWwgY2xhc3MgZnJvbSBjb2xsZWN0aW9uICcke2NvbGxlY3Rpb24uYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX0nIGAgK1xuICAgICAgICBgZGlkbid0IG1hdGNoIG1vZGVsIGNsYXNzIG9uIHRhYmxlOiAnJHttb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX0nYFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBkYXRhU2V0PXt7Y2xhc3M6IHRoaXMuY2xhc3NOYW1lKCl9fSBvbkxheW91dD17dGhpcy50dC5vbkNvbnRhaW5lckxheW91dH0gc3R5bGU9e3RoaXMucHJvcHMuc3R5bGVzPy5jb250YWluZXJ9PlxuICAgICAgICB7c2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgJiZcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLW5vLXJlY29yZHMtYXZhaWxhYmxlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIHtub1JlY29yZHNBdmFpbGFibGVDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIG92ZXJhbGxDb3VudH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50ICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1uby1yZWNvcmRzLWZvdW5kLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIHtub1JlY29yZHNGb3VuZENvbnRlbnQoe21vZGVscywgcVBhcmFtcywgb3ZlcmFsbENvdW50fSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3Nob3dGaWx0ZXJzICYmXG4gICAgICAgICAgPEZpbHRlcnMgY3VycmVudFVzZXI9e2N1cnJlbnRVc2VyfSBtb2RlbENsYXNzPXttb2RlbENsYXNzfSBxdWVyeU5hbWU9e3F1ZXJ5TmFtZX0gcXVlcnlTTmFtZT17cXVlcnlTTmFtZX0gLz5cbiAgICAgICAgfVxuICAgICAgICB7cVBhcmFtcyAmJiBxdWVyeSAmJiByZXN1bHQgJiYgbW9kZWxzICYmICFzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCAmJiAhc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCAmJlxuICAgICAgICAgIHRoaXMuY2FyZE9yVGFibGUoKVxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgYWJpbGl0aWVzVG9Mb2FkICgpIHtcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSB7fVxuICAgIGNvbnN0IHthYmlsaXRpZXMsIG1vZGVsQ2xhc3N9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IG93bkFiaWxpdGllcyA9IFtdXG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXN0cm95RW5hYmxlZCkgb3duQWJpbGl0aWVzLnB1c2goXCJkZXN0cm95XCIpXG4gICAgaWYgKHRoaXMucHJvcHMuZWRpdE1vZGVsUGF0aCkgb3duQWJpbGl0aWVzLnB1c2goXCJlZGl0XCIpXG4gICAgaWYgKHRoaXMucHJvcHMudmlld01vZGVsUGF0aCkgb3duQWJpbGl0aWVzLnB1c2goXCJzaG93XCIpXG5cbiAgICBpZiAob3duQWJpbGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuXG4gICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxDbGFzc05hbWVdID0gb3duQWJpbGl0aWVzXG4gICAgfVxuXG4gICAgaWYgKGFiaWxpdGllcykge1xuICAgICAgZm9yIChjb25zdCBtb2RlbE5hbWUgaW4gYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmICghKG1vZGVsTmFtZSBpbiBhYmlsaXRpZXNUb0xvYWQpKSB7XG4gICAgICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsTmFtZV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5IG9mIGFiaWxpdGllc1ttb2RlbE5hbWVdKSB7XG4gICAgICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsTmFtZV0ucHVzaChhYmlsaXR5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFiaWxpdGllc1RvTG9hZFxuICB9XG5cbiAgY2FyZE9yVGFibGUgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFiaWxpdGllcyxcbiAgICAgIGFjdGlvbnNDb250ZW50LFxuICAgICAgYXBwSGlzdG9yeSxcbiAgICAgIGNhcmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbnRyb2xzLFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdFBhcmFtcyxcbiAgICAgIGRlc3Ryb3lFbmFibGVkLFxuICAgICAgZGVzdHJveU1lc3NhZ2UsXG4gICAgICBlZGl0TW9kZWxQYXRoLFxuICAgICAgZmlsdGVyQ2FyZCxcbiAgICAgIGZpbHRlckNvbnRlbnQsXG4gICAgICBmaWx0ZXJTdWJtaXRCdXR0b24sXG4gICAgICBmaWx0ZXJTdWJtaXRMYWJlbCxcbiAgICAgIGdyb3VwQnksXG4gICAgICBoZWFkZXIsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgbW9kZWxDbGFzcyxcbiAgICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgICBvbk1vZGVsc0xvYWRlZCxcbiAgICAgIHBhZ2luYXRlQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICBwcmVsb2FkcyxcbiAgICAgIHF1ZXJ5TWV0aG9kLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgc2VsZWN0LFxuICAgICAgc2VsZWN0Q29sdW1ucyxcbiAgICAgIHN0eWxlVUksXG4gICAgICB2aWV3TW9kZWxQYXRoLFxuICAgICAgd29ya3BsYWNlLFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuXG4gICAgbGV0IGhlYWRlckNvbnRlbnQsIFBhZ2luYXRpb25Db21wb25lbnRcblxuICAgIGlmICh0eXBlb2YgaGVhZGVyID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaGVhZGVyQ29udGVudCA9IGhlYWRlcih7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSlcbiAgICB9IGVsc2UgaWYgKGhlYWRlcikge1xuICAgICAgaGVhZGVyQ29udGVudCA9IGhlYWRlclxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJDb250ZW50ID0gbW9kZWxDbGFzcy5tb2RlbE5hbWUoKS5odW1hbih7Y291bnQ6IDJ9KVxuICAgIH1cblxuICAgIGlmICghcGFnaW5hdGVDb250ZW50KSB7XG4gICAgICBpZiAocGFnaW5hdGlvbkNvbXBvbmVudCkge1xuICAgICAgICBQYWdpbmF0aW9uQ29tcG9uZW50ID0gcGFnaW5hdGlvbkNvbXBvbmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IFBhZ2luYXRlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmxhdExpc3RTdHlsZSA9IHtcbiAgICAgIG92ZXJmbG93WDogXCJhdXRvXCJcbiAgICB9XG5cbiAgICBpZiAoc3R5bGVVSSkge1xuICAgICAgZmxhdExpc3RTdHlsZS5ib3JkZXIgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICAgIGZsYXRMaXN0U3R5bGUuYm9yZGVyUmFkaXVzID0gNVxuICAgIH1cblxuICAgIGNvbnN0IGZsYXRMaXN0ID0gKFxuICAgICAgPFRhYmxlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy50dC50YWJsZUNvbnRleHRWYWx1ZX0+XG4gICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgIGRhdGE9e21vZGVsc31cbiAgICAgICAgICBkYXRhU2V0PXt7XG4gICAgICAgICAgICBjbGFzczogY2xhc3NOYW1lcyhcImFwaS1tYWtlci0tdGFibGVcIiwgY2xhc3NOYW1lKSxcbiAgICAgICAgICAgIGNhY2hlS2V5OiB0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5LFxuICAgICAgICAgICAgbGFzdFVwZGF0ZTogdGhpcy5zLmxhc3RVcGRhdGVcbiAgICAgICAgICB9fVxuICAgICAgICAgIGV4dHJhRGF0YT17dGhpcy5zLmxhc3RVcGRhdGV9XG4gICAgICAgICAga2V5RXh0cmFjdG9yPXt0aGlzLnR0LmtleUV4dHJhdG9yfVxuICAgICAgICAgIExpc3RIZWFkZXJDb21wb25lbnQ9e0xpc3RIZWFkZXJDb21wb25lbnR9XG4gICAgICAgICAgcmVuZGVySXRlbT17dGhpcy50dC5yZW5kZXJJdGVtfVxuICAgICAgICAgIHNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvclxuICAgICAgICAgIHN0eWxlPXtmbGF0TGlzdFN0eWxlfVxuICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgIC8+XG4gICAgICA8L1RhYmxlQ29udGV4dC5Qcm92aWRlcj5cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2ZpbHRlckNvbnRlbnQgJiYgZmlsdGVyQ2FyZCAmJlxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLWZpbHRlci1jYXJkIG1iLTRcIj5cbiAgICAgICAgICAgIHt0aGlzLmZpbHRlckZvcm0oKX1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAge2ZpbHRlckNvbnRlbnQgJiYgIWZpbHRlckNhcmQgJiZcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0oKVxuICAgICAgICB9XG4gICAgICAgIHtjYXJkICYmXG4gICAgICAgICAgPENhcmRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcImxpdmUtdGFibGUtLXRhYmxlLWNhcmRcIiwgXCJtYi00XCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICBjb250cm9scz17dGhpcy50YWJsZUNvbnRyb2xzKCl9XG4gICAgICAgICAgICBoZWFkZXI9e2hlYWRlckNvbnRlbnR9XG4gICAgICAgICAgICBmb290ZXI9e3RoaXMudGFibGVGb290ZXIoKX1cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2ZsYXRMaXN0fVxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgfVxuICAgICAgICB7IWNhcmQgJiYgZmxhdExpc3R9XG4gICAgICAgIHtyZXN1bHQgJiYgUGFnaW5hdGlvbkNvbXBvbmVudCAmJlxuICAgICAgICAgIDxQYWdpbmF0aW9uQ29tcG9uZW50IHJlc3VsdD17cmVzdWx0fSAvPlxuICAgICAgICB9XG4gICAgICAgIHtyZXN1bHQgJiYgcGFnaW5hdGVDb250ZW50ICYmXG4gICAgICAgICAgcGFnaW5hdGVDb250ZW50KHtyZXN1bHR9KVxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICBvbkNvbnRhaW5lckxheW91dCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3dpZHRofSA9IGUubmF0aXZlRXZlbnQubGF5b3V0XG4gICAgY29uc3Qge3dpZHRoc30gPSB0aGlzLnNcblxuICAgIHRoaXMuc2V0U3RhdGUoe3dpZHRofSlcbiAgICBpZiAod2lkdGhzKSB3aWR0aHMudGFibGVXaWR0aCA9IHdpZHRoXG4gIH1cblxuICBvbkxpbmtzQ3JlYXRlZCA9ICh7YXJnc30pID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZVxuXG4gICAgaWYgKGFyZ3MuY3JlYXRlZFttb2RlbENsYXNzTmFtZV0pIHtcbiAgICAgIGNvbnN0IGFtb3VudENyZWF0ZWQgPSBhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdLmxlbmd0aFxuXG4gICAgICB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIGN1cnJlbnRXb3JrcGxhY2VDb3VudDogcHJldlN0YXRlLmN1cnJlbnRXb3JrcGxhY2VDb3VudCArIGFtb3VudENyZWF0ZWRcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIG9uTGlua3NEZXN0cm95ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0pIHtcbiAgICAgIGNvbnN0IGFtb3VudERlc3Ryb3llZCA9IGFyZ3MuZGVzdHJveWVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgLSBhbW91bnREZXN0cm95ZWRcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIGtleUV4dHJhdG9yID0gKG1vZGVsKSA9PiBgJHt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fS0ke21vZGVsLmlkKCl9YFxuXG4gIGZpbHRlckZvcm0gPSAoKSA9PiB7XG4gICAgY29uc3Qge2ZpbHRlckZvcm1SZWYsIHN1Ym1pdEZpbHRlciwgc3VibWl0RmlsdGVyRGVib3VuY2V9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtmaWx0ZXJDb250ZW50LCBmaWx0ZXJTdWJtaXRCdXR0b259ID0gdGhpcy5wXG4gICAgY29uc3Qge3F1ZXJ5UU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3Qge2ZpbHRlclN1Ym1pdExhYmVsfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cVBhcmFtc30gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJxUGFyYW1zXCIpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZvcm0gY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tZmlsdGVyLWZvcm1cIiBmb3JtUmVmPXtmaWx0ZXJGb3JtUmVmfSBvblN1Ym1pdD17dGhpcy50dC5vbkZpbHRlckZvcm1TdWJtaXR9IHNldEZvcm09e3RoaXMuc2V0U3RhdGVzLmZpbHRlckZvcm19PlxuICAgICAgICB7XCJzXCIgaW4gcVBhcmFtcyAmJlxuICAgICAgICAgIDxpbnB1dCBuYW1lPVwic1wiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT17cVBhcmFtcy5zfSAvPlxuICAgICAgICB9XG4gICAgICAgIHtmaWx0ZXJDb250ZW50KHtcbiAgICAgICAgICBvbkZpbHRlckNoYW5nZWQ6IHN1Ym1pdEZpbHRlcixcbiAgICAgICAgICBvbkZpbHRlckNoYW5nZWRXaXRoRGVsYXk6IHN1Ym1pdEZpbHRlckRlYm91bmNlLFxuICAgICAgICAgIHFQYXJhbXMsXG4gICAgICAgICAgcXVlcnlRTmFtZVxuICAgICAgICB9KX1cbiAgICAgICAge2ZpbHRlclN1Ym1pdEJ1dHRvbiAmJlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGxpdmUtdGFibGUtLXN1Ym1pdC1maWx0ZXItYnV0dG9uXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgc3R5bGU9e3ttYXJnaW5Ub3A6IFwiOHB4XCJ9fVxuICAgICAgICAgICAgdmFsdWU9e2ZpbHRlclN1Ym1pdExhYmVsIHx8IHRoaXMudChcIi5maWx0ZXJcIiwge2RlZmF1bHRWYWx1ZTogXCJGaWx0ZXJcIn0pfVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIDwvRm9ybT5cbiAgICApXG4gIH1cblxuICBvbkZpbHRlckNsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dGaWx0ZXJzOiAhdGhpcy5zdGF0ZS5zaG93RmlsdGVyc30pXG4gIH1cblxuICBvblBlclBhZ2VDaGFuZ2VkID0gKGUpID0+IHtcbiAgICBjb25zdCB7cXVlcnlOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IG5ld1BlclBhZ2VWYWx1ZSA9IGRpZ2coZSwgXCJ0YXJnZXRcIiwgXCJ2YWx1ZVwiKVxuICAgIGNvbnN0IHBlcktleSA9IGAke3F1ZXJ5TmFtZX1fcGVyYFxuICAgIGNvbnN0IHBhcmFtc0NoYW5nZSA9IHt9XG5cbiAgICBwYXJhbXNDaGFuZ2VbcGVyS2V5XSA9IG5ld1BlclBhZ2VWYWx1ZVxuXG4gICAgUGFyYW1zLmNoYW5nZVBhcmFtcyhwYXJhbXNDaGFuZ2UpXG4gIH1cblxuICByZW5kZXJJdGVtID0gKHtpbmRleCwgaXRlbTogbW9kZWx9KSA9PiB7XG4gICAgaWYgKCF0aGlzLnMudGFibGVTZXR0aW5nTG9hZGVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHt0aGlzLnQoXCIubG9hZGluZ19kb3RfZG90X2RvdFwiLCB7ZGVmYXVsdFZhbHVlOiBcIkxvYWRpbmcuLi5cIn0pfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8TW9kZWxSb3dcbiAgICAgICAgY2FjaGVLZXk9e21vZGVsLmNhY2hlS2V5KCl9XG4gICAgICAgIGNvbHVtbnM9e3RoaXMucy5jb2x1bW5zVG9TaG93fVxuICAgICAgICBjb2x1bW5XaWR0aHM9e3RoaXMuY29sdW1uV2lkdGhzKCl9XG4gICAgICAgIGV2ZW50cz17dGhpcy50dC5ldmVudHN9XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXttb2RlbC5pZCgpfVxuICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgIHRhYmxlPXt0aGlzfVxuICAgICAgICB0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk9e3RoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHN0eWxlRm9yQ29sdW1uID0gKHtjb2x1bW4sIGNvbHVtbkluZGV4LCBldmVuLCBzdHlsZSwgdHlwZX0pID0+IHtcbiAgICBjb25zdCB7c3R5bGVVSX0gPSB0aGlzLnBcbiAgICBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgIHBhZGRpbmc6IDgsXG4gICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgIH1cblxuICAgIGlmIChzdHlsZVVJKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGRlZmF1bHRTdHlsZSwge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW4gPyBcIiNmNWY1ZjVcIiA6IFwiI2ZmZlwiXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IFwiYWN0aW9uc1wiKSB7XG4gICAgICBkZWZhdWx0U3R5bGUuZmxleERpcmVjdGlvbiA9IFwicm93XCJcbiAgICAgIGRlZmF1bHRTdHlsZS5hbGlnbkl0ZW1zID0gXCJjZW50ZXJcIlxuXG4gICAgICBpZiAodGhpcy50dC5tZFVwKSB7XG4gICAgICAgIGRlZmF1bHRTdHlsZS5tYXJnaW5MZWZ0ID0gXCJhdXRvXCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRTdHlsZS5tYXJnaW5SaWdodCA9IFwiYXV0b1wiXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnR0Lm1kVXAgJiYgc3R5bGVVSSkge1xuICAgICAgZGVmYXVsdFN0eWxlLmJvcmRlclJpZ2h0ID0gXCIxcHggc29saWQgI2RiZGJkYlwiXG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgZGVmYXVsdFN0eWxlLFxuICAgICAgc3R5bGVcbiAgICApXG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9ySGVhZGVyID0gKHtjb2x1bW4sIGNvbHVtbkluZGV4LCBzdHlsZSwgdHlwZX0pID0+IHtcbiAgICBjb25zdCB7bWRVcH0gPSB0aGlzLnR0XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICBwYWRkaW5nOiA4XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT0gXCJhY3Rpb25zXCIgJiYgbWRVcCAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgZGVmYXVsdFN0eWxlLmJvcmRlclJpZ2h0ID0gXCIxcHggc29saWQgI2RiZGJkYlwiXG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSBPYmplY3QuYXNzaWduKFxuICAgICAgZGVmYXVsdFN0eWxlLFxuICAgICAgc3R5bGVcbiAgICApXG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9ySGVhZGVyVGV4dCgpIHtcbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IHtmb250V2VpZ2h0OiBcImJvbGRcIn1cblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgc3R5bGVGb3JSb3cgPSAoe2V2ZW59ID0ge30pID0+IHtcbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IHtcbiAgICAgIGZsZXg6IDEsXG4gICAgICBhbGlnbkl0ZW1zOiBcInN0cmV0Y2hcIlxuICAgIH1cblxuICAgIGlmIChldmVuICYmIHRoaXMucC5zdHlsZVVJKSB7XG4gICAgICBhY3R1YWxTdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNmNWY1ZjVcIlxuICAgIH1cblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgc3R5bGVGb3JSb3dIZWFkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7XG4gICAgICBmbGV4OiAxLFxuICAgICAgYWxpZ25JdGVtczogXCJzdHJldGNoXCJcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHRhYmxlQ29udHJvbHMoKSB7XG4gICAgY29uc3Qge2NvbnRyb2xzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7c2hvd1NldHRpbmdzfSA9IHRoaXMuc1xuICAgIGNvbnN0IHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwibW9kZWxzXCIsIFwicVBhcmFtc1wiLCBcInF1ZXJ5XCIsIFwicmVzdWx0XCIpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgIHtjb250cm9scyAmJiBjb250cm9scyh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSl9XG4gICAgICAgIDxQcmVzc2FibGUgZGF0YVNldD17e2NsYXNzOiBcImZpbHRlci1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25GaWx0ZXJDbGlja2VkfT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwic2VhcmNoXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8VmlldyBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCJ9fT5cbiAgICAgICAgICB7c2hvd1NldHRpbmdzICYmXG4gICAgICAgICAgICA8U2V0dGluZ3Mgb25SZXF1ZXN0Q2xvc2U9e3RoaXMudHQub25SZXF1ZXN0Q2xvc2VTZXR0aW5nc30gdGFibGU9e3RoaXN9IC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxQcmVzc2FibGUgZGF0YVNldD17e2NsYXNzOiBcInNldHRpbmdzLWJ1dHRvblwifX0gb25QcmVzcz17dGhpcy50dC5vblNldHRpbmdzQ2xpY2tlZH0+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiZ2VhclwiIHNpemU9ezIwfSAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgdGFibGVGb290ZXIoKSB7XG4gICAgY29uc3Qge3Jlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJyZXN1bHRcIilcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHJlc3VsdC5jdXJyZW50UGFnZSgpXG4gICAgY29uc3QgdG90YWxDb3VudCA9IHJlc3VsdC50b3RhbENvdW50KClcbiAgICBjb25zdCBwZXJQYWdlID0gcmVzdWx0LnBlclBhZ2UoKVxuICAgIGNvbnN0IHRvID0gTWF0aC5taW4oY3VycmVudFBhZ2UgKiBwZXJQYWdlLCB0b3RhbENvdW50KVxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IFwiU2hvd2luZyAle2Zyb219IHRvICV7dG99IG91dCBvZiAle3RvdGFsX2NvdW50fSB0b3RhbC5cIlxuICAgIGxldCBmcm9tID0gKChjdXJyZW50UGFnZSAtIDEpICogcGVyUGFnZSkgKyAxXG5cbiAgICBpZiAodG8gPT09IDApIGZyb20gPSAwXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIG1hcmdpblRvcDogMTB9fT5cbiAgICAgICAgPFZpZXcgZGF0YVNldD17e2NsYXNzOiBcInNob3dpbmctY291bnRzXCJ9fSBzdHlsZT17e2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHt0aGlzLnQoXCIuc2hvd2luZ19mcm9tX3RvX291dF9vZl90b3RhbFwiLCB7ZGVmYXVsdFZhbHVlLCBmcm9tLCB0bywgdG90YWxfY291bnQ6IHRvdGFsQ291bnR9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAge3RoaXMucC53b3JrcGxhY2UgJiYgdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3ttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgIHt0aGlzLnQoXCIueF9zZWxlY3RlZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIiV7c2VsZWN0ZWR9IHNlbGVjdGVkLlwiLCBzZWxlY3RlZDogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudH0pfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwZXItcGFnZS1zZWxlY3RcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtwZXJQYWdlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudHQub25QZXJQYWdlQ2hhbmdlZH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3BhZ2luYXRpb25PcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBjbGFzc05hbWUoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcImFwaS1tYWtlci0tdGFibGVcIl1cblxuICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHRoaXMucHJvcHMuY2xhc3NOYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBjbGFzc05hbWVzLmpvaW4oXCIgXCIpXG4gIH1cblxuICBjb2x1bW5Qcm9wcyhjb2x1bW4pIHtcbiAgICBjb25zdCBwcm9wcyA9IHt9XG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUudGV4dEFsaWduID0gXCJjZW50ZXJcIlxuICAgIH1cblxuICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIlxuICAgIH1cblxuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgaGVhZGVyUHJvcHMoY29sdW1uKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7fVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0Q2VudGVyKSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJjZW50ZXJcIlxuICAgIH1cblxuICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJlbmRcIlxuICAgIH1cblxuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgY29sdW1uV2lkdGhzKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLnMucHJlcGFyZWRDb2x1bW5zKSB7XG4gICAgICBjb2x1bW5XaWR0aHNbY29sdW1uLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCldID0gY29sdW1uLndpZHRoXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbldpZHRoc1xuICB9XG5cbiAgaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERyYWdnYWJsZVNvcnRcbiAgICAgICAgZGF0YT17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGV2ZW50cz17dGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzfVxuICAgICAgICBob3Jpem9udGFsXG4gICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5kcmFnTGlzdGtleUV4dHJhY3Rvcn1cbiAgICAgICAgb25JdGVtTW92ZWQ9e3RoaXMudHQub25JdGVtTW92ZWR9XG4gICAgICAgIG9uUmVvcmRlcmVkPXt0aGlzLnR0Lm9uUmVvcmRlcmVkfVxuICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LmRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnR9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGRyYWdMaXN0Q2FjaGVLZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gYCR7aXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfS0ke3RoaXMucy5yZXNpemluZ31gXG4gIGRyYWdMaXN0a2V5RXh0cmFjdG9yID0gKGl0ZW0pID0+IGl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKVxuXG4gIG9uSXRlbU1vdmVkID0gKHthbmltYXRpb25BcmdzLCBpdGVtSW5kZXgsIHgsIHl9KSA9PiB7XG4gICAgY29uc3QgYW5pbWF0ZWRQb3NpdGlvbiA9IGRpZ2codGhpcywgXCJzXCIsIFwiY29sdW1uc1RvU2hvd1wiLCBpdGVtSW5kZXgsIFwiYW5pbWF0ZWRQb3NpdGlvblwiKVxuXG4gICAgaWYgKGFuaW1hdGlvbkFyZ3MpIHtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltYXRlZFBvc2l0aW9uLCBhbmltYXRpb25BcmdzKS5zdGFydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFuaW1hdGVkUG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuICAgIH1cbiAgfVxuXG4gIG9uUmVvcmRlcmVkID0gYXN5bmMgKHtmcm9tSXRlbSwgZnJvbVBvc2l0aW9uLCB0b0l0ZW0sIHRvUG9zaXRpb259KSA9PiB7XG4gICAgaWYgKGZyb21Qb3NpdGlvbiA9PSB0b1Bvc2l0aW9uKSByZXR1cm4gLy8gT25seSBkbyByZXF1ZXN0cyBhbmQgcXVlcmllcyBpZiBjaGFuZ2VkXG5cbiAgICBjb25zdCBUYWJsZVNldHRpbmdDb2x1bW4gPSBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uY29uc3RydWN0b3JcbiAgICBjb25zdCB0b0NvbHVtbiA9IGF3YWl0IFRhYmxlU2V0dGluZ0NvbHVtbi5maW5kKHRvSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWQoKSkgLy8gTmVlZCB0byBsb2FkIGxhdGVzdCBwb3NpdGlvbiBiZWNhdXNlIEFjdHNBc0xpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0XG5cbiAgICBhd2FpdCBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4udXBkYXRlKHtwb3NpdGlvbjogdG9Db2x1bW4ucG9zaXRpb24oKX0pXG4gIH1cblxuICBkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50ID0gKHtpc0FjdGl2ZSwgaXRlbSwgdG91Y2hQcm9wc30pID0+IHtcbiAgICBjb25zdCB7YW5pbWF0ZWRXaWR0aCwgYW5pbWF0ZWRaSW5kZXgsIGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSA9IGl0ZW1cblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ29sdW1uXG4gICAgICAgIGFjdGl2ZT17aXNBY3RpdmV9XG4gICAgICAgIGFuaW1hdGVkV2lkdGg9e2FuaW1hdGVkV2lkdGh9XG4gICAgICAgIGFuaW1hdGVkWkluZGV4PXthbmltYXRlZFpJbmRleH1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIGtleT17dGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKX1cbiAgICAgICAgcmVzaXppbmc9e3RoaXMucy5yZXNpemluZ31cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0NvbHVtbj17dGFibGVTZXR0aW5nQ29sdW1ufVxuICAgICAgICB0b3VjaFByb3BzPXt0b3VjaFByb3BzfVxuICAgICAgICB3aWR0aHM9e3RoaXMucy53aWR0aHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGhlYWRlckNsYXNzTmFtZUZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW11cblxuICAgIGlmIChjb2x1bW4uY29tbW9uUHJvcHMgJiYgY29sdW1uLmNvbW1vblByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpXG4gICAgaWYgKGNvbHVtbi5oZWFkZXJQcm9wcyAmJiBjb2x1bW4uaGVhZGVyUHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWVzLnB1c2goY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSlcblxuICAgIHJldHVybiBjbGFzc05hbWVzXG4gIH1cblxuICBoZWFkZXJMYWJlbEZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSB0aGlzLnBcblxuICAgIGlmIChcImxhYmVsXCIgaW4gY29sdW1uKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5sYWJlbCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uLmxhYmVsXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgbW9kZWwgY2xhc3MgdGhyb3VnaCBwYXRoXG4gICAgaWYgKGNvbHVtbi5wYXRoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIGNvbHVtbi5wYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBkaWdnKGN1cnJlbnRNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicmVsYXRpb25zaGlwc1wiKVxuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzLmZpbmQoKHJlbGF0aW9uc2hpcEluQXJyYXkpID0+IHJlbGF0aW9uc2hpcEluQXJyYXkubmFtZSA9PSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGF0aFBhcnQpKVxuXG4gICAgICAgIGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUoZGlnZyhyZWxhdGlvbnNoaXAsIFwicmVzb3VyY2VfbmFtZVwiKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZSkgcmV0dXJuIGN1cnJlbnRNb2RlbENsYXNzLmh1bWFuQXR0cmlidXRlTmFtZShjb2x1bW4uYXR0cmlidXRlKVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gJ2xhYmVsJyBvciAnYXR0cmlidXRlJyB3YXMgZ2l2ZW5cIilcbiAgfVxuXG4gIG9uRmlsdGVyRm9ybVN1Ym1pdCA9ICgpID0+IHRoaXMuc3VibWl0RmlsdGVyKClcbiAgb25SZXF1ZXN0Q2xvc2VTZXR0aW5ncyA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogZmFsc2V9KVxuXG4gIG9uU2V0dGluZ3NDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogIXRoaXMucy5zaG93U2V0dGluZ3N9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlckZvcm0gPSBkaWdnKHRoaXMudHQuZmlsdGVyRm9ybVJlZiwgXCJjdXJyZW50XCIpXG4gICAgY29uc3Qge2FwcEhpc3Rvcnl9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHFQYXJhbXMgPSBQYXJhbXMuc2VyaWFsaXplRm9ybShmaWx0ZXJGb3JtKVxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IGNoYW5nZVBhcmFtc1BhcmFtcyA9IHt9XG5cbiAgICBjaGFuZ2VQYXJhbXNQYXJhbXNbcXVlcnlRTmFtZV0gPSBKU09OLnN0cmluZ2lmeShxUGFyYW1zKVxuXG4gICAgUGFyYW1zLmNoYW5nZVBhcmFtcyhjaGFuZ2VQYXJhbXNQYXJhbXMsIHthcHBIaXN0b3J5fSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlckRlYm91bmNlID0gZGVib3VuY2UodGhpcy50dC5zdWJtaXRGaWx0ZXIpXG59KSlcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVFBLElBQUksRUFBRUMsSUFBSSxRQUFPLFdBQVc7QUFDcEMsT0FBT0MsS0FBSyxJQUFHQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLFFBQU8sT0FBTztBQUN2RSxTQUFRQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsSUFBSSxRQUFPLGNBQWM7QUFDdEQsT0FBT0MsYUFBYSxNQUFNLG1CQUFtQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sbUJBQW1CO0FBQ3BDLE9BQU9DLFVBQVUsTUFBTSxZQUFZO0FBQ25DLE9BQU9DLFVBQVUsTUFBTSxlQUFlO0FBQ3RDLE9BQU9DLGFBQWEsTUFBTSxrQkFBa0I7QUFDNUMsT0FBT0MsUUFBUSxNQUFNLFVBQVU7QUFDL0IsT0FBT0MsYUFBYSxNQUFNLHlCQUF5QjtBQUNuRCxPQUFPQyxZQUFZLE1BQU0sUUFBUTtBQUNqQyxPQUFPQyxPQUFPLE1BQU0sV0FBVztBQUMvQixPQUFPQyxRQUFRLE1BQU0sd0JBQXdCO0FBQzdDLFNBQVFDLElBQUksUUFBTyxTQUFTO0FBQzVCLE9BQU9DLE1BQU0sTUFBTSxxQkFBcUI7QUFDeEMsT0FBT0MsWUFBWSxNQUFNLGlCQUFpQjtBQUMxQyxPQUFPQyxZQUFZLE1BQU0saUJBQWlCO0FBQzFDLE9BQU9DLElBQUksTUFBTSxlQUFlO0FBQ2hDLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsT0FBT0MsSUFBSSxNQUFNLDRCQUE0QjtBQUM3QyxPQUFPQyxpQkFBaUIsTUFBTSx3QkFBd0I7QUFDdEQsT0FBT0MsUUFBUSxNQUFNLGFBQWE7QUFDbEMsT0FBT0MsUUFBUSxNQUFNLHVCQUF1QjtBQUM1QyxPQUFPQyxNQUFN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
|
|
977
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiZGlncyIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwidXNlUmVmIiwiQW5pbWF0ZWQiLCJQbGF0Zm9ybSIsIlByZXNzYWJsZSIsIlZpZXciLCJCYXNlQ29tcG9uZW50IiwiQ2FyZCIsImNsYXNzTmFtZXMiLCJDb2xsZWN0aW9uIiwiY29sdW1uVmlzaWJsZSIsImRlYm91bmNlIiwiRHJhZ2dhYmxlU29ydCIsIkV2ZW50RW1pdHRlciIsIkZpbHRlcnMiLCJGbGF0TGlzdCIsIkZvcm0iLCJIZWFkZXIiLCJIZWFkZXJDb2x1bW4iLCJIZWFkZXJTZWxlY3QiLCJJY29uIiwiaW5jb3Jwb3JhdGUiLCJpbmZsZWN0aW9uIiwibWVtbyIsIm1vZGVsQ2xhc3NSZXF1aXJlIiwiTW9kZWxSb3ciLCJQYWdpbmF0ZSIsIlBhcmFtcyIsIlByb3BUeXBlcyIsIlJvdyIsInNlbGVjdENhbGN1bGF0b3IiLCJTZWxlY3QiLCJTZXR0aW5ncyIsInNoYXBlQ29tcG9uZW50IiwiVGFibGVTZXR0aW5ncyIsIlRleHQiLCJ1bmlxdW5pemUiLCJ1c2VCcmVha3BvaW50IiwidXNlQ29sbGVjdGlvbiIsInVzZUkxOG4iLCJ1c2VFdmVudEVtaXR0ZXIiLCJ1c2VNb2RlbEV2ZW50IiwidXNlUXVlcnlQYXJhbXMiLCJXaWR0aHMiLCJwYWdpbmF0aW9uT3B0aW9ucyIsIldvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94IiwibGF6eSIsIlRhYmxlQ29udGV4dCIsIkxpc3RIZWFkZXJDb21wb25lbnQiLCJzZXR1cCIsInVzZVN0YXRlcyIsImxhc3RVcGRhdGUiLCJEYXRlIiwicmVuZGVyIiwibWRVcCIsInRhYmxlQ29udGV4dFZhbHVlIiwidGFibGUiLCJjb2xsZWN0aW9uIiwiZXZlbnRzIiwicXVlcnlXaXRob3V0UGFnaW5hdGlvbiIsInQiLCJ0dCIsInF1ZXJ5Iiwib25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCIsImNyZWF0ZUVsZW1lbnQiLCJkYXRhU2V0IiwiY2xhc3MiLCJzdHlsZSIsInN0eWxlRm9yUm93SGVhZGVyIiwicCIsIndvcmtwbGFjZSIsInMiLCJjdXJyZW50V29ya3BsYWNlIiwic3R5bGVGb3JIZWFkZXIiLCJ3aWR0aCIsInVuZGVmaW5lZCIsIm1hcmdpbkhvcml6b250YWwiLCJtYXJnaW5MZWZ0IiwiZGVmYXVsdFZhbHVlIiwicHJlcGFyZWRDb2x1bW5zIiwiRnJhZ21lbnQiLCJoZWFkZXJzQ29udGVudEZyb21Db2x1bW5zIiwidHlwZSIsInNldFN0YXRlIiwiQXBpTWFrZXJUYWJsZSIsImRlZmF1bHRQcm9wcyIsImNhcmQiLCJjdXJyZW50VXNlciIsImRlc3Ryb3lFbmFibGVkIiwiZmlsdGVyQ2FyZCIsImZpbHRlclN1Ym1pdEJ1dHRvbiIsIm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQiLCJub1JlY29yZHNGb3VuZENvbnRlbnQiLCJwcmVsb2FkcyIsInNlbGVjdCIsInN0eWxlVUkiLCJwcm9wVHlwZXMiLCJhYmlsaXRpZXMiLCJvYmplY3QiLCJhY3Rpb25zQ29udGVudCIsImZ1bmMiLCJhcHBIaXN0b3J5IiwiYm9vbCIsImlzUmVxdWlyZWQiLCJjbGFzc05hbWUiLCJzdHJpbmciLCJpbnN0YW5jZU9mIiwiY29sdW1ucyIsIm9uZU9mVHlwZSIsImFycmF5IiwiY29udHJvbHMiLCJkZWZhdWx0RGF0ZUZvcm1hdE5hbWUiLCJkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lIiwiZGVmYXVsdFBhcmFtcyIsImRlc3Ryb3lNZXNzYWdlIiwiZWRpdE1vZGVsUGF0aCIsImZpbHRlckNvbnRlbnQiLCJmaWx0ZXJTdWJtaXRMYWJlbCIsIm5vZGUiLCJncm91cEJ5IiwiaGVhZGVyIiwiaWRlbnRpZmllciIsIm1vZGVsQ2xhc3MiLCJvbk1vZGVsc0xvYWRlZCIsInBhZ2luYXRlQ29udGVudCIsInBhZ2luYXRpb25Db21wb25lbnQiLCJxdWVyeU1ldGhvZCIsInF1ZXJ5TmFtZSIsInNlbGVjdENvbHVtbnMiLCJzdHlsZXMiLCJ2aWV3TW9kZWxQYXRoIiwiZHJhZ2dhYmxlU29ydEV2ZW50cyIsInRhYmxlU2V0dGluZ3MiLCJuYW1lc3BhY2UiLCJuYW1lIiwiYnJlYWtwb2ludCIsInF1ZXJ5UGFyYW1zIiwic2V0SW5zdGFuY2UiLCJmaWx0ZXJGb3JtUmVmIiwiY29sbGVjdGlvbktleSIsIm1vZGVsQ2xhc3NEYXRhIiwicHJvcHMiLCJxdWVyeVNOYW1lIiwiY29sdW1uc0FzQXJyYXkiLCJjdXJyZW50V29ya3BsYWNlQ291bnQiLCJmaWx0ZXJGb3JtIiwiY29sdW1uc1RvU2hvdyIsImRyYWdnZWRDb2x1bW4iLCJwcmVsb2FkIiwicXVlcnlRTmFtZSIsInF1ZXJ5UGFnZU5hbWUiLCJyZXNpemluZyIsInNob3dGaWx0ZXJzIiwiQm9vbGVhbiIsInNob3dTZXR0aW5ncyIsInRhYmxlU2V0dGluZyIsInRhYmxlU2V0dGluZ0xvYWRlZCIsInRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSIsIndpZHRocyIsImNhY2hlS2V5IiwibG9hZEN1cnJlbnRXb3JrcGxhY2UiLCJ0aGVuIiwibG9hZEN1cnJlbnRXb3JrcGxhY2VDb3VudCIsImlkIiwibG9hZFRhYmxlU2V0dGluZyIsIm9uTGlua3NDcmVhdGVkIiwib25MaW5rc0Rlc3Ryb3llZCIsImNvbGxlY3Rpb25SZWFkeSIsImFiaWxpdGllc1RvTG9hZCIsImlmQ29uZGl0aW9uIiwicGFnaW5hdGlvbiIsInN0YXRlIiwiY2xvbmUiLCJleGNlcHQiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ0VuZEFuaW1hdGlvbiIsImdldENvbHVtbnNUb1Nob3ciLCJpdGVtIiwiYW5pbWF0ZWRaSW5kZXgiLCJzZXRWYWx1ZSIsIldvcmtwbGFjZSIsInJlc3VsdCIsImN1cnJlbnQiLCJXb3JrcGxhY2VMaW5rIiwicmFuc2FjayIsInJlc291cmNlX3R5cGVfZXEiLCJ3b3JrcGxhY2VfaWRfZXEiLCJjb3VudCIsImZpbHRlciIsImNvbHVtbiIsInRhYmxlU2V0dGluZ0NvbHVtbiIsInNvcnQiLCJhIiwiYiIsInBvc2l0aW9uIiwibG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzIiwibWVyZ2VkUHJlbG9hZHMiLCJmdWxsQ2FjaGVLZXkiLCJ1cGRhdGVTZXR0aW5nc0Z1bGxDYWNoZUtleSIsImNvbmNhdCIsIm1vZGVscyIsIm92ZXJhbGxDb3VudCIsInFQYXJhbXMiLCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCIsInNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQiLCJhcmdzIiwiRXJyb3IiLCJvbkxheW91dCIsIm9uQ29udGFpbmVyTGF5b3V0IiwiY29udGFpbmVyIiwiY2FyZE9yVGFibGUiLCJvd25BYmlsaXRpZXMiLCJwdXNoIiwibGVuZ3RoIiwibW9kZWxDbGFzc05hbWUiLCJtb2RlbE5hbWUiLCJhYmlsaXR5IiwicmVzdFByb3BzIiwiaGVhZGVyQ29udGVudCIsIlBhZ2luYXRpb25Db21wb25lbnQiLCJodW1hbiIsImZsYXRMaXN0U3R5bGUiLCJvdmVyZmxvd1giLCJib3JkZXIiLCJib3JkZXJSYWRpdXMiLCJmbGF0TGlzdCIsIlByb3ZpZGVyIiwidmFsdWUiLCJfZXh0ZW5kcyIsImRhdGEiLCJleHRyYURhdGEiLCJrZXlFeHRyYWN0b3IiLCJrZXlFeHRyYXRvciIsInJlbmRlckl0ZW0iLCJzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3IiLCJ0YWJsZUNvbnRyb2xzIiwiZm9vdGVyIiwidGFibGVGb290ZXIiLCJlIiwibmF0aXZlRXZlbnQiLCJsYXlvdXQiLCJ0YWJsZVdpZHRoIiwiY3JlYXRlZCIsImFtb3VudENyZWF0ZWQiLCJwcmV2U3RhdGUiLCJkZXN0cm95ZWQiLCJhbW91bnREZXN0cm95ZWQiLCJtb2RlbCIsInN1Ym1pdEZpbHRlciIsInN1Ym1pdEZpbHRlckRlYm91bmNlIiwiZm9ybVJlZiIsIm9uU3VibWl0Iiwib25GaWx0ZXJGb3JtU3VibWl0Iiwic2V0Rm9ybSIsInNldFN0YXRlcyIsIm9uRmlsdGVyQ2hhbmdlZCIsIm9uRmlsdGVyQ2hhbmdlZFdpdGhEZWxheSIsIm1hcmdpblRvcCIsIm9uRmlsdGVyQ2xpY2tlZCIsInByZXZlbnREZWZhdWx0Iiwib25QZXJQYWdlQ2hhbmdlZCIsIm5ld1BlclBhZ2VWYWx1ZSIsInBlcktleSIsInBhcmFtc0NoYW5nZSIsImNoYW5nZVBhcmFtcyIsImluZGV4IiwiY29sdW1uV2lkdGhzIiwia2V5Iiwic3R5bGVGb3JDb2x1bW4iLCJjb2x1bW5JbmRleCIsImV2ZW4iLCJkZWZhdWx0U3R5bGUiLCJqdXN0aWZ5Q29udGVudCIsInBhZGRpbmciLCJvdmVyZmxvdyIsIk9iamVjdCIsImFzc2lnbiIsImJhY2tncm91bmRDb2xvciIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSaWdodCIsImFjdHVhbFN0eWxlIiwic3R5bGVGb3JIZWFkZXJUZXh0IiwiZm9udFdlaWdodCIsInN0eWxlRm9yUm93IiwiZmxleCIsIm9uUHJlc3MiLCJzaXplIiwib25SZXF1ZXN0Q2xvc2UiLCJvblJlcXVlc3RDbG9zZVNldHRpbmdzIiwib25TZXR0aW5nc0NsaWNrZWQiLCJjdXJyZW50UGFnZSIsInRvdGFsQ291bnQiLCJwZXJQYWdlIiwidG8iLCJNYXRoIiwibWluIiwiZnJvbSIsInRvdGFsX2NvdW50Iiwic2VsZWN0ZWQiLCJvbkNoYW5nZSIsIm9wdGlvbnMiLCJqb2luIiwiY29sdW1uUHJvcHMiLCJ0ZXh0Q2VudGVyIiwidGV4dEFsaWduIiwidGV4dFJpZ2h0IiwiaGVhZGVyUHJvcHMiLCJob3Jpem9udGFsIiwiZHJhZ0xpc3RrZXlFeHRyYWN0b3IiLCJvbkl0ZW1Nb3ZlZCIsIm9uUmVvcmRlcmVkIiwiZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudCIsImRyYWdMaXN0Q2FjaGVLZXlFeHRyYWN0b3IiLCJhbmltYXRpb25BcmdzIiwiaXRlbUluZGV4IiwieCIsInkiLCJhbmltYXRlZFBvc2l0aW9uIiwidGltaW5nIiwic3RhcnQiLCJmcm9tSXRlbSIsImZyb21Qb3NpdGlvbiIsInRvSXRlbSIsInRvUG9zaXRpb24iLCJUYWJsZVNldHRpbmdDb2x1bW4iLCJjb25zdHJ1Y3RvciIsInRvQ29sdW1uIiwiZmluZCIsInVwZGF0ZSIsImlzQWN0aXZlIiwidG91Y2hQcm9wcyIsImFuaW1hdGVkV2lkdGgiLCJhY3RpdmUiLCJoZWFkZXJDbGFzc05hbWVGb3JDb2x1bW4iLCJjb21tb25Qcm9wcyIsImhlYWRlckxhYmVsRm9yQ29sdW1uIiwibGFiZWwiLCJjdXJyZW50TW9kZWxDbGFzcyIsInBhdGgiLCJwYXRoUGFydCIsInJlbGF0aW9uc2hpcHMiLCJyZWxhdGlvbnNoaXAiLCJyZWxhdGlvbnNoaXBJbkFycmF5IiwidW5kZXJzY29yZSIsImF0dHJpYnV0ZSIsImh1bWFuQXR0cmlidXRlTmFtZSIsImNoYW5nZVBhcmFtc1BhcmFtcyIsImFzT2JqZWN0IiwiT1MiLCJuYXZ0aXZlRm9ybVBhcmFtcyIsInNlcmlhbGl6ZUZvcm0iLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhYmxlL3RhYmxlLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RpZ2csIGRpZ3N9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFJlYWN0LCB7Y3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBbmltYXRlZCwgUGxhdGZvcm0sIFByZXNzYWJsZSwgVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IENhcmQgZnJvbSBcIi4uL2Jvb3RzdHJhcC9jYXJkXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBDb2xsZWN0aW9uIGZyb20gXCIuLi9jb2xsZWN0aW9uXCJcbmltcG9ydCBjb2x1bW5WaXNpYmxlIGZyb20gXCIuL2NvbHVtbi12aXNpYmxlXCJcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IERyYWdnYWJsZVNvcnQgZnJvbSBcIi4uL2RyYWdnYWJsZS1zb3J0L2luZGV4XCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiXG5pbXBvcnQgRmlsdGVycyBmcm9tIFwiLi9maWx0ZXJzXCJcbmltcG9ydCBGbGF0TGlzdCBmcm9tIFwiLi9jb21wb25lbnRzL2ZsYXQtbGlzdFwiXG5pbXBvcnQge0Zvcm19IGZyb20gXCIuLi9mb3JtXCJcbmltcG9ydCBIZWFkZXIgZnJvbSBcIi4vY29tcG9uZW50cy9oZWFkZXJcIlxuaW1wb3J0IEhlYWRlckNvbHVtbiBmcm9tIFwiLi9oZWFkZXItY29sdW1uXCJcbmltcG9ydCBIZWFkZXJTZWxlY3QgZnJvbSBcIi4vaGVhZGVyLXNlbGVjdFwiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vdXRpbHMvaWNvblwiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9tZW1vXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi4vbW9kZWwtY2xhc3MtcmVxdWlyZVwiXG5pbXBvcnQgTW9kZWxSb3cgZnJvbSBcIi4vbW9kZWwtcm93XCJcbmltcG9ydCBQYWdpbmF0ZSBmcm9tIFwiLi4vYm9vdHN0cmFwL3BhZ2luYXRlXCJcbmltcG9ydCBQYXJhbXMgZnJvbSBcIi4uL3BhcmFtc1wiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBSb3cgZnJvbSBcIi4vY29tcG9uZW50cy9yb3dcIlxuaW1wb3J0IHNlbGVjdENhbGN1bGF0b3IgZnJvbSBcIi4vc2VsZWN0LWNhbGN1bGF0b3JcIlxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi4vaW5wdXRzL3NlbGVjdFwiXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MvaW5kZXhcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9zaGFwZS1jb21wb25lbnRcIlxuaW1wb3J0IFRhYmxlU2V0dGluZ3MgZnJvbSBcIi4vdGFibGUtc2V0dGluZ3NcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4uL3V0aWxzL3RleHRcIlxuaW1wb3J0IHVuaXF1bml6ZSBmcm9tIFwidW5pcXVuaXplXCJcbmltcG9ydCB1c2VCcmVha3BvaW50IGZyb20gXCIuLi91c2UtYnJlYWtwb2ludFwiXG5pbXBvcnQgdXNlQ29sbGVjdGlvbiBmcm9tIFwiLi4vdXNlLWNvbGxlY3Rpb25cIlxuaW1wb3J0IHVzZUkxOG4gZnJvbSBcImkxOG4tb24tc3Rlcm9pZHMvc3JjL3VzZS1pMThuXCJcbmltcG9ydCB1c2VFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3VzZS1ldmVudC1lbWl0dGVyXCJcbmltcG9ydCB1c2VNb2RlbEV2ZW50IGZyb20gXCIuLi91c2UtbW9kZWwtZXZlbnRcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL2J1aWxkL3VzZS1xdWVyeS1wYXJhbXNcIlxuaW1wb3J0IFdpZHRocyBmcm9tIFwiLi93aWR0aHNcIlxuXG5jb25zdCBwYWdpbmF0aW9uT3B0aW9ucyA9IFszMCwgNjAsIDkwLCBbXCJBbGxcIiwgXCJhbGxcIl1dXG5jb25zdCBXb3JrZXJQbHVnaW5zQ2hlY2tBbGxDaGVja2JveCA9IFJlYWN0LmxhenkoKCkgPT4gaW1wb3J0KFwiLi93b3JrZXItcGx1Z2lucy1jaGVjay1hbGwtY2hlY2tib3hcIikpXG5jb25zdCBUYWJsZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgTGlzdEhlYWRlckNvbXBvbmVudCA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgTGlzdEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzZXR1cCgpIHtcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpXG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCB0YWJsZUNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoVGFibGVDb250ZXh0KVxuICAgIGNvbnN0IHRhYmxlID0gdGFibGVDb250ZXh0VmFsdWUudGFibGVcbiAgICBjb25zdCB7Y29sbGVjdGlvbiwgZXZlbnRzLCBxdWVyeVdpdGhvdXRQYWdpbmF0aW9uLCB0fSA9IHRhYmxlLnR0XG4gICAgY29uc3Qge3F1ZXJ5fSA9IGRpZ3MoY29sbGVjdGlvbiwgXCJxdWVyeVwiKVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJjb2x1bW5WaXNpYmlsaXR5VXBkYXRlZFwiLCB0aGlzLnR0Lm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJvdyBkYXRhU2V0PXt7Y2xhc3M6IFwiYXBpLW1ha2VyL3RhYmxlL2hlYWRlci1yb3dcIn19IHN0eWxlPXt0YWJsZS5zdHlsZUZvclJvd0hlYWRlcigpfT5cbiAgICAgICAge3RhYmxlLnAud29ya3BsYWNlICYmIHRhYmxlLnMuY3VycmVudFdvcmtwbGFjZSAmJlxuICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge3dpZHRoOiBtZFVwID8gNDEgOiB1bmRlZmluZWR9fSl9PlxuICAgICAgICAgICAgPFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94XG4gICAgICAgICAgICAgIGN1cnJlbnRXb3JrcGxhY2U9e3RhYmxlLnMuY3VycmVudFdvcmtwbGFjZX1cbiAgICAgICAgICAgICAgcXVlcnk9e3F1ZXJ5V2l0aG91dFBhZ2luYXRpb259XG4gICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luSG9yaXpvbnRhbDogXCJhdXRvXCJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshbWRVcCAmJlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17e21hcmdpbkxlZnQ6IDN9fT5cbiAgICAgICAgICAgICAgICB7dChcIi5zZWxlY3RfYWxsX2ZvdW5kXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2VsZWN0IGFsbCBmb3VuZFwifSl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt9fSl9PlxuICAgICAgICAgICAgPEhlYWRlclNlbGVjdCBwcmVwYXJlZENvbHVtbnM9e3RhYmxlLnMucHJlcGFyZWRDb2x1bW5zfSBxdWVyeT17cXVlcnl9IHRhYmxlPXt0YWJsZX0gLz5cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7bWRVcCAmJlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7dGFibGUuaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucygpfVxuICAgICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fSwgdHlwZTogXCJhY3Rpb25zXCJ9KX0gLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgPC9Sb3c+XG4gICAgKVxuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2xhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxufSkpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJUYWJsZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGNhcmQ6IHRydWUsXG4gICAgY3VycmVudFVzZXI6IG51bGwsXG4gICAgZGVzdHJveUVuYWJsZWQ6IHRydWUsXG4gICAgZmlsdGVyQ2FyZDogdHJ1ZSxcbiAgICBmaWx0ZXJTdWJtaXRCdXR0b246IHRydWUsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdW5kZWZpbmVkLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogdW5kZWZpbmVkLFxuICAgIHByZWxvYWRzOiBbXSxcbiAgICBzZWxlY3Q6IHt9LFxuICAgIHN0eWxlVUk6IHRydWUsXG4gICAgd29ya3BsYWNlOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgYWN0aW9uc0NvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFwcEhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2FyZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sbGVjdGlvbjogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ29sbGVjdGlvbiksXG4gICAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGNvbnRyb2xzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXJyZW50VXNlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0UGFyYW1zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlc3Ryb3lFbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGRlc3Ryb3lNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGVkaXRNb2RlbFBhdGg6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlckNhcmQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZmlsdGVyQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZmlsdGVyU3VibWl0TGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAgIGdyb3VwQnk6IFByb3BUeXBlcy5hcnJheSxcbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgaWRlbnRpZmllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhZ2luYXRlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHF1ZXJ5TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNlbGVjdENvbHVtbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlVUk6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmlld01vZGVsUGF0aDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgd29ya3BsYWNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG4gIH1cblxuICBkcmFnZ2FibGVTb3J0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICB0YWJsZVNldHRpbmdzID0gbnVsbFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIudGFibGVcIn0pXG4gICAgY29uc3Qge25hbWU6IGJyZWFrcG9pbnQsIG1kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1c2VRdWVyeVBhcmFtcygpXG5cbiAgICB0aGlzLnNldEluc3RhbmNlKHtcbiAgICAgIGJyZWFrcG9pbnQsXG4gICAgICBmaWx0ZXJGb3JtUmVmOiB1c2VSZWYoKSxcbiAgICAgIG1kVXAsXG4gICAgICB0XG4gICAgfSlcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25LZXkgPSBkaWdnKHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwiY29sbGVjdGlvbktleVwiKVxuICAgIGxldCBxdWVyeU5hbWUgPSB0aGlzLnByb3BzLnF1ZXJ5TmFtZVxuXG4gICAgaWYgKCFxdWVyeU5hbWUpIHF1ZXJ5TmFtZSA9IGNvbGxlY3Rpb25LZXlcblxuICAgIGNvbnN0IHF1ZXJ5U05hbWUgPSBgJHtxdWVyeU5hbWV9X3NgXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBjb2x1bW5zOiAoKSA9PiB0aGlzLmNvbHVtbnNBc0FycmF5KCksXG4gICAgICBjdXJyZW50V29ya3BsYWNlOiB1bmRlZmluZWQsXG4gICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IG51bGwsXG4gICAgICBmaWx0ZXJGb3JtOiBudWxsLFxuICAgICAgY29sdW1uc1RvU2hvdzogbnVsbCxcbiAgICAgIGRyYWdnZWRDb2x1bW46IG51bGwsXG4gICAgICBpZGVudGlmaWVyOiAoKSA9PiB0aGlzLnByb3BzLmlkZW50aWZpZXIgfHwgYCR7Y29sbGVjdGlvbktleX0tZGVmYXVsdGAsXG4gICAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpLFxuICAgICAgcHJlbG9hZDogdW5kZWZpbmVkLFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBxdWVyeVFOYW1lOiAoKSA9PiBgJHtxdWVyeU5hbWV9X3FgLFxuICAgICAgcXVlcnlQYWdlTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9wYWdlYCxcbiAgICAgIHF1ZXJ5U05hbWUsXG4gICAgICByZXNpemluZzogZmFsc2UsXG4gICAgICBzaG93RmlsdGVyczogKCkgPT4gQm9vbGVhbihxdWVyeVBhcmFtc1txdWVyeVNOYW1lXSksXG4gICAgICBzaG93U2V0dGluZ3M6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGhzOiBudWxsXG4gICAgfSlcblxuICAgIHRoaXMudGFibGVDb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlLFxuICAgICAgICByZXNpemluZzogdGhpcy5zLnJlc2l6aW5nLFxuICAgICAgICB0YWJsZTogdGhpc1xuICAgICAgfSksXG4gICAgICBbdGhpcy5zLmxhc3RVcGRhdGUsIHRoaXMucy5yZXNpemluZywgdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleV1cbiAgICApXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb3BzLndvcmtwbGFjZSkge1xuICAgICAgICB0aGlzLmxvYWRDdXJyZW50V29ya3BsYWNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpXSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnR0LnRhYmxlU2V0dGluZ3MgJiYgdGhpcy5zLndpZHRoKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKSwgdGhpcy5zLndpZHRoXSlcblxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2NyZWF0ZWRcIiwgdGhpcy50dC5vbkxpbmtzQ3JlYXRlZClcbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19kZXN0cm95ZWRcIiwgdGhpcy50dC5vbkxpbmtzRGVzdHJveWVkKVxuXG4gICAgbGV0IGNvbGxlY3Rpb25SZWFkeSA9IHRydWVcbiAgICBsZXQgc2VsZWN0XG5cbiAgICBpZiAoIXRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbGxlY3Rpb25SZWFkeSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25SZWFkeSkge1xuICAgICAgc2VsZWN0ID0gc2VsZWN0Q2FsY3VsYXRvcih7dGFibGU6IHRoaXN9KVxuICAgIH1cblxuICAgIHRoaXMuY29sbGVjdGlvbiA9IHVzZUNvbGxlY3Rpb24oe1xuICAgICAgYWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllc1RvTG9hZCgpLFxuICAgICAgZGVmYXVsdFBhcmFtczogdGhpcy5wcm9wcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5wcm9wcy5jb2xsZWN0aW9uLFxuICAgICAgZ3JvdXBCeTogdGhpcy5wcm9wcy5ncm91cEJ5LFxuICAgICAgaWZDb25kaXRpb246IGNvbGxlY3Rpb25SZWFkeSxcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMucHJvcHMubW9kZWxDbGFzcyxcbiAgICAgIG9uTW9kZWxzTG9hZGVkOiB0aGlzLnByb3BzLm9uTW9kZWxzTG9hZGVkLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICBwcmVsb2FkczogdGhpcy5zdGF0ZS5wcmVsb2FkLFxuICAgICAgcXVlcnlNZXRob2Q6IHRoaXMucHJvcHMucXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zOiB0aGlzLnByb3BzLnNlbGVjdENvbHVtbnNcbiAgICB9KVxuICAgIHRoaXMucXVlcnlXaXRob3V0UGFnaW5hdGlvbiA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB0aGlzLmNvbGxlY3Rpb24/LnF1ZXJ5Py5jbG9uZSgpPy5leGNlcHQoXCJwYWdlXCIpLFxuICAgICAgW3RoaXMuY29sbGVjdGlvbi5xdWVyeV1cbiAgICApXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdFbmRBbmltYXRpb25cIiwgdGhpcy50dC5vbkRyYWdFbmRBbmltYXRpb24pXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtjb2x1bW5zVG9TaG93OiB0aGlzLmdldENvbHVtbnNUb1Nob3codGhpcy5zLmNvbHVtbnMpLCBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDk5OTkpXG4gIG9uRHJhZ0VuZEFuaW1hdGlvbiA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoMClcblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZSgpIHtcbiAgICBjb25zdCBXb3JrcGxhY2UgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZVwiKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFdvcmtwbGFjZS5jdXJyZW50KClcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlID0gZGlnZyhyZXN1bHQsIFwiY3VycmVudFwiLCAwKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZX0pXG4gIH1cblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KCkge1xuICAgIGNvbnN0IFdvcmtwbGFjZUxpbmsgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZUxpbmtcIilcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlQ291bnQgPSBhd2FpdCBXb3JrcGxhY2VMaW5rXG4gICAgICAucmFuc2Fjayh7XG4gICAgICAgIHJlc291cmNlX3R5cGVfZXE6IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSxcbiAgICAgICAgd29ya3BsYWNlX2lkX2VxOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZS5pZCgpXG4gICAgICB9KVxuICAgICAgLmNvdW50KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2VDb3VudH0pXG4gIH1cblxuICBnZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcigoe2NvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSkgPT4gY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSAtIGIudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkpXG4gIH1cblxuICBhc3luYyBsb2FkVGFibGVTZXR0aW5nKCkge1xuICAgIHRoaXMudGFibGVTZXR0aW5ncyA9IG5ldyBUYWJsZVNldHRpbmdzKHt0YWJsZTogdGhpc30pXG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLnRhYmxlU2V0dGluZ3MubG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzKClcbiAgICBjb25zdCB7Y29sdW1ucywgcHJlbG9hZH0gPSB0aGlzLnRhYmxlU2V0dGluZ3MucHJlcGFyZWRDb2x1bW5zKHRhYmxlU2V0dGluZylcbiAgICBjb25zdCB7d2lkdGh9ID0gdGhpcy5zXG4gICAgY29uc3Qgd2lkdGhzID0gbmV3IFdpZHRocyh7Y29sdW1ucywgdGFibGU6IHRoaXMsIHdpZHRofSlcbiAgICBjb25zdCBjb2x1bW5zVG9TaG93ID0gdGhpcy5nZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5zVG9TaG93LFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgcHJlbG9hZDogdGhpcy5tZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSxcbiAgICAgIHRhYmxlU2V0dGluZyxcbiAgICAgIHRhYmxlU2V0dGluZ0xvYWRlZDogdHJ1ZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGFibGVTZXR0aW5nLmZ1bGxDYWNoZUtleSgpLFxuICAgICAgd2lkdGhzXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7dGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKX0pXG5cbiAgY29sdW1uc0FzQXJyYXkgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmNvbHVtbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zXG4gIH1cblxuICBtZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSB7XG4gICAgY29uc3Qge3ByZWxvYWRzfSA9IHRoaXMucHJvcHNcbiAgICBsZXQgbWVyZ2VkUHJlbG9hZHMgPSBbXVxuXG4gICAgaWYgKHByZWxvYWRzKSBtZXJnZWRQcmVsb2FkcyA9IG1lcmdlZFByZWxvYWRzLmNvbmNhdChwcmVsb2FkcylcbiAgICBpZiAocHJlbG9hZCkgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZClcblxuICAgIHJldHVybiB1bmlxdW5pemUobWVyZ2VkUHJlbG9hZHMpXG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHttb2RlbENsYXNzLCBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LCBub1JlY29yZHNGb3VuZENvbnRlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NvbGxlY3Rpb24sIGN1cnJlbnRVc2VyfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlOYW1lLCBxdWVyeVNOYW1lLCBzaG93RmlsdGVyc30gPSB0aGlzLnNcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbHMsXG4gICAgICBvdmVyYWxsQ291bnQsXG4gICAgICBxUGFyYW1zLFxuICAgICAgcXVlcnksXG4gICAgICByZXN1bHQsXG4gICAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcbiAgICB9ID0gZGlncyhcbiAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgIFwibW9kZWxzXCIsXG4gICAgICBcIm92ZXJhbGxDb3VudFwiLFxuICAgICAgXCJxUGFyYW1zXCIsXG4gICAgICBcInF1ZXJ5XCIsXG4gICAgICBcInJlc3VsdFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgICApXG5cbiAgICBpZiAoY29sbGVjdGlvbiAmJiBjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUgIT0gbW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZGVsIGNsYXNzIGZyb20gY29sbGVjdGlvbiAnJHtjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9JyBgICtcbiAgICAgICAgYGRpZG4ndCBtYXRjaCBtb2RlbCBjbGFzcyBvbiB0YWJsZTogJyR7bW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9J2BcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgZGF0YVNldD17e2NsYXNzOiB0aGlzLmNsYXNzTmFtZSgpfX0gb25MYXlvdXQ9e3RoaXMudHQub25Db250YWluZXJMYXlvdXR9IHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlcz8uY29udGFpbmVyfT5cbiAgICAgICAge3Nob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1uby1yZWNvcmRzLWF2YWlsYWJsZS1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1mb3VuZC1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzRm91bmRDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIG92ZXJhbGxDb3VudH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzaG93RmlsdGVycyAmJlxuICAgICAgICAgIDxGaWx0ZXJzIGN1cnJlbnRVc2VyPXtjdXJyZW50VXNlcn0gbW9kZWxDbGFzcz17bW9kZWxDbGFzc30gcXVlcnlOYW1lPXtxdWVyeU5hbWV9IHF1ZXJ5U05hbWU9e3F1ZXJ5U05hbWV9IC8+XG4gICAgICAgIH1cbiAgICAgICAge3FQYXJhbXMgJiYgcXVlcnkgJiYgcmVzdWx0ICYmIG1vZGVscyAmJiAhc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgJiYgIXNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQgJiZcbiAgICAgICAgICB0aGlzLmNhcmRPclRhYmxlKClcbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGFiaWxpdGllc1RvTG9hZCAoKSB7XG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0ge31cbiAgICBjb25zdCB7YWJpbGl0aWVzLCBtb2RlbENsYXNzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBvd25BYmlsaXRpZXMgPSBbXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveUVuYWJsZWQpIG93bkFiaWxpdGllcy5wdXNoKFwiZGVzdHJveVwiKVxuICAgIGlmICh0aGlzLnByb3BzLmVkaXRNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwiZWRpdFwiKVxuICAgIGlmICh0aGlzLnByb3BzLnZpZXdNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwic2hvd1wiKVxuXG4gICAgaWYgKG93bkFiaWxpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcblxuICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsQ2xhc3NOYW1lXSA9IG93bkFiaWxpdGllc1xuICAgIH1cblxuICAgIGlmIChhYmlsaXRpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIGFiaWxpdGllcykge1xuICAgICAgICBpZiAoIShtb2RlbE5hbWUgaW4gYWJpbGl0aWVzVG9Mb2FkKSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXRpZXNbbW9kZWxOYW1lXSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdLnB1c2goYWJpbGl0eSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhYmlsaXRpZXNUb0xvYWRcbiAgfVxuXG4gIGNhcmRPclRhYmxlICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhYmlsaXRpZXMsXG4gICAgICBhY3Rpb25zQ29udGVudCxcbiAgICAgIGFwcEhpc3RvcnksXG4gICAgICBjYXJkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb250cm9scyxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgZGVmYXVsdERhdGVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgICBkZXN0cm95RW5hYmxlZCxcbiAgICAgIGRlc3Ryb3lNZXNzYWdlLFxuICAgICAgZWRpdE1vZGVsUGF0aCxcbiAgICAgIGZpbHRlckNhcmQsXG4gICAgICBmaWx0ZXJDb250ZW50LFxuICAgICAgZmlsdGVyU3VibWl0QnV0dG9uLFxuICAgICAgZmlsdGVyU3VibWl0TGFiZWwsXG4gICAgICBncm91cEJ5LFxuICAgICAgaGVhZGVyLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgICBwYWdpbmF0ZUNvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgcHJlbG9hZHMsXG4gICAgICBxdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnMsXG4gICAgICBzdHlsZVVJLFxuICAgICAgdmlld01vZGVsUGF0aCxcbiAgICAgIHdvcmtwbGFjZSxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcblxuICAgIGxldCBoZWFkZXJDb250ZW50LCBQYWdpbmF0aW9uQ29tcG9uZW50XG5cbiAgICBpZiAodHlwZW9mIGhlYWRlciA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXIoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pXG4gICAgfSBlbHNlIGlmIChoZWFkZXIpIHtcbiAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXJcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyQ29udGVudCA9IG1vZGVsQ2xhc3MubW9kZWxOYW1lKCkuaHVtYW4oe2NvdW50OiAyfSlcbiAgICB9XG5cbiAgICBpZiAoIXBhZ2luYXRlQ29udGVudCkge1xuICAgICAgaWYgKHBhZ2luYXRpb25Db21wb25lbnQpIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IHBhZ2luYXRpb25Db21wb25lbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBQYWdpbmF0ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZsYXRMaXN0U3R5bGUgPSB7XG4gICAgICBvdmVyZmxvd1g6IFwiYXV0b1wiXG4gICAgfVxuXG4gICAgaWYgKHN0eWxlVUkpIHtcbiAgICAgIGZsYXRMaXN0U3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2RiZGJkYlwiXG4gICAgICBmbGF0TGlzdFN0eWxlLmJvcmRlclJhZGl1cyA9IDVcbiAgICB9XG5cbiAgICBjb25zdCBmbGF0TGlzdCA9IChcbiAgICAgIDxUYWJsZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMudHQudGFibGVDb250ZXh0VmFsdWV9PlxuICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICBkYXRhPXttb2RlbHN9XG4gICAgICAgICAgZGF0YVNldD17e1xuICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMoXCJhcGktbWFrZXItLXRhYmxlXCIsIGNsYXNzTmFtZSksXG4gICAgICAgICAgICBjYWNoZUtleTogdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSxcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHRyYURhdGE9e3RoaXMucy5sYXN0VXBkYXRlfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5rZXlFeHRyYXRvcn1cbiAgICAgICAgICBMaXN0SGVhZGVyQ29tcG9uZW50PXtMaXN0SGVhZGVyQ29tcG9uZW50fVxuICAgICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQucmVuZGVySXRlbX1cbiAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17ZmxhdExpc3RTdHlsZX1cbiAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmIGZpbHRlckNhcmQgJiZcbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItY2FyZCBtYi00XCI+XG4gICAgICAgICAgICB7dGhpcy5maWx0ZXJGb3JtKCl9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmICFmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtKClcbiAgICAgICAgfVxuICAgICAgICB7Y2FyZCAmJlxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJsaXZlLXRhYmxlLS10YWJsZS1jYXJkXCIsIFwibWItNFwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scygpfVxuICAgICAgICAgICAgaGVhZGVyPXtoZWFkZXJDb250ZW50fVxuICAgICAgICAgICAgZm9vdGVyPXt0aGlzLnRhYmxlRm9vdGVyKCl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmbGF0TGlzdH1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAgeyFjYXJkICYmIGZsYXRMaXN0fVxuICAgICAgICB7cmVzdWx0ICYmIFBhZ2luYXRpb25Db21wb25lbnQgJiZcbiAgICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudCByZXN1bHQ9e3Jlc3VsdH0gLz5cbiAgICAgICAgfVxuICAgICAgICB7cmVzdWx0ICYmIHBhZ2luYXRlQ29udGVudCAmJlxuICAgICAgICAgIHBhZ2luYXRlQ29udGVudCh7cmVzdWx0fSlcbiAgICAgICAgfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG5cbiAgb25Db250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHt3aWR0aH0gPSBlLm5hdGl2ZUV2ZW50LmxheW91dFxuICAgIGNvbnN0IHt3aWR0aHN9ID0gdGhpcy5zXG5cbiAgICB0aGlzLnNldFN0YXRlKHt3aWR0aH0pXG4gICAgaWYgKHdpZHRocykgd2lkdGhzLnRhYmxlV2lkdGggPSB3aWR0aFxuICB9XG5cbiAgb25MaW5rc0NyZWF0ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnRDcmVhdGVkID0gYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgKyBhbW91bnRDcmVhdGVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBvbkxpbmtzRGVzdHJveWVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnREZXN0cm95ZWQgPSBhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50IC0gYW1vdW50RGVzdHJveWVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBrZXlFeHRyYXRvciA9IChtb2RlbCkgPT4gYCR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX0tJHttb2RlbC5pZCgpfWBcblxuICBmaWx0ZXJGb3JtID0gKCkgPT4ge1xuICAgIGNvbnN0IHtmaWx0ZXJGb3JtUmVmLCBzdWJtaXRGaWx0ZXIsIHN1Ym1pdEZpbHRlckRlYm91bmNlfSA9IHRoaXMudHRcbiAgICBjb25zdCB7ZmlsdGVyQ29udGVudCwgZmlsdGVyU3VibWl0QnV0dG9ufSA9IHRoaXMucFxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtmaWx0ZXJTdWJtaXRMYWJlbH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3FQYXJhbXN9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicVBhcmFtc1wiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtIGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLWZpbHRlci1mb3JtXCIgZm9ybVJlZj17ZmlsdGVyRm9ybVJlZn0gb25TdWJtaXQ9e3RoaXMudHQub25GaWx0ZXJGb3JtU3VibWl0fSBzZXRGb3JtPXt0aGlzLnNldFN0YXRlcy5maWx0ZXJGb3JtfT5cbiAgICAgICAge1wic1wiIGluIHFQYXJhbXMgJiZcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cInNcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e3FQYXJhbXMuc30gLz5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCh7XG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkOiBzdWJtaXRGaWx0ZXIsXG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5OiBzdWJtaXRGaWx0ZXJEZWJvdW5jZSxcbiAgICAgICAgICBxUGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UU5hbWVcbiAgICAgICAgfSl9XG4gICAgICAgIHtmaWx0ZXJTdWJtaXRCdXR0b24gJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBsaXZlLXRhYmxlLS1zdWJtaXQtZmlsdGVyLWJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiBcIjhweFwifX1cbiAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXJTdWJtaXRMYWJlbCB8fCB0aGlzLnQoXCIuZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiRmlsdGVyXCJ9KX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgb25GaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFN0YXRlKHtzaG93RmlsdGVyczogIXRoaXMuc3RhdGUuc2hvd0ZpbHRlcnN9KVxuICB9XG5cbiAgb25QZXJQYWdlQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5TmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBuZXdQZXJQYWdlVmFsdWUgPSBkaWdnKGUsIFwidGFyZ2V0XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwZXJLZXkgPSBgJHtxdWVyeU5hbWV9X3BlcmBcbiAgICBjb25zdCBwYXJhbXNDaGFuZ2UgPSB7fVxuXG4gICAgcGFyYW1zQ2hhbmdlW3BlcktleV0gPSBuZXdQZXJQYWdlVmFsdWVcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMocGFyYW1zQ2hhbmdlKVxuICB9XG5cbiAgcmVuZGVySXRlbSA9ICh7aW5kZXgsIGl0ZW06IG1vZGVsfSkgPT4ge1xuICAgIGlmICghdGhpcy5zLnRhYmxlU2V0dGluZ0xvYWRlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kb3RcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGVsUm93XG4gICAgICAgIGNhY2hlS2V5PXttb2RlbC5jYWNoZUtleSgpfVxuICAgICAgICBjb2x1bW5zPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgY29sdW1uV2lkdGhzPXt0aGlzLmNvbHVtbldpZHRocygpfVxuICAgICAgICBldmVudHM9e3RoaXMudHQuZXZlbnRzfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17bW9kZWwuaWQoKX1cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5PXt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBzdHlsZUZvckNvbHVtbiA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgZXZlbiwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge3N0eWxlVUl9ID0gdGhpcy5wXG4gICAgY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICBwYWRkaW5nOiA4LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBpZiAoc3R5bGVVSSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihkZWZhdWx0U3R5bGUsIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBldmVuID8gXCIjZjVmNWY1XCIgOiBcIiNmZmZcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcImFjdGlvbnNcIikge1xuICAgICAgZGVmYXVsdFN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcInJvd1wiXG4gICAgICBkZWZhdWx0U3R5bGUuYWxpZ25JdGVtcyA9IFwiY2VudGVyXCJcblxuICAgICAgaWYgKHRoaXMudHQubWRVcCkge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luTGVmdCA9IFwiYXV0b1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luUmlnaHQgPSBcImF1dG9cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50dC5tZFVwICYmIHN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlciA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge21kVXB9ID0gdGhpcy50dFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOFxuICAgIH1cblxuICAgIGlmICh0eXBlICE9IFwiYWN0aW9uc1wiICYmIG1kVXAgJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlclRleHQoKSB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7Zm9udFdlaWdodDogXCJib2xkXCJ9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93ID0gKHtldmVufSA9IHt9KSA9PiB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7XG4gICAgICBmbGV4OiAxLFxuICAgICAgYWxpZ25JdGVtczogXCJzdHJldGNoXCJcbiAgICB9XG5cbiAgICBpZiAoZXZlbiAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgYWN0dWFsU3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZjVmNWY1XCJcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93SGVhZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge1xuICAgICAgZmxleDogMSxcbiAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICB0YWJsZUNvbnRyb2xzKCkge1xuICAgIGNvbnN0IHtjb250cm9sc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3Nob3dTZXR0aW5nc30gPSB0aGlzLnNcbiAgICBjb25zdCB7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogXCJyb3dcIn19PlxuICAgICAgICB7Y29udHJvbHMgJiYgY29udHJvbHMoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pfVxuICAgICAgICA8UHJlc3NhYmxlIGRhdGFTZXQ9e3tjbGFzczogXCJmaWx0ZXItYnV0dG9uXCJ9fSBvblByZXNzPXt0aGlzLnR0Lm9uRmlsdGVyQ2xpY2tlZH0+XG4gICAgICAgICAgPEljb24gbmFtZT1cInNlYXJjaFwiIHNpemU9ezIwfSAvPlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFZpZXcgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwifX0+XG4gICAgICAgICAge3Nob3dTZXR0aW5ncyAmJlxuICAgICAgICAgICAgPFNldHRpbmdzIG9uUmVxdWVzdENsb3NlPXt0aGlzLnR0Lm9uUmVxdWVzdENsb3NlU2V0dGluZ3N9IHRhYmxlPXt0aGlzfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8UHJlc3NhYmxlIGRhdGFTZXQ9e3tjbGFzczogXCJzZXR0aW5ncy1idXR0b25cIn19IG9uUHJlc3M9e3RoaXMudHQub25TZXR0aW5nc0NsaWNrZWR9PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImdlYXJcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIHRhYmxlRm9vdGVyKCkge1xuICAgIGNvbnN0IHtyZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicmVzdWx0XCIpXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSByZXN1bHQuY3VycmVudFBhZ2UoKVxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudCgpXG4gICAgY29uc3QgcGVyUGFnZSA9IHJlc3VsdC5wZXJQYWdlKClcbiAgICBjb25zdCB0byA9IE1hdGgubWluKGN1cnJlbnRQYWdlICogcGVyUGFnZSwgdG90YWxDb3VudClcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBcIlNob3dpbmcgJXtmcm9tfSB0byAle3RvfSBvdXQgb2YgJXt0b3RhbF9jb3VudH0gdG90YWwuXCJcbiAgICBsZXQgZnJvbSA9ICgoY3VycmVudFBhZ2UgLSAxKSAqIHBlclBhZ2UpICsgMVxuXG4gICAgaWYgKHRvID09PSAwKSBmcm9tID0gMFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXt7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBtYXJnaW5Ub3A6IDEwfX0+XG4gICAgICAgIDxWaWV3IGRhdGFTZXQ9e3tjbGFzczogXCJzaG93aW5nLWNvdW50c1wifX0gc3R5bGU9e3tmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLnNob3dpbmdfZnJvbV90b19vdXRfb2ZfdG90YWxcIiwge2RlZmF1bHRWYWx1ZSwgZnJvbSwgdG8sIHRvdGFsX2NvdW50OiB0b3RhbENvdW50fSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIHt0aGlzLnAud29ya3BsYWNlICYmIHRoaXMucy5jdXJyZW50V29ya3BsYWNlQ291bnQgIT09IG51bGwgJiZcbiAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt7bWFyZ2luTGVmdDogM319PlxuICAgICAgICAgICAgICB7dGhpcy50KFwiLnhfc2VsZWN0ZWRcIiwge2RlZmF1bHRWYWx1ZTogXCIle3NlbGVjdGVkfSBzZWxlY3RlZC5cIiwgc2VsZWN0ZWQ6IHRoaXMucy5jdXJyZW50V29ya3BsYWNlQ291bnR9KX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicGVyLXBhZ2Utc2VsZWN0XCJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17cGVyUGFnZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnR0Lm9uUGVyUGFnZUNoYW5nZWR9XG4gICAgICAgICAgICBvcHRpb25zPXtwYWdpbmF0aW9uT3B0aW9uc31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgY2xhc3NOYW1lKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJhcGktbWFrZXItLXRhYmxlXCJdXG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCh0aGlzLnByb3BzLmNsYXNzTmFtZSlcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NOYW1lcy5qb2luKFwiIFwiKVxuICB9XG5cbiAgY29sdW1uUHJvcHMoY29sdW1uKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7fVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0Q2VudGVyKSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwiY2VudGVyXCJcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICBwcm9wcy5zdHlsZS50ZXh0QWxpZ24gPSBcInJpZ2h0XCJcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHNcbiAgfVxuXG4gIGhlYWRlclByb3BzKGNvbHVtbikge1xuICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICBwcm9wcy5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiY2VudGVyXCJcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICBwcm9wcy5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiZW5kXCJcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHNcbiAgfVxuXG4gIGNvbHVtbldpZHRocygpIHtcbiAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5zLnByZXBhcmVkQ29sdW1ucykge1xuICAgICAgY29sdW1uV2lkdGhzW2NvbHVtbi50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpXSA9IGNvbHVtbi53aWR0aFxuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5XaWR0aHNcbiAgfVxuXG4gIGhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmFnZ2FibGVTb3J0XG4gICAgICAgIGRhdGE9e3RoaXMucy5jb2x1bW5zVG9TaG93fVxuICAgICAgICBldmVudHM9e3RoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50c31cbiAgICAgICAgaG9yaXpvbnRhbFxuICAgICAgICBrZXlFeHRyYWN0b3I9e3RoaXMudHQuZHJhZ0xpc3RrZXlFeHRyYWN0b3J9XG4gICAgICAgIG9uSXRlbU1vdmVkPXt0aGlzLnR0Lm9uSXRlbU1vdmVkfVxuICAgICAgICBvblJlb3JkZXJlZD17dGhpcy50dC5vblJlb3JkZXJlZH1cbiAgICAgICAgcmVuZGVySXRlbT17dGhpcy50dC5kcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50fVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBkcmFnTGlzdENhY2hlS2V5RXh0cmFjdG9yID0gKGl0ZW0pID0+IGAke2l0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKX0tJHt0aGlzLnMucmVzaXppbmd9YFxuICBkcmFnTGlzdGtleUV4dHJhY3RvciA9IChpdGVtKSA9PiBpdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKClcblxuICBvbkl0ZW1Nb3ZlZCA9ICh7YW5pbWF0aW9uQXJncywgaXRlbUluZGV4LCB4LCB5fSkgPT4ge1xuICAgIGNvbnN0IGFuaW1hdGVkUG9zaXRpb24gPSBkaWdnKHRoaXMsIFwic1wiLCBcImNvbHVtbnNUb1Nob3dcIiwgaXRlbUluZGV4LCBcImFuaW1hdGVkUG9zaXRpb25cIilcblxuICAgIGlmIChhbmltYXRpb25BcmdzKSB7XG4gICAgICBBbmltYXRlZC50aW1pbmcoYW5pbWF0ZWRQb3NpdGlvbiwgYW5pbWF0aW9uQXJncykuc3RhcnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICBhbmltYXRlZFBvc2l0aW9uLnNldFZhbHVlKHt4LCB5fSlcbiAgICB9XG4gIH1cblxuICBvblJlb3JkZXJlZCA9IGFzeW5jICh7ZnJvbUl0ZW0sIGZyb21Qb3NpdGlvbiwgdG9JdGVtLCB0b1Bvc2l0aW9ufSkgPT4ge1xuICAgIGlmIChmcm9tUG9zaXRpb24gPT0gdG9Qb3NpdGlvbikgcmV0dXJuIC8vIE9ubHkgZG8gcmVxdWVzdHMgYW5kIHF1ZXJpZXMgaWYgY2hhbmdlZFxuXG4gICAgY29uc3QgVGFibGVTZXR0aW5nQ29sdW1uID0gZnJvbUl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgdG9Db2x1bW4gPSBhd2FpdCBUYWJsZVNldHRpbmdDb2x1bW4uZmluZCh0b0l0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkKCkpIC8vIE5lZWQgdG8gbG9hZCBsYXRlc3QgcG9zaXRpb24gYmVjYXVzZSBBY3RzQXNMaXN0IG1pZ2h0IGhhdmUgY2hhbmdlZCBpdFxuXG4gICAgYXdhaXQgZnJvbUl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLnVwZGF0ZSh7cG9zaXRpb246IHRvQ29sdW1uLnBvc2l0aW9uKCl9KVxuICB9XG5cbiAgZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudCA9ICh7aXNBY3RpdmUsIGl0ZW0sIHRvdWNoUHJvcHN9KSA9PiB7XG4gICAgY29uc3Qge2FuaW1hdGVkV2lkdGgsIGFuaW1hdGVkWkluZGV4LCBjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbn0gPSBpdGVtXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhlYWRlckNvbHVtblxuICAgICAgICBhY3RpdmU9e2lzQWN0aXZlfVxuICAgICAgICBhbmltYXRlZFdpZHRoPXthbmltYXRlZFdpZHRofVxuICAgICAgICBhbmltYXRlZFpJbmRleD17YW5pbWF0ZWRaSW5kZXh9XG4gICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICBrZXk9e3RhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9XG4gICAgICAgIHJlc2l6aW5nPXt0aGlzLnMucmVzaXppbmd9XG4gICAgICAgIHRhYmxlPXt0aGlzfVxuICAgICAgICB0YWJsZVNldHRpbmdDb2x1bW49e3RhYmxlU2V0dGluZ0NvbHVtbn1cbiAgICAgICAgdG91Y2hQcm9wcz17dG91Y2hQcm9wc31cbiAgICAgICAgd2lkdGhzPXt0aGlzLnMud2lkdGhzfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBoZWFkZXJDbGFzc05hbWVGb3JDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtdXG5cbiAgICBpZiAoY29sdW1uLmNvbW1vblByb3BzICYmIGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpIGNsYXNzTmFtZXMucHVzaChjb2x1bW4uY29tbW9uUHJvcHMuY2xhc3NOYW1lKVxuICAgIGlmIChjb2x1bW4uaGVhZGVyUHJvcHMgJiYgY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5oZWFkZXJQcm9wcy5jbGFzc05hbWUpXG5cbiAgICByZXR1cm4gY2xhc3NOYW1lc1xuICB9XG5cbiAgaGVhZGVyTGFiZWxGb3JDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3Qge21vZGVsQ2xhc3N9ID0gdGhpcy5wXG5cbiAgICBpZiAoXCJsYWJlbFwiIGluIGNvbHVtbikge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4ubGFiZWwgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ubGFiZWwoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbFxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcblxuICAgIC8vIENhbGN1bGF0ZSBjdXJyZW50IG1vZGVsIGNsYXNzIHRocm91Z2ggcGF0aFxuICAgIGlmIChjb2x1bW4ucGF0aCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiBjb2x1bW4ucGF0aCkge1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gZGlnZyhjdXJyZW50TW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcInJlbGF0aW9uc2hpcHNcIilcbiAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwcy5maW5kKChyZWxhdGlvbnNoaXBJbkFycmF5KSA9PiByZWxhdGlvbnNoaXBJbkFycmF5Lm5hbWUgPT0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBhdGhQYXJ0KSlcblxuICAgICAgICBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NSZXF1aXJlKGRpZ2cocmVsYXRpb25zaGlwLCBcInJlc291cmNlX25hbWVcIikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGUpIHJldHVybiBjdXJyZW50TW9kZWxDbGFzcy5odW1hbkF0dHJpYnV0ZU5hbWUoY29sdW1uLmF0dHJpYnV0ZSlcblxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vICdsYWJlbCcgb3IgJ2F0dHJpYnV0ZScgd2FzIGdpdmVuXCIpXG4gIH1cblxuICBvbkZpbHRlckZvcm1TdWJtaXQgPSAoKSA9PiB0aGlzLnN1Ym1pdEZpbHRlcigpXG4gIG9uUmVxdWVzdENsb3NlU2V0dGluZ3MgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtzaG93U2V0dGluZ3M6IGZhbHNlfSlcblxuICBvblNldHRpbmdzQ2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtzaG93U2V0dGluZ3M6ICF0aGlzLnMuc2hvd1NldHRpbmdzfSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlciA9ICgpID0+IHtcbiAgICBjb25zdCB7YXBwSGlzdG9yeX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3F1ZXJ5UU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3QgY2hhbmdlUGFyYW1zUGFyYW1zID0ge31cbiAgICBjb25zdCBxUGFyYW1zID0gdGhpcy5zLmZpbHRlckZvcm0uYXNPYmplY3QoKVxuXG4gICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgIGNvbnN0IGZpbHRlckZvcm0gPSBkaWdnKHRoaXMudHQuZmlsdGVyRm9ybVJlZiwgXCJjdXJyZW50XCIpXG4gICAgICBjb25zdCBuYXZ0aXZlRm9ybVBhcmFtcyA9IFBhcmFtcy5zZXJpYWxpemVGb3JtKGZpbHRlckZvcm0pXG5cbiAgICAgIGluY29ycG9yYXRlKHFQYXJhbXMsIG5hdnRpdmVGb3JtUGFyYW1zKVxuICAgIH1cblxuICAgIGNoYW5nZVBhcmFtc1BhcmFtc1txdWVyeVFOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHFQYXJhbXMpXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKGNoYW5nZVBhcmFtc1BhcmFtcywge2FwcEhpc3Rvcnl9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyRGVib3VuY2UgPSBkZWJvdW5jZSh0aGlzLnR0LnN1Ym1pdEZpbHRlcilcbn0pKVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUUEsSUFBSSxFQUFFQyxJQUFJLFFBQU8sV0FBVztBQUNwQyxPQUFPQyxLQUFLLElBQUdDLGFBQWEsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBTyxPQUFPO0FBQ3ZFLFNBQVFDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLElBQUksUUFBTyxjQUFjO0FBQ2hFLE9BQU9DLGFBQWEsTUFBTSxtQkFBbUI7QUFDN0MsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxVQUFVLE1BQU0sWUFBWTtBQUNuQyxPQUFPQyxVQUFVLE1BQU0sZUFBZTtBQUN0QyxPQUFPQyxhQUFhLE1BQU0sa0JBQWtCO0FBQzVDLE9BQU9DLFFBQVEsTUFBTSxVQUFVO0FBQy9CLE9BQU9DLGFBQWEsTUFBTSx5QkFBeUI7QUFDbkQsT0FBT0MsWUFBWSxNQUFNLFFBQVE7QUFDakMsT0FBT0MsT0FBTyxNQUFNLFdBQVc7QUFDL0IsT0FBT0MsUUFBUSxNQUFNLHdCQUF3QjtBQUM3QyxTQUFRQyxJQUFJLFFBQU8s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
|
package/build/use-styles.js
CHANGED
|
@@ -3,6 +3,25 @@ import { digg } from "diggerize";
|
|
|
3
3
|
import * as inflection from "inflection";
|
|
4
4
|
import useBreakpoint from "./use-breakpoint";
|
|
5
5
|
import { useMemo } from "react";
|
|
6
|
+
const handleStringStyle = (styles, listOfStyles, breakpoint, breakpointsReverse, arg) => {
|
|
7
|
+
if (!(arg in styles)) {
|
|
8
|
+
throw new Error(`No such styling '${arg}' in given styles: ${Object.keys(styles).join(", ")}`);
|
|
9
|
+
}
|
|
10
|
+
listOfStyles.push(styles[arg]);
|
|
11
|
+
for (const breakpointData of breakpointsReverse) {
|
|
12
|
+
const breakpointName = breakpointData[0];
|
|
13
|
+
const breakpointStyleNameUp = `${arg}${inflection.camelize(breakpointName)}Up`;
|
|
14
|
+
const breakpointStyleNameDown = `${arg}${inflection.camelize(breakpointName)}Down`;
|
|
15
|
+
const breakpointIsUp = digg(breakpoint, `${breakpointName}Up`);
|
|
16
|
+
const breakpointIsDown = digg(breakpoint, `${breakpointName}Down`);
|
|
17
|
+
if (breakpointStyleNameUp in styles && breakpointIsUp) {
|
|
18
|
+
listOfStyles.push(styles[breakpointStyleNameUp]);
|
|
19
|
+
}
|
|
20
|
+
if (breakpointStyleNameDown in styles && breakpointIsDown) {
|
|
21
|
+
listOfStyles.push(styles[breakpointStyleNameDown]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
6
25
|
const useStyles = (styles, args, dependencies = []) => {
|
|
7
26
|
const breakpoint = useBreakpoint();
|
|
8
27
|
const breakpointName = digg(breakpoint, "name");
|
|
@@ -15,21 +34,12 @@ const useStyles = (styles, args, dependencies = []) => {
|
|
|
15
34
|
}
|
|
16
35
|
for (const arg of args) {
|
|
17
36
|
if (typeof arg == "string") {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const breakpointStyleNameUp = `${arg}${inflection.camelize(breakpointName)}Up`;
|
|
25
|
-
const breakpointStyleNameDown = `${arg}${inflection.camelize(breakpointName)}Down`;
|
|
26
|
-
const breakpointIsUp = digg(breakpoint, `${breakpointName}Up`);
|
|
27
|
-
const breakpointIsDown = digg(breakpoint, `${breakpointName}Down`);
|
|
28
|
-
if (breakpointStyleNameUp in styles && breakpointIsUp) {
|
|
29
|
-
listOfStyles.push(styles[breakpointStyleNameUp]);
|
|
30
|
-
}
|
|
31
|
-
if (breakpointStyleNameDown in styles && breakpointIsDown) {
|
|
32
|
-
listOfStyles.push(styles[breakpointStyleNameDown]);
|
|
37
|
+
handleStringStyle(styles, listOfStyles, breakpoint, breakpointsReverse, arg);
|
|
38
|
+
} else if (typeof arg == "object") {
|
|
39
|
+
for (const key in arg) {
|
|
40
|
+
const value = arg[key];
|
|
41
|
+
if (value) {
|
|
42
|
+
handleStringStyle(styles, listOfStyles, breakpoint, breakpointsReverse, key);
|
|
33
43
|
}
|
|
34
44
|
}
|
|
35
45
|
} else {
|
|
@@ -41,4 +51,4 @@ const useStyles = (styles, args, dependencies = []) => {
|
|
|
41
51
|
return listOfStyles;
|
|
42
52
|
};
|
|
43
53
|
export default useStyles;
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25maWciLCJkaWdnIiwiaW5mbGVjdGlvbiIsInVzZUJyZWFrcG9pbnQiLCJ1c2VNZW1vIiwiaGFuZGxlU3RyaW5nU3R5bGUiLCJzdHlsZXMiLCJsaXN0T2ZTdHlsZXMiLCJicmVha3BvaW50IiwiYnJlYWtwb2ludHNSZXZlcnNlIiwiYXJnIiwiRXJyb3IiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInB1c2giLCJicmVha3BvaW50RGF0YSIsImJyZWFrcG9pbnROYW1lIiwiYnJlYWtwb2ludFN0eWxlTmFtZVVwIiwiY2FtZWxpemUiLCJicmVha3BvaW50U3R5bGVOYW1lRG93biIsImJyZWFrcG9pbnRJc1VwIiwiYnJlYWtwb2ludElzRG93biIsInVzZVN0eWxlcyIsImFyZ3MiLCJkZXBlbmRlbmNpZXMiLCJhY3R1YWxEZXBlbmRlbmNpZXMiLCJnZXRCcmVha1BvaW50cyIsInJldmVyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJrZXkiLCJ2YWx1ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy91c2Utc3R5bGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSBcIi4vY29uZmlnXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB1c2VCcmVha3BvaW50IGZyb20gXCIuL3VzZS1icmVha3BvaW50XCJcbmltcG9ydCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcblxuY29uc3QgaGFuZGxlU3RyaW5nU3R5bGUgPSAoc3R5bGVzLCBsaXN0T2ZTdHlsZXMsIGJyZWFrcG9pbnQsIGJyZWFrcG9pbnRzUmV2ZXJzZSwgYXJnKSA9PiB7XG4gIGlmICghKGFyZyBpbiBzdHlsZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHN0eWxpbmcgJyR7YXJnfScgaW4gZ2l2ZW4gc3R5bGVzOiAke09iamVjdC5rZXlzKHN0eWxlcykuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICBsaXN0T2ZTdHlsZXMucHVzaChzdHlsZXNbYXJnXSlcblxuICBmb3IgKGNvbnN0IGJyZWFrcG9pbnREYXRhIG9mIGJyZWFrcG9pbnRzUmV2ZXJzZSkge1xuICAgIGNvbnN0IGJyZWFrcG9pbnROYW1lID0gYnJlYWtwb2ludERhdGFbMF1cbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVOYW1lVXAgPSBgJHthcmd9JHtpbmZsZWN0aW9uLmNhbWVsaXplKGJyZWFrcG9pbnROYW1lKX1VcGBcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVOYW1lRG93biA9IGAke2FyZ30ke2luZmxlY3Rpb24uY2FtZWxpemUoYnJlYWtwb2ludE5hbWUpfURvd25gXG4gICAgY29uc3QgYnJlYWtwb2ludElzVXAgPSBkaWdnKGJyZWFrcG9pbnQsIGAke2JyZWFrcG9pbnROYW1lfVVwYClcbiAgICBjb25zdCBicmVha3BvaW50SXNEb3duID0gZGlnZyhicmVha3BvaW50LCBgJHticmVha3BvaW50TmFtZX1Eb3duYClcblxuICAgIGlmIChicmVha3BvaW50U3R5bGVOYW1lVXAgaW4gc3R5bGVzICYmIGJyZWFrcG9pbnRJc1VwKSB7XG4gICAgICBsaXN0T2ZTdHlsZXMucHVzaChzdHlsZXNbYnJlYWtwb2ludFN0eWxlTmFtZVVwXSlcbiAgICB9XG5cbiAgICBpZiAoYnJlYWtwb2ludFN0eWxlTmFtZURvd24gaW4gc3R5bGVzICYmIGJyZWFrcG9pbnRJc0Rvd24pIHtcbiAgICAgIGxpc3RPZlN0eWxlcy5wdXNoKHN0eWxlc1ticmVha3BvaW50U3R5bGVOYW1lRG93bl0pXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHVzZVN0eWxlcyA9IChzdHlsZXMsIGFyZ3MsIGRlcGVuZGVuY2llcyA9IFtdKSA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnQgPSB1c2VCcmVha3BvaW50KClcbiAgY29uc3QgYnJlYWtwb2ludE5hbWUgPSBkaWdnKGJyZWFrcG9pbnQsIFwibmFtZVwiKVxuICBjb25zdCBhY3R1YWxEZXBlbmRlbmNpZXMgPSBbLi4uZGVwZW5kZW5jaWVzLCBicmVha3BvaW50TmFtZV1cblxuICBjb25zdCBsaXN0T2ZTdHlsZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBsaXN0T2ZTdHlsZXMgPSBbXVxuICAgIGNvbnN0IGJyZWFrcG9pbnRzUmV2ZXJzZSA9IFsuLi5jb25maWcuZ2V0QnJlYWtQb2ludHMoKV0ucmV2ZXJzZSgpXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgIGFyZ3MgPSBbYXJnc11cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGhhbmRsZVN0cmluZ1N0eWxlKHN0eWxlcywgbGlzdE9mU3R5bGVzLCBicmVha3BvaW50LCBicmVha3BvaW50c1JldmVyc2UsIGFyZylcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGFyZykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnW2tleV1cblxuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFuZGxlU3RyaW5nU3R5bGUoc3R5bGVzLCBsaXN0T2ZTdHlsZXMsIGJyZWFrcG9pbnQsIGJyZWFrcG9pbnRzUmV2ZXJzZSwga2V5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdHlwZTogJHt0eXBlb2YgYXJnfWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3RPZlN0eWxlc1xuICB9LCBhY3R1YWxEZXBlbmRlbmNpZXMpXG5cbiAgcmV0dXJuIGxpc3RPZlN0eWxlc1xufVxuXG5leHBvcnQgZGVmYXVsdCB1c2VTdHlsZXNcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxN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
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@ import LoadSearchModal from "./load-search-modal"
|
|
|
6
6
|
import SaveSearchModal from "./save-search-modal"
|
|
7
7
|
import Params from "../../params"
|
|
8
8
|
import PropTypes from "prop-types"
|
|
9
|
-
import
|
|
9
|
+
import {TableSearch} from "models"
|
|
10
10
|
import memo from "set-state-compare/src/memo"
|
|
11
11
|
import {shapeComponent} from "set-state-compare/src/shape-component"
|
|
12
12
|
import React from "react"
|
|
@@ -14,8 +14,6 @@ import useI18n from "i18n-on-steroids/src/use-i18n"
|
|
|
14
14
|
import useQueryParams from "on-location-changed/build/use-query-params"
|
|
15
15
|
import {View} from "react-native"
|
|
16
16
|
|
|
17
|
-
const {TableSearch} = models
|
|
18
|
-
|
|
19
17
|
export default memo(shapeComponent(class ApiMakerTableFilters extends BaseComponent {
|
|
20
18
|
static propTypes = {
|
|
21
19
|
currentUser: PropTypes.object,
|
package/src/table/table.jsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {digg, digs} from "diggerize"
|
|
2
2
|
import React, {createContext, useContext, useMemo, useRef} from "react"
|
|
3
|
-
import {Animated, Pressable, View} from "react-native"
|
|
3
|
+
import {Animated, Platform, Pressable, View} from "react-native"
|
|
4
4
|
import BaseComponent from "../base-component"
|
|
5
5
|
import Card from "../bootstrap/card"
|
|
6
6
|
import classNames from "classnames"
|
|
@@ -16,6 +16,7 @@ import Header from "./components/header"
|
|
|
16
16
|
import HeaderColumn from "./header-column"
|
|
17
17
|
import HeaderSelect from "./header-select"
|
|
18
18
|
import Icon from "../utils/icon"
|
|
19
|
+
import {incorporate} from "incorporator"
|
|
19
20
|
import * as inflection from "inflection"
|
|
20
21
|
import memo from "set-state-compare/src/memo"
|
|
21
22
|
import modelClassRequire from "../model-class-require"
|
|
@@ -935,11 +936,17 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
935
936
|
}
|
|
936
937
|
|
|
937
938
|
submitFilter = () => {
|
|
938
|
-
const filterForm = digg(this.tt.filterFormRef, "current")
|
|
939
939
|
const {appHistory} = this.props
|
|
940
|
-
const qParams = Params.serializeForm(filterForm)
|
|
941
940
|
const {queryQName} = this.s
|
|
942
941
|
const changeParamsParams = {}
|
|
942
|
+
const qParams = this.s.filterForm.asObject()
|
|
943
|
+
|
|
944
|
+
if (Platform.OS == "web") {
|
|
945
|
+
const filterForm = digg(this.tt.filterFormRef, "current")
|
|
946
|
+
const navtiveFormParams = Params.serializeForm(filterForm)
|
|
947
|
+
|
|
948
|
+
incorporate(qParams, navtiveFormParams)
|
|
949
|
+
}
|
|
943
950
|
|
|
944
951
|
changeParamsParams[queryQName] = JSON.stringify(qParams)
|
|
945
952
|
|
package/src/use-styles.js
CHANGED
|
@@ -4,6 +4,30 @@ import * as inflection from "inflection"
|
|
|
4
4
|
import useBreakpoint from "./use-breakpoint"
|
|
5
5
|
import {useMemo} from "react"
|
|
6
6
|
|
|
7
|
+
const handleStringStyle = (styles, listOfStyles, breakpoint, breakpointsReverse, arg) => {
|
|
8
|
+
if (!(arg in styles)) {
|
|
9
|
+
throw new Error(`No such styling '${arg}' in given styles: ${Object.keys(styles).join(", ")}`)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
listOfStyles.push(styles[arg])
|
|
13
|
+
|
|
14
|
+
for (const breakpointData of breakpointsReverse) {
|
|
15
|
+
const breakpointName = breakpointData[0]
|
|
16
|
+
const breakpointStyleNameUp = `${arg}${inflection.camelize(breakpointName)}Up`
|
|
17
|
+
const breakpointStyleNameDown = `${arg}${inflection.camelize(breakpointName)}Down`
|
|
18
|
+
const breakpointIsUp = digg(breakpoint, `${breakpointName}Up`)
|
|
19
|
+
const breakpointIsDown = digg(breakpoint, `${breakpointName}Down`)
|
|
20
|
+
|
|
21
|
+
if (breakpointStyleNameUp in styles && breakpointIsUp) {
|
|
22
|
+
listOfStyles.push(styles[breakpointStyleNameUp])
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (breakpointStyleNameDown in styles && breakpointIsDown) {
|
|
26
|
+
listOfStyles.push(styles[breakpointStyleNameDown])
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
7
31
|
const useStyles = (styles, args, dependencies = []) => {
|
|
8
32
|
const breakpoint = useBreakpoint()
|
|
9
33
|
const breakpointName = digg(breakpoint, "name")
|
|
@@ -19,25 +43,13 @@ const useStyles = (styles, args, dependencies = []) => {
|
|
|
19
43
|
|
|
20
44
|
for (const arg of args) {
|
|
21
45
|
if (typeof arg == "string") {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
listOfStyles.push(styles[arg])
|
|
27
|
-
|
|
28
|
-
for (const breakpointData of breakpointsReverse) {
|
|
29
|
-
const breakpointName = breakpointData[0]
|
|
30
|
-
const breakpointStyleNameUp = `${arg}${inflection.camelize(breakpointName)}Up`
|
|
31
|
-
const breakpointStyleNameDown = `${arg}${inflection.camelize(breakpointName)}Down`
|
|
32
|
-
const breakpointIsUp = digg(breakpoint, `${breakpointName}Up`)
|
|
33
|
-
const breakpointIsDown = digg(breakpoint, `${breakpointName}Down`)
|
|
34
|
-
|
|
35
|
-
if (breakpointStyleNameUp in styles && breakpointIsUp) {
|
|
36
|
-
listOfStyles.push(styles[breakpointStyleNameUp])
|
|
37
|
-
}
|
|
46
|
+
handleStringStyle(styles, listOfStyles, breakpoint, breakpointsReverse, arg)
|
|
47
|
+
} else if (typeof arg == "object") {
|
|
48
|
+
for (const key in arg) {
|
|
49
|
+
const value = arg[key]
|
|
38
50
|
|
|
39
|
-
if (
|
|
40
|
-
|
|
51
|
+
if (value) {
|
|
52
|
+
handleStringStyle(styles, listOfStyles, breakpoint, breakpointsReverse, key)
|
|
41
53
|
}
|
|
42
54
|
}
|
|
43
55
|
} else {
|