kwikid-forms 0.2.10 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,12 @@
1
1
  import { __awaiter, __decorate } from "tslib";
2
2
  import { Action, checkObjectKeyExists, Condition, logMethod, Rule, setValueToObjectPath, Source } from "kwikid-toolkit";
3
+ import { EApiRequestUrlType } from "../definitions/form-view.apis.definition";
3
4
  export class Apis {
4
5
  constructor(object, takeAction) {
5
6
  this._object = object;
6
7
  this._takeAction = takeAction;
7
- this._api = this._object.FIELD_CONFIG.api;
8
- this._request = this._object.FIELD_CONFIG.api.request;
9
- this._response = this._object.FIELD_CONFIG.api.response;
10
- this._status = this._object.FIELD_CONFIG.api.status;
8
+ this._request = this._object.API_CONFIG.request;
9
+ this._response = this._object.API_CONFIG.response;
11
10
  }
12
11
  get object() {
13
12
  return this._object;
@@ -15,55 +14,89 @@ export class Apis {
15
14
  set object(value) {
16
15
  this._object = value;
17
16
  }
17
+ setUrl() {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ if (this._request.url.hasOwnProperty("type") &&
20
+ this._request.url.type === EApiRequestUrlType.CALCULATED) {
21
+ const source = new Source(this._object);
22
+ const url = yield source.getValueFromSource(this._request.url.props.value.source);
23
+ this._request.url = setValueToObjectPath(this._request.url, "value", url);
24
+ }
25
+ else {
26
+ this._request.url = setValueToObjectPath({}, "value", this._request.url);
27
+ }
28
+ return this._object.API_CONFIG;
29
+ });
30
+ }
18
31
  setRequestBody() {
19
32
  var _a, _b, _c, _d;
20
33
  return __awaiter(this, void 0, void 0, function* () {
21
- let params = this._request.body.params;
22
- let paramIndex = 0;
23
- for (let param of params) {
24
- let sources = param.sources;
25
- let sourceIndex = 0;
26
- for (let source of sources) {
27
- const sources = new Source(this._object);
28
- const value = sources.getValueFromSource(source);
29
- // Set the Value of current source.
30
- this._object.FIELD_CONFIG = setValueToObjectPath(this._object.FIELD_CONFIG, `api.request.body.params[${paramIndex}].sources[${sourceIndex}].value`, value);
31
- const validation = source.validation;
32
- const triggers = (_a = validation === null || validation === void 0 ? void 0 : validation.triggers) !== null && _a !== void 0 ? _a : [];
33
- const rules = (_b = validation === null || validation === void 0 ? void 0 : validation.rules) !== null && _b !== void 0 ? _b : [];
34
- const actions = (_d = (_c = validation) === null || _c === void 0 ? void 0 : _c.actions) !== null && _d !== void 0 ? _d : [];
35
- const rulesMapping = new Rule(rules, this._object).mapping();
36
- for (let action of actions) {
37
- const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate();
38
- if (conditionEvaluation) {
39
- const actions = new Action(action, rulesMapping, this._object, this._takeAction);
40
- yield actions.execute();
34
+ if (checkObjectKeyExists(this._request, "body")) {
35
+ if (checkObjectKeyExists(this._request.headers, "params")) {
36
+ let params = this._request.body.params;
37
+ let paramIndex = 0;
38
+ for (let param of params) {
39
+ let sources = param.sources;
40
+ let sourceIndex = 0;
41
+ for (let source of sources) {
42
+ const sources = new Source(this._object);
43
+ const value = sources.getValueFromSource(source);
44
+ // Set the Value of current source.
45
+ this._object.API_CONFIG = setValueToObjectPath(this._object.API_CONFIG, `request.body.params[${paramIndex}].sources[${sourceIndex}].value`, value);
46
+ const validation = source.validation;
47
+ const triggers = (_a = validation === null || validation === void 0 ? void 0 : validation.triggers) !== null && _a !== void 0 ? _a : [];
48
+ const rules = (_b = validation === null || validation === void 0 ? void 0 : validation.rules) !== null && _b !== void 0 ? _b : [];
49
+ const actions = (_d = (_c = validation) === null || _c === void 0 ? void 0 : _c.actions) !== null && _d !== void 0 ? _d : [];
50
+ const rulesMapping = new Rule(rules, this._object).mapping();
51
+ for (let action of actions) {
52
+ const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate();
53
+ if (conditionEvaluation) {
54
+ const actions = new Action(action, rulesMapping, this._object, this._takeAction);
55
+ yield actions.execute();
56
+ }
57
+ }
58
+ sourceIndex++;
41
59
  }
60
+ paramIndex++;
42
61
  }
43
- sourceIndex++;
62
+ return this._object.API_CONFIG;
63
+ }
64
+ else {
65
+ return this._object.API_CONFIG;
44
66
  }
45
- paramIndex++;
46
67
  }
47
- return this._object.FIELD_CONFIG;
68
+ else {
69
+ return this._object.API_CONFIG;
70
+ }
48
71
  });
49
72
  }
50
73
  validateRequestBody() {
51
74
  var _a;
52
75
  return __awaiter(this, void 0, void 0, function* () {
53
- const body = this._request.body;
54
- const validation = body.validation;
55
- const triggers = validation.triggers;
56
- const rules = validation.rules;
57
- const actions = (_a = validation) === null || _a === void 0 ? void 0 : _a.actions;
58
- const rulesMapping = new Rule(rules, this._object).mapping();
59
- for (let action of actions) {
60
- const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
61
- if (conditionSuccess) {
62
- const actions = new Action(action, rulesMapping, this._object, this._takeAction);
63
- yield actions.execute();
76
+ if (checkObjectKeyExists(this._request, "body")) {
77
+ if (checkObjectKeyExists(this._request.body, "validation")) {
78
+ const body = this._request.body;
79
+ const validation = body.validation;
80
+ const triggers = validation.triggers;
81
+ const rules = validation.rules;
82
+ const actions = (_a = validation) === null || _a === void 0 ? void 0 : _a.actions;
83
+ const rulesMapping = new Rule(rules, this._object).mapping();
84
+ for (let action of actions) {
85
+ const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
86
+ if (conditionSuccess) {
87
+ const actions = new Action(action, rulesMapping, this._object, this._takeAction);
88
+ yield actions.execute();
89
+ }
90
+ }
91
+ return this._object.API_CONFIG;
92
+ }
93
+ else {
94
+ return this._object.API_CONFIG;
64
95
  }
65
96
  }
66
- return this._object.FIELD_CONFIG;
97
+ else {
98
+ return this._object.API_CONFIG;
99
+ }
67
100
  });
68
101
  }
69
102
  setRequestHeaders() {
@@ -80,7 +113,7 @@ export class Apis {
80
113
  const sources = new Source(this._object);
81
114
  const value = sources.getValueFromSource(source);
82
115
  // Set the Value of current source.
83
- this._object.FIELD_CONFIG = setValueToObjectPath(this._object.FIELD_CONFIG, `api.request.headers.params[${paramIndex}].sources[${sourceIndex}].value`, value);
116
+ this._object.API_CONFIG = setValueToObjectPath(this._object.API_CONFIG, `request.headers.params[${paramIndex}].sources[${sourceIndex}].value`, value);
84
117
  const validation = source.validation;
85
118
  const triggers = (_a = validation === null || validation === void 0 ? void 0 : validation.triggers) !== null && _a !== void 0 ? _a : [];
86
119
  const rules = (_b = validation === null || validation === void 0 ? void 0 : validation.rules) !== null && _b !== void 0 ? _b : [];
@@ -97,14 +130,14 @@ export class Apis {
97
130
  }
98
131
  paramIndex++;
99
132
  }
100
- return this._object.FIELD_CONFIG;
133
+ return this._object.API_CONFIG;
101
134
  }
102
135
  else {
103
- return this._object.FIELD_CONFIG;
136
+ return this._object.API_CONFIG;
104
137
  }
105
138
  }
106
139
  else {
107
- return this._object.FIELD_CONFIG;
140
+ return this._object.API_CONFIG;
108
141
  }
109
142
  });
110
143
  }
@@ -126,23 +159,41 @@ export class Apis {
126
159
  yield actions.execute();
127
160
  }
128
161
  }
129
- return this._object.FIELD_CONFIG;
162
+ return this._object.API_CONFIG;
130
163
  }
131
164
  else {
132
- return this._object.FIELD_CONFIG;
165
+ return this._object.API_CONFIG;
133
166
  }
134
167
  }
