@recursyve/nestjs-data-filter 10.0.0 → 10.0.1

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.
@@ -203,32 +203,36 @@ class Filter {
203
203
  };
204
204
  }
205
205
  if (this.json.type === "array") {
206
- return this.transformForJsonArray(rule, name);
206
+ return this.transformForJsonArray(rule);
207
207
  }
208
- return this.transformForJsonObject(rule, name);
208
+ return this.transformForJsonObject(rule);
209
209
  }
210
- transformForJsonArray(rule, name) {
211
- var _a;
212
- const colName = this.path ? sequelize_1.Sequelize.col(name) : sequelize_1.Sequelize.literal(name);
210
+ transformForJsonArray(rule) {
211
+ var _a, _b;
212
+ const colName = this.path ? sequelize_1.Sequelize.literal(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.attribute, this.path)) : sequelize_1.Sequelize.col(this.attribute);
213
213
  if (rule.operation === operators_1.FilterOperatorTypes.Contains || rule.operation === operators_1.FilterOperatorTypes.NotContains) {
214
- /**
215
- * We override the rule to use an equal or not equal with a JSON_CONTAINS function
216
- */
217
- const newRule = {
218
- operation: rule.operation === operators_1.FilterOperatorTypes.Contains ? operators_1.FilterOperatorTypes.Equal : operators_1.FilterOperatorTypes.NotEqual,
219
- value: true
220
- };
221
- const value = typeof rule.value === "string" ? `"${rule.value}"` : rule.value;
222
- if ((_a = this.json) === null || _a === void 0 ? void 0 : _a.path) {
223
- return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value, this.json.path), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
224
- }
225
- return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
214
+ rule.operation = rule.operation === operators_1.FilterOperatorTypes.Contains ? operators_1.FilterOperatorTypes.Equal : operators_1.FilterOperatorTypes.NotEqual;
215
+ }
216
+ if (rule.operation !== operators_1.FilterOperatorTypes.Equal && rule.operation !== operators_1.FilterOperatorTypes.NotEqual) {
217
+ return;
218
+ }
219
+ /**
220
+ * We override the rule to use an equal or not equal with a JSON_CONTAINS function
221
+ */
222
+ const newRule = {
223
+ operation: rule.operation,
224
+ value: true
225
+ };
226
+ const value = typeof rule.value === "string" ? `"${rule.value}"` : (_a = rule.value) === null || _a === void 0 ? void 0 : _a.toString();
227
+ if ((_b = this.json) === null || _b === void 0 ? void 0 : _b.path) {
228
+ const col = sequelize_1.Sequelize.fn("JSON_EXTRACT", colName, sequelize_1.Sequelize.literal(`'$[*].${this.json.path}'`));
229
+ return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", col, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
226
230
  }
227
- return;
231
+ return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
228
232
  }
