bx-rest 0.0.9 → 0.0.11

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.
Files changed (73) hide show
  1. package/consts/part-name-metods.d.ts +11 -0
  2. package/esm2020/consts/part-name-metods.mjs +12 -0
  3. package/esm2020/functions/serializeJavascript.mjs +200 -0
  4. package/esm2020/public-api.mjs +3 -3
  5. package/esm2020/{rest → request}/bx-rest.module.mjs +1 -1
  6. package/esm2020/request/user/user.mjs +263 -0
  7. package/esm2020/services/http/HttpBX.mjs +128 -0
  8. package/esm2020/services/http/HttpData.mjs +124 -0
  9. package/esm2020/services/http/base/base.mjs +29 -0
  10. package/esm2020/services/http/base/http.mjs +28 -0
  11. package/esm2020/services/http/http.mjs +135 -0
  12. package/esm2020/services/http/sessionKey.mjs +180 -0
  13. package/esm2020/services/map/base.mjs +14 -0
  14. package/esm2020/services/map/rest/user.mjs +89 -0
  15. package/esm2020/services/snack-bar/snack-bar.service.mjs +42 -0
  16. package/esm2020/services/snack-bar/toast-message/toast-message.component.mjs +31 -0
  17. package/esm2020/services/vanilla/JSON.mjs +20 -0
  18. package/esm2020/services/vanilla/localStorage.mjs +35 -0
  19. package/esm2020/services/vanilla//321/201ookies.mjs +44 -0
  20. package/esm2020/store/auth.mjs +26 -0
  21. package/esm2020/store/users.mjs +67 -0
  22. package/esm2020/typification/auth/save.mjs +2 -0
  23. package/esm2020/typification/rest/api-lib.mjs +21 -0
  24. package/esm2020/typification/rest/base/YesNo.mjs +2 -0
  25. package/esm2020/typification/rest/base/httpAnswerBX.mjs +2 -0
  26. package/esm2020/typification/rest/batch/batchRequestParam.mjs +2 -0
  27. package/esm2020/typification/rest/lib.mjs +2 -0
  28. package/esm2020/typification/rest/settings.mjs +2 -0
  29. package/esm2020/typification/rest/support/param.mjs +2 -0
  30. package/esm2020/typification/rest/user/CustomUserFieldInfo.mjs +2 -0
  31. package/esm2020/typification/rest/user/UserFilterSearch.mjs +2 -0
  32. package/esm2020/typification/rest/user/get.mjs +2 -0
  33. package/esm2020/typification/rest/user/user.mjs +2 -0
  34. package/esm2020/typification/rest/user/userFilter.mjs +2 -0
  35. package/fesm2015/bx-rest.mjs +343 -42
  36. package/fesm2015/bx-rest.mjs.map +1 -1
  37. package/fesm2020/bx-rest.mjs +342 -41
  38. package/fesm2020/bx-rest.mjs.map +1 -1
  39. package/functions/serializeJavascript.d.ts +2 -0
  40. package/package.json +1 -1
  41. package/public-api.d.ts +1 -2
  42. package/request/user/user.d.ts +60 -0
  43. package/services/http/HttpBX.d.ts +26 -0
  44. package/services/http/HttpData.d.ts +13 -0
  45. package/services/http/base/base.d.ts +16 -0
  46. package/services/http/base/http.d.ts +7 -0
  47. package/services/http/http.d.ts +31 -0
  48. package/services/http/sessionKey.d.ts +34 -0
  49. package/services/map/base.d.ts +6 -0
  50. package/services/map/rest/user.d.ts +12 -0
  51. package/services/snack-bar/snack-bar.service.d.ts +12 -0
  52. package/services/snack-bar/toast-message/toast-message.component.d.ts +16 -0
  53. package/services/vanilla/JSON.d.ts +7 -0
  54. package/services/vanilla/localStorage.d.ts +10 -0
  55. package/services/vanilla//321/201ookies.d.ts +9 -0
  56. package/store/auth.d.ts +20 -0
  57. package/store/users.d.ts +34 -0
  58. package/typification/auth/save.d.ts +14 -0
  59. package/typification/rest/api-lib.d.ts +9 -0
  60. package/typification/rest/base/YesNo.d.ts +1 -0
  61. package/typification/rest/base/httpAnswerBX.d.ts +15 -0
  62. package/typification/rest/batch/batchRequestParam.d.ts +16 -0
  63. package/typification/rest/lib.d.ts +18 -0
  64. package/typification/rest/settings.d.ts +6 -0
  65. package/typification/rest/support/param.d.ts +5 -0
  66. package/typification/rest/user/CustomUserFieldInfo.d.ts +56 -0
  67. package/typification/rest/user/UserFilterSearch.d.ts +43 -0
  68. package/typification/rest/user/get.d.ts +13 -0
  69. package/typification/rest/user/user.d.ts +62 -0
  70. package/typification/rest/user/userFilter.d.ts +13 -0
  71. package/bx-rest.service.d.ts +0 -6
  72. package/esm2020/bx-rest.service.mjs +0 -14
  73. /package/{rest → request}/bx-rest.module.d.ts +0 -0