135
168
  else {
136
- return this._object.FIELD_CONFIG;
169
+ return this._object.API_CONFIG;
137
170
  }
138
171
  });
139
172
  }
140
173
  validateResponse() {
141
174
  return __awaiter(this, void 0, void 0, function* () {
142
- const validation = this._response.validation;
143
- const triggers = validation.triggers;
175
+ if (checkObjectKeyExists(this._response, "validation")) {
176
+ const validation = this._response.validation;
177
+ const triggers = validation.triggers;
178
+ const rules = validation.rules;
179
+ const actions = validation.actions;
180
+ const rulesMapping = new Rule(rules, this._object).mapping();
181
+ for (let action of actions) {
182
+ const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
183
+ if (conditionSuccess) {
184
+ const actions = new Action(action, rulesMapping, this._object, this._takeAction);
185
+ yield actions.execute();
186
+ }
187
+ }
188
+ }
189
+ return this._object.API_CONFIG;
190
+ });
191
+ }
192
+ callNextApi(validation) {
193
+ var _a;
194
+ return __awaiter(this, void 0, void 0, function* () {
144
195
  const rules = validation.rules;
145
- const actions = validation.actions;
196
+ const actions = (_a = validation) === null || _a === void 0 ? void 0 : _a.actions;
146
197
  const rulesMapping = new Rule(rules, this._object).mapping();
147
198
  for (let action of actions) {
148
199
  const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
@@ -151,10 +202,12 @@ export class Apis {
151
202
  yield actions.execute();
152
203
  }
153
204
  }
154
- return this._object.FIELD_CONFIG;
155
205
  });
156
206
  }
