@sapui5/sap.fe.controls 1.141.2 → 1.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/controls/.library +1 -1
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +3 -2
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +2 -2
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +19 -12
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +21 -13
- package/src/sap/fe/controls/easyFilter/ShellHistoryProvider.js +7 -5
- package/src/sap/fe/controls/easyFilter/ShellHistoryProvider.tsx +6 -4
- package/src/sap/fe/controls/easyFilter/Token.js +5 -2
- package/src/sap/fe/controls/easyFilter/Token.tsx +5 -1
- package/src/sap/fe/controls/easyFilter/innerControls/CalendarFactory.js +4 -4
- package/src/sap/fe/controls/easyFilter/innerControls/CalendarFactory.ts +2 -3
- package/src/sap/fe/controls/easyFilter/utils.js +159 -89
- package/src/sap/fe/controls/easyFilter/utils.ts +196 -90
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle.properties +4 -4
- package/src/sap/fe/controls/messagebundle_ar.properties +10 -4
- package/src/sap/fe/controls/messagebundle_bg.properties +10 -4
- package/src/sap/fe/controls/messagebundle_ca.properties +10 -4
- package/src/sap/fe/controls/messagebundle_cnr.properties +10 -4
- package/src/sap/fe/controls/messagebundle_cs.properties +10 -4
- package/src/sap/fe/controls/messagebundle_cy.properties +10 -4
- package/src/sap/fe/controls/messagebundle_da.properties +10 -4
- package/src/sap/fe/controls/messagebundle_de.properties +10 -4
- package/src/sap/fe/controls/messagebundle_el.properties +10 -4
- package/src/sap/fe/controls/messagebundle_en.properties +10 -4
- package/src/sap/fe/controls/messagebundle_en_GB.properties +10 -4
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +10 -4
- package/src/sap/fe/controls/messagebundle_es.properties +10 -4
- package/src/sap/fe/controls/messagebundle_es_MX.properties +10 -4
- package/src/sap/fe/controls/messagebundle_et.properties +10 -4
- package/src/sap/fe/controls/messagebundle_fi.properties +10 -4
- package/src/sap/fe/controls/messagebundle_fr.properties +10 -4
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +10 -4
- package/src/sap/fe/controls/messagebundle_hi.properties +10 -4
- package/src/sap/fe/controls/messagebundle_hr.properties +10 -4
- package/src/sap/fe/controls/messagebundle_hu.properties +10 -4
- package/src/sap/fe/controls/messagebundle_id.properties +10 -4
- package/src/sap/fe/controls/messagebundle_it.properties +10 -4
- package/src/sap/fe/controls/messagebundle_iw.properties +10 -4
- package/src/sap/fe/controls/messagebundle_ja.properties +10 -4
- package/src/sap/fe/controls/messagebundle_kk.properties +10 -4
- package/src/sap/fe/controls/messagebundle_ko.properties +9 -3
- package/src/sap/fe/controls/messagebundle_lt.properties +10 -4
- package/src/sap/fe/controls/messagebundle_lv.properties +10 -4
- package/src/sap/fe/controls/messagebundle_mk.properties +10 -4
- package/src/sap/fe/controls/messagebundle_ms.properties +10 -4
- package/src/sap/fe/controls/messagebundle_nl.properties +10 -4
- package/src/sap/fe/controls/messagebundle_no.properties +10 -4
- package/src/sap/fe/controls/messagebundle_pl.properties +10 -4
- package/src/sap/fe/controls/messagebundle_pt.properties +10 -4
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +10 -4
- package/src/sap/fe/controls/messagebundle_ro.properties +10 -4
- package/src/sap/fe/controls/messagebundle_ru.properties +10 -4
- package/src/sap/fe/controls/messagebundle_sh.properties +10 -4
- package/src/sap/fe/controls/messagebundle_sk.properties +10 -4
- package/src/sap/fe/controls/messagebundle_sl.properties +11 -5
- package/src/sap/fe/controls/messagebundle_sr.properties +10 -4
- package/src/sap/fe/controls/messagebundle_sv.properties +10 -4
- package/src/sap/fe/controls/messagebundle_th.properties +10 -4
- package/src/sap/fe/controls/messagebundle_tr.properties +10 -4
- package/src/sap/fe/controls/messagebundle_uk.properties +10 -4
- package/src/sap/fe/controls/messagebundle_vi.properties +10 -4
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +10 -4
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +10 -4
|
@@ -11,9 +11,25 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
11
11
|
if (arr1.length !== arr2.length) {
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
+
|
|
14
15
|
// Compare elements of both arrays
|
|
15
16
|
for (let i = 0; i < arr1.length; i++) {
|
|
16
|
-
if (arr1[i].operator !== arr2[i].operator || !arr1[i].selectedValues.every((
|
|
17
|
+
if (arr1[i].operator !== arr2[i].operator || !arr1[i].selectedValues.every((firstValue, index) => {
|
|
18
|
+
const otherValue = arr2[i].selectedValues[index];
|
|
19
|
+
|
|
20
|
+
// Handle Date objects
|
|
21
|
+
if (firstValue instanceof Date || otherValue instanceof Date) {
|
|
22
|
+
return deepEqual(firstValue, otherValue);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Handle objects with deep equality
|
|
26
|
+
if (typeof firstValue === "object" && typeof otherValue === "object") {
|
|
27
|
+
return deepEqual(firstValue.value, otherValue.value) && firstValue.description === otherValue.description;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fallback to direct comparison
|
|
31
|
+
return firstValue === otherValue;
|
|
32
|
+
})) {
|
|
17
33
|
return false;
|
|
18
34
|
}
|
|
19
35
|
}
|
|
@@ -150,100 +166,154 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
150
166
|
return value ? resourceBundle.getText("M_EASY_FILTER_SELECTED_VALUES_TRUE") : resourceBundle.getText("M_EASY_FILTER_SELECTED_VALUES_FALSE");
|
|
151
167
|
}
|
|
152
168
|
|
|
153
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Handles the single range validation and updates for a filter value.
|
|
171
|
+
* @param filterCriteria The metadata for the filter
|
|
172
|
+
* @param filterValue The filter value to validate
|
|
173
|
+
* @param singleRangeTokenLabels Array to collect labels of invalid single range filters
|
|
174
|
+
* @param singleRangeUsage Record to track usage count of single range filters
|
|
175
|
+
* @returns True if processing should continue, false if it should skip and make the existing token as empty
|
|
176
|
+
*/
|
|
177
|
+
function handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage) {
|
|
178
|
+
if (filterCriteria?.filterRestriction !== "SingleRange") {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
const isInvalid = isInvalidSingleRange(filterValue) || (singleRangeUsage[filterValue.name] ?? 0) > 0;
|
|
182
|
+
singleRangeUsage[filterValue.name] = (singleRangeUsage[filterValue.name] ?? 0) + 1;
|
|
183
|
+
if (!isInvalid) {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
const label = filterCriteria.label || filterCriteria.name;
|
|
187
|
+
if (!singleRangeTokenLabels.includes(label)) {
|
|
188
|
+
singleRangeTokenLabels.push(label);
|
|
189
|
+
}
|
|
190
|
+
filterValue.values = [];
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Validates if a filter value violates the SingleRange restriction.
|
|
195
|
+
// Returns true if invalid, false if valid.
|
|
196
|
+
// Rules for SingleRange:
|
|
197
|
+
// - Allowed operators: EQ, LE, LT, GE, GT, BT, NB
|
|
198
|
+
// - Single-value operators (EQ, LE, LT, GE, GT): must have exactly 1 value
|
|
199
|
+
// - Range operators (BT, NB): must have exactly 2 values (lower & upper bound)
|
|
200
|
+
// - Only one condition/token is allowed per property (should be enforced outside)
|
|
201
|
+
//
|
|
154
202
|
function isInvalidSingleRange(filterValue) {
|
|
155
|
-
const
|
|
203
|
+
const singleValueOps = [FilterOperator.EQ, FilterOperator.LE, FilterOperator.LT, FilterOperator.GE, FilterOperator.GT];
|
|
204
|
+
const rangeOps = [FilterOperator.BT, FilterOperator.NB];
|
|
205
|
+
const op = filterValue.operator;
|
|
206
|
+
const valCount = filterValue.values?.length || 0;
|
|
207
|
+
|
|
208
|
+
// Single-value operators → must have exactly 1 value
|
|
209
|
+
if (singleValueOps.includes(op)) {
|
|
210
|
+
return valCount !== 1;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Range operators (Between / Not Between) → must have exactly 2 values
|
|
214
|
+
if (rangeOps.includes(op)) {
|
|
215
|
+
return valCount !== 2;
|
|
216
|
+
}
|
|
156
217
|
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
// filterValue.values.length >= 2 blocks multiple values for single-range filters.
|
|
160
|
-
// Together, this returns true when the filter is not a valid single-range.
|
|
161
|
-
return filterValue.operator !== FilterOperator.BT && (!allowed.includes(filterValue.operator) || filterValue.values.length >= 2);
|
|
218
|
+
// Anything else is not allowed for SingleRange
|
|
219
|
+
return true;
|
|
162
220
|
}
|
|
163
221
|
function formatData(tokens, filterValues, filterBarMetadata, setMessageStripForValidatedFilters) {
|
|
164
|
-
if (filterValues) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
// Only block if hiddenFilter is true
|
|
178
|
-
if (Object.prototype.hasOwnProperty.call(filterCriteria, "hiddenFilter") && filterCriteria?.hiddenFilter) {
|
|
179
|
-
hiddenFilterTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
180
|
-
continue;
|
|
181
|
-
}
|
|
182
|
-
// Only apply SingleRange logic if filterRestriction is set to SingleRange
|
|
183
|
-
if (filterCriteria?.filterRestriction === "SingleRange" && isInvalidSingleRange(filterValue)) {
|
|
184
|
-
singleRangeTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
185
|
-
filterValue.values = []; // Reset values to avoid adding invalid token values
|
|
186
|
-
}
|
|
187
|
-
const {
|
|
188
|
-
type
|
|
189
|
-
} = filterCriteria;
|
|
190
|
-
const tokenIndex = tokens.findIndex(token => token.key === filterValue.name);
|
|
191
|
-
const {
|
|
192
|
-
operator,
|
|
193
|
-
values
|
|
194
|
-
} = filterValue;
|
|
195
|
-
let keySpecificSelectedValues;
|
|
196
|
-
if (EasyFilterUtils.isBetweenSelectedValues(operator)) {
|
|
197
|
-
keySpecificSelectedValues = {
|
|
198
|
-
operator,
|
|
199
|
-
selectedValues: values
|
|
200
|
-
};
|
|
201
|
-
} else {
|
|
202
|
-
keySpecificSelectedValues = {
|
|
203
|
-
operator: operator,
|
|
204
|
-
selectedValues: values
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
if (tokenIndex === -1) {
|
|
208
|
-
// Add new token if it doesn't exist
|
|
209
|
-
const newToken = {
|
|
210
|
-
key: filterValue.name,
|
|
211
|
-
label: filterCriteria.label,
|
|
212
|
-
keySpecificSelectedValues: [keySpecificSelectedValues],
|
|
213
|
-
type: type,
|
|
214
|
-
busy: type === "ValueHelp" ? true : false
|
|
215
|
-
};
|
|
216
|
-
tokens.push(newToken);
|
|
217
|
-
} else {
|
|
218
|
-
// Update existing token
|
|
219
|
-
const currentToken = tokens[tokenIndex];
|
|
220
|
-
//If its default value , override it
|
|
221
|
-
if ((currentToken.isRequired ?? false) && !visitedMapForMandatoryTokens[currentToken.key]) {
|
|
222
|
-
currentToken.keySpecificSelectedValues = [keySpecificSelectedValues];
|
|
223
|
-
visitedMapForMandatoryTokens[currentToken.key] = true;
|
|
224
|
-
} else {
|
|
225
|
-
currentToken.keySpecificSelectedValues.push(keySpecificSelectedValues);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
222
|
+
if (!filterValues) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const visitedMapForMandatoryTokens = {};
|
|
226
|
+
const nonFilterableTokenLabels = [];
|
|
227
|
+
const singleRangeTokenLabels = [];
|
|
228
|
+
const hiddenFilterTokenLabels = [];
|
|
229
|
+
const singleRangeUsage = {};
|
|
230
|
+
for (const filterValue of filterValues) {
|
|
231
|
+
const filterCriteria = filterBarMetadata.find(field => field.name === filterValue.name);
|
|
232
|
+
if (!filterCriteria) {
|
|
233
|
+
continue;
|
|
229
234
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
messages.push(resourceBundle.getText("M_EASY_FILTER_NON_FILTERABLE", [nonFilterableTokenLabel]));
|
|
235
|
-
}
|
|
236
|
-
if (hiddenFilterTokenLabels.length > 0) {
|
|
237
|
-
const label = `<strong>${hiddenFilterTokenLabels.join(", ")}</strong>`;
|
|
238
|
-
messages.push(resourceBundle.getText("M_EASY_FILTER_HIDDEN_FILTER", [label]));
|
|
239
|
-
}
|
|
240
|
-
if (singleRangeTokenLabels.length > 0) {
|
|
241
|
-
const label = `<strong>${singleRangeTokenLabels.join(", ")}</strong>`;
|
|
242
|
-
messages.push(resourceBundle.getText("M_EASY_FILTER_SINGLE_RANGE", [label]));
|
|
243
|
-
}
|
|
244
|
-
setMessageStripForValidatedFilters(messages.join("<br>"));
|
|
235
|
+
|
|
236
|
+
// Handle non-filterable and hidden filters
|
|
237
|
+
if (!processFilterCriteria(filterCriteria, nonFilterableTokenLabels, hiddenFilterTokenLabels)) {
|
|
238
|
+
continue;
|
|
245
239
|
}
|
|
240
|
+
|
|
241
|
+
// Validate single range filters
|
|
242
|
+
const isInvalidSingleRangeToken = !handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage);
|
|
243
|
+
|
|
244
|
+
// Update tokens
|
|
245
|
+
updateTokens(tokens, filterValue, filterCriteria, visitedMapForMandatoryTokens, isInvalidSingleRangeToken);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Handle validation messages
|
|
249
|
+
if (nonFilterableTokenLabels.length > 0 || singleRangeTokenLabels.length > 0 || hiddenFilterTokenLabels.length > 0) {
|
|
250
|
+
setMessageStripForValidatedFilters(generateValidationMessages(nonFilterableTokenLabels, singleRangeTokenLabels, hiddenFilterTokenLabels));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function processFilterCriteria(filterCriteria, nonFilterableTokenLabels, hiddenFilterTokenLabels) {
|
|
254
|
+
if (filterCriteria.filterable === false) {
|
|
255
|
+
nonFilterableTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (filterCriteria.hiddenFilter === true) {
|
|
259
|
+
hiddenFilterTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
function updateTokens(tokens, filterValue, filterCriteria, visitedMapForMandatoryTokens, isInvalidSingleRangeToken) {
|
|
265
|
+
const tokenIndex = tokens.findIndex(token => token.key === filterValue.name);
|
|
266
|
+
const keySpecificSelectedValues = createKeySpecificSelectedValues(filterValue);
|
|
267
|
+
if (tokenIndex === -1) {
|
|
268
|
+
// Add new token
|
|
269
|
+
tokens.push({
|
|
270
|
+
key: filterValue.name,
|
|
271
|
+
label: filterCriteria.label,
|
|
272
|
+
keySpecificSelectedValues: isInvalidSingleRangeToken ? [] : [keySpecificSelectedValues],
|
|
273
|
+
type: filterCriteria.type,
|
|
274
|
+
busy: filterCriteria.type === "ValueHelp"
|
|
275
|
+
});
|
|
276
|
+
} else {
|
|
277
|
+
// Update existing token
|
|
278
|
+
const currentToken = tokens[tokenIndex];
|
|
279
|
+
if (isInvalidSingleRangeToken) {
|
|
280
|
+
currentToken.keySpecificSelectedValues = [];
|
|
281
|
+
} else if ((currentToken.isRequired ?? false) && !visitedMapForMandatoryTokens[currentToken.key]) {
|
|
282
|
+
currentToken.keySpecificSelectedValues = [keySpecificSelectedValues];
|
|
283
|
+
visitedMapForMandatoryTokens[currentToken.key] = true;
|
|
284
|
+
} else {
|
|
285
|
+
currentToken.keySpecificSelectedValues.push(keySpecificSelectedValues);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function createKeySpecificSelectedValues(filterValue) {
|
|
290
|
+
const {
|
|
291
|
+
operator,
|
|
292
|
+
values
|
|
293
|
+
} = filterValue;
|
|
294
|
+
if (EasyFilterUtils.isBetweenSelectedValues(operator)) {
|
|
295
|
+
return {
|
|
296
|
+
operator,
|
|
297
|
+
selectedValues: values
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
operator: operator,
|
|
302
|
+
selectedValues: values
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function generateValidationMessages(nonFilterableTokenLabels, singleRangeTokenLabels, hiddenFilterTokenLabels) {
|
|
306
|
+
const messages = [];
|
|
307
|
+
if (nonFilterableTokenLabels.length > 0) {
|
|
308
|
+
messages.push(resourceBundle.getText("M_EASY_FILTER_NON_FILTERABLE", [`<strong>${nonFilterableTokenLabels.join(", ")}</strong>`]));
|
|
309
|
+
}
|
|
310
|
+
if (hiddenFilterTokenLabels.length > 0) {
|
|
311
|
+
messages.push(resourceBundle.getText("M_EASY_FILTER_HIDDEN_FILTER", [`<strong>${hiddenFilterTokenLabels.join(", ")}</strong>`]));
|
|
312
|
+
}
|
|
313
|
+
if (singleRangeTokenLabels.length > 0) {
|
|
314
|
+
messages.push(resourceBundle.getText("M_EASY_FILTER_SINGLE_RANGE", [`<strong>${singleRangeTokenLabels.join(", ")}</strong>`]));
|
|
246
315
|
}
|
|
316
|
+
return messages.join("<br>");
|
|
247
317
|
}
|
|
248
318
|
const EasyFilterUtils = {
|
|
249
319
|
areItemsSame,
|
|
@@ -258,4 +328,4 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
258
328
|
};
|
|
259
329
|
return EasyFilterUtils;
|
|
260
330
|
}, false);
|
|
261
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGF0ZVRpbWVPZmZzZXQiLCJEYXRlVGltZU9mZnNldCIsImFyZUl0ZW1zU2FtZSIsImFycjEiLCJhcnIyIiwibGVuZ3RoIiwiaSIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJldmVyeSIsInZhbHVlIiwiaW5kZXgiLCJkZWVwRXF1YWwiLCJkZXNjcmlwdGlvbiIsImFyZUFycmF5U2FtZSIsImFyZUNvZGVMaXN0c1NhbWUiLCJhcnJOZXcxIiwiZ2V0Q29kZUxpc3RBcnJheSIsImFyck5ldzIiLCJkZXNjcmlwdGlvbk5ldzEiLCJtYXAiLCJkYXRhIiwiZGVzY3JpcHRpb25OZXcyIiwidmFsdWUxIiwidmFsdWUyIiwiYXJyIiwiY29udmVydERhdGVUb1N0cmluZyIsInRva2VuVHlwZSIsImlzRGF0ZVRpbWVPZmZzZXQiLCJmb3JtYXR0ZWREYXRlVGltZSIsImZvcm1hdFZhbHVlIiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSIsIm1hcE9wZXJhdG9yIiwibmV3VmFsdWUiLCJjb252ZXJ0Qm9vbFRvU3RyaW5nIiwiRGF0ZSIsIkZpbHRlck9wZXJhdG9yIiwiR1QiLCJMVCIsIkdFIiwiTEUiLCJFUSIsIkNvbnRhaW5zIiwiRW5kc1dpdGgiLCJTdGFydHNXaXRoIiwiTkUiLCJOb3RDb250YWlucyIsIk5vdEVuZHNXaXRoIiwiTm90U3RhcnRzV2l0aCIsInRvU3RyaW5nIiwibWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHAiLCJtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvciIsInZhbHVlcyIsIm5ld1ZhbHVlMSIsIm5ld1ZhbHVlMiIsIkJUIiwiaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMiLCJOQiIsImdldFRleHQiLCJpc0ludmFsaWRTaW5nbGVSYW5nZSIsImZpbHRlclZhbHVlIiwiYWxsb3dlZCIsImluY2x1ZGVzIiwiZm9ybWF0RGF0YSIsInRva2VucyIsImZpbHRlclZhbHVlcyIsImZpbHRlckJhck1ldGFkYXRhIiwic2V0TWVzc2FnZVN0cmlwRm9yVmFsaWRhdGVkRmlsdGVycyIsInZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnMiLCJub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMiLCJzaW5nbGVSYW5nZVRva2VuTGFiZWxzIiwiaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMiLCJmaWx0ZXJDcml0ZXJpYSIsImZpbmQiLCJmaWVsZCIsIm5hbWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJmaWx0ZXJhYmxlIiwicHVzaCIsImxhYmVsIiwiaGlkZGVuRmlsdGVyIiwiZmlsdGVyUmVzdHJpY3Rpb24iLCJ0eXBlIiwidG9rZW5JbmRleCIsImZpbmRJbmRleCIsInRva2VuIiwia2V5Iiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsIkVhc3lGaWx0ZXJVdGlscyIsIm5ld1Rva2VuIiwiYnVzeSIsImN1cnJlbnRUb2tlbiIsImlzUmVxdWlyZWQiLCJtZXNzYWdlcyIsIm5vbkZpbHRlcmFibGVUb2tlbkxhYmVsIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsidXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IERhdGVUaW1lT2Zmc2V0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9EYXRlVGltZU9mZnNldFwiO1xuaW1wb3J0IHR5cGUgeyBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMsXG5cdENvZGVMaXN0VHlwZSxcblx0RWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdFRva2VuRGVmaW5pdGlvbixcblx0VG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24sXG5cdFRva2VuVHlwZSxcblx0VmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcIi4vRWFzeUZpbHRlckJhckNvbnRhaW5lclwiO1xuXG50eXBlIGNvZGVMaXN0VHlwZSA9IFByb3BlcnR5TWV0YWRhdGFbXCJjb2RlTGlzdFwiXTtcbnR5cGUgZmluYWxDb2RlTGlzdFR5cGUgPSB7IHZhbHVlOiBQcmltaXRpdmVUeXBlOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W107XG5jb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSE7XG5jb25zdCBkYXRlVGltZU9mZnNldCA9IG5ldyBEYXRlVGltZU9mZnNldCgpO1xuXG5mdW5jdGlvbiBhcmVJdGVtc1NhbWUoXG5cdGFycjE6IHJlYWRvbmx5IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0YXJyMjogcmVhZG9ubHkgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG4pOiBib29sZWFuIHtcblx0aWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvLyBDb21wYXJlIGVsZW1lbnRzIG9mIGJvdGggYXJyYXlzXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdGFycjFbaV0ub3BlcmF0b3IgIT09IGFycjJbaV0ub3BlcmF0b3IgfHxcblx0XHRcdCFhcnIxW2ldLnNlbGVjdGVkVmFsdWVzLmV2ZXJ5KFxuXHRcdFx0XHQodmFsdWUsIGluZGV4KSA9PlxuXHRcdFx0XHRcdHZhbHVlID09PSBhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XSB8fFxuXHRcdFx0XHRcdCh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0XHRcdGRlZXBFcXVhbCgodmFsdWUgYXMgQ29kZUxpc3RUeXBlKS52YWx1ZSwgKGFycjJbaV0uc2VsZWN0ZWRWYWx1ZXNbaW5kZXhdIGFzIENvZGVMaXN0VHlwZSkudmFsdWUpICYmXG5cdFx0XHRcdFx0XHQodmFsdWUgYXMgQ29kZUxpc3RUeXBlKS5kZXNjcmlwdGlvbiA9PT0gKGFycjJbaV0uc2VsZWN0ZWRWYWx1ZXNbaW5kZXhdIGFzIENvZGVMaXN0VHlwZSkuZGVzY3JpcHRpb24pXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlOyAvLyBBcnJheXMgYXJlIHRoZSBzYW1lXG59XG5cbmZ1bmN0aW9uIGFyZUFycmF5U2FtZShhcnIxOiByZWFkb25seSB1bmtub3duW10sIGFycjI6IHJlYWRvbmx5IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8vIENvbXBhcmUgZWxlbWVudHMgb2YgYm90aCBhcnJheXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7IC8vIEFycmF5cyBhcmUgdGhlIHNhbWVcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJlQ29kZUxpc3RzU2FtZShhcnIxOiBjb2RlTGlzdFR5cGUsIGFycjI6IGNvZGVMaXN0VHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCBhcnJOZXcxOiBmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldENvZGVMaXN0QXJyYXkoYXJyMSk7XG5cdGNvbnN0IGFyck5ldzI6IGZpbmFsQ29kZUxpc3RUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0Q29kZUxpc3RBcnJheShhcnIyKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcxID0gYXJyTmV3MT8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcyID0gYXJyTmV3Mj8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblxuXHRjb25zdCB2YWx1ZTEgPSBhcnJOZXcxPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRjb25zdCB2YWx1ZTIgPSBhcnJOZXcyPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRpZiAoIWRlc2NyaXB0aW9uTmV3MSB8fCAhZGVzY3JpcHRpb25OZXcyKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBhcmVBcnJheVNhbWUoZGVzY3JpcHRpb25OZXcxLCBkZXNjcmlwdGlvbk5ldzIpICYmIGFyZUFycmF5U2FtZSh2YWx1ZTEgYXMgUHJpbWl0aXZlVHlwZSwgdmFsdWUyIGFzIFByaW1pdGl2ZVR5cGUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb2RlTGlzdEFycmF5KGFycjogY29kZUxpc3RUeXBlKTogUHJvbWlzZTxmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAodHlwZW9mIGFyciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIGFycigpO1xuXHR9XG5cdHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWU6IERhdGUsIHRva2VuVHlwZTogVG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuKTogc3RyaW5nIHtcblx0bGV0IGZvcm1hdHRlZERhdGVUaW1lID0gXCJcIjtcblx0aWYgKGlzRGF0ZVRpbWVPZmZzZXQpIHtcblx0XHRyZXR1cm4gZGF0ZVRpbWVPZmZzZXQuZm9ybWF0VmFsdWUodmFsdWUsIFwic3RyaW5nXCIpIGFzIHN0cmluZztcblx0fVxuXHRzd2l0Y2ggKHRva2VuVHlwZSkge1xuXHRcdGNhc2UgXCJDYWxlbmRhclwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGltZVwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGZvcm1hdHRlZERhdGVUaW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgYW5kIHZhbHVlLlxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byByZXByZXNlbnRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVwcmVzZW50XG4gKiBAcGFyYW0gdG9rZW5UeXBlIFRoZSB0b2tlbidzIHR5cGVcbiAqIEBwYXJhbSBpc0RhdGVUaW1lT2Zmc2V0IENoZWNrcyBpZiB0aGUgZGF0YSB0eXBlIGlzIG9mIERhdGVUaW1lT2Zmc2V0XG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBhbmQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbWFwT3BlcmF0b3IoXG5cdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcblx0dmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlLFxuXHR0b2tlblR5cGU6IFRva2VuVHlwZSxcblx0aXNEYXRlVGltZU9mZnNldDogYm9vbGVhblxuKTogc3RyaW5nIHtcblx0bGV0IG5ld1ZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSBcIlwiO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdG5ld1ZhbHVlID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0bmV3VmFsdWUgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HVDpcblx0XHRcdHJldHVybiBgPiAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5MVDpcblx0XHRcdHJldHVybiBgPCAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HRTpcblx0XHRcdHJldHVybiBgPj0gJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTEU6XG5cdFx0XHRyZXR1cm4gYDw9ICR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLkVROlxuXHRcdFx0cmV0dXJuIGAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Db250YWluczpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5FbmRzV2l0aDpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGg6XG5cdFx0XHRyZXR1cm4gYCR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5ORTpcblx0XHRcdHJldHVybiBgIT0oJHtuZXdWYWx1ZX0pYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdENvbnRhaW5zOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSopYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdEVuZHNXaXRoOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSlgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTm90U3RhcnRzV2l0aDpcblx0XHRcdHJldHVybiBgISgke25ld1ZhbHVlfSopYDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ld1ZhbHVlPy50b1N0cmluZygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG1hcE9wZXJhdG9yRm9yVmFsdWVIZWxwKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciwgdmFsdWU6IENvZGVMaXN0VHlwZSwgdG9rZW5UeXBlOiBUb2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gbWFwT3BlcmF0b3Iob3BlcmF0b3IsIHZhbHVlLmRlc2NyaXB0aW9uLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xufVxuXG5mdW5jdGlvbiBtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvcihcblx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuXHR2YWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcyB8IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0dG9rZW5UeXBlOiBUb2tlblR5cGUsXG5cdGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW5cbik6IHN0cmluZyB7XG5cdGxldCBuZXdWYWx1ZTE6IHN0cmluZyB8IG51bWJlciB8IERhdGUgPSBcIlwiO1xuXHRsZXQgbmV3VmFsdWUyOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlID0gXCJcIjtcblx0aWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0bmV3VmFsdWUxID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZXNbMF0pO1xuXHR9IGVsc2UgaWYgKHZhbHVlc1swXSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRuZXdWYWx1ZTEgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlc1swXSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bmV3VmFsdWUxID0gdmFsdWVzWzBdLmRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZTEgPSB2YWx1ZXNbMF07XG5cdH1cblxuXHRpZiAodHlwZW9mIHZhbHVlc1sxXSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRuZXdWYWx1ZTIgPSBjb252ZXJ0Qm9vbFRvU3RyaW5nKHZhbHVlc1sxXSk7XG5cdH0gZWxzZSBpZiAodmFsdWVzWzFdIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdG5ld1ZhbHVlMiA9IGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVzWzFdLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRuZXdWYWx1ZTIgPSB2YWx1ZXNbMV0uZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlMiA9IHZhbHVlc1sxXTtcblx0fVxuXHRpZiAob3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUKSB7XG5cdFx0cmV0dXJuIGAke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgISgke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyhvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IpOiBib29sZWFuIHtcblx0cmV0dXJuIG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCB8fCBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gdmFsdWVcblx0XHQ/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NFTEVDVEVEX1ZBTFVFU19UUlVFXCIpXG5cdFx0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TRUxFQ1RFRF9WQUxVRVNfRkFMU0VcIik7XG59XG5cbi8vVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGZpbHRlciBpcyBub3QgYSB2YWxpZCBcIlNpbmdsZVJhbmdlXCIgKGUuZy4sIHdyb25nIG9wZXJhdG9yIG9yIHRvbyBtYW55IHZhbHVlcyksIGFuZCBmYWxzZSBpZiBpdCBpcyB2YWxpZC5cbmZ1bmN0aW9uIGlzSW52YWxpZFNpbmdsZVJhbmdlKGZpbHRlclZhbHVlOiB7IG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcjsgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4pW10gfSk6IGJvb2xlYW4ge1xuXHRjb25zdCBhbGxvd2VkID0gW0ZpbHRlck9wZXJhdG9yLkVRLCBGaWx0ZXJPcGVyYXRvci5MRSwgRmlsdGVyT3BlcmF0b3IuTFQsIEZpbHRlck9wZXJhdG9yLkdFLCBGaWx0ZXJPcGVyYXRvci5HVCwgRmlsdGVyT3BlcmF0b3IuQlRdO1xuXG5cdC8vIFx0ZmlsdGVyVmFsdWUub3BlcmF0b3IgIT09IEZpbHRlck9wZXJhdG9yLkJUIGVuc3VyZXMgQlQgaXMgYWx3YXlzIHZhbGlkLlxuXHQvLyAhYWxsb3dlZC5pbmNsdWRlcygpIGJsb2NrcyB1bnN1cHBvcnRlZCBvcGVyYXRvcnMuXG5cdC8vIGZpbHRlclZhbHVlLnZhbHVlcy5sZW5ndGggPj0gMiBibG9ja3MgbXVsdGlwbGUgdmFsdWVzIGZvciBzaW5nbGUtcmFuZ2UgZmlsdGVycy5cblx0Ly8gVG9nZXRoZXIsIHRoaXMgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGZpbHRlciBpcyBub3QgYSB2YWxpZCBzaW5nbGUtcmFuZ2UuXG5cdHJldHVybiBmaWx0ZXJWYWx1ZS5vcGVyYXRvciAhPT0gRmlsdGVyT3BlcmF0b3IuQlQgJiYgKCFhbGxvd2VkLmluY2x1ZGVzKGZpbHRlclZhbHVlLm9wZXJhdG9yKSB8fCBmaWx0ZXJWYWx1ZS52YWx1ZXMubGVuZ3RoID49IDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZXM6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl0sXG5cdGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzOiAobXNnOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuXHRpZiAoZmlsdGVyVmFsdWVzKSB7XG5cdFx0Y29uc3QgdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VuczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRjb25zdCBub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgc2luZ2xlUmFuZ2VUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgZmlsdGVyVmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJDcml0ZXJpYSA9IGZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSBmaWx0ZXJWYWx1ZS5uYW1lKTtcblx0XHRcdGlmIChmaWx0ZXJDcml0ZXJpYSkge1xuXHRcdFx0XHQvLyBPbmx5IGJsb2NrIGlmIGZpbHRlcmFibGUgaXMgZmFsc2Vcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJDcml0ZXJpYSwgXCJmaWx0ZXJhYmxlXCIpICYmICFmaWx0ZXJDcml0ZXJpYT8uZmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdG5vbkZpbHRlcmFibGVUb2tlbkxhYmVscy5wdXNoKGZpbHRlckNyaXRlcmlhLmxhYmVsIHx8IGZpbHRlckNyaXRlcmlhLm5hbWUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE9ubHkgYmxvY2sgaWYgaGlkZGVuRmlsdGVyIGlzIHRydWVcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJDcml0ZXJpYSwgXCJoaWRkZW5GaWx0ZXJcIikgJiYgZmlsdGVyQ3JpdGVyaWE/LmhpZGRlbkZpbHRlcikge1xuXHRcdFx0XHRcdGhpZGRlbkZpbHRlclRva2VuTGFiZWxzLnB1c2goZmlsdGVyQ3JpdGVyaWEubGFiZWwgfHwgZmlsdGVyQ3JpdGVyaWEubmFtZSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gT25seSBhcHBseSBTaW5nbGVSYW5nZSBsb2dpYyBpZiBmaWx0ZXJSZXN0cmljdGlvbiBpcyBzZXQgdG8gU2luZ2xlUmFuZ2Vcblx0XHRcdFx0aWYgKGZpbHRlckNyaXRlcmlhPy5maWx0ZXJSZXN0cmljdGlvbiA9PT0gXCJTaW5nbGVSYW5nZVwiICYmIGlzSW52YWxpZFNpbmdsZVJhbmdlKGZpbHRlclZhbHVlKSkge1xuXHRcdFx0XHRcdHNpbmdsZVJhbmdlVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZS52YWx1ZXMgPSBbXTsgLy8gUmVzZXQgdmFsdWVzIHRvIGF2b2lkIGFkZGluZyBpbnZhbGlkIHRva2VuIHZhbHVlc1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgeyB0eXBlIH0gPSBmaWx0ZXJDcml0ZXJpYTtcblx0XHRcdFx0Y29uc3QgdG9rZW5JbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiB0b2tlbi5rZXkgPT09IGZpbHRlclZhbHVlLm5hbWUpO1xuXHRcdFx0XHRjb25zdCB7IG9wZXJhdG9yLCB2YWx1ZXMgfSA9IGZpbHRlclZhbHVlO1xuXHRcdFx0XHRsZXQga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb247XG5cdFx0XHRcdGlmIChFYXN5RmlsdGVyVXRpbHMuaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMob3BlcmF0b3IpKSB7XG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IHtcblx0XHRcdFx0XHRcdG9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlcyBhcyBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSB7XG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogb3BlcmF0b3IgYXMgRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj4sXG5cdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWVzIGFzIHN0cmluZ1tdIHwgRGF0ZVtdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0XHRcdC8vIEFkZCBuZXcgdG9rZW4gaWYgaXQgZG9lc24ndCBleGlzdFxuXHRcdFx0XHRcdGNvbnN0IG5ld1Rva2VuOiBUb2tlbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRrZXk6IGZpbHRlclZhbHVlLm5hbWUsXG5cdFx0XHRcdFx0XHRsYWJlbDogZmlsdGVyQ3JpdGVyaWEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogW2tleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdLFxuXHRcdFx0XHRcdFx0dHlwZTogdHlwZSBhcyBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj4sXG5cdFx0XHRcdFx0XHRidXN5OiB0eXBlID09PSBcIlZhbHVlSGVscFwiID8gdHJ1ZSA6IGZhbHNlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChuZXdUb2tlbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGV4aXN0aW5nIHRva2VuXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdFx0XHRcdC8vSWYgaXRzIGRlZmF1bHQgdmFsdWUgLCBvdmVycmlkZSBpdFxuXHRcdFx0XHRcdGlmICgoY3VycmVudFRva2VuLmlzUmVxdWlyZWQgPz8gZmFsc2UpICYmICF2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zW2N1cnJlbnRUb2tlbi5rZXldKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50VG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IFtrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXTtcblx0XHRcdFx0XHRcdHZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnNbY3VycmVudFRva2VuLmtleV0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoY3VycmVudFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkucHVzaChrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5vbkZpbHRlcmFibGVUb2tlbkxhYmVscy5sZW5ndGggPiAwIHx8IHNpbmdsZVJhbmdlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCB8fCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBub25GaWx0ZXJhYmxlVG9rZW5MYWJlbCA9IGA8c3Ryb25nPiR7bm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gO1xuXHRcdFx0XHRtZXNzYWdlcy5wdXNoKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX05PTl9GSUxURVJBQkxFXCIsIFtub25GaWx0ZXJhYmxlVG9rZW5MYWJlbF0pKTtcblx0XHRcdH1cblx0XHRcdGlmIChoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gYDxzdHJvbmc+JHtoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YDtcblx0XHRcdFx0bWVzc2FnZXMucHVzaChyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9ISURERU5fRklMVEVSXCIsIFtsYWJlbF0pKTtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVSYW5nZVRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgbGFiZWwgPSBgPHN0cm9uZz4ke3NpbmdsZVJhbmdlVG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmA7XG5cdFx0XHRcdG1lc3NhZ2VzLnB1c2gocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU0lOR0xFX1JBTkdFXCIsIFtsYWJlbF0pKTtcblx0XHRcdH1cblx0XHRcdHNldE1lc3NhZ2VTdHJpcEZvclZhbGlkYXRlZEZpbHRlcnMobWVzc2FnZXMuam9pbihcIjxicj5cIikpO1xuXHRcdH1cblx0fVxufVxuXG5jb25zdCBFYXN5RmlsdGVyVXRpbHMgPSB7XG5cdGFyZUl0ZW1zU2FtZSxcblx0YXJlQ29kZUxpc3RzU2FtZSxcblx0Z2V0Q29kZUxpc3RBcnJheSxcblx0YXJlQXJyYXlTYW1lLFxuXHRtYXBPcGVyYXRvcixcblx0bWFwT3BlcmF0b3JGb3JCZXR3ZWVuT3BlcmF0b3IsXG5cdGlzQmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRmb3JtYXREYXRhLFxuXHRtYXBPcGVyYXRvckZvclZhbHVlSGVscFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWFzeUZpbHRlclV0aWxzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBb0JBLE1BQU1BLGNBQWMsR0FBR0MsR0FBRyxDQUFDQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBRTtFQUNuRSxNQUFNQyxjQUFjLEdBQUcsSUFBSUMsY0FBYyxDQUFDLENBQUM7RUFFM0MsU0FBU0MsWUFBWUEsQ0FDcEJDLElBQW9GLEVBQ3BGQyxJQUFvRixFQUMxRTtJQUNWLElBQUlELElBQUksQ0FBQ0UsTUFBTSxLQUFLRCxJQUFJLENBQUNDLE1BQU0sRUFBRTtNQUNoQyxPQUFPLEtBQUs7SUFDYjtJQUNBO0lBQ0EsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILElBQUksQ0FBQ0UsTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtNQUNyQyxJQUNDSCxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDQyxRQUFRLEtBQUtILElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUNDLFFBQVEsSUFDckMsQ0FBQ0osSUFBSSxDQUFDRyxDQUFDLENBQUMsQ0FBQ0UsY0FBYyxDQUFDQyxLQUFLLENBQzVCLENBQUNDLEtBQUssRUFBRUMsS0FBSyxLQUNaRCxLQUFLLEtBQUtOLElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUNFLGNBQWMsQ0FBQ0csS0FBSyxDQUFDLElBQ3RDLE9BQU9ELEtBQUssS0FBSyxRQUFRLElBQ3pCRSxTQUFTLENBQUVGLEtBQUssQ0FBa0JBLEtBQUssRUFBR04sSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0UsY0FBYyxDQUFDRyxLQUFLLENBQUMsQ0FBa0JELEtBQUssQ0FBQyxJQUM5RkEsS0FBSyxDQUFrQkcsV0FBVyxLQUFNVCxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNHLEtBQUssQ0FBQyxDQUFrQkUsV0FDM0YsQ0FBQyxFQUNBO1FBQ0QsT0FBTyxLQUFLO01BQ2I7SUFDRDtJQUNBLE9BQU8sSUFBSSxDQUFDLENBQUM7RUFDZDtFQUVBLFNBQVNDLFlBQVlBLENBQUNYLElBQXdCLEVBQUVDLElBQXdCLEVBQVc7SUFDbEYsSUFBSUQsSUFBSSxDQUFDRSxNQUFNLEtBQUtELElBQUksQ0FBQ0MsTUFBTSxFQUFFO01BQ2hDLE9BQU8sS0FBSztJQUNiO0lBQ0E7SUFDQSxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0gsSUFBSSxDQUFDRSxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO01BQ3JDLElBQUlILElBQUksQ0FBQ0csQ0FBQyxDQUFDLEtBQUtGLElBQUksQ0FBQ0UsQ0FBQyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxLQUFLO01BQ2I7SUFDRDtJQUNBLE9BQU8sSUFBSSxDQUFDLENBQUM7RUFDZDtFQUVBLGVBQWVTLGdCQUFnQkEsQ0FBQ1osSUFBa0IsRUFBRUMsSUFBa0IsRUFBb0I7SUFDekYsTUFBTVksT0FBc0MsR0FBRyxNQUFNQyxnQkFBZ0IsQ0FBQ2QsSUFBSSxDQUFDO0lBQzNFLE1BQU1lLE9BQXNDLEdBQUcsTUFBTUQsZ0JBQWdCLENBQUNiLElBQUksQ0FBQztJQUMzRSxNQUFNZSxlQUFlLEdBQUdILE9BQU8sRUFBRUksR0FBRyxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ1IsV0FBVyxDQUFDO0lBQ2hFLE1BQU1TLGVBQWUsR0FBR0osT0FBTyxFQUFFRSxHQUFHLENBQUVDLElBQUksSUFBS0EsSUFBSSxDQUFDUixXQUFXLENBQUM7SUFFaEUsTUFBTVUsTUFBTSxHQUFHUCxPQUFPLEVBQUVJLEdBQUcsQ0FBRUMsSUFBSSxJQUFLQSxJQUFJLENBQUNYLEtBQUssQ0FBQztJQUNqRCxNQUFNYyxNQUFNLEdBQUdOLE9BQU8sRUFBRUUsR0FBRyxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ1gsS0FBSyxDQUFDO0lBQ2pELElBQUksQ0FBQ1MsZUFBZSxJQUFJLENBQUNHLGVBQWUsRUFBRTtNQUN6QyxPQUFPLEtBQUs7SUFDYjtJQUNBLE9BQU9SLFlBQVksQ0FBQ0ssZUFBZSxFQUFFRyxlQUFlLENBQUMsSUFBSVIsWUFBWSxDQUFDUyxNQUFNLEVBQW1CQyxNQUF1QixDQUFDO0VBQ3hIO0VBRUEsZUFBZVAsZ0JBQWdCQSxDQUFDUSxHQUFpQixFQUEwQztJQUMxRixJQUFJLE9BQU9BLEdBQUcsS0FBSyxVQUFVLEVBQUU7TUFDOUIsT0FBT0EsR0FBRyxDQUFDLENBQUM7SUFDYjtJQUNBLE9BQU9BLEdBQUc7RUFDWDtFQUVBLFNBQVNDLG1CQUFtQkEsQ0FBQ2hCLEtBQVcsRUFBRWlCLFNBQW9CLEVBQUVDLGdCQUF5QixFQUFVO0lBQ2xHLElBQUlDLGlCQUFpQixHQUFHLEVBQUU7SUFDMUIsSUFBSUQsZ0JBQWdCLEVBQUU7TUFDckIsT0FBTzVCLGNBQWMsQ0FBQzhCLFdBQVcsQ0FBQ3BCLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDbkQ7SUFDQSxRQUFRaUIsU0FBUztNQUNoQixLQUFLLFVBQVU7UUFDZEUsaUJBQWlCLEdBQUdFLFVBQVUsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDdkIsS0FBSyxDQUFDO1FBQzlEO01BQ0QsS0FBSyxNQUFNO1FBQ1ZtQixpQkFBaUIsR0FBR0UsVUFBVSxDQUFDRyxlQUFlLENBQUMsQ0FBQyxDQUFDRCxNQUFNLENBQUN2QixLQUFLLENBQUM7UUFDOUQ7TUFDRDtRQUNDO0lBQ0Y7SUFDQSxPQUFPbUIsaUJBQWlCO0VBQ3pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTTSxXQUFXQSxDQUNuQjVCLFFBQXdCLEVBQ3hCRyxLQUF1QyxFQUN2Q2lCLFNBQW9CLEVBQ3BCQyxnQkFBeUIsRUFDaEI7SUFDVCxJQUFJUSxRQUF5QixHQUFHLEVBQUU7SUFDbEMsSUFBSSxPQUFPMUIsS0FBSyxLQUFLLFNBQVMsRUFBRTtNQUMvQjBCLFFBQVEsR0FBR0MsbUJBQW1CLENBQUMzQixLQUFLLENBQUM7SUFDdEMsQ0FBQyxNQUFNLElBQUlBLEtBQUssWUFBWTRCLElBQUksRUFBRTtNQUNqQ0YsUUFBUSxHQUFHVixtQkFBbUIsQ0FBQ2hCLEtBQUssRUFBRWlCLFNBQVMsRUFBRUMsZ0JBQWdCLENBQUM7SUFDbkUsQ0FBQyxNQUFNO01BQ05RLFFBQVEsR0FBRzFCLEtBQUs7SUFDakI7SUFFQSxRQUFRSCxRQUFRO01BQ2YsS0FBS2dDLGNBQWMsQ0FBQ0MsRUFBRTtRQUNyQixPQUFPLEtBQUtKLFFBQVEsRUFBRTtNQUN2QixLQUFLRyxjQUFjLENBQUNFLEVBQUU7UUFDckIsT0FBTyxLQUFLTCxRQUFRLEVBQUU7TUFDdkIsS0FBS0csY0FBYyxDQUFDRyxFQUFFO1FBQ3JCLE9BQU8sTUFBTU4sUUFBUSxFQUFFO01BQ3hCLEtBQUtHLGNBQWMsQ0FBQ0ksRUFBRTtRQUNyQixPQUFPLE1BQU1QLFFBQVEsRUFBRTtNQUN4QixLQUFLRyxjQUFjLENBQUNLLEVBQUU7UUFDckIsT0FBTyxHQUFHUixRQUFRLEVBQUU7TUFDckIsS0FBS0csY0FBYyxDQUFDTSxRQUFRO1FBQzNCLE9BQU8sSUFBSVQsUUFBUSxHQUFHO01BQ3ZCLEtBQUtHLGNBQWMsQ0FBQ08sUUFBUTtRQUMzQixPQUFPLElBQUlWLFFBQVEsRUFBRTtNQUN0QixLQUFLRyxjQUFjLENBQUNRLFVBQVU7UUFDN0IsT0FBTyxHQUFHWCxRQUFRLEdBQUc7TUFDdEIsS0FBS0csY0FBYyxDQUFDUyxFQUFFO1FBQ3JCLE9BQU8sTUFBTVosUUFBUSxHQUFHO01BQ3pCLEtBQUtHLGNBQWMsQ0FBQ1UsV0FBVztRQUM5QixPQUFPLE1BQU1iLFFBQVEsSUFBSTtNQUMxQixLQUFLRyxjQUFjLENBQUNXLFdBQVc7UUFDOUIsT0FBTyxNQUFNZCxRQUFRLEdBQUc7TUFDekIsS0FBS0csY0FBYyxDQUFDWSxhQUFhO1FBQ2hDLE9BQU8sS0FBS2YsUUFBUSxJQUFJO01BQ3pCO1FBQ0MsT0FBT0EsUUFBUSxFQUFFZ0IsUUFBUSxDQUFDLENBQUM7SUFDN0I7RUFDRDtFQUVBLFNBQVNDLHVCQUF1QkEsQ0FBQzlDLFFBQXdCLEVBQUVHLEtBQW1CLEVBQUVpQixTQUFvQixFQUFFQyxnQkFBeUIsRUFBVTtJQUN4SSxPQUFPTyxXQUFXLENBQUM1QixRQUFRLEVBQUVHLEtBQUssQ0FBQ0csV0FBVyxFQUFFYyxTQUFTLEVBQUVDLGdCQUFnQixDQUFDO0VBQzdFO0VBRUEsU0FBUzBCLDZCQUE2QkEsQ0FDckMvQyxRQUF3QixFQUN4QmdELE1BQThELEVBQzlENUIsU0FBb0IsRUFDcEJDLGdCQUF5QixFQUNoQjtJQUNULElBQUk0QixTQUFpQyxHQUFHLEVBQUU7SUFDMUMsSUFBSUMsU0FBaUMsR0FBRyxFQUFFO0lBQzFDLElBQUksT0FBT0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtNQUNuQ0MsU0FBUyxHQUFHbkIsbUJBQW1CLENBQUNrQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxNQUFNLElBQUlBLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWWpCLElBQUksRUFBRTtNQUNyQ2tCLFNBQVMsR0FBRzlCLG1CQUFtQixDQUFDNkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFNUIsU0FBUyxFQUFFQyxnQkFBZ0IsQ0FBQztJQUN4RSxDQUFDLE1BQU0sSUFBSSxPQUFPMkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtNQUN6Q0MsU0FBUyxHQUFHRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMxQyxXQUFxQjtJQUM1QyxDQUFDLE1BQU07TUFDTjJDLFNBQVMsR0FBR0QsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0QjtJQUVBLElBQUksT0FBT0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtNQUNuQ0UsU0FBUyxHQUFHcEIsbUJBQW1CLENBQUNrQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxNQUFNLElBQUlBLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWWpCLElBQUksRUFBRTtNQUNyQ21CLFNBQVMsR0FBRy9CLG1CQUFtQixDQUFDNkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFNUIsU0FBUyxFQUFFQyxnQkFBZ0IsQ0FBQztJQUN4RSxDQUFDLE1BQU0sSUFBSSxPQUFPMkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtNQUN6Q0UsU0FBUyxHQUFHRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMxQyxXQUFxQjtJQUM1QyxDQUFDLE1BQU07TUFDTjRDLFNBQVMsR0FBR0YsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0QjtJQUNBLElBQUloRCxRQUFRLEtBQUtnQyxjQUFjLENBQUNtQixFQUFFLEVBQUU7TUFDbkMsT0FBTyxHQUFHRixTQUFTLE1BQU1DLFNBQVMsRUFBRTtJQUNyQyxDQUFDLE1BQU07TUFDTixPQUFPLEtBQUtELFNBQVMsTUFBTUMsU0FBUyxHQUFHO0lBQ3hDO0VBQ0Q7RUFFQSxTQUFTRSx1QkFBdUJBLENBQUNwRCxRQUF3QixFQUFXO0lBQ25FLE9BQU9BLFFBQVEsS0FBS2dDLGNBQWMsQ0FBQ21CLEVBQUUsSUFBSW5ELFFBQVEsS0FBS2dDLGNBQWMsQ0FBQ3FCLEVBQUU7RUFDeEU7RUFFQSxTQUFTdkIsbUJBQW1CQSxDQUFDM0IsS0FBYyxFQUFVO0lBQ3BELE9BQU9BLEtBQUssR0FDVGIsY0FBYyxDQUFDZ0UsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLEdBQzVEaEUsY0FBYyxDQUFDZ0UsT0FBTyxDQUFDLHFDQUFxQyxDQUFDO0VBQ2pFOztFQUVBO0VBQ0EsU0FBU0Msb0JBQW9CQSxDQUFDQyxXQUF1RixFQUFXO0lBQy9ILE1BQU1DLE9BQU8sR0FBRyxDQUFDekIsY0FBYyxDQUFDSyxFQUFFLEVBQUVMLGNBQWMsQ0FBQ0ksRUFBRSxFQUFFSixjQUFjLENBQUNFLEVBQUUsRUFBRUYsY0FBYyxDQUFDRyxFQUFFLEVBQUVILGNBQWMsQ0FBQ0MsRUFBRSxFQUFFRCxjQUFjLENBQUNtQixFQUFFLENBQUM7O0lBRWxJO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsT0FBT0ssV0FBVyxDQUFDeEQsUUFBUSxLQUFLZ0MsY0FBYyxDQUFDbUIsRUFBRSxLQUFLLENBQUNNLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDRixXQUFXLENBQUN4RCxRQUFRLENBQUMsSUFBSXdELFdBQVcsQ0FBQ1IsTUFBTSxDQUFDbEQsTUFBTSxJQUFJLENBQUMsQ0FBQztFQUNqSTtFQUVBLFNBQVM2RCxVQUFVQSxDQUNsQkMsTUFBeUIsRUFDekJDLFlBQXdDLEVBQ3hDQyxpQkFBK0MsRUFDL0NDLGtDQUF5RCxFQUNsRDtJQUNQLElBQUlGLFlBQVksRUFBRTtNQUNqQixNQUFNRyw0QkFBcUQsR0FBRyxDQUFDLENBQUM7TUFDaEUsTUFBTUMsd0JBQWtDLEdBQUcsRUFBRTtNQUM3QyxNQUFNQyxzQkFBZ0MsR0FBRyxFQUFFO01BQzNDLE1BQU1DLHVCQUFpQyxHQUFHLEVBQUU7TUFFNUMsS0FBSyxNQUFNWCxXQUFXLElBQUlLLFlBQVksRUFBRTtRQUN2QyxNQUFNTyxjQUFjLEdBQUdOLGlCQUFpQixDQUFDTyxJQUFJLENBQUVDLEtBQUssSUFBS0EsS0FBSyxDQUFDQyxJQUFJLEtBQUtmLFdBQVcsQ0FBQ2UsSUFBSSxDQUFDO1FBQ3pGLElBQUlILGNBQWMsRUFBRTtVQUNuQjtVQUNBLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsY0FBYyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUNBLGNBQWMsRUFBRVEsVUFBVSxFQUFFO1lBQ3RHWCx3QkFBd0IsQ0FBQ1ksSUFBSSxDQUFDVCxjQUFjLENBQUNVLEtBQUssSUFBSVYsY0FBYyxDQUFDRyxJQUFJLENBQUM7WUFDMUU7VUFDRDtVQUNBO1VBQ0EsSUFBSUMsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxjQUFjLEVBQUUsY0FBYyxDQUFDLElBQUlBLGNBQWMsRUFBRVcsWUFBWSxFQUFFO1lBQ3pHWix1QkFBdUIsQ0FBQ1UsSUFBSSxDQUFDVCxjQUFjLENBQUNVLEtBQUssSUFBSVYsY0FBYyxDQUFDRyxJQUFJLENBQUM7WUFDekU7VUFDRDtVQUNBO1VBQ0EsSUFBSUgsY0FBYyxFQUFFWSxpQkFBaUIsS0FBSyxhQUFhLElBQUl6QixvQkFBb0IsQ0FBQ0MsV0FBVyxDQUFDLEVBQUU7WUFDN0ZVLHNCQUFzQixDQUFDVyxJQUFJLENBQUNULGNBQWMsQ0FBQ1UsS0FBSyxJQUFJVixjQUFjLENBQUNHLElBQUksQ0FBQztZQUN4RWYsV0FBVyxDQUFDUixNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7VUFDMUI7VUFFQSxNQUFNO1lBQUVpQztVQUFLLENBQUMsR0FBR2IsY0FBYztVQUMvQixNQUFNYyxVQUFVLEdBQUd0QixNQUFNLENBQUN1QixTQUFTLENBQUVDLEtBQUssSUFBS0EsS0FBSyxDQUFDQyxHQUFHLEtBQUs3QixXQUFXLENBQUNlLElBQUksQ0FBQztVQUM5RSxNQUFNO1lBQUV2RSxRQUFRO1lBQUVnRDtVQUFPLENBQUMsR0FBR1EsV0FBVztVQUN4QyxJQUFJOEIseUJBQXdEO1VBQzVELElBQUlDLGVBQWUsQ0FBQ25DLHVCQUF1QixDQUFDcEQsUUFBUSxDQUFDLEVBQUU7WUFDdERzRix5QkFBeUIsR0FBRztjQUMzQnRGLFFBQVE7Y0FDUkMsY0FBYyxFQUFFK0M7WUFDakIsQ0FBQztVQUNGLENBQUMsTUFBTTtZQUNOc0MseUJBQXlCLEdBQUc7Y0FDM0J0RixRQUFRLEVBQUVBLFFBQTBFO2NBQ3BGQyxjQUFjLEVBQUUrQztZQUNqQixDQUFDO1VBQ0Y7VUFDQSxJQUFJa0MsVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RCO1lBQ0EsTUFBTU0sUUFBeUIsR0FBRztjQUNqQ0gsR0FBRyxFQUFFN0IsV0FBVyxDQUFDZSxJQUFJO2NBQ3JCTyxLQUFLLEVBQUVWLGNBQWMsQ0FBQ1UsS0FBZTtjQUNyQ1EseUJBQXlCLEVBQUUsQ0FBQ0EseUJBQXlCLENBQUM7Y0FDdERMLElBQUksRUFBRUEsSUFBdUM7Y0FDN0NRLElBQUksRUFBRVIsSUFBSSxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQUc7WUFDckMsQ0FBQztZQUNEckIsTUFBTSxDQUFDaUIsSUFBSSxDQUFDVyxRQUFRLENBQUM7VUFDdEIsQ0FBQyxNQUFNO1lBQ047WUFDQSxNQUFNRSxZQUFZLEdBQUc5QixNQUFNLENBQUNzQixVQUFVLENBQUM7WUFDdkM7WUFDQSxJQUFJLENBQUNRLFlBQVksQ0FBQ0MsVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDM0IsNEJBQTRCLENBQUMwQixZQUFZLENBQUNMLEdBQUcsQ0FBQyxFQUFFO2NBQzFGSyxZQUFZLENBQUNKLHlCQUF5QixHQUFHLENBQUNBLHlCQUF5QixDQUFDO2NBQ3BFdEIsNEJBQTRCLENBQUMwQixZQUFZLENBQUNMLEdBQUcsQ0FBQyxHQUFHLElBQUk7WUFDdEQsQ0FBQyxNQUFNO2NBQ0xLLFlBQVksQ0FBQ0oseUJBQXlCLENBQXFDVCxJQUFJLENBQUNTLHlCQUF5QixDQUFDO1lBQzVHO1VBQ0Q7UUFDRDtNQUNEO01BQ0EsSUFBSXJCLHdCQUF3QixDQUFDbkUsTUFBTSxHQUFHLENBQUMsSUFBSW9FLHNCQUFzQixDQUFDcEUsTUFBTSxHQUFHLENBQUMsSUFBSXFFLHVCQUF1QixDQUFDckUsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuSCxNQUFNOEYsUUFBa0IsR0FBRyxFQUFFO1FBQzdCLElBQUkzQix3QkFBd0IsQ0FBQ25FLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEMsTUFBTStGLHVCQUF1QixHQUFHLFdBQVc1Qix3QkFBd0IsQ0FBQzZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztVQUN6RkYsUUFBUSxDQUFDZixJQUFJLENBQUN2RixjQUFjLENBQUNnRSxPQUFPLENBQUMsOEJBQThCLEVBQUUsQ0FBQ3VDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUNqRztRQUNBLElBQUkxQix1QkFBdUIsQ0FBQ3JFLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDdkMsTUFBTWdGLEtBQUssR0FBRyxXQUFXWCx1QkFBdUIsQ0FBQzJCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztVQUN0RUYsUUFBUSxDQUFDZixJQUFJLENBQUN2RixjQUFjLENBQUNnRSxPQUFPLENBQUMsNkJBQTZCLEVBQUUsQ0FBQ3dCLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUU7UUFDQSxJQUFJWixzQkFBc0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDdEMsTUFBTWdGLEtBQUssR0FBRyxXQUFXWixzQkFBc0IsQ0FBQzRCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztVQUNyRUYsUUFBUSxDQUFDZixJQUFJLENBQUN2RixjQUFjLENBQUNnRSxPQUFPLENBQUMsNEJBQTRCLEVBQUUsQ0FBQ3dCLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0U7UUFDQWYsa0NBQWtDLENBQUM2QixRQUFRLENBQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztNQUMxRDtJQUNEO0VBQ0Q7RUFFQSxNQUFNUCxlQUFlLEdBQUc7SUFDdkI1RixZQUFZO0lBQ1phLGdCQUFnQjtJQUNoQkUsZ0JBQWdCO0lBQ2hCSCxZQUFZO0lBQ1pxQixXQUFXO0lBQ1htQiw2QkFBNkI7SUFDN0JLLHVCQUF1QjtJQUN2Qk8sVUFBVTtJQUNWYjtFQUNELENBQUM7RUFBQyxPQUVheUMsZUFBZTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
331
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGF0ZVRpbWVPZmZzZXQiLCJEYXRlVGltZU9mZnNldCIsImFyZUl0ZW1zU2FtZSIsImFycjEiLCJhcnIyIiwibGVuZ3RoIiwiaSIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJldmVyeSIsImZpcnN0VmFsdWUiLCJpbmRleCIsIm90aGVyVmFsdWUiLCJEYXRlIiwiZGVlcEVxdWFsIiwidmFsdWUiLCJkZXNjcmlwdGlvbiIsImFyZUFycmF5U2FtZSIsImFyZUNvZGVMaXN0c1NhbWUiLCJhcnJOZXcxIiwiZ2V0Q29kZUxpc3RBcnJheSIsImFyck5ldzIiLCJkZXNjcmlwdGlvbk5ldzEiLCJtYXAiLCJkYXRhIiwiZGVzY3JpcHRpb25OZXcyIiwidmFsdWUxIiwidmFsdWUyIiwiYXJyIiwiY29udmVydERhdGVUb1N0cmluZyIsInRva2VuVHlwZSIsImlzRGF0ZVRpbWVPZmZzZXQiLCJmb3JtYXR0ZWREYXRlVGltZSIsImZvcm1hdFZhbHVlIiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSIsIm1hcE9wZXJhdG9yIiwibmV3VmFsdWUiLCJjb252ZXJ0Qm9vbFRvU3RyaW5nIiwiRmlsdGVyT3BlcmF0b3IiLCJHVCIsIkxUIiwiR0UiLCJMRSIsIkVRIiwiQ29udGFpbnMiLCJFbmRzV2l0aCIsIlN0YXJ0c1dpdGgiLCJORSIsIk5vdENvbnRhaW5zIiwiTm90RW5kc1dpdGgiLCJOb3RTdGFydHNXaXRoIiwidG9TdHJpbmciLCJtYXBPcGVyYXRvckZvclZhbHVlSGVscCIsIm1hcE9wZXJhdG9yRm9yQmV0d2Vlbk9wZXJhdG9yIiwidmFsdWVzIiwibmV3VmFsdWUxIiwibmV3VmFsdWUyIiwiQlQiLCJpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyIsIk5CIiwiZ2V0VGV4dCIsImhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyIiwiZmlsdGVyQ3JpdGVyaWEiLCJmaWx0ZXJWYWx1ZSIsInNpbmdsZVJhbmdlVG9rZW5MYWJlbHMiLCJzaW5nbGVSYW5nZVVzYWdlIiwiZmlsdGVyUmVzdHJpY3Rpb24iLCJpc0ludmFsaWQiLCJpc0ludmFsaWRTaW5nbGVSYW5nZSIsIm5hbWUiLCJsYWJlbCIsImluY2x1ZGVzIiwicHVzaCIsInNpbmdsZVZhbHVlT3BzIiwicmFuZ2VPcHMiLCJvcCIsInZhbENvdW50IiwiZm9ybWF0RGF0YSIsInRva2VucyIsImZpbHRlclZhbHVlcyIsImZpbHRlckJhck1ldGFkYXRhIiwic2V0TWVzc2FnZVN0cmlwRm9yVmFsaWRhdGVkRmlsdGVycyIsInZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnMiLCJub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMiLCJoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscyIsImZpbmQiLCJmaWVsZCIsInByb2Nlc3NGaWx0ZXJDcml0ZXJpYSIsImlzSW52YWxpZFNpbmdsZVJhbmdlVG9rZW4iLCJ1cGRhdGVUb2tlbnMiLCJnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlcyIsImZpbHRlcmFibGUiLCJoaWRkZW5GaWx0ZXIiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwidG9rZW4iLCJrZXkiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiY3JlYXRlS2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsInR5cGUiLCJidXN5IiwiY3VycmVudFRva2VuIiwiaXNSZXF1aXJlZCIsIkVhc3lGaWx0ZXJVdGlscyIsIm1lc3NhZ2VzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsidXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IERhdGVUaW1lT2Zmc2V0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9EYXRlVGltZU9mZnNldFwiO1xuaW1wb3J0IHR5cGUgeyBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMsXG5cdENvZGVMaXN0VHlwZSxcblx0RWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdFRva2VuRGVmaW5pdGlvbixcblx0VG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24sXG5cdFRva2VuVHlwZSxcblx0VmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcIi4vRWFzeUZpbHRlckJhckNvbnRhaW5lclwiO1xuXG50eXBlIGNvZGVMaXN0VHlwZSA9IFByb3BlcnR5TWV0YWRhdGFbXCJjb2RlTGlzdFwiXTtcbnR5cGUgZmluYWxDb2RlTGlzdFR5cGUgPSB7IHZhbHVlOiBQcmltaXRpdmVUeXBlOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W107XG5jb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSE7XG5jb25zdCBkYXRlVGltZU9mZnNldCA9IG5ldyBEYXRlVGltZU9mZnNldCgpO1xuXG5mdW5jdGlvbiBhcmVJdGVtc1NhbWUoXG5cdGFycjE6IHJlYWRvbmx5IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0YXJyMjogcmVhZG9ubHkgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG4pOiBib29sZWFuIHtcblx0aWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIENvbXBhcmUgZWxlbWVudHMgb2YgYm90aCBhcnJheXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YXJyMVtpXS5vcGVyYXRvciAhPT0gYXJyMltpXS5vcGVyYXRvciB8fFxuXHRcdFx0IWFycjFbaV0uc2VsZWN0ZWRWYWx1ZXMuZXZlcnkoKGZpcnN0VmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG90aGVyVmFsdWUgPSBhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgRGF0ZSBvYmplY3RzXG5cdFx0XHRcdGlmIChmaXJzdFZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBvdGhlclZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWVwRXF1YWwoZmlyc3RWYWx1ZSwgb3RoZXJWYWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgb2JqZWN0cyB3aXRoIGRlZXAgZXF1YWxpdHlcblx0XHRcdFx0aWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvdGhlclZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRlZXBFcXVhbChmaXJzdFZhbHVlLnZhbHVlLCBvdGhlclZhbHVlLnZhbHVlKSAmJiBmaXJzdFZhbHVlLmRlc2NyaXB0aW9uID09PSBvdGhlclZhbHVlLmRlc2NyaXB0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gZGlyZWN0IGNvbXBhcmlzb25cblx0XHRcdFx0cmV0dXJuIGZpcnN0VmFsdWUgPT09IG90aGVyVmFsdWU7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlOyAvLyBBcnJheXMgYXJlIHRoZSBzYW1lXG59XG5cbmZ1bmN0aW9uIGFyZUFycmF5U2FtZShhcnIxOiByZWFkb25seSB1bmtub3duW10sIGFycjI6IHJlYWRvbmx5IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8vIENvbXBhcmUgZWxlbWVudHMgb2YgYm90aCBhcnJheXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7IC8vIEFycmF5cyBhcmUgdGhlIHNhbWVcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJlQ29kZUxpc3RzU2FtZShhcnIxOiBjb2RlTGlzdFR5cGUsIGFycjI6IGNvZGVMaXN0VHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCBhcnJOZXcxOiBmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldENvZGVMaXN0QXJyYXkoYXJyMSk7XG5cdGNvbnN0IGFyck5ldzI6IGZpbmFsQ29kZUxpc3RUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0Q29kZUxpc3RBcnJheShhcnIyKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcxID0gYXJyTmV3MT8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcyID0gYXJyTmV3Mj8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblxuXHRjb25zdCB2YWx1ZTEgPSBhcnJOZXcxPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRjb25zdCB2YWx1ZTIgPSBhcnJOZXcyPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRpZiAoIWRlc2NyaXB0aW9uTmV3MSB8fCAhZGVzY3JpcHRpb25OZXcyKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBhcmVBcnJheVNhbWUoZGVzY3JpcHRpb25OZXcxLCBkZXNjcmlwdGlvbk5ldzIpICYmIGFyZUFycmF5U2FtZSh2YWx1ZTEgYXMgUHJpbWl0aXZlVHlwZSwgdmFsdWUyIGFzIFByaW1pdGl2ZVR5cGUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb2RlTGlzdEFycmF5KGFycjogY29kZUxpc3RUeXBlKTogUHJvbWlzZTxmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAodHlwZW9mIGFyciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIGFycigpO1xuXHR9XG5cdHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWU6IERhdGUsIHRva2VuVHlwZTogVG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuKTogc3RyaW5nIHtcblx0bGV0IGZvcm1hdHRlZERhdGVUaW1lID0gXCJcIjtcblx0aWYgKGlzRGF0ZVRpbWVPZmZzZXQpIHtcblx0XHRyZXR1cm4gZGF0ZVRpbWVPZmZzZXQuZm9ybWF0VmFsdWUodmFsdWUsIFwic3RyaW5nXCIpIGFzIHN0cmluZztcblx0fVxuXHRzd2l0Y2ggKHRva2VuVHlwZSkge1xuXHRcdGNhc2UgXCJDYWxlbmRhclwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGltZVwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGZvcm1hdHRlZERhdGVUaW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgYW5kIHZhbHVlLlxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byByZXByZXNlbnRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVwcmVzZW50XG4gKiBAcGFyYW0gdG9rZW5UeXBlIFRoZSB0b2tlbidzIHR5cGVcbiAqIEBwYXJhbSBpc0RhdGVUaW1lT2Zmc2V0IENoZWNrcyBpZiB0aGUgZGF0YSB0eXBlIGlzIG9mIERhdGVUaW1lT2Zmc2V0XG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBhbmQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbWFwT3BlcmF0b3IoXG5cdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcblx0dmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlLFxuXHR0b2tlblR5cGU6IFRva2VuVHlwZSxcblx0aXNEYXRlVGltZU9mZnNldDogYm9vbGVhblxuKTogc3RyaW5nIHtcblx0bGV0IG5ld1ZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSBcIlwiO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdG5ld1ZhbHVlID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0bmV3VmFsdWUgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HVDpcblx0XHRcdHJldHVybiBgPiAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5MVDpcblx0XHRcdHJldHVybiBgPCAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HRTpcblx0XHRcdHJldHVybiBgPj0gJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTEU6XG5cdFx0XHRyZXR1cm4gYDw9ICR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLkVROlxuXHRcdFx0cmV0dXJuIGAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Db250YWluczpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5FbmRzV2l0aDpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGg6XG5cdFx0XHRyZXR1cm4gYCR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5ORTpcblx0XHRcdHJldHVybiBgIT0oJHtuZXdWYWx1ZX0pYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdENvbnRhaW5zOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSopYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdEVuZHNXaXRoOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSlgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTm90U3RhcnRzV2l0aDpcblx0XHRcdHJldHVybiBgISgke25ld1ZhbHVlfSopYDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ld1ZhbHVlPy50b1N0cmluZygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG1hcE9wZXJhdG9yRm9yVmFsdWVIZWxwKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciwgdmFsdWU6IENvZGVMaXN0VHlwZSwgdG9rZW5UeXBlOiBUb2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gbWFwT3BlcmF0b3Iob3BlcmF0b3IsIHZhbHVlLmRlc2NyaXB0aW9uLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xufVxuXG5mdW5jdGlvbiBtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvcihcblx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuXHR2YWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcyB8IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0dG9rZW5UeXBlOiBUb2tlblR5cGUsXG5cdGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW5cbik6IHN0cmluZyB7XG5cdGxldCBuZXdWYWx1ZTE6IHN0cmluZyB8IG51bWJlciB8IERhdGUgPSBcIlwiO1xuXHRsZXQgbmV3VmFsdWUyOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlID0gXCJcIjtcblx0aWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0bmV3VmFsdWUxID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZXNbMF0pO1xuXHR9IGVsc2UgaWYgKHZhbHVlc1swXSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRuZXdWYWx1ZTEgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlc1swXSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bmV3VmFsdWUxID0gdmFsdWVzWzBdLmRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZTEgPSB2YWx1ZXNbMF07XG5cdH1cblxuXHRpZiAodHlwZW9mIHZhbHVlc1sxXSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRuZXdWYWx1ZTIgPSBjb252ZXJ0Qm9vbFRvU3RyaW5nKHZhbHVlc1sxXSk7XG5cdH0gZWxzZSBpZiAodmFsdWVzWzFdIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdG5ld1ZhbHVlMiA9IGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVzWzFdLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRuZXdWYWx1ZTIgPSB2YWx1ZXNbMV0uZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlMiA9IHZhbHVlc1sxXTtcblx0fVxuXHRpZiAob3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUKSB7XG5cdFx0cmV0dXJuIGAke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgISgke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyhvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IpOiBib29sZWFuIHtcblx0cmV0dXJuIG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCB8fCBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gdmFsdWVcblx0XHQ/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NFTEVDVEVEX1ZBTFVFU19UUlVFXCIpXG5cdFx0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TRUxFQ1RFRF9WQUxVRVNfRkFMU0VcIik7XG59XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgc2luZ2xlIHJhbmdlIHZhbGlkYXRpb24gYW5kIHVwZGF0ZXMgZm9yIGEgZmlsdGVyIHZhbHVlLlxuICogQHBhcmFtIGZpbHRlckNyaXRlcmlhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGZpbHRlclxuICogQHBhcmFtIGZpbHRlclZhbHVlIFRoZSBmaWx0ZXIgdmFsdWUgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBzaW5nbGVSYW5nZVRva2VuTGFiZWxzIEFycmF5IHRvIGNvbGxlY3QgbGFiZWxzIG9mIGludmFsaWQgc2luZ2xlIHJhbmdlIGZpbHRlcnNcbiAqIEBwYXJhbSBzaW5nbGVSYW5nZVVzYWdlIFJlY29yZCB0byB0cmFjayB1c2FnZSBjb3VudCBvZiBzaW5nbGUgcmFuZ2UgZmlsdGVyc1xuICogQHJldHVybnMgVHJ1ZSBpZiBwcm9jZXNzaW5nIHNob3VsZCBjb250aW51ZSwgZmFsc2UgaWYgaXQgc2hvdWxkIHNraXAgYW5kIG1ha2UgdGhlIGV4aXN0aW5nIHRva2VuIGFzIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyKFxuXHRmaWx0ZXJDcml0ZXJpYTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdGZpbHRlclZhbHVlOiBFYXN5RmlsdGVyUmVzdWx0W1wiZmlsdGVyXCJdWzBdLFxuXHRzaW5nbGVSYW5nZVRva2VuTGFiZWxzOiBzdHJpbmdbXSxcblx0c2luZ2xlUmFuZ2VVc2FnZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuKTogYm9vbGVhbiB7XG5cdGlmIChmaWx0ZXJDcml0ZXJpYT8uZmlsdGVyUmVzdHJpY3Rpb24gIT09IFwiU2luZ2xlUmFuZ2VcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgaXNJbnZhbGlkID0gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWUpIHx8IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApID4gMDtcblx0c2luZ2xlUmFuZ2VVc2FnZVtmaWx0ZXJWYWx1ZS5uYW1lXSA9IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApICsgMTtcblxuXHRpZiAoIWlzSW52YWxpZCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgbGFiZWwgPSBmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lO1xuXHRpZiAoIXNpbmdsZVJhbmdlVG9rZW5MYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG5cdFx0c2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5wdXNoKGxhYmVsKTtcblx0fVxuXG5cdGZpbHRlclZhbHVlLnZhbHVlcyA9IFtdO1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFZhbGlkYXRlcyBpZiBhIGZpbHRlciB2YWx1ZSB2aW9sYXRlcyB0aGUgU2luZ2xlUmFuZ2UgcmVzdHJpY3Rpb24uXG4vLyBSZXR1cm5zIHRydWUgaWYgaW52YWxpZCwgZmFsc2UgaWYgdmFsaWQuXG4vLyBSdWxlcyBmb3IgU2luZ2xlUmFuZ2U6XG4vLyAtIEFsbG93ZWQgb3BlcmF0b3JzOiBFUSwgTEUsIExULCBHRSwgR1QsIEJULCBOQlxuLy8gLSBTaW5nbGUtdmFsdWUgb3BlcmF0b3JzIChFUSwgTEUsIExULCBHRSwgR1QpOiBtdXN0IGhhdmUgZXhhY3RseSAxIHZhbHVlXG4vLyAtIFJhbmdlIG9wZXJhdG9ycyAoQlQsIE5CKTogbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXMgKGxvd2VyICYgdXBwZXIgYm91bmQpXG4vLyAtIE9ubHkgb25lIGNvbmRpdGlvbi90b2tlbiBpcyBhbGxvd2VkIHBlciBwcm9wZXJ0eSAoc2hvdWxkIGJlIGVuZm9yY2VkIG91dHNpZGUpXG4vL1xuZnVuY3Rpb24gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWU6IHsgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yOyB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgYm9vbGVhbilbXSB9KTogYm9vbGVhbiB7XG5cdGNvbnN0IHNpbmdsZVZhbHVlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkVRLCBGaWx0ZXJPcGVyYXRvci5MRSwgRmlsdGVyT3BlcmF0b3IuTFQsIEZpbHRlck9wZXJhdG9yLkdFLCBGaWx0ZXJPcGVyYXRvci5HVF07XG5cdGNvbnN0IHJhbmdlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkJULCBGaWx0ZXJPcGVyYXRvci5OQl07XG5cblx0Y29uc3Qgb3AgPSBmaWx0ZXJWYWx1ZS5vcGVyYXRvcjtcblx0Y29uc3QgdmFsQ291bnQgPSBmaWx0ZXJWYWx1ZS52YWx1ZXM/Lmxlbmd0aCB8fCAwO1xuXG5cdC8vIFNpbmdsZS12YWx1ZSBvcGVyYXRvcnMg4oaSIG11c3QgaGF2ZSBleGFjdGx5IDEgdmFsdWVcblx0aWYgKHNpbmdsZVZhbHVlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMTtcblx0fVxuXG5cdC8vIFJhbmdlIG9wZXJhdG9ycyAoQmV0d2VlbiAvIE5vdCBCZXR3ZWVuKSDihpIgbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXNcblx0aWYgKHJhbmdlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMjtcblx0fVxuXG5cdC8vIEFueXRoaW5nIGVsc2UgaXMgbm90IGFsbG93ZWQgZm9yIFNpbmdsZVJhbmdlXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZXM6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl0sXG5cdGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzOiAobXNnOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuXHRpZiAoIWZpbHRlclZhbHVlcykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IG5vbkZpbHRlcmFibGVUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3Qgc2luZ2xlUmFuZ2VUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNpbmdsZVJhbmdlVXNhZ2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlclZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xuXHRcdGNvbnN0IGZpbHRlckNyaXRlcmlhID0gZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09IGZpbHRlclZhbHVlLm5hbWUpO1xuXHRcdGlmICghZmlsdGVyQ3JpdGVyaWEpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBub24tZmlsdGVyYWJsZSBhbmQgaGlkZGVuIGZpbHRlcnNcblx0XHRpZiAoIXByb2Nlc3NGaWx0ZXJDcml0ZXJpYShmaWx0ZXJDcml0ZXJpYSwgbm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFZhbGlkYXRlIHNpbmdsZSByYW5nZSBmaWx0ZXJzXG5cdFx0Y29uc3QgaXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbiA9ICFoYW5kbGVTaW5nbGVSYW5nZUZpbHRlcihmaWx0ZXJDcml0ZXJpYSwgZmlsdGVyVmFsdWUsIHNpbmdsZVJhbmdlVG9rZW5MYWJlbHMsIHNpbmdsZVJhbmdlVXNhZ2UpO1xuXG5cdFx0Ly8gVXBkYXRlIHRva2Vuc1xuXHRcdHVwZGF0ZVRva2Vucyh0b2tlbnMsIGZpbHRlclZhbHVlLCBmaWx0ZXJDcml0ZXJpYSwgdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VucywgaXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbik7XG5cdH1cblxuXHQvLyBIYW5kbGUgdmFsaWRhdGlvbiBtZXNzYWdlc1xuXHRpZiAobm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmxlbmd0aCA+IDAgfHwgc2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5sZW5ndGggPiAwIHx8IGhpZGRlbkZpbHRlclRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzKFxuXHRcdFx0Z2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZXMobm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLCBzaW5nbGVSYW5nZVRva2VuTGFiZWxzLCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscylcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NGaWx0ZXJDcml0ZXJpYShcblx0ZmlsdGVyQ3JpdGVyaWE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhLFxuXHRub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHM6IHN0cmluZ1tdLFxuXHRoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW11cbik6IGJvb2xlYW4ge1xuXHRpZiAoZmlsdGVyQ3JpdGVyaWEuZmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoZmlsdGVyQ3JpdGVyaWEuaGlkZGVuRmlsdGVyID09PSB0cnVlKSB7XG5cdFx0aGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVG9rZW5zKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZTogRWFzeUZpbHRlclJlc3VsdFtcImZpbHRlclwiXVswXSxcblx0ZmlsdGVyQ3JpdGVyaWE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhLFxuXHR2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcblx0aXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbjogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IHRva2VuSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBmaWx0ZXJWYWx1ZS5uYW1lKTtcblx0Y29uc3Qga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IGNyZWF0ZUtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMoZmlsdGVyVmFsdWUpO1xuXG5cdGlmICh0b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdC8vIEFkZCBuZXcgdG9rZW5cblx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRrZXk6IGZpbHRlclZhbHVlLm5hbWUsXG5cdFx0XHRsYWJlbDogZmlsdGVyQ3JpdGVyaWEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogaXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbiA/IFtdIDogW2tleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdLFxuXHRcdFx0dHlwZTogZmlsdGVyQ3JpdGVyaWEudHlwZSBhcyBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj4sXG5cdFx0XHRidXN5OiBmaWx0ZXJDcml0ZXJpYS50eXBlID09PSBcIlZhbHVlSGVscFwiXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVXBkYXRlIGV4aXN0aW5nIHRva2VuXG5cdFx0Y29uc3QgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdGlmIChpc0ludmFsaWRTaW5nbGVSYW5nZVRva2VuKSB7XG5cdFx0XHRjdXJyZW50VG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IFtdO1xuXHRcdH0gZWxzZSBpZiAoKGN1cnJlbnRUb2tlbi5pc1JlcXVpcmVkID8/IGZhbHNlKSAmJiAhdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2Vuc1tjdXJyZW50VG9rZW4ua2V5XSkge1xuXHRcdFx0Y3VycmVudFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBba2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc107XG5cdFx0XHR2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zW2N1cnJlbnRUb2tlbi5rZXldID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0KGN1cnJlbnRUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pLnB1c2goa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMoZmlsdGVyVmFsdWU6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl1bMF0pOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHsgb3BlcmF0b3IsIHZhbHVlcyB9ID0gZmlsdGVyVmFsdWU7XG5cblx0aWYgKEVhc3lGaWx0ZXJVdGlscy5pc0JldHdlZW5TZWxlY3RlZFZhbHVlcyhvcGVyYXRvcikpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b3BlcmF0b3IsXG5cdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWVzIGFzIEJldHdlZW5TZWxlY3RlZFZhbHVlc1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZXJhdG9yOiBvcGVyYXRvciBhcyBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPixcblx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWVzIGFzIHN0cmluZ1tdIHwgRGF0ZVtdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZXMoXG5cdG5vbkZpbHRlcmFibGVUb2tlbkxhYmVsczogc3RyaW5nW10sXG5cdHNpbmdsZVJhbmdlVG9rZW5MYWJlbHM6IHN0cmluZ1tdLFxuXHRoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW11cbik6IHN0cmluZyB7XG5cdGNvbnN0IG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGlmIChub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdG1lc3NhZ2VzLnB1c2gocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTk9OX0ZJTFRFUkFCTEVcIiwgW2A8c3Ryb25nPiR7bm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gXSkpO1xuXHR9XG5cblx0aWYgKGhpZGRlbkZpbHRlclRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRtZXNzYWdlcy5wdXNoKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0hJRERFTl9GSUxURVJcIiwgW2A8c3Ryb25nPiR7aGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBdKSk7XG5cdH1cblxuXHRpZiAoc2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0bWVzc2FnZXMucHVzaChyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfUkFOR0VcIiwgW2A8c3Ryb25nPiR7c2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YF0pKTtcblx0fVxuXG5cdHJldHVybiBtZXNzYWdlcy5qb2luKFwiPGJyPlwiKTtcbn1cblxuY29uc3QgRWFzeUZpbHRlclV0aWxzID0ge1xuXHRhcmVJdGVtc1NhbWUsXG5cdGFyZUNvZGVMaXN0c1NhbWUsXG5cdGdldENvZGVMaXN0QXJyYXksXG5cdGFyZUFycmF5U2FtZSxcblx0bWFwT3BlcmF0b3IsXG5cdG1hcE9wZXJhdG9yRm9yQmV0d2Vlbk9wZXJhdG9yLFxuXHRpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0Zm9ybWF0RGF0YSxcblx0bWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVhc3lGaWx0ZXJVdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQW9CQSxNQUFNQSxjQUFjLEdBQUdDLEdBQUcsQ0FBQ0Msb0JBQW9CLENBQUMsaUJBQWlCLENBQUU7RUFDbkUsTUFBTUMsY0FBYyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxDQUFDO0VBRTNDLFNBQVNDLFlBQVlBLENBQ3BCQyxJQUFvRixFQUNwRkMsSUFBb0YsRUFDMUU7SUFDVixJQUFJRCxJQUFJLENBQUNFLE1BQU0sS0FBS0QsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7SUFDQSxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0gsSUFBSSxDQUFDRSxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO01BQ3JDLElBQ0NILElBQUksQ0FBQ0csQ0FBQyxDQUFDLENBQUNDLFFBQVEsS0FBS0gsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxJQUNyQyxDQUFDSixJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNDLEtBQUssQ0FBQyxDQUFDQyxVQUFVLEVBQUVDLEtBQUssS0FBSztRQUNwRCxNQUFNQyxVQUFVLEdBQUdSLElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUNFLGNBQWMsQ0FBQ0csS0FBSyxDQUFDOztRQUVoRDtRQUNBLElBQUlELFVBQVUsWUFBWUcsSUFBSSxJQUFJRCxVQUFVLFlBQVlDLElBQUksRUFBRTtVQUM3RCxPQUFPQyxTQUFTLENBQUNKLFVBQVUsRUFBRUUsVUFBVSxDQUFDO1FBQ3pDOztRQUVBO1FBQ0EsSUFBSSxPQUFPRixVQUFVLEtB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
|