@@ -0,0 +1,11 @@
1
+ export declare const $get = "get";
2
+ export declare const $add = "add";
3
+ export declare const $set = "set";
4
+ export declare const $event = "event";
5
+ export declare const $update = "update";
6
+ export declare const $user = "user";
7
+ export declare const $task = "task";
8
+ export declare const $calendar = "calendar";
9
+ export declare const $meeting = "meeting";
10
+ export declare const $list = "list";
11
+ export declare const $search = "search";
@@ -0,0 +1,12 @@
1
+ export const $get = 'get';
2
+ export const $add = 'add';
3
+ export const $set = 'set';
4
+ export const $event = 'event';
5
+ export const $update = 'update';
6
+ export const $user = 'user';
7
+ export const $task = 'task';
8
+ export const $calendar = 'calendar';
9
+ export const $meeting = 'meeting';
10
+ export const $list = 'list';
11
+ export const $search = 'search';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydC1uYW1lLW1ldG9kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL2NvbnN0cy9wYXJ0LW5hbWUtbWV0b2RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUE7QUFDekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQTtBQUN6QixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFBO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUE7QUFDN0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQTtBQUMvQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFBO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUE7QUFDM0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQTtBQUNuQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFBO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUE7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCAkZ2V0ID0gJ2dldCdcclxuZXhwb3J0IGNvbnN0ICRhZGQgPSAnYWRkJ1xyXG5leHBvcnQgY29uc3QgJHNldCA9ICdzZXQnXHJcbmV4cG9ydCBjb25zdCAkZXZlbnQgPSAnZXZlbnQnXHJcbmV4cG9ydCBjb25zdCAkdXBkYXRlID0gJ3VwZGF0ZSdcclxuZXhwb3J0IGNvbnN0ICR1c2VyID0gJ3VzZXInXHJcbmV4cG9ydCBjb25zdCAkdGFzayA9ICd0YXNrJ1xyXG5leHBvcnQgY29uc3QgJGNhbGVuZGFyID0gJ2NhbGVuZGFyJ1xyXG5leHBvcnQgY29uc3QgJG1lZXRpbmcgPSAnbWVldGluZydcclxuZXhwb3J0IGNvbnN0ICRsaXN0ID0gJ2xpc3QnXHJcbmV4cG9ydCBjb25zdCAkc2VhcmNoID0gJ3NlYXJjaCdcclxuIl19
@@ -0,0 +1,200 @@
1
+ // Generate an internal UID to make the regexp pattern harder to guess.
2
+ const UID_LENGTH = 16;
3
+ const UID = generateUID();
4
+ const PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\d+)__@"', 'g');
5
+ const IS_NATIVE_CODE_REGEXP = /\{\s*\[native code]\s*}/g;
6
+ const IS_PURE_FUNCTION = /function.*?\(/;
7
+ const IS_ARROW_FUNCTION = /.*?=>.*?/;
8
+ const UNSAFE_CHARS_REGEXP = /[<>\/\u2028\u2029]/g;
9
+ const RESERVED_SYMBOLS = ['*', 'async'];
10
+ // Mapping of unsafe HTML and invalid JavaScript line terminator chars to their
11
+ // Unicode char counterparts which are safe to use in JavaScript strings.
12
+ const ESCAPED_CHARS = {
13
+ '<': '\\u003C',
14
+ '>': '\\u003E',
15
+ '/': '\\u002F',
16
+ '\u2028': '\\u2028',
17
+ '\u2029': '\\u2029'
18
+ };
19
+ function escapeUnsafeChars(unsafeChar) {
20
+ return (ESCAPED_CHARS.hasOwnProperty(unsafeChar)) ? ESCAPED_CHARS[unsafeChar] : '';
21
+ }
22
+ function generateUID() {
23
+ let bytes = window.crypto.getRandomValues(new Uint32Array(UID_LENGTH));
24
+ let result = '';
25
+ for (let i = 0; i < UID_LENGTH; ++i) {
26
+ result += bytes[i].toString(16);
27
+ }
28
+ return result;
29
+ }
30
+ function deleteFunctions(obj) {
31
+ let functionKeys = [];
32
+ for (let key in obj) {
33
+ if (typeof obj[key] === "function") {
34
+ functionKeys.push(key);
35
+ }
36
+ }
37
+ for (let i = 0; i < functionKeys.length; i++) {
38
+ delete obj[functionKeys[i]];
39
+ }
40
+ }
41
+ function serialize(obj, options = {}) {
42
+ // Backwards-compatibility for `space` as the second argument.
43
+ if (typeof options === 'number' || typeof options === 'string') {
44
+ options = { space: options };
45
+ }
46
+ let functions = [];
47
+ let regexps = [];
48
+ let dates = [];
49
+ let maps = [];
50
+ let sets = [];
51
+ let arrays = [];
52
+ let undefs = [];
53
+ let infinities = [];
54
+ let bigInts = [];
55
+ let urls = [];
56
+ // Returns placeholders for functions and regexps (identified by index)
57
+ // which are later replaced by their string representation.
58
+ function replacer(key, value) {
59
+ // For nested function
60
+ if (options.ignoreFunction) {
61
+ deleteFunctions(value);
62
+ }
63
+ if (!value && value !== undefined) {
64
+ return value;
65
+ }
66
+ // let origValue: any = this[key];
67
+ let origValue = value;
68
+ let type = typeof origValue;
69
+ switch (type) {
70
+ case 'object':
71
+ if (origValue instanceof RegExp) {
72
+ return '@__R-' + UID + '-' + (regexps.push(origValue) - 1) + '__@';
73
+ }
74
+ else if (origValue instanceof Date) {
75
+ return '@__D-' + UID + '-' + (dates.push(origValue) - 1) + '__@';
76
+ }
77
+ else if (origValue instanceof Map) {
78
+ return '@__M-' + UID + '-' + (maps.push(origValue) - 1) + '__@';
79
+ }
80
+ else if (origValue instanceof Set) {
81
+ return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';
82
+ }
83
+ if (origValue instanceof Array) {
84
+ let isSparse = origValue.filter(function () {
85
+ return true;
86
+ }).length !== origValue.length;
87
+ if (isSparse) {
88
+ return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';
89
+ }
90
+ }
91
+ if (origValue instanceof URL) {
92
+ return '@__L-' + UID + '-' + (urls.push(origValue) - 1) + '__@';
93
+ }
94
+ break;
95
+ case 'function':
96
+ return '@__F-' + UID + '-' + (functions.push(origValue) - 1) + '__@';
97
+ case 'undefined':
98
+ return '@__U-' + UID + '-' + (undefs.push(origValue) - 1) + '__@';
99
+ case 'number':
100
+ return '@__I-' + UID + '-' + (infinities.push(origValue) - 1) + '__@';
101
+ case 'bigint':
102
+ return '@__B-' + UID + '-' + (bigInts.push(origValue) - 1) + '__@';
103
+ }
104
+ return value;
105
+ }
106
+ function serializeFunc(fn) {
107
+ let serializedFn = fn.toString();
108
+ if (IS_NATIVE_CODE_REGEXP.test(serializedFn)) {
109
+ throw new TypeError('Serializing native function: ' + fn.name);
110
+ }
111
+ // pure functions, example: {key: function() {}}
112
+ if (IS_PURE_FUNCTION.test(serializedFn)) {
113
+ return serializedFn;
114
+ }
115
+ // arrow functions, example: arg1 => arg1+5
116
+ if (IS_ARROW_FUNCTION.test(serializedFn)) {
117
+ return serializedFn;
118
+ }
119
+ let argsStartsAt = serializedFn.indexOf('(');
120
+ let def = serializedFn.slice(0, argsStartsAt)
121
+ .trim()
122
+ .split(' ')
123
+ .filter(function (val) {
124
+ return val.length > 0;
125
+ });
126
+ let nonReservedSymbols = def.filter(function (val) {
127
+ return RESERVED_SYMBOLS.indexOf(val) === -1;
128
+ });
129
+ // enhanced literal objects, example: {key() {}}
130
+ if (nonReservedSymbols.length > 0) {
131
+ return (def.indexOf('async') > -1 ? 'async ' : '') + 'function'
132
+ + (def.join('').indexOf('*') > -1 ? '*' : '')
133
+ + serializedFn.slice(argsStartsAt);
134
+ }
135
+ // arrow functions
136
+ return serializedFn;
137
+ }
138
+ // Check if the parameter is function
139
+ if (options.ignoreFunction && typeof obj === "function") {
140
+ obj = undefined;
141
+ }
142
+ // Protects against `JSON.stringify()` returning `undefined`, by serializing
143
+ // to the literal string: "undefined".
144
+ if (obj === undefined) {
145
+ return String(obj);
146
+ }
147
+ let str = '';
148
+ // Creates a JSON string representation of the value.
149
+ // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args.
150
+ if (options.isJSON && !options.space) {
151
+ str = JSON.stringify(obj);
152
+ }
153
+ else {
154
+ str = JSON.stringify(obj, options.isJSON ? undefined : replacer, options.space);
155
+ }
156
+ // Replace unsafe HTML and invalid JavaScript line terminator chars with
157
+ // their safe Unicode char counterpart. This _must_ happen before the
158
+ // regexps and functions are serialized and added back to the string.
159
+ if (options.unsafe !== true) {
160
+ str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);
161
+ }
162
+ if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {
163
+ return str;
164
+ }
165
+ // Replaces all occurrences of function, regexp, date, map and set placeholders in the
166
+ // JSON string with their string representations. If the original value can
167
+ // not be found, then `undefined` is used.
168
+ return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) {
169
+ // The placeholder may not be preceded by a backslash. This is to prevent
170
+ // replacing things like `"a\"@__R-<UID>-0__@"` and thus outputting
171
+ // invalid JS.
172
+ if (backSlash) {
173
+ return match;
174
+ }
175
+ switch (type) {
176
+ case 'D':
177
+ return "new Date(\"" + dates[valueIndex].toISOString() + "\")";
178
+ case 'R':
179
+ return "new RegExp(" + serialize(regexps[valueIndex].source) + ", \"" + regexps[valueIndex].flags + "\")";
180
+ case 'M':
181
+ return "new Map(" + serialize(Array.from(maps[valueIndex].entries()), options) + ")";
182
+ case 'S':
183
+ return "new Set(" + serialize(Array.from(sets[valueIndex].values()), options) + ")";
184
+ case 'A':
185
+ return "Array.prototype.slice.call(" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + ")";
186
+ case 'U':
187
+ return 'undefined';
188
+ case 'I':
189
+ return infinities[valueIndex];
190
+ case 'B':
191
+ return "BigInt(\"" + bigInts[valueIndex] + "\")";
192
+ case 'L':
193
+ return "new URL(\"" + urls[valueIndex].toString() + "\")";
194
+ }
195
+ let fn = functions[valueIndex];
196
+ return serializeFunc(fn);
197
+ });
198
+ }
199
+ export default serialize;
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplSmF2YXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL2Z1bmN0aW9ucy9zZXJpYWxpemVKYXZhc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQ0FBbUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRXZHLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFDekMsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztBQUVsRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXhDLCtFQUErRTtBQUMvRSx5RUFBeUU7QUFDekUsTUFBTSxhQUFhLEdBQTZCO0lBQzlDLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsU0FBUztJQUNkLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFFBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFFRixTQUFTLGlCQUFpQixDQUFDLFVBQWtCO0lBQzNDLE9BQU8sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLFdBQVc7SUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxX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QyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsZUFBZSxTQUFTLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZSBhbiBpbnRlcm5hbCBVSUQgdG8gbWFrZSB0aGUgcmVnZXhwIHBhdHRlcm4gaGFyZGVyIHRvIGd1ZXNzLlxuY29uc3QgVUlEX0xFTkdUSCA9IDE2O1xuY29uc3QgVUlEID0gZ2VuZXJhdGVVSUQoKTtcbmNvbnN0IFBMQUNFX0hPTERFUl9SRUdFWFAgPSBuZXcgUmVnRXhwKCcoXFxcXFxcXFwpP1wiQF9fKEZ8UnxEfE18U3xBfFV8SXxCfEwpLScgKyBVSUQgKyAnLShcXFxcZCspX19AXCInLCAnZycpO1xuXG5jb25zdCBJU19OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXFx7XFxzKlxcW25hdGl2ZSBjb2RlXVxccyp9L2c7XG5jb25zdCBJU19QVVJFX0ZVTkNUSU9OID0gL2Z1bmN0aW9uLio/XFwoLztcbmNvbnN0IElTX0FSUk9XX0ZVTkNUSU9OID0gLy4qPz0+Lio/LztcbmNvbnN0IFVOU0FGRV9DSEFSU19SRUdFWFAgPSAvWzw+XFwvXFx1MjAyOFxcdTIwMjldL2c7XG5cbmNvbnN0IFJFU0VSVkVEX1NZTUJPTFMgPSBbJyonLCAnYXN5bmMnXTtcblxuLy8gTWFwcGluZyBvZiB1bnNhZmUgSFRNTCBhbmQgaW52YWxpZCBKYXZhU2NyaXB0IGxpbmUgdGVybWluYXRvciBjaGFycyB0byB0aGVpclxuLy8gVW5pY29kZSBjaGFyIGNvdW50ZXJwYXJ0cyB3aGljaCBhcmUgc2FmZSB0byB1c2UgaW4gSmF2YVNjcmlwdCBzdHJpbmdzLlxuY29uc3QgRVNDQVBFRF9DSEFSUzoge1trZXk6IHN0cmluZ106IHN0cmluZ30gID0ge1xuICAnPCc6ICdcXFxcdTAwM0MnLFxuICAnPic6ICdcXFxcdTAwM0UnLFxuICAnLyc6ICdcXFxcdTAwMkYnLFxuICAnXFx1MjAyOCc6ICdcXFxcdTIwMjgnLFxuICAnXFx1MjAyOSc6ICdcXFxcdTIwMjknXG59O1xuXG5mdW5jdGlvbiBlc2NhcGVVbnNhZmVDaGFycyh1bnNhZmVDaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKEVTQ0FQRURfQ0hBUlMuaGFzT3duUHJvcGVydHkodW5zYWZlQ2hhcikpID8gRVNDQVBFRF9DSEFSU1t1bnNhZmVDaGFyXSA6ICcnO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVJRCgpIHtcbiAgbGV0IGJ5dGVzID0gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KFVJRF9MRU5HVEgpKVxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgVUlEX0xFTkdUSDsgKytpKSB7XG4gICAgcmVzdWx0ICs9IGJ5dGVzW2ldLnRvU3RyaW5nKDE2KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBkZWxldGVGdW5jdGlvbnMob2JqOiBhbnkpIHtcbiAgbGV0IGZ1bmN0aW9uS2V5cyA9IFtdO1xuICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBmdW5jdGlvbktleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmN0aW9uS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlbGV0ZSBvYmpbZnVuY3Rpb25LZXlzW2ldXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUob2JqOiBhbnksIG9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgLy8gQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIGBzcGFjZWAgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge3NwYWNlOiBvcHRpb25zfTtcbiAgfVxuXG4gIGxldCBmdW5jdGlvbnM6IEZ1bmN0aW9uW10gPSBbXTtcbiAgbGV0IHJlZ2V4cHM6IGFueVtdID0gW107XG4gIGxldCBkYXRlczogYW55W10gPSBbXTtcbiAgbGV0IG1hcHM6IGFueVtdID0gW107XG4gIGxldCBzZXRzOiBhbnlbXSA9IFtdO1xuICBsZXQgYXJyYXlzOiBhbnlbXSA9IFtdO1xuICBsZXQgdW5kZWZzOiBhbnlbXSA9IFtdO1xuICBsZXQgaW5maW5pdGllczogYW55W10gPSBbXTtcbiAgbGV0IGJpZ0ludHM6IGFueVtdID0gW107XG4gIGxldCB1cmxzOiBhbnlbXSA9IFtdO1xuXG4gIC8vIFJldHVybnMgcGxhY2Vob2xkZXJzIGZvciBmdW5jdGlvbnMgYW5kIHJlZ2V4cHMgKGlkZW50aWZpZWQgYnkgaW5kZXgpXG4gIC8vIHdoaWNoIGFyZSBsYXRlciByZXBsYWNlZCBieSB0aGVpciBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gIGZ1bmN0aW9uIHJlcGxhY2VyKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cbiAgICAvLyBGb3IgbmVzdGVkIGZ1bmN0aW9uXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlRnVuY3Rpb24pIHtcbiAgICAgIGRlbGV0ZUZ1bmN0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gbGV0IG9yaWdWYWx1ZTogYW55ID0gdGhpc1trZXldO1xuICAgIGxldCBvcmlnVmFsdWU6IGFueSA9IHZhbHVlO1xuICAgIGxldCB0eXBlID0gdHlwZW9mIG9yaWdWYWx1ZTtcblxuICAgIHN3aXRjaCAodHlwZSl7XG4gICAgICBjYXNlICdvYmplY3QnOlxuXG4gICAgICAgIGlmIChvcmlnVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICByZXR1cm4gJ0BfX1ItJyArIFVJRCArICctJyArIChyZWdleHBzLnB1c2gob3JpZ1ZhbHVlKSAtIDEpICsgJ19fQCc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ1ZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIHJldHVybiAnQF9fRC0nICsgVUlEICsgJy0nICsgKGRhdGVzLnB1c2gob3JpZ1ZhbHVlKSAtIDEpICsgJ19fQCc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ1ZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgcmV0dXJuICdAX19NLScgKyBVSUQgKyAnLScgKyAobWFwcy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgICB9IGVsc2UgaWYgKG9yaWdWYWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgIHJldHVybiAnQF9fUy0nICsgVUlEICsgJy0nICsgKHNldHMucHVzaChvcmlnVmFsdWUpIC0gMSkgKyAnX19AJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcmlnVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIGxldCBpc1NwYXJzZSA9IG9yaWdWYWx1ZS5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9KS5sZW5ndGggIT09IG9yaWdWYWx1ZS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGlzU3BhcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0BfX0EtJyArIFVJRCArICctJyArIChhcnJheXMucHVzaChvcmlnVmFsdWUpIC0gMSkgKyAnX19AJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JpZ1ZhbHVlIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgICAgICAgcmV0dXJuICdAX19MLScgKyBVSUQgKyAnLScgKyAodXJscy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gJ0BfX0YtJyArIFVJRCArICctJyArIChmdW5jdGlvbnMucHVzaChvcmlnVmFsdWUpIC0gMSkgKyAnX19AJztcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiAnQF9fVS0nICsgVUlEICsgJy0nICsgKHVuZGVmcy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuICdAX19JLScgKyBVSUQgKyAnLScgKyAoaW5maW5pdGllcy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgICAgY2FzZSAnYmlnaW50JzpcbiAgICAgICAgcmV0dXJuICdAX19CLScgKyBVSUQgKyAnLScgKyAoYmlnSW50cy5wdXNoKG9yaWdWYWx1ZSkgLSAxKSArICdfX0AnO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZUZ1bmMoZm46IEZ1bmN0aW9uKSB7XG4gICAgbGV0IHNlcmlhbGl6ZWRGbiA9IGZuLnRvU3RyaW5nKCk7XG4gICAgaWYgKElTX05BVElWRV9DT0RFX1JFR0VYUC50ZXN0KHNlcmlhbGl6ZWRGbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlcmlhbGl6aW5nIG5hdGl2ZSBmdW5jdGlvbjogJyArIGZuLm5hbWUpO1xuICAgIH1cblxuICAgIC8vIHB1cmUgZnVuY3Rpb25zLCBleGFtcGxlOiB7a2V5OiBmdW5jdGlvbigpIHt9fVxuICAgIGlmIChJU19QVVJFX0ZVTkNUSU9OLnRlc3Qoc2VyaWFsaXplZEZuKSkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRGbjtcbiAgICB9XG5cbiAgICAvLyBhcnJvdyBmdW5jdGlvbnMsIGV4YW1wbGU6IGFyZzEgPT4gYXJnMSs1XG4gICAgaWYgKElTX0FSUk9XX0ZVTkNUSU9OLnRlc3Qoc2VyaWFsaXplZEZuKSkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRGbjtcbiAgICB9XG5cbiAgICBsZXQgYXJnc1N0YXJ0c0F0ID0gc2VyaWFsaXplZEZuLmluZGV4T2YoJygnKTtcbiAgICBsZXQgZGVmID0gc2VyaWFsaXplZEZuLnNsaWNlKDAsIGFyZ3NTdGFydHNBdClcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcgJylcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwubGVuZ3RoID4gMFxuICAgIH0pO1xuXG4gICAgbGV0IG5vblJlc2VydmVkU3ltYm9scyA9IGRlZi5maWx0ZXIoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuIFJFU0VSVkVEX1NZTUJPTFMuaW5kZXhPZih2YWwpID09PSAtMVxuICAgIH0pO1xuXG4gICAgLy8gZW5oYW5jZWQgbGl0ZXJhbCBvYmplY3RzLCBleGFtcGxlOiB7a2V5KCkge319XG4gICAgaWYgKG5vblJlc2VydmVkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gKGRlZi5pbmRleE9mKCdhc3luYycpID4gLTEgPyAnYXN5bmMgJyA6ICcnKSArICdmdW5jdGlvbidcbiAgICAgICAgKyAoZGVmLmpvaW4oJycpLmluZGV4T2YoJyonKSA+IC0xID8gJyonIDogJycpXG4gICAgICAgICsgc2VyaWFsaXplZEZuLnNsaWNlKGFyZ3NTdGFydHNBdCk7XG4gICAgfVxuXG4gICAgLy8gYXJyb3cgZnVuY3Rpb25zXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRGbjtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwYXJhbWV0ZXIgaXMgZnVuY3Rpb25cbiAgaWYgKG9wdGlvbnMuaWdub3JlRnVuY3Rpb24gJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFByb3RlY3RzIGFnYWluc3QgYEpTT04uc3RyaW5naWZ5KClgIHJldHVybmluZyBgdW5kZWZpbmVkYCwgYnkgc2VyaWFsaXppbmdcbiAgLy8gdG8gdGhlIGxpdGVyYWwgc3RyaW5nOiBcInVuZGVmaW5lZFwiLlxuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gIH1cblxuICBsZXQgc3RyOiBzdHJpbmcgPSAnJztcblxuICAvLyBDcmVhdGVzIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICAvLyBOT1RFOiBOb2RlIDAuMTIgZ29lcyBpbnRvIHNsb3cgbW9kZSB3aXRoIGV4dHJhIEpTT04uc3RyaW5naWZ5KCkgYXJncy5cbiAgaWYgKG9wdGlvbnMuaXNKU09OICYmICFvcHRpb25zLnNwYWNlKSB7XG4gICAgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIG9wdGlvbnMuaXNKU09OID8gdW5kZWZpbmVkIDogcmVwbGFjZXIsIG9wdGlvbnMuc3BhY2UpO1xuICB9XG5cbiAgLy8gUmVwbGFjZSB1bnNhZmUgSFRNTCBhbmQgaW52YWxpZCBKYXZhU2NyaXB0IGxpbmUgdGVybWluYXRvciBjaGFycyB3aXRoXG4gIC8vIHRoZWlyIHNhZmUgVW5pY29kZSBjaGFyIGNvdW50ZXJwYXJ0LiBUaGlzIF9tdXN0XyBoYXBwZW4gYmVmb3JlIHRoZVxuICAvLyByZWdleHBzIGFuZCBmdW5jdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYW5kIGFkZGVkIGJhY2sgdG8gdGhlIHN0cmluZy5cbiAgaWYgKG9wdGlvbnMudW5zYWZlICE9PSB0cnVlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoVU5TQUZFX0NIQVJTX1JFR0VYUCwgZXNjYXBlVW5zYWZlQ2hhcnMpO1xuICB9XG5cbiAgaWYgKGZ1bmN0aW9ucy5sZW5ndGggPT09IDAgJiYgcmVnZXhwcy5sZW5ndGggPT09IDAgJiYgZGF0ZXMubGVuZ3RoID09PSAwICYmIG1hcHMubGVuZ3RoID09PSAwICYmIHNldHMubGVuZ3RoID09PSAwICYmIGFycmF5cy5sZW5ndGggPT09IDAgJiYgdW5kZWZzLmxlbmd0aCA9PT0gMCAmJiBpbmZpbml0aWVzLmxlbmd0aCA9PT0gMCAmJiBiaWdJbnRzLmxlbmd0aCA9PT0gMCAmJiB1cmxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvLyBSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgZnVuY3Rpb24sIHJlZ2V4cCwgZGF0ZSwgbWFwIGFuZCBzZXQgcGxhY2Vob2xkZXJzIGluIHRoZVxuICAvLyBKU09OIHN0cmluZyB3aXRoIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuIElmIHRoZSBvcmlnaW5hbCB2YWx1ZSBjYW5cbiAgLy8gbm90IGJlIGZvdW5kLCB0aGVuIGB1bmRlZmluZWRgIGlzIHVzZWQuXG4gIHJldHVybiBzdHIucmVwbGFjZShQTEFDRV9IT0xERVJfUkVHRVhQLCBmdW5jdGlvbiAobWF0Y2gsIGJhY2tTbGFzaCwgdHlwZSwgdmFsdWVJbmRleCkge1xuICAgIC8vIFRoZSBwbGFjZWhvbGRlciBtYXkgbm90IGJlIHByZWNlZGVkIGJ5IGEgYmFja3NsYXNoLiBUaGlzIGlzIHRvIHByZXZlbnRcbiAgICAvLyByZXBsYWNpbmcgdGhpbmdzIGxpa2UgYFwiYVxcXCJAX19SLTxVSUQ+LTBfX0BcImAgYW5kIHRodXMgb3V0cHV0dGluZ1xuICAgIC8vIGludmFsaWQgSlMuXG4gICAgaWYgKGJhY2tTbGFzaCkge1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSl7XG4gICAgICBjYXNlICdEJzpcbiAgICAgICAgcmV0dXJuIFwibmV3IERhdGUoXFxcIlwiICsgZGF0ZXNbdmFsdWVJbmRleF0udG9JU09TdHJpbmcoKSArIFwiXFxcIilcIlxuICAgICAgY2FzZSAnUic6XG4gICAgICAgIHJldHVybiBcIm5ldyBSZWdFeHAoXCIgKyBzZXJpYWxpemUocmVnZXhwc1t2YWx1ZUluZGV4XS5zb3VyY2UpICsgXCIsIFxcXCJcIiArIHJlZ2V4cHNbdmFsdWVJbmRleF0uZmxhZ3MgKyBcIlxcXCIpXCJcbiAgICAgIGNhc2UgJ00nOlxuICAgICAgICByZXR1cm4gXCJuZXcgTWFwKFwiICsgc2VyaWFsaXplKEFycmF5LmZyb20obWFwc1t2YWx1ZUluZGV4XS5lbnRyaWVzKCkpLCBvcHRpb25zKSArIFwiKVwiXG4gICAgICBjYXNlICdTJzpcbiAgICAgICAgcmV0dXJuIFwibmV3IFNldChcIiArIHNlcmlhbGl6ZShBcnJheS5mcm9tKHNldHNbdmFsdWVJbmRleF0udmFsdWVzKCkpLCBvcHRpb25zKSArIFwiKVwiXG4gICAgICBjYXNlICdBJzpcbiAgICAgICAgcmV0dXJuIFwiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXCIgKyBzZXJpYWxpemUoT2JqZWN0LmFzc2lnbih7bGVuZ3RoOiBhcnJheXNbdmFsdWVJbmRleF0ubGVuZ3RofSwgYXJyYXlzW3ZhbHVlSW5kZXhdKSwgb3B0aW9ucykgKyBcIilcIlxuICAgICAgY2FzZSAnVSc6XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJ1xuICAgICAgY2FzZSAnSSc6XG4gICAgICAgIHJldHVybiBpbmZpbml0aWVzW3ZhbHVlSW5kZXhdXG4gICAgICBjYXNlICdCJzpcbiAgICAgICAgcmV0dXJuIFwiQmlnSW50KFxcXCJcIiArIGJpZ0ludHNbdmFsdWVJbmRleF0gKyBcIlxcXCIpXCJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gXCJuZXcgVVJMKFxcXCJcIiArIHVybHNbdmFsdWVJbmRleF0udG9TdHJpbmcoKSArIFwiXFxcIilcIlxuICAgIH1cblxuICAgIGxldCBmbiA9IGZ1bmN0aW9uc1t2YWx1ZUluZGV4XTtcblxuICAgIHJldHVybiBzZXJpYWxpemVGdW5jKGZuKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNlcmlhbGl6ZVxuIl19
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Public API Surface of bx-rest
3
3
  */