229
- transformForJsonObject(rule, name) {
233
+ transformForJsonObject(rule) {
230
234
  var _a;
231
- const colName = this.path ? sequelize_1.Sequelize.col(name) : sequelize_1.Sequelize.literal(name);
235
+ const colName = this.path ? sequelize_1.Sequelize.literal(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.attribute, this.path)) : sequelize_1.Sequelize.col(this.attribute);
232
236
  const value = sequelize_utils_1.SequelizeUtils.generateWhereValue(rule);
233
237
  if ((_a = this.json) === null || _a === void 0 ? void 0 : _a.path) {
234
238
  return sequelize_1.Sequelize.where(sequelize_1.Sequelize.fn("JSON_EXTRACT", colName, this.json.path), value);
@@ -238,4 +242,4 @@ class Filter {
238
242
  }
239
243
  exports.Filter = Filter;
240
244
 
241
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQThGO0FBSzlGLDJEQUF1RDtBQUN2RCxrREFBOEM7QUFJOUMsNENBQW9GO0FBNERwRixNQUFzQixNQUFNO0lBS3hCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0lBZU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFpQjtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQXNCLFVBQWlDO1FBekJ2QyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBbUIxQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBT25CLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQUcsUUFBa0Q7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsUUFBa0Q7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBRyxRQUFrRDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FB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LGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFvQixDQUFjLENBQUMsQ0FBQTtTQUMxSDtRQUVELE9BQU87SUFDWCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBb0IsRUFBRSxJQUFZOztRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsTUFBTSxLQUFLLEdBQUcsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsSUFBSSxFQUFFO1lBQ2pCLE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztTQUNyRztRQUVELE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0o7QUFsU0Qsd0JBa1NDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbiwgTG9naWNUeXBlLCBPcCwgU2VxdWVsaXplLCB3aGVyZSwgV2hlcmVPcGVyYXRvcnMsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvcXVlcnkubW9kZWxcIjtcbmltcG9ydCB7IElSdWxlLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3J1bGUubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbU9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcblxuLy8gVE9ETzogRGVwcmVjYXRlIGtleSB0byB1c2UgYXR0cmlidXRlIGluc3RlYWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCYXNlRmlsdGVyRGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb25SdWxlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JzO1xuICAgIHZhbHVlPzogKHVua25vd24gfCB1bmtub3duW10pIHwgKCh2YWx1ZTogdW5rbm93biB8IHVua25vd25bXSkgPT4gdW5rbm93biB8IHVua25vd25bXSk7XG4gICAgd2hlcmU/OiBJbmNsdWRlV2hlcmVNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uO1xuICAgIHJ1bGVzOiAoRmlsdGVyQ29uZGl0aW9uUnVsZSB8IEZpbHRlckNvbmRpdGlvbilbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc29uQ29uZmlnIHtcbiAgICB0eXBlOiBcImFycmF5XCIgfCBcIm9iamVjdFwiO1xuICAgIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFBhdGhDb25kaXRpb24gPSBib29sZWFuIHwge1xuICAgIFtmaWx0ZXI6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmFibGVkQ29uZmlnPFVzZXIgPSBhbnksIFJlcXVlc3QgPSBhbnk+IHtcbiAgICB1c2VyPzogVXNlcjtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIGhhdmluZz86IGFueTtcbiAgICBwYXJhbm9pZD86IGJvb2xlYW47XG4gICAgY29uZGl0aW9uPzogRmlsdGVyQ29uZGl0aW9uO1xuICAgIGdyb3VwPzogc3RyaW5nO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG4gICAgcGF0aENvbmRpdGlvbj86IFBhdGhDb25kaXRpb247XG4gICAganNvbj86IEpzb25Db25maWc7XG4gICAgZW5hYmxlZD86ICh7IHVzZXIsIHJlcXVlc3QgfTogRW5hYmxlZENvbmZpZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgbWVhbnMgdGhhdCB0aGUgY29uZmlnIHdpbGwgbm90IGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHByaXZhdGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckRlZmluaXRpb24gZXh0ZW5kcyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgSVJ1bGUge1xuICAgIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgb3BlcmF0b3JzOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdO1xuXG4gICAgZ2V0Q29uZmlnPFJlcXVlc3Q+KGtleTogc3RyaW5nLCByZXE6IFJlcXVlc3QsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbD47XG4gICAgZ2V0SW5jbHVkZVBhdGhzKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW107XG4gICAgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+O1xuICAgIGdldEhhdmluZ09wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD47XG4gICAgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgX3R5cGUgPSBcImZpbHRlclwiO1xuXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlITogVHJhbnNsYXRlQWRhcHRlcjtcblxuICAgIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0eXBlITogRmlsdGVyVHlwZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzITogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXTtcbiAgICBwdWJsaWMgZ3JvdXAhOiBzdHJpbmc7XG4gICAgcHVibGljIGF0dHJpYnV0ZSE6IHN0cmluZztcbiAgICBwdWJsaWMgaGF2aW5nPzogYW55O1xuICAgIHB1YmxpYyBwYXRoPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjb25kaXRpb24/OiBGaWx0ZXJDb25kaXRpb247XG4gICAgcHVibGljIHBhdGhDb25kaXRpb24/OiBQYXRoQ29uZGl0aW9uO1xuICAgIHB1YmxpYyBqc29uPzogSnNvbkNvbmZpZztcbiAgICBwdWJsaWMgcHJpdmF0ZT86IGJvb2xlYW47XG4gICAgcHVibGljIGVuYWJsZWQ/OiAoeyB1c2VyLCByZXF1ZXN0IH06IEVuYWJsZWRDb25maWcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcHVibGljIHBhcmFub2lkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGUoZGVmaW5pdGlvbjogSVJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bXCJfdHlwZVwiXSA9PT0gXCJmaWx0ZXJcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9wZXJhdG9ycyguLi5vcGVyYXRvcjogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXSk6IEZpbHRlciB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2goLi4ub3BlcmF0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlT3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhb3BlcmF0b3Iuc29tZShvcCA9PiBvcCA9PT0geCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbLi4ub3BlcmF0b3JdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnPFJlcXVlc3QgPSBhbnk+KGtleTogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQmFzZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKHRoaXMucHJpdmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmICEoYXdhaXQgdGhpcy5lbmFibGVkKHsgdXNlciwgcmVxdWVzdCB9KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3JzOiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm9wZXJhdG9ycy5tYXAoYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRPcGVyYXRvclRyYW5zbGF0aW9uS2V5KHgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlID8/IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRDdXN0b21PcGVyYXRvclRyYW5zbGF0aW9uS2V5KGtleSwgeC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9IGFzIEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWw7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbmZpZy5ncm91cCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ3JvdXAsXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbih1c2VyPy5sYW5ndWFnZSA/PyBcIlwiLCBGaWx0ZXJVdGlscy5nZXRHcm91cFRyYW5zbGF0aW9uS2V5KHRoaXMuZ3JvdXApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluY2x1ZGVQYXRocyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFBhdGhNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5wYXRoKSA6IHRoaXMuYXR0cmlidXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBydWxlLm9wZXJhdGlvbjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmIChvcD8ub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJ1bGUub3BlcmF0aW9uID0gb3Aub3BlcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IChydWxlPy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaGF2aW5nKSA/XG4gICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbldoZXJlT3B0aW9ucyh1bmRlZmluZWQsIHJ1bGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHRoaXMudHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGUsIG5hbWUpLCBydWxlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvcldoZXJlT3B0aW9ucyhydWxlLm9wZXJhdGlvbiwgd2hlcmUsIHJ1bGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmhhdmluZy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhdmluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpIGFzIFdoZXJlT3BlcmF0b3JzO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB3aGVyZSh0aGlzLmhhdmluZywgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucGF0aENvbmRpdGlvbiB8fCB0eXBlb2YgdGhpcy5wYXRoQ29uZGl0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucGF0aENvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlRnJvbUtleXMocXVlcnksIGtleXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzLmV2ZXJ5KHggPT4gKHRoaXMucGF0aENvbmRpdGlvbiBhcyBhbnkpW3guaWRdID09PSB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHdoZXJlOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQsIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZXJlID8gW3doZXJlXSA6IFtdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNvbmRpdGlvbi5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBjb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnModGhpcy5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnMoZmlsdGVyOiBGaWx0ZXJDb25kaXRpb24sIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdLCBwYXJlbnRSdWxlOiBRdWVyeVJ1bGVNb2RlbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZmlsdGVyLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogY29uZGl0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zLCBwYXJlbnRSdWxlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHIgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGU7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gci5wYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoci5rZXksIHIucGF0aCkgOiByLmtleTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgciA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHIudmFsdWUocGFyZW50UnVsZS52YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIFtuYW1lXTogU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHIgYXMgUnVsZU1vZGVsKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcnMsIHdoZXJlPzogV2hlcmVPcHRpb25zKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBvcGVyYXRvcjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiB3aGVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3AuaGF2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgW09wLmFuZF06IFt3aGVyZSwgb3AuaGF2aW5nXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wLmhhdmluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JXaGVyZU9wdGlvbnMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9ycywgd2hlcmU6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSk6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IG9wID0gdGhpcy5vcGVyYXRvcnMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHgubmFtZSA9PT0gb3BlcmF0b3I7XG4gICAgICAgIH0pIGFzIEN1c3RvbU9wZXJhdG9yO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wLndoZXJlICYmICFvcC5vcGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BXaGVyZSA9IHR5cGVvZiBvcC53aGVyZSA9PT0gXCJmdW5jdGlvblwiID8gb3Aud2hlcmUodmFsdWUpIDogb3Aud2hlcmU7XG4gICAgICAgIHJldHVybiB3aGVyZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBbT3AuYW5kXTogW3doZXJlLCBvcFdoZXJlXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wV2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlRnJvbUtleXMocXVlcnk6IFF1ZXJ5TW9kZWwsIGtleXM6IHN0cmluZ1tdKTogUXVlcnlSdWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgaWYgKChydWxlIGFzIFF1ZXJ5TW9kZWwpLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4udGhpcy5nZXRSdWxlRnJvbUtleXMocnVsZSBhcyBRdWVyeU1vZGVsLCBrZXlzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleXMuc29tZSh4ID0+IChydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCA9PT0geCkpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbbmFtZV06IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmpzb24udHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uQXJyYXkocnVsZSwgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGUsIG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbkFycmF5KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90Q29udGFpbnMpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlID0ge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBydWxlLnZhbHVlID09PSBcInN0cmluZ1wiID8gYFwiJHtydWxlLnZhbHVlfVwiYCA6IHJ1bGUudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSwgdGhpcy5qc29uLnBhdGgpLCBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpIGFzIExvZ2ljVHlwZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aGVyZShmbihcIkpTT05fQ09OVEFJTlNcIiwgY29sTmFtZSwgdmFsdWUpLCBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpIGFzIExvZ2ljVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybUZvckpzb25PYmplY3QocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemUuY29sKG5hbWUpIDogU2VxdWVsaXplLmxpdGVyYWwobmFtZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpO1xuICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCB0aGlzLmpzb24ucGF0aCksIHZhbHVlIGFzIExvZ2ljVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgdmFsdWUgYXMgTG9naWNUeXBlKTtcbiAgICB9XG59XG4iXX0=
245
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQThGO0FBSzlGLDJEQUF1RDtBQUN2RCxrREFBOEM7QUFJOUMsNENBQW9GO0FBNERwRixNQUFzQixNQUFNO0lBS3hCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0lBZU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFpQjtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQXNCLFVBQWlDO1FBekJ2QyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBbUIxQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBT25CLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQUcsUUFBa0Q7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsUUFBa0Q7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBRyxRQUFrRDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBZ0IsR0FBVyxFQUFFLE9BQWdCLEVBQUUsSUFBMEI7O1FBQzNGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sTUFBTSxHQUFHO1lBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7O2dCQUN0RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDdkIsT0FBTzt3QkFDSCxFQUFFLEVBQUUsQ0FBQzt3QkFDTCxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUM3QyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLG1DQUFJLEVBQUUsRUFDcEIsMEJBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FDM0M7cUJBQ0osQ0FBQztpQkFDTDtnQkFFRCxPQUFPO29CQUNILEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDVixJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUM3QyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLG1DQUFJLEVBQUUsRUFDcEIsMEJBQVcsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUMzRDtpQkFDSixDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7U0FDMEIsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixNQUFNLENBQUMsS0FBSyxHQUFHO2dCQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDZixJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsbUNBQUksRUFBRSxFQUFFLDBCQUFXLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFILENBQUE7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBb0IsRUFBRSxJQUFhO1FBQ3RELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0IsRUFBRSxJQUFhO1FBQzVELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUN0RztRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3JDLENBQUMsQ0FBbUIsQ0FBQztRQUNyQixJQUFJLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxRQUFRLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7U0FDaEM7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEtBQUssTUFBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdFLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQW9CO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxPQUFPLEdBQTZCLFNBQVMsQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3pCO2FBQU07WUFDSCxNQUFNLEtBQUssR0FBRyxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBbUIsQ0FBQztZQUN4RSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFO2dCQUNoRCxPQUFPLEdBQUcsSUFBQSxpQkFBSyxFQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdkM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWlCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDaEUsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUM5QixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLElBQUksQ0FBQyxhQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVTLHdCQUF3QixDQUFDLEtBQStCLEVBQUUsSUFBb0I7UUFDcEYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDdkcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxNQUF1QixFQUFFLE9BQXVCLEVBQUUsVUFBMEI7UUFDM0csS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQXVCLENBQUM7WUFDbEMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO2dCQUNiLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDekQsU0FBUzthQUNaO1lBRUQsSUFBSSxDQUFDLEdBQUcsSUFBMkIsQ0FBQztZQUNwQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ2pGLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtnQkFDL0IsQ0FBQyxHQUFHO29CQUNBLEdBQUcsQ0FBQztvQkFDSixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2lCQUNuQyxDQUFBO2FBQ0o7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNULENBQUMsSUFBSSxDQUFDLEVBQUUsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFjLENBQUM7YUFDNUQsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRVMsd0JBQXdCLENBQUMsUUFBeUIsRUFBRSxLQUFvQjtRQUM5RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvQixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFFRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO1FBQy9CLENBQUMsQ0FBbUIsQ0FBQztRQUNyQixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUNaLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxLQUFLO1lBQ1IsQ0FBQyxDQUFDO2dCQUNJLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7YUFDL0I7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNwQixDQUFDO0lBRVMsdUJBQXVCLENBQUMsUUFBeUIsRUFBRSxLQUErQixFQUFFLEtBQVU7UUFDcEcsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztRQUMvQixDQUFDLENBQW1CLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQzNCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ1gsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzVFLE9BQU8sS0FBSztZQUNSLENBQUMsQ0FBQztnQkFDSSxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7YUFDN0I7WUFDSCxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBaUIsRUFBRSxJQUFjO1FBQ3JELE1BQU0sS0FBSyxHQUFxQixFQUFFLENBQUM7UUFDbkMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzVCLElBQUssSUFBbUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNqRTtpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxJQUF1QixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFzQixDQUFDLENBQUM7YUFDdEM7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFvQixFQUFFLElBQVk7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixPQUFPO2dCQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7YUFDbEQsQ0FBQztTQUNMO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0M7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBb0I7O1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFTLENBQUMsT0FBTyxDQUFDLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSywrQkFBbUIsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSywrQkFBbUIsQ0FBQyxXQUFXLEVBQUU7WUFDdkcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxRQUFRLENBQUM7U0FDL0g7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsUUFBUSxFQUFFO1lBQ2pHLE9BQU87U0FDVjtRQUVEOztXQUVHO1FBQ0gsTUFBTSxPQUFPLEdBQUc7WUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsS0FBSyxFQUFFLElBQUk7U0FDZCxDQUFBO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsUUFBUSxFQUFFLENBQUM7UUFDMUYsSUFBSSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLElBQUksRUFBRTtZQUNqQixNQUFNLEdBQUcsR0FBRyxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLHFCQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakcsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQW9CLENBQWMsQ0FBQyxDQUFBO1NBQ3RIO1FBQ0QsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQW9CLENBQWMsQ0FBQyxDQUFBO0lBQzNILENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxJQUFvQjs7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUksTUFBTSxLQUFLLEdBQUcsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsSUFBSSxFQUFFO1lBQ2pCLE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztTQUNyRztRQUVELE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0o7QUF2U0Qsd0JBdVNDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbiwgTG9naWNUeXBlLCBPcCwgU2VxdWVsaXplLCB3aGVyZSwgV2hlcmVPcGVyYXRvcnMsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvcXVlcnkubW9kZWxcIjtcbmltcG9ydCB7IElSdWxlLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3J1bGUubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbU9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcblxuLy8gVE9ETzogRGVwcmVjYXRlIGtleSB0byB1c2UgYXR0cmlidXRlIGluc3RlYWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCYXNlRmlsdGVyRGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb25SdWxlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JzO1xuICAgIHZhbHVlPzogKHVua25vd24gfCB1bmtub3duW10pIHwgKCh2YWx1ZTogdW5rbm93biB8IHVua25vd25bXSkgPT4gdW5rbm93biB8IHVua25vd25bXSk7XG4gICAgd2hlcmU/OiBJbmNsdWRlV2hlcmVNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uO1xuICAgIHJ1bGVzOiAoRmlsdGVyQ29uZGl0aW9uUnVsZSB8IEZpbHRlckNvbmRpdGlvbilbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc29uQ29uZmlnIHtcbiAgICB0eXBlOiBcImFycmF5XCIgfCBcIm9iamVjdFwiO1xuICAgIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFBhdGhDb25kaXRpb24gPSBib29sZWFuIHwge1xuICAgIFtmaWx0ZXI6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmFibGVkQ29uZmlnPFVzZXIgPSBhbnksIFJlcXVlc3QgPSBhbnk+IHtcbiAgICB1c2VyPzogVXNlcjtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIGhhdmluZz86IGFueTtcbiAgICBwYXJhbm9pZD86IGJvb2xlYW47XG4gICAgY29uZGl0aW9uPzogRmlsdGVyQ29uZGl0aW9uO1xuICAgIGdyb3VwPzogc3RyaW5nO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG4gICAgcGF0aENvbmRpdGlvbj86IFBhdGhDb25kaXRpb247XG4gICAganNvbj86IEpzb25Db25maWc7XG4gICAgZW5hYmxlZD86ICh7IHVzZXIsIHJlcXVlc3QgfTogRW5hYmxlZENvbmZpZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgbWVhbnMgdGhhdCB0aGUgY29uZmlnIHdpbGwgbm90IGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHByaXZhdGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckRlZmluaXRpb24gZXh0ZW5kcyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgSVJ1bGUge1xuICAgIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgb3BlcmF0b3JzOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdO1xuXG4gICAgZ2V0Q29uZmlnPFJlcXVlc3Q+KGtleTogc3RyaW5nLCByZXE6IFJlcXVlc3QsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbD47XG4gICAgZ2V0SW5jbHVkZVBhdGhzKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW107XG4gICAgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+O1xuICAgIGdldEhhdmluZ09wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD47XG4gICAgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgX3R5cGUgPSBcImZpbHRlclwiO1xuXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlITogVHJhbnNsYXRlQWRhcHRlcjtcblxuICAgIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0eXBlITogRmlsdGVyVHlwZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzITogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXTtcbiAgICBwdWJsaWMgZ3JvdXAhOiBzdHJpbmc7XG4gICAgcHVibGljIGF0dHJpYnV0ZSE6IHN0cmluZztcbiAgICBwdWJsaWMgaGF2aW5nPzogYW55O1xuICAgIHB1YmxpYyBwYXRoPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjb25kaXRpb24/OiBGaWx0ZXJDb25kaXRpb247XG4gICAgcHVibGljIHBhdGhDb25kaXRpb24/OiBQYXRoQ29uZGl0aW9uO1xuICAgIHB1YmxpYyBqc29uPzogSnNvbkNvbmZpZztcbiAgICBwdWJsaWMgcHJpdmF0ZT86IGJvb2xlYW47XG4gICAgcHVibGljIGVuYWJsZWQ/OiAoeyB1c2VyLCByZXF1ZXN0IH06IEVuYWJsZWRDb25maWcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcHVibGljIHBhcmFub2lkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGUoZGVmaW5pdGlvbjogSVJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bXCJfdHlwZVwiXSA9PT0gXCJmaWx0ZXJcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9wZXJhdG9ycyguLi5vcGVyYXRvcjogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXSk6IEZpbHRlciB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2goLi4ub3BlcmF0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlT3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhb3BlcmF0b3Iuc29tZShvcCA9PiBvcCA9PT0geCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbLi4ub3BlcmF0b3JdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnPFJlcXVlc3QgPSBhbnk+KGtleTogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQmFzZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKHRoaXMucHJpdmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmICEoYXdhaXQgdGhpcy5lbmFibGVkKHsgdXNlciwgcmVxdWVzdCB9KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3JzOiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm9wZXJhdG9ycy5tYXAoYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRPcGVyYXRvclRyYW5zbGF0aW9uS2V5KHgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlID8/IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRDdXN0b21PcGVyYXRvclRyYW5zbGF0aW9uS2V5KGtleSwgeC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9IGFzIEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWw7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbmZpZy5ncm91cCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ3JvdXAsXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbih1c2VyPy5sYW5ndWFnZSA/PyBcIlwiLCBGaWx0ZXJVdGlscy5nZXRHcm91cFRyYW5zbGF0aW9uS2V5KHRoaXMuZ3JvdXApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluY2x1ZGVQYXRocyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFBhdGhNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5wYXRoKSA6IHRoaXMuYXR0cmlidXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBydWxlLm9wZXJhdGlvbjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmIChvcD8ub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJ1bGUub3BlcmF0aW9uID0gb3Aub3BlcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IChydWxlPy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaGF2aW5nKSA/XG4gICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbldoZXJlT3B0aW9ucyh1bmRlZmluZWQsIHJ1bGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHRoaXMudHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGUsIG5hbWUpLCBydWxlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvcldoZXJlT3B0aW9ucyhydWxlLm9wZXJhdGlvbiwgd2hlcmUsIHJ1bGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmhhdmluZy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhdmluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpIGFzIFdoZXJlT3BlcmF0b3JzO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB3aGVyZSh0aGlzLmhhdmluZywgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucGF0aENvbmRpdGlvbiB8fCB0eXBlb2YgdGhpcy5wYXRoQ29uZGl0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucGF0aENvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlRnJvbUtleXMocXVlcnksIGtleXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzLmV2ZXJ5KHggPT4gKHRoaXMucGF0aENvbmRpdGlvbiBhcyBhbnkpW3guaWRdID09PSB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHdoZXJlOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQsIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZXJlID8gW3doZXJlXSA6IFtdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNvbmRpdGlvbi5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBjb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnModGhpcy5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnMoZmlsdGVyOiBGaWx0ZXJDb25kaXRpb24sIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdLCBwYXJlbnRSdWxlOiBRdWVyeVJ1bGVNb2RlbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZmlsdGVyLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogY29uZGl0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zLCBwYXJlbnRSdWxlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHIgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGU7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gci5wYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoci5rZXksIHIucGF0aCkgOiByLmtleTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgciA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHIudmFsdWUocGFyZW50UnVsZS52YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIFtuYW1lXTogU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHIgYXMgUnVsZU1vZGVsKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcnMsIHdoZXJlPzogV2hlcmVPcHRpb25zKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBvcGVyYXRvcjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiB3aGVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3AuaGF2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgW09wLmFuZF06IFt3aGVyZSwgb3AuaGF2aW5nXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wLmhhdmluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JXaGVyZU9wdGlvbnMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9ycywgd2hlcmU6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSk6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IG9wID0gdGhpcy5vcGVyYXRvcnMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHgubmFtZSA9PT0gb3BlcmF0b3I7XG4gICAgICAgIH0pIGFzIEN1c3RvbU9wZXJhdG9yO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wLndoZXJlICYmICFvcC5vcGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BXaGVyZSA9IHR5cGVvZiBvcC53aGVyZSA9PT0gXCJmdW5jdGlvblwiID8gb3Aud2hlcmUodmFsdWUpIDogb3Aud2hlcmU7XG4gICAgICAgIHJldHVybiB3aGVyZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBbT3AuYW5kXTogW3doZXJlLCBvcFdoZXJlXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wV2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlRnJvbUtleXMocXVlcnk6IFF1ZXJ5TW9kZWwsIGtleXM6IHN0cmluZ1tdKTogUXVlcnlSdWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgaWYgKChydWxlIGFzIFF1ZXJ5TW9kZWwpLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4udGhpcy5nZXRSdWxlRnJvbUtleXMocnVsZSBhcyBRdWVyeU1vZGVsLCBrZXlzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleXMuc29tZSh4ID0+IChydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCA9PT0geCkpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbbmFtZV06IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmpzb24udHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uQXJyYXkocnVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbkFycmF5KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMucGF0aCA/IFNlcXVlbGl6ZS5saXRlcmFsKFNlcXVlbGl6ZVV0aWxzLmdldExpdGVyYWxGdWxsTmFtZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5wYXRoKSkgOiBTZXF1ZWxpemUuY29sKHRoaXMuYXR0cmlidXRlKTtcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLkNvbnRhaW5zIHx8IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdENvbnRhaW5zKSB7XG4gICAgICAgICAgICBydWxlLm9wZXJhdGlvbiA9IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLkNvbnRhaW5zID8gRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCA6IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90RXF1YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gIT09IEZpbHRlck9wZXJhdG9yVHlwZXMuRXF1YWwgJiYgcnVsZS5vcGVyYXRpb24gIT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90RXF1YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBvdmVycmlkZSB0aGUgcnVsZSB0byB1c2UgYW4gZXF1YWwgb3Igbm90IGVxdWFsIHdpdGggYSBKU09OX0NPTlRBSU5TIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBuZXdSdWxlID0ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBydWxlLm9wZXJhdGlvbixcbiAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBydWxlLnZhbHVlID09PSBcInN0cmluZ1wiID8gYFwiJHtydWxlLnZhbHVlfVwiYCA6IHJ1bGUudmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmpzb24/LnBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCBTZXF1ZWxpemUubGl0ZXJhbChgJyRbKl0uJHt0aGlzLmpzb24ucGF0aH0nYCkpO1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2wsIHZhbHVlKSwgU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKG5ld1J1bGUgYXMgUnVsZU1vZGVsKSBhcyBMb2dpY1R5cGUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbk9iamVjdChydWxlOiBRdWVyeVJ1bGVNb2RlbCk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemUubGl0ZXJhbChTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUodGhpcy5hdHRyaWJ1dGUsIHRoaXMucGF0aCkpIDogU2VxdWVsaXplLmNvbCh0aGlzLmF0dHJpYnV0ZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpO1xuICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCB0aGlzLmpzb24ucGF0aCksIHZhbHVlIGFzIExvZ2ljVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgdmFsdWUgYXMgTG9naWNUeXBlKTtcbiAgICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recursyve/nestjs-data-filter",
3
- "version": "10.0.0",
3
+ "version": "10.0.1",
4
4
  "description": "NestJs DataFilter library",
5
5
  "main": "index.js",
6
6
  "scripts": {