157
207
  }
208
+ __decorate([
209
+ logMethod
210
+ ], Apis.prototype, "setUrl", null);
158
211
  __decorate([
159
212
  logMethod
160
213
  ], Apis.prototype, "setRequestBody", null);
@@ -170,4 +223,7 @@ __decorate([
170
223
  __decorate([
171
224
  logMethod
172
225
  ], Apis.prototype, "validateResponse", null);
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaXMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixvQkFBb0IsRUFDcEIsTUFBTSxFQUtQLE1BQU0sZ0JBQWdCLENBQUM7QUFjeEIsTUFBTSxPQUFPLElBQUk7SUFnQmYsWUFBWSxNQUFXLEVBQUUsVUFBZTtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxDQUFDO0lBdEJELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBb0JZLGNBQWM7OztZQUN6QixJQUFJLE1BQU0sR0FBZ0Ms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aUIsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM3QyxNQUFNLE9BQU8sR0FBb0IsVUFBa0IsQ0FBQyxPQUFPLENBQUM7WUFFNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWIsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29CQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN6QjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNuQyxDQUFDO0tBQUE7Q0FDRjtBQTNOQztJQURDLFNBQVM7MENBcURUO0FBR0Q7SUFEQyxTQUFTOytDQStCVDtBQUdEO0lBREMsU0FBUzs2Q0E2RFQ7QUFHRDtJQURDLFNBQVM7a0RBcUNUO0FBR0Q7SUFEQyxTQUFTOzRDQTZCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIENvbmRpdGlvbixcbiAgbG9nTWV0aG9kLFxuICBSdWxlLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aCxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgVFNvdXJjZSxcbiAgVFZhbGlkYXRpb25cbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQge1xuICBUQXBpLFxuICBUQXBpUmVxdWVzdCxcbiAgVEFwaVJlcXVlc3RCb2R5LFxuICBUQXBpUmVxdWVzdEJvZHlQYXJhbSxcbiAgVEFwaVJlcXVlc3RIZWFkZXJzLFxuICBUQXBpUmVxdWVzdEhlYWRlcnNQYXJhbSxcbiAgVEFwaVJlc3BvbnNlLFxuICBUQXBpU3RhdHVzXG59IGZyb20gXCIuLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYXBpcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBURmllbGRBcGlDYWxsIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2Zvcm0tdmlldy5maWVsZHMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgVFRyaWdnZXIgfSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LnRyaWdnZXJzLmRlZmluaXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIEFwaXMge1xuICBwcml2YXRlIF9vYmplY3Q6IGFueTtcbiAgZ2V0IG9iamVjdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9vYmplY3Q7XG4gIH1cbiAgc2V0IG9iamVjdCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fb2JqZWN0ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWtlQWN0aW9uOiBGdW5jdGlvbjtcblxuICBwcml2YXRlIF9hcGk6IFRBcGk7XG4gIHByaXZhdGUgX3JlcXVlc3Q6IFRBcGlSZXF1ZXN0O1xuICBwcml2YXRlIF9yZXNwb25zZTogVEFwaVJlc3BvbnNlO1xuICBwcml2YXRlIF9zdGF0dXM6IFRBcGlTdGF0dXM7XG5cbiAgY29uc3RydWN0b3Iob2JqZWN0OiBhbnksIHRha2VBY3Rpb246IGFueSkge1xuICAgIHRoaXMuX29iamVjdCA9IG9iamVjdDtcbiAgICB0aGlzLl90YWtlQWN0aW9uID0gdGFrZUFjdGlvbjtcblxuICAgIHRoaXMuX2FwaSA9IHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUcuYXBpO1xuICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHLmFwaS5yZXF1ZXN0O1xuICAgIHRoaXMuX3Jlc3BvbnNlID0gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRy5hcGkucmVzcG9uc2U7XG4gICAgdGhpcy5fc3RhdHVzID0gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRy5hcGkuc3RhdHVzO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgc2V0UmVxdWVzdEJvZHkoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgbGV0IHBhcmFtczogQXJyYXk8VEFwaVJlcXVlc3RCb2R5UGFyYW0+ID0gdGhpcy5fcmVxdWVzdC5ib2R5LnBhcmFtcztcblxuICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBwYXJhbSBvZiBwYXJhbXMpIHtcbiAgICAgIGxldCBzb3VyY2VzOiBBcnJheTxUU291cmNlPiA9IHBhcmFtLnNvdXJjZXM7XG5cbiAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7XG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZSh0aGlzLl9vYmplY3QpO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgLy8gU2V0IHRoZSBWYWx1ZSBvZiBjdXJyZW50IHNvdXJjZS5cbiAgICAgICAgdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUcsXG4gICAgICAgICAgYGFwaS5yZXF1ZXN0LmJvZHkucGFyYW1zWyR7cGFyYW1JbmRleH1dLnNvdXJjZXNbJHtzb3VyY2VJbmRleH1dLnZhbHVlYCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb246IFRWYWxpZGF0aW9uID0gKHNvdXJjZSBhcyBhbnkpLnZhbGlkYXRpb247XG5cbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24/LnRyaWdnZXJzID8/IFtdO1xuICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbj8ucnVsZXMgPz8gW107XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucyA/PyBbXTtcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUluZGV4Kys7XG4gICAgICB9XG5cbiAgICAgIHBhcmFtSW5kZXgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlUmVxdWVzdEJvZHkoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgY29uc3QgYm9keTogVEFwaVJlcXVlc3RCb2R5ID0gdGhpcy5fcmVxdWVzdC5ib2R5O1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSBib2R5LnZhbGlkYXRpb247XG5cbiAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbi50cmlnZ2VycztcbiAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbi5ydWxlcztcbiAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9ICh2YWxpZGF0aW9uIGFzIGFueSk/LmFjdGlvbnM7XG5cbiAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyBzZXRSZXF1ZXN0SGVhZGVycygpOiBQcm9taXNlPFRGaWVsZEFwaUNhbGw+IHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdCwgXCJoZWFkZXJzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdC5oZWFkZXJzLCBcInBhcmFtc1wiKSkge1xuICAgICAgICBsZXQgcGFyYW1zOiBBcnJheTxUQXBpUmVxdWVzdEhlYWRlcnNQYXJhbT4gPVxuICAgICAgICAgIHRoaXMuX3JlcXVlc3QuaGVhZGVycy5wYXJhbXM7XG4gICAgICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgbGV0IHNvdXJjZXM6IEFycmF5PFRTb3VyY2U+ID0gcGFyYW0uc291cmNlcztcblxuICAgICAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHRoaXMuX29iamVjdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgVmFsdWUgb2YgY3VycmVudCBzb3VyY2UuXG4gICAgICAgICAgICB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICAgIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUcsXG4gICAgICAgICAgICAgIGBhcGkucmVxdWVzdC5oZWFkZXJzLnBhcmFtc1ske3BhcmFtSW5kZXh9XS5zb3VyY2VzWyR7c291cmNlSW5kZXh9XS52YWx1ZWAsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uOiBUVmFsaWRhdGlvbiA9IChzb3VyY2UgYXMgYW55KS52YWxpZGF0aW9uO1xuXG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbj8udHJpZ2dlcnMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbj8ucnVsZXMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9ICh2YWxpZGF0aW9uIGFzIGFueSk/LmFjdGlvbnMgPz8gW107XG5cbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbiA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgICAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNvdXJjZUluZGV4Kys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyYW1JbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVSZXF1ZXN0SGVhZGVycygpOiBQcm9taXNlPFRGaWVsZEFwaUNhbGw+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBUQXBpUmVxdWVzdEhlYWRlcnMgPSB0aGlzLl9yZXF1ZXN0LmhlYWRlcnM7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QsIFwiaGVhZGVyc1wiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QuaGVhZGVycywgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb246IFRWYWxpZGF0aW9uID0gaGVhZGVycy52YWxpZGF0aW9uO1xuXG4gICAgICAgIGNvbnN0IHRyaWdnZXJzOiBBcnJheTxUVHJpZ2dlcj4gPSB2YWxpZGF0aW9uLnRyaWdnZXJzO1xuICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbi5ydWxlcztcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpPy5hY3Rpb25zO1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICAgICAgdGhpcy5fdGFrZUFjdGlvblxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlUmVzcG9uc2UoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSB0aGlzLl9yZXNwb25zZS52YWxpZGF0aW9uO1xuXG4gICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24udHJpZ2dlcnM7XG4gICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IHZhbGlkYXRpb24ucnVsZXM7XG4gICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpLmFjdGlvbnM7XG5cbiAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gIH1cbn1cbiJdfQ==
226
+ __decorate([
227
+ logMethod
228
+ ], Apis.prototype, "callNextApi", null);
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaXMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixvQkFBb0IsRUFDcEIsTUFBTSxFQUtQLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQU9uQixNQUFNLDBDQUEwQyxDQUFDO0FBSWxELE1BQU0sT0FBTyxJQUFJO0lBY2YsWUFBWSxNQUFXLEVBQUUsVUFBZTtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBbEJELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBZ0JZLE1BQU07O1lBQ2pCLElBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFVBQVUsRUFDeEQ7Z0JBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3JDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzNFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMxRTtZQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDakMsQ0FBQztLQUFBO0lBR1ksY0FBYzs7O1lBQ3pCLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDL0MsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDekQsSUFBSSxNQUFNLEdBQWdDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFFcEUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO29CQUNuQixLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRTt3QkFDeEIsSUFBSSxPQUFPLEdBQW1CLEtBQUssQ0FBQyxPQUFPLENBQUM7d0JBRTVDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQzt3QkFDcEIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7NEJBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFFekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNqRCxtQ0FBbUM7NEJBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFDdkIsdUJBQXVCLFVBQVUsYUFBYSxXQUFXLFNBQVMsRUFDbEUsS0FBSyxDQUNOLENBQUM7NEJBRUYsTUFBTSxVQUFVLEdBQWlCLE1BQWMsQ0FBQyxVQUFVLENBQUM7NEJBRTNELE1BQU0sUUFBUSxHQUFvQixNQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxRQUFRLG1DQUFJLEVBQUUsQ0FBQzs0QkFDN0QsTUFBTSxLQUFLLEdBQWlCLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLEtBQUssbUNBQUksRUFBRSxDQUFDOzRCQUNwRCxNQUFNLE9BQU8sR0FBbUIsTUFBQSxNQUFDLFVBQWtCLDBDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDOzRCQUVuRSxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtnQ0FDMUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FDdkMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBRWIsSUFBSSxtQkFBbUIsRUFBRTtvQ0FDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29DQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lDQUN6Qjs2QkFDRjs0QkFFRCxXQUFXLEVBQUUsQ0FBQzt5QkFDZjt3QkFFRCxVQUFVLEVBQUUsQ0FBQztxQkFDZDtvQkFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNoQzthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDaEM7O0tBQ0Y7SUFHWSxtQkFBbUI7OztZQUM5QixJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQy9DLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUU7b0JBQzFELE1BQU0sSUFBSSxHQUFvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFFakQsTUFBTSxVQUFVLEdBQWdCLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBRWhELE1BQU0sUUFBUSxHQUFvQixVQUFVLENBQUMsUUFBUSxDQUFDO29CQUN0RCxNQUFNLEtBQUssR0FBaUIsVUFBVSxDQUFDLEtBQUssQ0FBQztvQkFDN0MsTUFBTSxPQUFPLEdBQW1CLE1BQUMsVUFBa0IsMENBQUUsT0FBTyxDQUFDO29CQUU3RCxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTt3QkFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBRWIsSUFBSSxnQkFBZ0IsRUFBRTs0QkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDOzRCQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUN6QjtxQkFDRjtvQkFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNoQzthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDaEM7O0tBQ0Y7SUFHWSxpQkFBaUI7OztZQUM1QixJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ2xELElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQ3pELElBQUksTUFBTSxHQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDL0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO29CQUNuQixLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRTt3QkFDeEIsSUFBSSxPQUFPLEdBQW1CLEtBQUssQ0FBQyxPQUFPLENBQUM7d0JBRTVDLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQzt3QkFDcEIsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7NEJBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFFekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNqRCxtQ0FBbUM7NEJBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFDdkIsMEJBQTBCLFVBQVUsYUFBYSxXQUFXLFNBQVMsRUFDckUsS0FBSyxDQUNOLENBQUM7NEJBRUYsTUFBTSxVQUFVLEdBQWlCLE1BQWMsQ0FBQyxVQUFVLENBQUM7NEJBRTNELE1BQU0sUUFBUSxHQUFvQixNQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxRQUFRLG1DQUFJLEVBQUUsQ0FBQzs0QkFDN0QsTUFBTSxLQUFLLEdBQWlCLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLEtBQUssbUNBQUksRUFBRSxDQUFDOzRCQUNwRCxNQUFNLE9BQU8sR0FBbUIsTUFBQSxNQUFDLFVBQWtCLDBDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDOzRCQUVuRSxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtnQ0FDMUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FDdkMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBRWIsSUFBSSxtQkFBbUIsRUFBRTtvQ0FDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29DQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lDQUN6Qjs2QkFDRjs0QkFFRCxXQUFXLEVBQUUsQ0FBQzt5QkFDZjt3QkFFRCxVQUFVLEVBQUUsQ0FBQztxQkFDZDtvQkFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO2lCQUNoQzthQUNGO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDaEM7O0tBQ0Y7SUFHWSxzQkFBc0I7OztZQUNqQyxNQUFNLE9BQU8sR0FBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDMUQsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQUNsRCxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFO29CQUM3RCxNQUFNLFVBQVUsR0FBZ0IsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFFbkQsTUFBTSxRQUFRLEdBQW9CLFVBQVUsQ0FBQyxRQUFRLENBQUM7b0JBQ3RELE1BQU0sS0FBSyxHQUFpQixVQUFVLENBQUMsS0FBSyxDQUFDO29CQUM3QyxNQUFNLE9BQU8sR0FBbUIsTUFBQyxVQUFrQiwwQ0FBRSxPQUFPLENBQUM7b0JBRTdELE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBRTdELEtBQUssSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO3dCQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksU0FBUyxDQUNwQyxNQUFNLENBQUMsU0FBUyxFQUNoQixZQUFZLENBQ2IsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFFYixJQUFJLGdCQUFnQixFQUFFOzRCQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FDeEIsTUFBTSxFQUNOLFlBQVksRUFDWixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7NEJBRUYsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3pCO3FCQUNGO29CQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7aUJBQ2hDO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQzthQUNoQzs7S0FDRjtJQUdZLGdCQUFnQjs7WUFDM0IsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUN0RCxNQUFNLFVBQVUsR0FBZ0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQzFELE1BQU0sUUFBUSxHQUFvQixVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUN0RCxNQUFNLEtBQUssR0FBaUIsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQW9CLFVBQWtCLENBQUMsT0FBTyxDQUFDO2dCQUU1RCxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtvQkFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRWIsSUFBSSxnQkFBZ0IsRUFBRTt3QkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO3dCQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3FCQUN6QjtpQkFDRjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNqQyxDQUFDO0tBQUE7SUFHWSxXQUFXLENBQUMsVUFBdUI7OztZQUM5QyxNQUFNLEtBQUssR0FBaUIsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM3QyxNQUFNLE9BQU8sR0FBbUIsTUFBQyxVQUFrQiwwQ0FBRSxPQUFPLENBQUM7WUFFN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWIsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29CQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN6QjthQUNGOztLQUNGO0NBQ0Y7QUF4UkM7SUFEQyxTQUFTO2tDQWdCVDtBQUdEO0lBREMsU0FBUzswQ0E2RFQ7QUFHRDtJQURDLFNBQVM7K0NBdUNUO0FBR0Q7SUFEQyxTQUFTOzZDQTZEVDtBQUdEO0lBREMsU0FBUztrREFxQ1Q7QUFHRDtJQURDLFNBQVM7NENBOEJUO0FBR0Q7SUFEQyxTQUFTO3VDQXdCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIENvbmRpdGlvbixcbiAgbG9nTWV0aG9kLFxuICBSdWxlLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aCxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgVFNvdXJjZSxcbiAgVFZhbGlkYXRpb25cbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQge1xuICBFQXBpUmVxdWVzdFVybFR5cGUsXG4gIFRBcGlSZXF1ZXN0LFxuICBUQXBpUmVxdWVzdEJvZHksXG4gIFRBcGlSZXF1ZXN0Qm9keVBhcmFtLFxuICBUQXBpUmVxdWVzdEhlYWRlcnMsXG4gIFRBcGlSZXF1ZXN0SGVhZGVyc1BhcmFtLFxuICBUQXBpUmVzcG9uc2Vcbn0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hcGlzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IFRGaWVsZEFwaUNhbGwgfSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBUVHJpZ2dlciB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcudHJpZ2dlcnMuZGVmaW5pdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQXBpcyB7XG4gIHByaXZhdGUgX29iamVjdDogYW55O1xuICBnZXQgb2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX29iamVjdDtcbiAgfVxuICBzZXQgb2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9vYmplY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Rha2VBY3Rpb246IEZ1bmN0aW9uO1xuXG4gIHByaXZhdGUgX3JlcXVlc3Q6IFRBcGlSZXF1ZXN0O1xuICBwcml2YXRlIF9yZXNwb25zZTogVEFwaVJlc3BvbnNlO1xuXG4gIGNvbnN0cnVjdG9yKG9iamVjdDogYW55LCB0YWtlQWN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLl9vYmplY3QgPSBvYmplY3Q7XG4gICAgdGhpcy5fdGFrZUFjdGlvbiA9IHRha2VBY3Rpb247XG5cbiAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUcucmVxdWVzdDtcbiAgICB0aGlzLl9yZXNwb25zZSA9IHRoaXMuX29iamVjdC5BUElfQ09ORklHLnJlc3BvbnNlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgc2V0VXJsKCk6IFByb21pc2U8VEZpZWxkQXBpQ2FsbD4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3JlcXVlc3QudXJsLmhhc093blByb3BlcnR5KFwidHlwZVwiKSAmJlxuICAgICAgdGhpcy5fcmVxdWVzdC51cmwudHlwZSA9PT0gRUFwaVJlcXVlc3RVcmxUeXBlLkNBTENVTEFURURcbiAgICApIHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2UodGhpcy5fb2JqZWN0KTtcbiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgIHRoaXMuX3JlcXVlc3QudXJsLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3JlcXVlc3QudXJsID0gc2V0VmFsdWVUb09iamVjdFBhdGgodGhpcy5fcmVxdWVzdC51cmwsIFwidmFsdWVcIiwgdXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVxdWVzdC51cmwgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aCh7fSwgXCJ2YWx1ZVwiLCB0aGlzLl9yZXF1ZXN0LnVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgc2V0UmVxdWVzdEJvZHkoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QsIFwiYm9keVwiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QuaGVhZGVycywgXCJwYXJhbXNcIikpIHtcbiAgICAgICAgbGV0IHBhcmFtczogQXJyYXk8VEFwaVJlcXVlc3RCb2R5UGFyYW0+ID0gdGhpcy5fcmVxdWVzdC5ib2R5LnBhcmFtcztcblxuICAgICAgICBsZXQgcGFyYW1JbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgICAgIGxldCBzb3VyY2VzOiBBcnJheTxUU291cmNlPiA9IHBhcmFtLnNvdXJjZXM7XG5cbiAgICAgICAgICBsZXQgc291cmNlSW5kZXggPSAwO1xuICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZSh0aGlzLl9vYmplY3QpO1xuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZXMuZ2V0VmFsdWVGcm9tU291cmNlKHNvdXJjZSk7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIFZhbHVlIG9mIGN1cnJlbnQgc291cmNlLlxuICAgICAgICAgICAgdGhpcy5fb2JqZWN0LkFQSV9DT05GSUcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0LkFQSV9DT05GSUcsXG4gICAgICAgICAgICAgIGByZXF1ZXN0LmJvZHkucGFyYW1zWyR7cGFyYW1JbmRleH1dLnNvdXJjZXNbJHtzb3VyY2VJbmRleH1dLnZhbHVlYCxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb246IFRWYWxpZGF0aW9uID0gKHNvdXJjZSBhcyBhbnkpLnZhbGlkYXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJzOiBBcnJheTxUVHJpZ2dlcj4gPSB2YWxpZGF0aW9uPy50cmlnZ2VycyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uPy5ydWxlcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucyA/PyBbXTtcblxuICAgICAgICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUocnVsZXMsIHRoaXMuX29iamVjdCkubWFwcGluZygpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc291cmNlSW5kZXgrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJhbUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZVJlcXVlc3RCb2R5KCk6IFByb21pc2U8VEZpZWxkQXBpQ2FsbD4ge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LCBcImJvZHlcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LmJvZHksIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICBjb25zdCBib2R5OiBUQXBpUmVxdWVzdEJvZHkgPSB0aGlzLl9yZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSBib2R5LnZhbGlkYXRpb247XG5cbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24udHJpZ2dlcnM7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uLnJ1bGVzO1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9ICh2YWxpZGF0aW9uIGFzIGFueSk/LmFjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUocnVsZXMsIHRoaXMuX29iamVjdCkubWFwcGluZygpO1xuXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0LFxuICAgICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyBzZXRSZXF1ZXN0SGVhZGVycygpOiBQcm9taXNlPFRGaWVsZEFwaUNhbGw+IHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdCwgXCJoZWFkZXJzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdC5oZWFkZXJzLCBcInBhcmFtc1wiKSkge1xuICAgICAgICBsZXQgcGFyYW1zOiBBcnJheTxUQXBpUmVxdWVzdEhlYWRlcnNQYXJhbT4gPVxuICAgICAgICAgIHRoaXMuX3JlcXVlc3QuaGVhZGVycy5wYXJhbXM7XG4gICAgICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgbGV0IHNvdXJjZXM6IEFycmF5PFRTb3VyY2U+ID0gcGFyYW0uc291cmNlcztcblxuICAgICAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHRoaXMuX29iamVjdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgVmFsdWUgb2YgY3VycmVudCBzb3VyY2UuXG4gICAgICAgICAgICB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgICB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRyxcbiAgICAgICAgICAgICAgYHJlcXVlc3QuaGVhZGVycy5wYXJhbXNbJHtwYXJhbUluZGV4fV0uc291cmNlc1ske3NvdXJjZUluZGV4fV0udmFsdWVgLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSAoc291cmNlIGFzIGFueSkudmFsaWRhdGlvbjtcblxuICAgICAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24/LnRyaWdnZXJzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IHZhbGlkYXRpb24/LnJ1bGVzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpPy5hY3Rpb25zID8/IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0LFxuICAgICAgICAgICAgICAgICAgdGhpcy5fdGFrZUFjdGlvblxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzb3VyY2VJbmRleCsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmFtSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5BUElfQ09ORklHO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlUmVxdWVzdEhlYWRlcnMoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgY29uc3QgaGVhZGVyczogVEFwaVJlcXVlc3RIZWFkZXJzID0gdGhpcy5fcmVxdWVzdC5oZWFkZXJzO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LCBcImhlYWRlcnNcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LmhlYWRlcnMsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uOiBUVmFsaWRhdGlvbiA9IGhlYWRlcnMudmFsaWRhdGlvbjtcblxuICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbi50cmlnZ2VycztcbiAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IHZhbGlkYXRpb24ucnVsZXM7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucztcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZVJlc3BvbnNlKCk6IFByb21pc2U8VEZpZWxkQXBpQ2FsbD4ge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uOiBUVmFsaWRhdGlvbiA9IHRoaXMuX3Jlc3BvbnNlLnZhbGlkYXRpb247XG4gICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbi50cmlnZ2VycztcbiAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uLnJ1bGVzO1xuICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpLmFjdGlvbnM7XG5cbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgY2FsbE5leHRBcGkodmFsaWRhdGlvbjogVFZhbGlkYXRpb24pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uLnJ1bGVzO1xuICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucztcblxuICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgdGhpcy5fb2JqZWN0LFxuICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==