4
- export * from './bx-rest.service';
5
- export * from './rest/bx-rest.module';
4
+ // export * from './request/bx-rest.module'
6
5
  export * from './services/base';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsdUJBQXVCLENBQUE7QUFDckMsY0FBYyxpQkFBaUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYngtcmVzdFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYngtcmVzdC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9yZXN0L2J4LXJlc3QubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9iYXNlJ1xuIl19
6
+ export * from './request/user/user';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCwyQ0FBMkM7QUFDM0MsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBieC1yZXN0XG4gKi9cblxuLy8gZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0L2J4LXJlc3QubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9iYXNlJ1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0L3VzZXIvdXNlcidcbiJdfQ==
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
25
25
  ]
26
26
  }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYngtcmVzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9yZXN0L2J4LXJlc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7QUFjMUQsTUFBTSxPQUFPLFlBQVk7O3lHQUFaLFlBQVk7MEdBQVosWUFBWSxZQVJyQixhQUFhO1FBQ2IsZUFBZSxhQUdmLGVBQWU7UUFDZixhQUFhOzBHQUdKLFlBQVksWUFSckIsYUFBYTtRQUNiLGVBQWUsRUFHZixlQUFlO1FBQ2YsYUFBYTsyRkFHSixZQUFZO2tCQVp4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbidcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCeFJlc3RNb2R1bGUgeyB9XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYngtcmVzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9yZXF1ZXN0L2J4LXJlc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7QUFjMUQsTUFBTSxPQUFPLFlBQVk7O3lHQUFaLFlBQVk7MEdBQVosWUFBWSxZQVJyQixhQUFhO1FBQ2IsZUFBZSxhQUdmLGVBQWU7UUFDZixhQUFhOzBHQUdKLFlBQVksWUFSckIsYUFBYTtRQUNiLGVBQWUsRUFHZixlQUFlO1FBQ2YsYUFBYTsyRkFHSixZQUFZO2tCQVp4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbidcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCeFJlc3RNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,263 @@
1
+ import { of, take } from 'rxjs';
2
+ import { first, map, mergeMap, tap } from 'rxjs/operators';
3
+ import clone from 'just-clone';
4
+ import compare from 'just-compare';
5
+ import { loadAll, saveArr, saveIDLoadedDepartment, saveSelf } from '../../store/users';
6
+ import { $get, $list, $search, $update, $user } from '../../consts/part-name-metods';
7
+ export class BXRestUser {
8
+ constructor(http, snackBar,
9
+ // private img: ImgServices,
10
+ //private dateTrace: DateTrace,
11
+ store, userMap, datePipe) {
12
+ this.http = http;
13
+ this.snackBar = snackBar;
14
+ this.store = store;
15
+ this.userMap = userMap;
16
+ this.datePipe = datePipe;
17
+ this.url = {
18
+ admin: [$user, 'admin'],
19
+ get: [$user, $get],
20
+ self: [$user, 'current'],
21
+ update: [$user, $update],
22
+ search: [$user, $search],
23
+ access: [$user, 'access'],
24
+ // AU - все авторизованные пользователи
25
+ // D1 - подразделение с id=1
26
+ // G1 - группа с id=1
27
+ fields: [$user, 'fields'],
28
+ userfield: {
29
+ list: [$user, 'userfield', $list]
30
+ }
31
+ };
32
+ this.def = {
33
+ params: { ACTIVE: 1, start: 0 }
34
+ };
35
+ this.user$ = this.store.select('users');
36
+ }
37
+ get(params = {}) {
38
+ let copyParams = clone(params);
39
+ this.setDefParam(copyParams);
40
+ return this.http.post(this.url.get, copyParams, 'Не удалось получить пользователей')
41
+ .pipe(tap(v => {
42
+ if (v && v.result) {
43
+ this.saveArrUser(v.result);
44
+ }
45
+ }));
46
+ }
47
+ getOnePage(page = 1) {
48
+ return this.get({ start: (page - 1) * 50 }).pipe(map(v => {
49
+ let res = this.http.mapResult(v);
50
+ return (res) ? res.map(r => this.userMap.HttpToBX(r)) : undefined;
51
+ }));
52
+ }
53
+ getByID(id, reload = true) {
54
+ return this.getByIDs([id], reload).pipe(map(v => (v && v.length) ? v[0] : undefined));
55
+ }
56
+ getByIDs(ids, reload = true) {
57
+ ids = Array.from(new Set(ids));
58
+ return this.user$.pipe(take(1), mergeMap(v => {
59
+ if (!reload) {
60
+ let find = v.data.filter(i => ids.includes(i.ID));
61
+ if (find && find.length === ids.length) {
62
+ return of(find);
63
+ }
64
+ }
65
+ return this.getAll({ ID: ids, ACTIVE: 2 }).pipe(map(v => (v && v.length) ? v : undefined));
66
+ }));
67
+ }
68
+ getSelf(update = false) {
69
+ if (update) {
70
+ return this.getSelfHttp();
71
+ }
72
+ else {
73
+ return this.user$.pipe(mergeMap(v => {
74
+ if (v && v.self) {
75
+ return of(v.self);
76
+ }
77
+ else {
78
+ return this.getSelfHttp();
79
+ }
80
+ }), first());
81
+ }
82
+ }
83
+ getSelfHttp() {
84
+ return this.http.get(this.url.self, {}, 'Не удалось получить пользователя')
85
+ .pipe(map(v => {
86
+ if (v && v.result) {
87
+ return this.userMap.HttpToBX(v.result);
88
+ }
89
+ return undefined;
90
+ }), tap(v => {
91
+ if (v) {
92
+ this.store.dispatch(saveSelf({ self: v }));
93
+ }
94
+ }));
95
+ }
96
+ access(access, textError = 'Не удалось получить права') {
97
+ return this.http.get(this.url.access, { ACCESS: access }, textError).pipe(map(v => this.http.mapResult(v)));
98
+ }
99
+ getByDepartment(id) {
100
+ const ids = (typeof id === 'number') ? [id] : id;
101
+ return this.user$.pipe(first(), mergeMap(v => {
102
+ if (v.load.all) {
103
+ return of(clone(v.data.filter(i => ids.find(id => i.UF_DEPARTMENT.includes(id)))));
104
+ }
105
+ if (ids.every(i => v.load.department.includes(i))) {
106
+ return of(clone(v.data.filter(i => ids.find(id => i.UF_DEPARTMENT.includes(id)))));
107
+ }
108
+ return this.getAll({ UF_DEPARTMENT: ids }).pipe(tap(_ => {
109
+ this.store.dispatch(saveIDLoadedDepartment({ id: ids }));
110
+ }));
111
+ }));
112
+ }
113
+ getAll(params = {}) {
114
+ if (!Object.keys(params).length) {
115
+ params = clone(this.def.params);
116
+ }
117
+ const saveAllUser = compare(params, this.def.params);
118
+ return this.user$.pipe(take(1), mergeMap(v => {
119
+ if (v.load.all) {
120
+ if (compare(this.def.params, params)) {
121
+ return of(clone(v.data));
122
+ }
123
+ }
124
+ return this.getEndArray(params).pipe(take(1), map(v => {
125
+ if (v && v.result) {
126
+ let cl = clone(v.result);
127
+ return this.saveArrUser(cl);
128
+ }
129
+ return undefined;
130
+ }));
131
+ }), tap(v => {
132
+ if (v && v.length && saveAllUser) {
133
+ this.store.dispatch(loadAll({ load: true }));
134
+ }
135
+ params.start = this.def.params.start;
136
+ }));
137
+ }
138
+ getAllByPersonalBirthday(day = undefined, month = undefined, checkWeekend = false) {
139
+ return this.http.timeNowOnServer().pipe(mergeMap(date => {
140
+ if (date) {
141
+ let daySent = (day) ? day : date.getDate();
142
+ let start = date.getFullYear() + 1;
143
+ let monthSent = (month) ? month : date.getMonth() + 1;
144
+ let arr = Array.from(Array(200).keys()).map(_ => {
145
+ start--;
146
+ let res = this.datePipe.transform(new Date(start, monthSent - 1, daySent), 'YYYY-MM-dd');
147
+ return (res) ? res : '';
148
+ });
149
+ // TODO: Упростить
150
+ if (checkWeekend && date.getDay() === 1) {
151
+ start = date.getFullYear() + 1;
152
+ arr.push(...Array.from(Array(200).keys()).map(_ => {
153
+ start--;
154
+ let res = this.datePipe.transform(new Date(start, monthSent - 1, daySent - 1), 'YYYY-MM-dd');
155
+ return (res) ? res : '';
156
+ }));
157
+ start = date.getFullYear() + 1;
158
+ arr.push(...Array.from(Array(200).keys()).map(_ => {
159
+ start--;
160
+ let res = this.datePipe.transform(new Date(start, monthSent - 1, daySent - 2), 'YYYY-MM-dd');
161
+ return (res) ? res : '';
162
+ }));
163
+ }
164
+ return this.getAll({ PERSONAL_BIRTHDAY: arr });
165
+ }
166
+ this.snackBar.warning('Не удалось получить время сервера');
167
+ return of(undefined);
168
+ }));
169
+ }
170
+ saveArrUser(users) {
171
+ let result = [];
172
+ for (const user of users) {
173
+ result.push(this.userMap.HttpToBX(user));
174
+ }
175
+ this.store.dispatch(saveArr({ arr: result }));
176
+ return result;
177
+ }
178
+ search(params) {
179
+ if (typeof params === 'string') {
180
+ params = { FIND: params };
181
+ }
182
+ if (typeof params.ACTIVE !== 'boolean') {
183
+ params.ACTIVE = true;
184
+ }
185
+ return this.http.get(this.url.search, params, 'Сервер не отвечает на запрос поиска')
186
+ .pipe(map(v => {
187
+ if (v && v.result) {
188
+ const mapResult = this.http.mapResult(v);
189
+ if (mapResult) {
190
+ return this.saveArrUser(mapResult);
191
+ }
192
+ }
193
+ return undefined;
194
+ }));
195
+ }
196
+ fields() {
197
+ return this.http.get(this.url.fields).pipe(map(v => this.http.mapResult(v)));
198
+ }
199
+ update(user, fieldUpdate) {
200
+ if (fieldUpdate && fieldUpdate.length) {
201
+ let sendData = {
202
+ ID: user.ID,
203
+ };
204
+ const userBX = this.userMap.BXtoHttp(user);
205
+ for (const field of fieldUpdate) {
206
+ if (userBX[field]) {
207
+ sendData[field] = userBX[field];
208
+ }
209
+ else {
210
+ this.snackBar.error('Одно из указанных полей отправлено не верно');
211
+ }
212
+ }
213
+ return this.http.post(this.url.update, sendData, 'Не удалось обновить пользователя с ID' + user.ID);
214
+ }
215
+ else {
216
+ this.snackBar.error('Не указано ни одно поле для редактирования пользователя');
217
+ return of({});
218
+ }
219
+ }
220
+ getEndArray(params = {}) {
221
+ return this.get(params).pipe(mergeMap(items => {
222
+ if (items && items.result && typeof items.result === 'object') {
223
+ if (items.next) {
224
+ params.start = items.next;
225
+ return this.getEndArray(params).pipe(map(vEnd => {
226
+ if (vEnd && items.result && vEnd.result) {
227
+ return { result: [...items.result, ...vEnd.result] };
228
+ }
229
+ return (items) ? items : undefined;
230
+ }));
231
+ }
232
+ return of(items);
233
+ }
234
+ else {
235
+ return of(undefined);
236
+ }
237
+ }));
238
+ }
239
+ // getUrlCompressedImage(url: string, width: number, height: number) {
240
+ // return this.img.getUrlCompressed(url, width, height)
241
+ // }
242
+ setDefParam(params) {
243
+ if (!params.hasOwnProperty('ACTIVE')) {
244
+ params.ACTIVE = this.def.params.ACTIVE;
245
+ }
246
+ if (params.ACTIVE && params.ACTIVE === 2) {
247
+ delete params.ACTIVE;
248
+ }
249
+ if (!params.hasOwnProperty('start')) {
250
+ params.start = this.def.params.start;
251
+ }
252
+ if (params.UF_DEPARTMENT && !params.UF_DEPARTMENT.length) {
253
+ delete params.UF_DEPARTMENT;
254
+ }
255
+ }
256
+ getInfoAboutCustomFieldsBX() {
257
+ return this.http.get(this.url.userfield.list).pipe(map(v => this.http.mapResult(v)));
258
+ }
259
+ itIsAdmin() {
260
+ return this.http.get(this.url.admin).pipe(map(v => this.http.mapResult(v)));
261
+ }
262
+ }
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3JlcXVlc3QvdXNlci91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxRCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBTWxDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBYyxNQUFNLG1CQUFtQixDQUFBO0FBUWxHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFHcEYsTUFBTSxPQUFPLFVBQVU7SUF1Qm5CLFlBQ1ksSUFBb0IsRUFDcEIsUUFBeUI7SUFDbEMsNEJBQTRCO0lBQzNCLCtCQUErQjtJQUN2QixLQUFtQyxFQUNuQyxPQUFpQyxFQUNqQyxRQUFrQjtRQU5sQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUd6QixVQUFLLEdBQUwsS0FBSyxDQUE4QjtRQUNuQyxZQUFPLEdBQVAsT0FBTyxDQUEwQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBN0I5QixRQUFHLEdBQUc7WUFDRixLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1lBQ3ZCLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7WUFDbEIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztZQUN4QixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUs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SSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtTQUN2QjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO1NBQ3ZDO1FBRUQsSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDdEQsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFBO1NBQzlCO0lBQ0wsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ3JGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25DLENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUM3RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuQyxDQUFBO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRha2UgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IGNsb25lIGZyb20gJ2p1c3QtY2xvbmUnXG5pbXBvcnQgY29tcGFyZSBmcm9tICdqdXN0LWNvbXBhcmUnXG5pbXBvcnQgeyBpQlhHZXRQYXJhbSB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvZ2V0J1xuaW1wb3J0IEh0dHBCWFNlcnZpY2VzIGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvSHR0cEJYJ1xuaW1wb3J0IFVzZXJGaWx0ZXJTZWFyY2ggZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvdXNlci9Vc2VyRmlsdGVyU2VhcmNoJ1xuLy8gaW1wb3J0IEltZ1NlcnZpY2VzIGZyb20gJ2J4LXJlc3Qvc2VydmljZXMvYXBpL2JpdHJpeC9jdXN0b20vaW1nJ1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSdcbmltcG9ydCB7IGxvYWRBbGwsIHNhdmVBcnIsIHNhdmVJRExvYWRlZERlcGFydG1lbnQsIHNhdmVTZWxmLCBzdG9yZVVzZXJzIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlcnMnXG5pbXBvcnQgeyBpQ3VzdG9tVXNlckZpZWxkSW5mbyB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L3VzZXIvQ3VzdG9tVXNlckZpZWxkSW5mbydcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQml0cml4QXBpVXNlck1hcFNlcnZpY2VzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwL3Jlc3QvdXNlcidcbi8vIGltcG9ydCBEYXRlVHJhY2UgZnJvbSAnYngtcmVzdC9zZXJ2aWNlcy9hcGkvdHJhY2UvbWV0b2RzL2RhdGUnXG5pbXBvcnQgU25hY2tCYXJTZXJ2aWNlIGZyb20gJy4uLy4uL3NlcnZpY2VzL3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSdcbmltcG9ydCBpSHR0cEFuc3dlckJYIGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvaHR0cEFuc3dlckJYJ1xuaW1wb3J0IHsgaUJYUmVzdFVzZXIsIGlCWFJlc3RVc2VySHR0cCwgaUJYUmVzdFVzZXJIdHRwRmllbGQgfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC91c2VyL3VzZXInXG5pbXBvcnQgeyAkZ2V0LCAkbGlzdCwgJHNlYXJjaCwgJHVwZGF0ZSwgJHVzZXIgfSBmcm9tICcuLi8uLi9jb25zdHMvcGFydC1uYW1lLW1ldG9kcydcbmltcG9ydCB7IFVzZXJGaWx0ZXIgfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC91c2VyL3VzZXJGaWx0ZXInXG5cbmV4cG9ydCBjbGFzcyBCWFJlc3RVc2VyIHtcbiAgICB1cmwgPSB7XG4gICAgICAgIGFkbWluOiBbJHVzZXIsICdhZG1pbiddLFxuICAgICAgICBnZXQ6IFskdXNlciwgJGdldF0sXG4gICAgICAgIHNlbGY6IFskdXNlciwgJ2N1cnJlbnQnXSxcbiAgICAgICAgdXBkYXRlOiBbJHVzZXIsICR1cGRhdGVdLFxuICAgICAgICBzZWFyY2g6IFskdXNlciwgJHNlYXJjaF0sXG4gICAgICAgIGFjY2VzczogWyR1c2VyLCAnYWNjZXNzJ10sIC8vIFUxIC0g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINGBIGlkID0xXG4gICAgICAgIC8vIEFVIC0g0LLRgdC1INCw0LLRgtC+0YDQuNC30L7QstCw0L3QvdGL0LUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C4XG4gICAgICAgIC8vIEQxIC0g0L/QvtC00YDQsNC30LTQtdC70LXQvdC40LUg0YEgaWQ9MVxuICAgICAgICAvLyBHMSAtINCz0YDRg9C/0L/QsCDRgSBpZD0xXG4gICAgICAgIGZpZWxkczogWyR1c2VyLCAnZmllbGRzJ10sXG4gICAgICAgIHVzZXJmaWVsZDoge1xuICAgICAgICAgICAgbGlzdDogWyR1c2VyLCAndXNlcmZpZWxkJywgJGxpc3RdXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWY6IHsgcGFyYW1zOiB7IEFDVElWRTogMSwgc3RhcnQ6IDAgfSB9ID0ge1xuICAgICAgICBwYXJhbXM6IHtBQ1RJVkU6IDEsIHN0YXJ0OiAwfVxuICAgIH1cblxuICAgIHVzZXIkOiBPYnNlcnZhYmxlPHN0b3JlVXNlcnM+XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQlhTZXJ2aWNlcyxcbiAgICAgICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgIC8vIHByaXZhdGUgaW1nOiBJbWdTZXJ2aWNlcyxcbiAgICAgICAgLy9wcml2YXRlIGRhdGVUcmFjZTogRGF0ZVRyYWNlLFxuICAgICAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTx7IHVzZXJzOiBzdG9yZVVzZXJzIH0+LFxuICAgICAgICBwcml2YXRlIHVzZXJNYXA6IEJpdHJpeEFwaVVzZXJNYXBTZXJ2aWNlcyxcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgICApIHtcbiAgICAgICAgdGhpcy51c2VyJCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd1c2VycycpXG4gICAgfVxuXG4gICAgZ2V0KHBhcmFtczogaUJYR2V0UGFyYW0gPSB7fSk6IE9ic2VydmFibGU8aUh0dHBBbnN3ZXJCWDxpQlhSZXN0VXNlckh0dHBbXT4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IGNvcHlQYXJhbXMgPSBjbG9uZShwYXJhbXMpXG4gICAgICAgIHRoaXMuc2V0RGVmUGFyYW0oY29weVBhcmFtcylcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwW10+IHwgdW5kZWZpbmVkPlxuICAgICAgICAodGhpcy51cmwuZ2V0LCBjb3B5UGFyYW1zLCAn0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFyclVzZXIodi5yZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIGdldE9uZVBhZ2UocGFnZTogbnVtYmVyID0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoe3N0YXJ0OiAocGFnZSAtIDEpICogNTB9KS5waXBlKFxuICAgICAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXMgPSB0aGlzLmh0dHAubWFwUmVzdWx0KHYpXG4gICAgICAgICAgICAgICAgcmV0dXJuIChyZXMpID8gcmVzLm1hcChyID0+IHRoaXMudXNlck1hcC5IdHRwVG9CWChyKSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRCeUlEKGlkOiBudW1iZXIsIHJlbG9hZCA9IHRydWUpOiBPYnNlcnZhYmxlPGlCWFJlc3RVc2VyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5SURzKFtpZF0sIHJlbG9hZCkucGlwZShtYXAodiA9PiAodiAmJiB2Lmxlbmd0aCkgPyB2WzBdIDogdW5kZWZpbmVkKSlcbiAgICB9XG5cbiAgICBnZXRCeUlEcyhpZHM6IG51bWJlcltdLCByZWxvYWQgPSB0cnVlKTogT2JzZXJ2YWJsZTxpQlhSZXN0VXNlcltdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlkcyA9IEFycmF5LmZyb20obmV3IFNldChpZHMpKVxuICAgICAgICByZXR1cm4gdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5kID0gdi5kYXRhLmZpbHRlcihpID0+IGlkcy5pbmNsdWRlcyhpLklEKSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmQgJiYgZmluZC5sZW5ndGggPT09IGlkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmaW5kKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFsbCh7SUQ6IGlkcywgQUNUSVZFOiAyfSkucGlwZShtYXAodiA9PiAodiAmJiB2Lmxlbmd0aCkgPyB2IDogdW5kZWZpbmVkKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRTZWxmKHVwZGF0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlbGZIdHRwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAodiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHYuc2VsZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHYuc2VsZilcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlbGZIdHRwKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGZIdHRwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cD4+XG4gICAgICAgICh0aGlzLnVybC5zZWxmLCB7fSwgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAmJiB2LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlck1hcC5IdHRwVG9CWCh2LnJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzYXZlU2VsZih7c2VsZjogdn0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgfVxuXG4gICAgYWNjZXNzKGFjY2Vzczogc3RyaW5nW10sIHRleHRFcnJvciA9ICfQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0L/RgNCw0LLQsCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8aUh0dHBBbnN3ZXJCWDxib29sZWFuPiB8IHVuZGVmaW5lZD4odGhpcy51cmwuYWNjZXNzLCB7QUNDRVNTOiBhY2Nlc3N9LCB0ZXh0RXJyb3IpLnBpcGUoXG4gICAgICAgICAgICBtYXAodiA9PiB0aGlzLmh0dHAubWFwUmVzdWx0KHYpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgZ2V0QnlEZXBhcnRtZW50KGlkOiBudW1iZXJbXSB8IG51bWJlcik6IE9ic2VydmFibGU8aUJYUmVzdFVzZXIgW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaWRzOiBudW1iZXJbXSA9ICh0eXBlb2YgaWQgPT09ICdudW1iZXInKSA/IFtpZF0gOiBpZFxuICAgICAgICByZXR1cm4gdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKFxuICAgICAgICAgICAgICAgIHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodi5sb2FkLmFsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGNsb25lKHYuZGF0YS5maWx0ZXIoaSA9PiBpZHMuZmluZChpZCA9PiBpLlVGX0RFUEFSVE1FTlQuaW5jbHVkZXMoaWQpKSkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZHMuZXZlcnkoaSA9PiB2LmxvYWQuZGVwYXJ0bWVudC5pbmNsdWRlcyhpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjbG9uZSh2LmRhdGEuZmlsdGVyKGkgPT4gaWRzLmZpbmQoaWQgPT4gaS5VRl9ERVBBUlRNRU5ULmluY2x1ZGVzKGlkKSkpKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGwoe1VGX0RFUEFSVE1FTlQ6IGlkc30pLnBpcGUodGFwKF8gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzYXZlSURMb2FkZWREZXBhcnRtZW50KHtpZDogaWRzfSkpXG4gICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRBbGwocGFyYW1zOiBpQlhHZXRQYXJhbSA9IHt9KTogT2JzZXJ2YWJsZTxpQlhSZXN0VXNlciBbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBjbG9uZSh0aGlzLmRlZi5wYXJhbXMpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYXZlQWxsVXNlciA9IGNvbXBhcmUocGFyYW1zLCB0aGlzLmRlZi5wYXJhbXMpXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWVyZ2VNYXAodiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYubG9hZC5hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUodGhpcy5kZWYucGFyYW1zLCBwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY2xvbmUodi5kYXRhKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVuZEFycmF5KHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2wgPSBjbG9uZSh2LnJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYXZlQXJyVXNlcihjbClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAodiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdi5sZW5ndGggJiYgc2F2ZUFsbFVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChsb2FkQWxsKHtsb2FkOiB0cnVlfSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydCA9IHRoaXMuZGVmLnBhcmFtcy5zdGFydFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGdldEFsbEJ5UGVyc29uYWxCaXJ0aGRheShkYXk6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgbW9udGg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgY2hlY2tXZWVrZW5kID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC50aW1lTm93T25TZXJ2ZXIoKS5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoZGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRheVNlbnQgPSAoZGF5KSA/IGRheSA6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGFydCA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vbnRoU2VudCA9IChtb250aCkgPyBtb250aCA6IGRhdGUuZ2V0TW9udGgoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFycjogc3RyaW5nW10gPSBBcnJheS5mcm9tKEFycmF5KDIwMCkua2V5cygpKS5tYXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydC0tXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoc3RhcnQsIG1vbnRoU2VudCAtIDEsIGRheVNlbnQpLCAnWVlZWS1NTS1kZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlcykgPyByZXMgOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiDQo9C/0YDQvtGB0YLQuNGC0YxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrV2Vla2VuZCAmJiBkYXRlLmdldERheSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLkFycmF5LmZyb20oQXJyYXkoMjAwKS5rZXlzKCkpLm1hcChfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoc3RhcnQsIG1vbnRoU2VudCAtIDEsIGRheVNlbnQgLSAxKSwgJ1lZWVktTU0tZGQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlcykgPyByZXMgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGRhdGUuZ2V0RnVsbFllYXIoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLkFycmF5LmZyb20oQXJyYXkoMjAwKS5rZXlzKCkpLm1hcChfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obmV3IERhdGUoc3RhcnQsIG1vbnRoU2VudCAtIDEsIGRheVNlbnQgLSAyKSwgJ1lZWVktTU0tZGQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJlcykgPyByZXMgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsKHtQRVJTT05BTF9CSVJUSERBWTogYXJyfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci53YXJuaW5nKCfQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LLRgNC10LzRjyDRgdC10YDQstC10YDQsCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzYXZlQXJyVXNlcih1c2VyczogaUJYUmVzdFVzZXJIdHRwW10pIHtcbiAgICAgICAgbGV0IHJlc3VsdDogaUJYUmVzdFVzZXIgW10gPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IHVzZXIgb2YgdXNlcnMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudXNlck1hcC5IdHRwVG9CWCh1c2VyKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNhdmVBcnIoe2FycjogcmVzdWx0fSkpXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHNlYXJjaChwYXJhbXM6IHN0cmluZyB8IFVzZXJGaWx0ZXJTZWFyY2gpOiBPYnNlcnZhYmxlPGlCWFJlc3RVc2VyIFtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGFyYW1zID0ge0ZJTkQ6IHBhcmFtc31cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcy5BQ1RJVkUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcGFyYW1zLkFDVElWRSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGlCWFJlc3RVc2VySHR0cFtdPj4odGhpcy51cmwuc2VhcmNoLCBwYXJhbXMsICfQodC10YDQstC10YAg0L3QtSDQvtGC0LLQtdGH0LDQtdGCINC90LAg0LfQsNC/0YDQvtGBINC/0L7QuNGB0LrQsCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHYucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBSZXN1bHQgPSB0aGlzLmh0dHAubWFwUmVzdWx0KHYpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFyclVzZXIobWFwUmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIGZpZWxkcygpOiBPYnNlcnZhYmxlPGlCWFJlc3RVc2VySHR0cEZpZWxkIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwRmllbGQ+Pih0aGlzLnVybC5maWVsZHMpLnBpcGUoXG4gICAgICAgICAgICBtYXAodiA9PiB0aGlzLmh0dHAubWFwUmVzdWx0KHYpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgdXBkYXRlKHVzZXI6IGlCWFJlc3RVc2VyLCBmaWVsZFVwZGF0ZTogc3RyaW5nW10pOiBPYnNlcnZhYmxlPGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwW10+IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChmaWVsZFVwZGF0ZSAmJiBmaWVsZFVwZGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBzZW5kRGF0YTogYW55ID0ge1xuICAgICAgICAgICAgICAgIElEOiB1c2VyLklELFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXNlckJYID0gdGhpcy51c2VyTWFwLkJYdG9IdHRwKHVzZXIpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXJCWFtmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZERhdGFbZmllbGRdID0gdXNlckJYW2ZpZWxkXVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ9Ce0LTQvdC+INC40Lcg0YPQutCw0LfQsNC90L3Ri9GFINC/0L7Qu9C10Lkg0L7RgtC/0YDQsNCy0LvQtdC90L4g0L3QtSDQstC10YDQvdC+JylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy51cmwudXBkYXRlLCBzZW5kRGF0YSwgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YEgSUQnICsgdXNlci5JRClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuZXJyb3IoJ9Cd0LUg0YPQutCw0LfQsNC90L4g0L3QuCDQvtC00L3QviDQv9C+0LvQtSDQtNC70Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nKVxuICAgICAgICAgICAgcmV0dXJuIG9mKHt9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RW5kQXJyYXkocGFyYW1zOiBVc2VyRmlsdGVyID0ge30pOiBPYnNlcnZhYmxlPGlIdHRwQW5zd2VyQlg8aUJYUmVzdFVzZXJIdHRwW10+IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldChwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcChpdGVtcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLnJlc3VsdCAmJiB0eXBlb2YgaXRlbXMucmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0ID0gaXRlbXMubmV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW5kQXJyYXkocGFyYW1zKS5waXBlKG1hcCh2RW5kID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodkVuZCAmJiBpdGVtcy5yZXN1bHQgJiYgdkVuZC5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IFsuLi5pdGVtcy5yZXN1bHQsIC4uLnZFbmQucmVzdWx0XX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtcykgPyBpdGVtcyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGl0ZW1zKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvLyBnZXRVcmxDb21wcmVzc2VkSW1hZ2UodXJsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmltZy5nZXRVcmxDb21wcmVzc2VkKHVybCwgd2lkdGgsIGhlaWdodClcbiAgICAvLyB9XG5cbiAgICBzZXREZWZQYXJhbShwYXJhbXM6IGlCWEdldFBhcmFtKSB7XG4gICAgICAgIGlmICghcGFyYW1zLmhhc093blByb3BlcnR5KCdBQ1RJVkUnKSkge1xuICAgICAgICAgICAgcGFyYW1zLkFDVElWRSA9IHRoaXMuZGVmLnBhcmFtcy5BQ1RJVkVcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLkFDVElWRSAmJiBwYXJhbXMuQUNUSVZFID09PSAyKSB7XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zLkFDVElWRVxuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyYW1zLmhhc093blByb3BlcnR5KCdzdGFydCcpKSB7XG4gICAgICAgICAgICBwYXJhbXMuc3RhcnQgPSB0aGlzLmRlZi5wYXJhbXMuc3RhcnRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMuVUZfREVQQVJUTUVOVCAmJiAhcGFyYW1zLlVGX0RFUEFSVE1FTlQubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zLlVGX0RFUEFSVE1FTlRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEluZm9BYm91dEN1c3RvbUZpZWxkc0JYKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxpSHR0cEFuc3dlckJYPGlDdXN0b21Vc2VyRmllbGRJbmZvW10+Pih0aGlzLnVybC51c2VyZmllbGQubGlzdCkucGlwZShcbiAgICAgICAgICAgIG1hcCh2ID0+IHRoaXMuaHR0cC5tYXBSZXN1bHQodikpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBpdElzQWRtaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGlIdHRwQW5zd2VyQlg8Ym9vbGVhbj4+KHRoaXMudXJsLmFkbWluKS5waXBlKFxuICAgICAgICAgICAgbWFwKHYgPT4gdGhpcy5odHRwLm1hcFJlc3VsdCh2KSlcbiAgICAgICAgKVxuICAgIH1cbn1cbiJdfQ==