@agilemotion/oui-react-js 2.0.6 → 2.0.8

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.
@@ -122,7 +122,13 @@ const BaseField = props => {
122
122
  props.form().setFieldValidity(config.id || config.dataBinding, {
123
123
  valid: result.valid,
124
124
  message: result.message,
125
- forceMarker: result.forceMarker
125
+ forceMarker: result.forceMarker,
126
+ onValidityChange: (valid, errorMessage) => {
127
+ if (_ApplicationManager.default.isFormMarkersEnabled()) {
128
+ setErrorMessage(errorMessage);
129
+ setHasError(!valid);
130
+ }
131
+ }
126
132
  });
127
133
  }
128
134
  return result.valid;
@@ -161,6 +167,32 @@ const BaseField = props => {
161
167
  props.form().handleChange(config.dataBinding || config.id, val);
162
168
  }
163
169
  }
170
+
171
+ // Self-announce: validate this field against current data and push
172
+ // verdict to the form's validity register via setFieldValidity (in
173
+ // doValidation). Markers are suppressed locally so initial-load
174
+ // validation never flashes error UI — even if global markers are
175
+ // already on (e.g. async data arriving after Form's COMPONENT_LOAD
176
+ // already re-enabled markers). Cache makes repeat self-
177
+ // announcements cheap when (currentValue, required, markers)
178
+ // tuple is unchanged.
179
+ const previouslyEnabled = _ApplicationManager.default.isFormMarkersEnabled();
180
+ if (previouslyEnabled) {
181
+ _ApplicationManager.default.enableFormMarkers(false);
182
+ }
183
+ try {
184
+ const cv = !_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject) ? path.valueObject[path.valueProperty] : null;
185
+ // Run inbound valueParser so fields whose parser synthesises
186
+ // a default for null input (e.g. RadioGroup → defaultValue)
187
+ // are validated against their semantic value, not the raw
188
+ // model. bind() does the same for non-null model values.
189
+ const cvForValidation = !_Utils.default.isNull(props.valueParser) ? props.valueParser(cv, true) : cv;
190
+ doValidation(props.values, cvForValidation);
191
+ } finally {
192
+ if (previouslyEnabled) {
193
+ _ApplicationManager.default.enableFormMarkers(true);
194
+ }
195
+ }
164
196
  }
165
197
  }, [props.values, config]);
166
198
  _react.default.useEffect(() => {
@@ -379,4 +411,4 @@ const BaseField = props => {
379
411
  }))) : null;
380
412
  };
381
413
  exports.BaseField = BaseField;
382
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfRHluYW1pY0pTIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQmFzZUZpZWxkIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIlJlYWN0IiwidXNlU3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJ2YWx1ZU9iamVjdCIsInNldFZhbHVlT2JqZWN0IiwidmFsdWVQcm9wZXJ0eSIsInNldFZhbHVlUHJvcGVydHkiLCJsb2FkaW5nUmVmIiwidXNlUmVmIiwiY29uZmlnIiwic2V0Q29uZmlnIiwidmFsdWUiLCJzZXRWYWx1ZSIsIlV0aWxzIiwiaXNOdWxsIiwidmFsdWVSZWYiLCJzZWxlY3RPcHRpb25zIiwic2V0U2VsZWN0T3B0aW9ucyIsImRpc2FibGVkIiwic2V0RGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInJlcXVpcmVkIiwic2V0UmVxdWlyZWQiLCJtaW5EYXRlIiwic2V0TWluRGF0ZSIsIm1heERhdGUiLCJzZXRNYXhEYXRlIiwicmVzZXRTd2l0Y2giLCJzZXRSZXNldFN3aXRjaCIsInZhbGlkYXRlT25DaGFuZ2UiLCJpbml0aWFsVmFsdWVCb3VuZCIsInJlZiIsInZhbGlkIiwibGFzdFZhbGlkYXRpb24iLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiYmluZCIsImJvdW5kVmFsdWUiLCJmaWVsZFR5cGUiLCJpZCIsInZhbHVlUGFyc2VyIiwiZm9ybSIsInZhbGlkYXRlUGFyZW50IiwiZGF0YUJpbmRpbmciLCJkb1ZhbGlkYXRpb24iLCJ2YWx1ZXMiLCJjdXJyZW50VmFsdWUiLCJtYXJrZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJsYXN0IiwicGF0aCIsImdldFZhbHVlUGF0aCIsInJlc3VsdCIsInZhbGlkYXRvciIsInNjcmlwdCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHRPYmplY3QiLCJjb25jYXQiLCJtZXNzYWdlIiwidmFsaWRhdGVGaWVsZCIsImZvcmNlTWFya2VyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVmFsaWRpdHkiLCJoYW5kbGUiLCJhcGkiLCJwYXJzZWRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImV2ZW50TWFuYWdlciIsImFkZFN1YnNjcmlwdGlvbnMiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJldmVudCIsIkV2ZW50IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiQ09NUE9ORU5UX0xPQUQiLCJzY3JpcHRWYWx1ZSIsImlzRXhwcmVzc2lvbiIsImV4ZWN1dGVTY3JpcHQiLCJyZXBsYWNlIiwidmFsIiwiaW5zdGFuY2VUeXBlIiwiaGFuZGxlQ2hhbmdlIiwiZmllbGQiLCJhZGRGaWVsZCIsInBhcmVudElkIiwiYmluZFZhbHVlVG9Gb3JtIiwiZXJyb3IiLCJsZW5ndGgiLCJjbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzIiwicmVtb3ZlRmllbGQiLCJoYW5kbGVWYWx1ZUNoYW5nZSIsIm5ld1ZhbHVlIiwidmFsdWVDaGFuZ2VkIiwiSlNPTiIsInN0cmluZ2lmeSIsInNwbGljZSIsIm5ld1ZhbHVlRWxlbWVudCIsInB1c2giLCJzZWxlY3RJdGVtQ2hhbmdlIiwiaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSIsInNlbGVjdE9wdGlvbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIlZBTFVFX0NIQU5HRSIsInZhbGlkYXRlIiwicGFyc2VWYWx1ZSIsImluYm91bmQiLCJyb3dzIiwicm93c0hhbmRsZXIiLCJnZXRWYWxpZGF0aW9uR3JvdXAiLCJncm91cCIsImNsZWFyIiwiY2xlYXJIYW5kbGVyIiwic2Nyb2xsVG8iLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJ2YWx1ZUNoYW5nZUNhbGxiYWNrIiwiaGFuZGxlTG9hZENvbXBsZXRlIiwicmVmcmVzaCIsInJlcXVpcmVkTmV3VmFsIiwibnVsbGFibGUiLCJpc1JlcXVpcmVkIiwicmVzZXQiLCJzZXRGaWVsZFJlcXVpcmVkIiwibmV3VmFsIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZ2V0Q2hpbGRyZW4iLCJsb2FkRGF0YSIsImxvYWREYXRhSGFuZGxlciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJrZXkiLCJzdHlsZSIsInRleHRBbGlnbiIsIm1hcmdpbkxlZnQiLCJhdHRyaWJ1dGVzIiwiaW5kZXgiLCJkaXNwbGF5IiwiZ2V0Q29tcG9uZW50QXR0cmlidXRlIiwiY2hpbGRyZW4iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vQmFzZUZpZWxkLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi4vLi4vZXZlbnQvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQgRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuXG5leHBvcnQgY29uc3QgQmFzZUZpZWxkID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2Vycm9yTWVzc2FnZSwgc2V0RXJyb3JNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbdmFsdWVPYmplY3QsIHNldFZhbHVlT2JqZWN0XSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbdmFsdWVQcm9wZXJ0eSwgc2V0VmFsdWVQcm9wZXJ0eV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBsb2FkaW5nUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICAgIGNvbnN0IFtjb25maWcsIHNldENvbmZpZ10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICAvLyBUT0RPIDogUmVwbGFjZSB0aGUgc3RhdGUgdmFsdWUgd2l0aCB0aGUgdmFsdWVSZWYgYmVsb3cuIFRoZSBzdGF0ZSB2YWx1ZSBpcyBvY2NhdGlvbmFseSBub3QgYXZhaWxhYmxlIGluIHRpbWUgZm9yIGV2ZW50IHNjcmlwdHNcbiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKCFVdGlscy5pc051bGwocHJvcHMudmFsdWUpID8gcHJvcHMudmFsdWUgOiBudWxsKTtcbiAgICAvLyBUT0RPIDogUmVwbGFjZSB0aGUgc3RhdGUgdmFsdWUgd2l0aCB0aGlzIHJlZiBmb3IgdGhlIHJlYXNvbiBtZW5zaW9uZWQgYWJvdmVcbiAgICBjb25zdCB2YWx1ZVJlZiA9IFJlYWN0LnVzZVJlZighVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlKSA/IHByb3BzLnZhbHVlIDogbnVsbCk7XG4gICAgY29uc3QgW3NlbGVjdE9wdGlvbnMsIHNldFNlbGVjdE9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtkaXNhYmxlZCwgc2V0RGlzYWJsZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcmVxdWlyZWQsIHNldFJlcXVpcmVkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttaW5EYXRlLCBzZXRNaW5EYXRlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFttYXhEYXRlLCBzZXRNYXhEYXRlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtyZXNldFN3aXRjaCwgc2V0UmVzZXRTd2l0Y2hdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHZhbGlkYXRlT25DaGFuZ2UgPSBSZWFjdC51c2VSZWYoKTtcbiAgICBjb25zdCBpbml0aWFsVmFsdWVCb3VuZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHZhbGlkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAvLyBNZW1vIG9mIHRoZSBsYXN0IChjdXJyZW50VmFsdWUsIHJlcXVpcmVkLCBtYXJrZXJzKSB0dXBsZSArIGl0cyByZXN1bHQudmFsaWQuXG4gICAgLy8gZG9WYWxpZGF0aW9uIHNob3J0LWNpcmN1aXRzIHdoZW4gdGhlIGlucHV0cyBhcmUgdW5jaGFuZ2VkIHNvIHJlcGVhdGVkIHJlYWRzXG4gICAgLy8gb2YgQCN7Zm9ybX0udmFsdWUgKHdoaWNoIGl0ZXJhdGVzIGZpZWxkcyBhbmQgY2FsbHMgdmFsaWRhdGUgb24gZWFjaCBpblxuICAgIC8vIEZvcm0uanN4IGdldCB2YWx1ZSgpKSBkb24ndCBrZWVwIGZpcmluZyBzZXRFcnJvck1lc3NhZ2Uvc2V0SGFzRXJyb3IgYW5kXG4gICAgLy8gcmUtcmVuZGVyLWxvb3AgdGhlIHdob2xlIGZvcm0uXG4gICAgY29uc3QgbGFzdFZhbGlkYXRpb24gPSBSZWFjdC51c2VSZWYobnVsbCk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGJpbmQoKTtcbiAgICB9LCBbdmFsdWVPYmplY3RdKTtcblxuICAgIGZ1bmN0aW9uIGJpbmQoKSB7XG4gICAgICAgIGxldCBib3VuZFZhbHVlID0gdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV07XG4gICAgICAgIGlmIChib3VuZFZhbHVlICYmICFpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50KSB7XG4gICAgICAgICAgICBpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnTE9PS1VQJykge1xuICAgICAgICAgICAgICAgIGlmICghYm91bmRWYWx1ZSB8fCBVdGlscy5pc051bGwoYm91bmRWYWx1ZS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhbHVlUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShwcm9wcy52YWx1ZVBhcnNlcihib3VuZFZhbHVlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShib3VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBib3VuZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYocHJvcHMudmFsdWVQYXJzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocHJvcHMudmFsdWVQYXJzZXIoYm91bmRWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGJvdW5kVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBib3VuZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgYmluZCgpO1xuICAgIH0sIFt2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XV0pO1xuXG4gICAgLy8gQ2hhbmdlIHRoZSByZXF1aXJlZCB2YWx1ZSBhbmQgcmUtdmFsaWRhdGUgZmllbGQgaWYgbmVjZXNzYXJ5XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29uZmlnKSAmJiB2YWxpZGF0ZU9uQ2hhbmdlLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC52YWxpZGF0ZVBhcmVudChjb25maWcuZGF0YUJpbmRpbmcgfHwgY29uZmlnLmlkLCBkb1ZhbGlkYXRpb24ocHJvcHMudmFsdWVzLCB2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID0gbnVsbDtcbiAgICB9LCBbcmVxdWlyZWRdKTtcblxuICAgIGNvbnN0IGRvVmFsaWRhdGlvbiA9ICh2YWx1ZXMsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICBpZihjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlcnMgPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBsYXN0VmFsaWRhdGlvbi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKGxhc3QgIT09IG51bGxcbiAgICAgICAgICAgICAgICAmJiBsYXN0LmN1cnJlbnRWYWx1ZSA9PT0gY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgJiYgbGFzdC5yZXF1aXJlZCA9PT0gcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAmJiBsYXN0Lm1hcmtlcnMgPT09IG1hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdC52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhdGggPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWVQYXRoKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt2YWxpZDogdHJ1ZX07XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yKSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZy52YWxpZGF0b3Iuc2NyaXB0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGR5bmFtaWNKUy5leGVjdXRlU2NyaXB0T2JqZWN0KGAke2NvbmZpZy5pZH1WYWxpZGF0b3JgLCBjb25maWcudmFsaWRhdG9yLnNjcmlwdCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZSA/IHJlc3VsdC5tZXNzYWdlIDogY29uZmlnLnZhbGlkYXRvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFV0aWxzLnZhbGlkYXRlRmllbGQocGF0aC52YWx1ZVByb3BlcnR5LCByZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCwgY3VycmVudFZhbHVlLCBjb25maWcudmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKG1hcmtlcnMgfHwgcmVzdWx0LmZvcmNlTWFya2VyID8gcmVzdWx0Lm1lc3NhZ2UgOiAnJyk7XG4gICAgICAgICAgICBzZXRIYXNFcnJvcighcmVzdWx0LnZhbGlkICYmIChtYXJrZXJzIHx8IHJlc3VsdC5mb3JjZU1hcmtlcikpO1xuICAgICAgICAgICAgdmFsaWQuY3VycmVudCA9IHJlc3VsdC52YWxpZCAmJiAobWFya2VycyB8fCByZXN1bHQuZm9yY2VNYXJrZXIpO1xuXG4gICAgICAgICAgICBpZiAobWFya2Vycykge1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAuc2V0RmllbGRFcnJvcihjb25maWcuaWQsIHR5cGVvZiByZXN1bHQubWVzc2FnZSA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0VmFsaWRhdGlvbi5jdXJyZW50ID0geyBjdXJyZW50VmFsdWUsIHJlcXVpcmVkLCBtYXJrZXJzLCB2YWxpZDogcmVzdWx0LnZhbGlkIH07XG5cbiAgICAgICAgICAgIC8vIFB1Ymxpc2ggdG8gdGhlIGZvcm0ncyB2YWxpZGl0eSByZWdpc3Rlci4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aFxuICAgICAgICAgICAgLy8gZm9yIFwiaXMgdGhpcyBmaWVsZCB2YWxpZD9cIiDigJQgZm9ybS52YWx1ZSByZWFkcyBmcm9tIGhlcmUgd2l0aG91dFxuICAgICAgICAgICAgLy8gY2FsbGluZyBiYWNrIGludG8gdGhlIGZpZWxkIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgY2hhaW4pLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5mb3JtID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwcm9wcy5mb3JtKCkuc2V0RmllbGRWYWxpZGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKS5zZXRGaWVsZFZhbGlkaXR5KGNvbmZpZy5pZCB8fCBjb25maWcuZGF0YUJpbmRpbmcsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IHJlc3VsdC52YWxpZCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlTWFya2VyOiByZXN1bHQuZm9yY2VNYXJrZXJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC52YWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgIH0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmFkZFN1YnNjcmlwdGlvbnMocGFyc2VkQ29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgcGFyc2VkQ29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhwYXJzZWRDb25maWcpO1xuICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpKTtcbiAgICAgICAgICAgIHNldERpc2FibGVkKFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLmRpc2FibGVkLCBwYXJzZWRDb25maWcuaWQsIGZhbHNlKSk7XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgbnVsbCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5DT01QT05FTlRfTE9BRCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlUGF0aChjb25maWcuZGF0YUJpbmRpbmcgfHwgY29uZmlnLmlkLCBwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZU9iamVjdChwYXRoLnZhbHVlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZVByb3BlcnR5KHBhdGgudmFsdWVQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2NyaXB0VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKHByb3BzLmNvbmZpZy52YWx1ZSkgP1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdChwcm9wcy5jb25maWcuaWQucmVwbGFjZSgnLicsICdfJykgKyAnVmFsdWUnLCBwcm9wcy5jb25maWcudmFsdWUpIDpcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuY29uZmlnLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2NyaXB0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBzY3JpcHRWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHNjcmlwdFZhbHVlLnZhbHVlIDogc2NyaXB0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oYW5kbGVDaGFuZ2UoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgdmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMudmFsdWVzLCBjb25maWddKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkaW5nUmVmLmN1cnJlbnQgPT09IHRydWUgJiYgIVV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuYWRkRmllbGQoY29uZmlnLmlkIHx8IGNvbmZpZy5kYXRhQmluZGluZywgcHJvcHMuaGFuZGxlLCBwcm9wcy5wYXJlbnRJZCwgcHJvcHMuYmluZFZhbHVlVG9Gb3JtKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5lcnJvci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEhhc0Vycm9yKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoZmllbGQuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgZG8gTk9UIHZhbGlkYXRlIG9uIG1vdW50OiB2YWx1ZVJlZi5jdXJyZW50IGlzIG5vdFxuICAgICAgICAgICAgLy8geWV0IGJvdW5kIGZyb20gdGhlIGZvcm0ncyBtYXN0ZXIgZGF0YSBhdCB0aGlzIHBvaW50IOKAlCBiaW5kKClcbiAgICAgICAgICAgIC8vIHJ1bnMgaW4gYSBsYXRlciByZW5kZXIgY3ljbGUgdmlhIHRoZSBbdmFsdWVPYmplY3RdIHVzZUVmZmVjdC5cbiAgICAgICAgICAgIC8vIFZhbGlkYXRpbmcgaGVyZSB3b3VsZCBtYXJrIGV2ZXJ5IGZpZWxkLXdpdGgtbWFzdGVyLXZhbHVlIGFzXG4gICAgICAgICAgICAvLyBpbnZhbGlkIChjdXJyZW50VmFsdWU9bnVsbCksIHBlcm1hbmVudGx5IGZsaXBwaW5nIGZvcm0udmFsdWUgdG9cbiAgICAgICAgICAgIC8vIG51bGwuIFJlZ2lzdGVyIHN0YXlzIGVtcHR5IGZvciB0aGlzIGZpZWxkIHVudGlsIGVpdGhlciB1c2VyXG4gICAgICAgICAgICAvLyBpbnRlcmFjdGlvbiAoaGFuZGxlQ2hhbmdlIOKGkiB2YWxpZGF0ZUZpZWxkIOKGkiBkb1ZhbGlkYXRpb24g4oaSXG4gICAgICAgICAgICAvLyBzZXRGaWVsZFZhbGlkaXR5KSBvciBhbiBleHBsaWNpdCBmb3JtLmFwaS52YWxpZGF0ZUFsbCgpIHJ1bnMuXG4gICAgICAgICAgICAvLyBmb3JtLnZhbHVlIHRyZWF0cyBlbXB0eS1yZWdpc3RlciBhcyBcIm9wdGltaXN0aWNhbGx5IHZhbGlkXCIg4oCUIHNvXG4gICAgICAgICAgICAvLyBhbnkgc2F2ZSBmbG93IE1VU1QgY2FsbCBmb3JtLmFwaS52YWxpZGF0ZUFsbCgpIGJlZm9yZSByZWFkaW5nXG4gICAgICAgICAgICAvLyBmb3JtLnZhbHVlLCBvciBpbnZhbGlkIGRhdGEgd2lsbCBwYXNzIHRocm91Z2ggc2lsZW50bHkuXG4gICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmZvcm0oKSkpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyhwcm9wcy5oYW5kbGUpO1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlRmllbGQocHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIHx8IHByb3BzLmNvbmZpZy5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgaGFuZGxlVmFsdWVDaGFuZ2UgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGxldCB2YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSAhPT0gdmFsdWVSZWYuY3VycmVudDtcblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChuZXdWYWx1ZSkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZVJlZi5jdXJyZW50KSkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdTRUxFQ1QnIHx8IHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdMT09LVVAnKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUuaWQgIT09IHZhbHVlUmVmLmN1cnJlbnQuaWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdEQVRFJyB8fCBwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnVElNRScpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSAhPT0gdmFsdWVSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodmFsdWVSZWYuY3VycmVudCkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnR1JJRCcgJiYgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldLnNwbGljZSgwLCB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5sZW5ndGgpO1xuXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5ld1ZhbHVlRWxlbWVudCBvZiBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XS5wdXNoKG5ld1ZhbHVlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWQgPSBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKCFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nKSA/IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA6IGlkLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICBsZXQgaWQgPSBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBwcm9wcy5jb25maWcuaWQ7XG4gICAgICAgICAgICAvL2FwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5jb25maWcuZmllbGRUeXBlID09PSAnU0VMRUNUJykge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RJdGVtQ2hhbmdlID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5oYW5kbGVTZWxlY3RJdGVtQ2hhbmdlKGlkLCBzZWxlY3RPcHRpb25zLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUoc2VsZWN0SXRlbUNoYW5nZSk7XG4gICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHNlbGVjdEl0ZW1DaGFuZ2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RPcHRpb24gb2Ygc2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9uLmlkID09PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBzZWxlY3RPcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlUmVmLmN1cnJlbnQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLmhhbmRsZUNoYW5nZSghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5kYXRhQmluZGluZykgPyBwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgOiBpZCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBhcGkgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZGF0ZTogKHZhbHVlcywgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvVmFsaWRhdGlvbih2YWx1ZXMsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyc2VWYWx1ZTogKHZhbHVlLCBpbmJvdW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVQYXJzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZSwgaW5ib3VuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCB2YWxpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQuY3VycmVudDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgaWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmNvbmZpZy5pZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcm93cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMucm93c0hhbmRsZXIgPyBwcm9wcy5yb3dzSGFuZGxlcigpIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRWYWxpZGF0aW9uR3JvdXA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yKSA/IGNvbmZpZy52YWxpZGF0b3IuZ3JvdXAgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVmFsdWVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuY2xlYXJIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5jbGVhckhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2Nyb2xsVG86ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogXCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHZhbHVlUHJvcGVydHkpICYmICFVdGlscy5pc051bGwodmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlUGFyc2VyKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZVBhcnNlcih2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSwgZmFsc2UpIDogdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy52YWx1ZVBhcnNlciA/IHByb3BzLnZhbHVlUGFyc2VyKHZhbHVlLCBmYWxzZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVmFsdWVDaGFuZ2UodmFsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlQ2FsbGJhY2sodmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0RGlzYWJsZWQoZGlzYWJsZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB2aXNpYmxlKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlKHZpc2libGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZUxvYWRDb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkKSk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVpcmVkTmV3VmFsID0gIVV0aWxzLmlzTnVsbChwYXJzZWRDb25maWcudmFsaWRhdG9yKSA/XG4gICAgICAgICAgICAgICAgICAgICFVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52YWxpZGF0b3IubnVsbGFibGUsIHBhcnNlZENvbmZpZy5pZCwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgfHwgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmFsaWRhdG9yLnJlcXVpcmVkLCBwYXJzZWRDb25maWcuaWQsIGZhbHNlKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IHJlcXVpcmVkICE9PSBudWxsICYmIHJlcXVpcmVkICE9PSByZXF1aXJlZE5ld1ZhbCAmJiBsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNldFJlcXVpcmVkKHJlcXVpcmVkTmV3VmFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCByZXF1aXJlZChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgc2V0UmVxdWlyZWQoaXNSZXF1aXJlZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IG1pbkRhdGUobWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldE1pbkRhdGUobWluRGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IG1heERhdGUobWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldE1heERhdGUobWF4RGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHNlbGVjdE9wdGlvbnMoc2VsZWN0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdE9wdGlvbnMoc2VsZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgc2V0UmVzZXRTd2l0Y2goIXJlc2V0U3dpdGNoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRGaWVsZFJlcXVpcmVkKG5ld1ZhbCwgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID0gdmFsaWRhdGU7XG4gICAgICAgICAgICAgICAgc2V0UmVxdWlyZWQobmV3VmFsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmdldENoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9hZERhdGEoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmxvYWREYXRhSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5sb2FkRGF0YUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBjb25maWcgP1xuICAgICAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9XCJjb2wtKi0qXCIga2V5PXtjb25maWcuaWR9IHN0eWxlPXt7XG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmF0dHJpYnV0ZXM/LnN0eWxlPy5tYXJnaW5MZWZ0KSA/IHByb3BzLmNvbmZpZy5hdHRyaWJ1dGVzPy5zdHlsZT8ubWFyZ2luTGVmdCA6XG4gICAgICAgICAgICAgICAgcHJvcHMuY29uZmlnLmluZGV4ID09PSAwID8gMCA6ICc4cHgnLFxuICAgICAgICAgICAgZGlzcGxheTogIXZpc2libGUgfHwgVXRpbHMuZ2V0Q29tcG9uZW50QXR0cmlidXRlKGNvbmZpZywgJ2hpZGRlbicsIGZhbHNlKSA9PT0gdHJ1ZSA/ICdub25lJyA6ICdibG9jaydcbiAgICAgICAgfX0+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICB7cHJvcHMuY2hpbGRyZW4oe1xuICAgICAgICAgICAgbWluRGF0ZTogbWluRGF0ZSxcbiAgICAgICAgICAgIG1heERhdGU6IG1heERhdGUsXG4gICAgICAgICAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICB2YWx1ZU9iamVjdDogdmFsdWVPYmplY3QsXG4gICAgICAgICAgICB2YWx1ZVByb3BlcnR5OiB2YWx1ZVByb3BlcnR5LFxuICAgICAgICAgICAgaGFuZGxlVmFsdWVDaGFuZ2U6IGhhbmRsZVZhbHVlQ2hhbmdlLFxuICAgICAgICAgICAgc2V0VmFsdWU6IHNldFZhbHVlLFxuICAgICAgICAgICAgc2V0U2VsZWN0T3B0aW9uczogc2V0U2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbnM6IHNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBzZXRSZXNldFN3aXRjaDogc2V0UmVzZXRTd2l0Y2gsXG4gICAgICAgICAgICByZXNldFN3aXRjaDogcmVzZXRTd2l0Y2gsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBoYXNFcnJvcjogaGFzRXJyb3IsXG4gICAgICAgICAgICBkb1ZhbGlkYXRpb246IGRvVmFsaWRhdGlvbixcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgbG9hZGluZ1JlZjogbG9hZGluZ1JlZlxuICAgICAgICB9KX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgOiBudWxsO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3QyxTQUFBRCx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVqQyxNQUFNRyxTQUFTLEdBQUlDLEtBQUssSUFBSztFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO0VBQ2hDLE1BQU0sQ0FBQ0MsUUFBUSxFQUFFQyxXQUFXLENBQUMsR0FBR0MsY0FBSyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ3JELE1BQU0sQ0FBQ0MsWUFBWSxFQUFFQyxlQUFlLENBQUMsR0FBR0gsY0FBSyxDQUFDQyxRQUFRLENBQUMsRUFBRSxDQUFDO0VBQzFELE1BQU0sQ0FBQ0csV0FBVyxFQUFFQyxjQUFjLENBQUMsR0FBR0wsY0FBSyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDeEQsTUFBTSxDQUFDSyxhQUFhLEVBQUVDLGdCQUFnQixDQUFDLEdBQUdQLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUM5RCxNQUFNTyxVQUFVLEdBQUdSLGNBQUssQ0FBQ1MsTUFBTSxDQUFDLElBQUksQ0FBQztFQUNyQyxNQUFNLENBQUNDLE1BQU0sRUFBRUMsU0FBUyxDQUFDLEdBQUdYLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUNoRDtFQUNBLE1BQU0sQ0FBQ1csS0FBSyxFQUFFQyxRQUFRLENBQUMsR0FBR2IsY0FBSyxDQUFDQyxRQUFRLENBQUMsQ0FBQ2EsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUNpQixLQUFLLENBQUMsR0FBR2pCLEtBQUssQ0FBQ2lCLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDekY7RUFDQSxNQUFNSSxRQUFRLEdBQUdoQixjQUFLLENBQUNTLE1BQU0sQ0FBQyxDQUFDSyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQ2lCLEtBQUssQ0FBQyxHQUFHakIsS0FBSyxDQUFDaUIsS0FBSyxHQUFHLElBQUksQ0FBQztFQUM5RSxNQUFNLENBQUNLLGFBQWEsRUFBRUMsZ0JBQWdCLENBQUMsR0FBR2xCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUM1RCxNQUFNLENBQUNrQixRQUFRLEVBQUVDLFdBQVcsQ0FBQyxHQUFHcEIsY0FBSyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ3JELE1BQU0sQ0FBQ29CLE9BQU8sRUFBRUMsVUFBVSxDQUFDLEdBQUd0QixjQUFLLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUM7RUFDbkQsTUFBTSxDQUFDc0IsUUFBUSxFQUFFQyxXQUFXLENBQUMsR0FBR3hCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUNwRCxNQUFNLENBQUN3QixPQUFPLEVBQUVDLFVBQVUsQ0FBQyxHQUFHMUIsY0FBSyxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDO0VBQ2xELE1BQU0sQ0FBQzBCLE9BQU8sRUFBRUMsVUFBVSxDQUFDLEdBQUc1QixjQUFLLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUM7RUFDbEQsTUFBTSxDQUFDNEIsV0FBVyxFQUFFQyxjQUFjLENBQUMsR0FBRzlCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUMzRCxNQUFNOEIsZ0JBQWdCLEdBQUcvQixjQUFLLENBQUNTLE1BQU0sQ0FBQyxDQUFDO0VBQ3ZDLE1BQU11QixpQkFBaUIsR0FBR2hDLGNBQUssQ0FBQ1MsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUM3QyxNQUFNd0IsR0FBRyxHQUFHakMsY0FBSyxDQUFDUyxNQUFNLENBQUMsSUFBSSxDQUFDO0VBQzlCLE1BQU15QixLQUFLLEdBQUdsQyxjQUFLLENBQUNTLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDakM7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLE1BQU0wQixjQUFjLEdBQUduQyxjQUFLLENBQUNTLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFFekNULGNBQUssQ0FBQ29DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCSixpQkFBaUIsQ0FBQ0ssT0FBTyxHQUFHLEtBQUs7SUFDakNDLElBQUksQ0FBQyxDQUFDO0VBQ1YsQ0FBQyxFQUFFLENBQUNsQyxXQUFXLENBQUMsQ0FBQztFQUVqQixTQUFTa0MsSUFBSUEsQ0FBQSxFQUFHO0lBQ1osSUFBSUMsVUFBVSxHQUFHbkMsV0FBVyxDQUFDRSxhQUFhLENBQUM7SUFDM0MsSUFBSWlDLFVBQVUsSUFBSSxDQUFDUCxpQkFBaUIsQ0FBQ0ssT0FBTyxFQUFFO01BQzFDTCxpQkFBaUIsQ0FBQ0ssT0FBTyxHQUFHLElBQUk7TUFDaEMsSUFBSTFDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsU0FBUyxLQUFLLFFBQVEsSUFBSTdDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsU0FBUyxLQUFLLFFBQVEsRUFBRTtRQUM1RSxJQUFJLENBQUNELFVBQVUsSUFBSXpCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDd0IsVUFBVSxDQUFDRSxFQUFFLENBQUMsRUFBRTtVQUM1QzVCLFFBQVEsQ0FBQyxJQUFJLENBQUM7VUFDZEcsUUFBUSxDQUFDcUIsT0FBTyxHQUFHLElBQUk7UUFDM0IsQ0FBQyxNQUFNO1VBQ0gsSUFBRzFDLEtBQUssQ0FBQytDLFdBQVcsRUFBRTtZQUNsQjdCLFFBQVEsQ0FBQ2xCLEtBQUssQ0FBQytDLFdBQVcsQ0FBQ0gsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQ2pELENBQUMsTUFBTTtZQUNIMUIsUUFBUSxDQUFDMEIsVUFBVSxDQUFDO1VBQ3hCO1VBRUF2QixRQUFRLENBQUNxQixPQUFPLEdBQUdFLFVBQVU7UUFDakM7TUFDSixDQUFDLE1BQU07UUFDSCxJQUFHNUMsS0FBSyxDQUFDK0MsV0FBVyxFQUFFO1VBQ2xCN0IsUUFBUSxDQUFDbEIsS0FBSyxDQUFDK0MsV0FBVyxDQUFDSCxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQyxNQUFNO1VBQ0gxQixRQUFRLENBQUMwQixVQUFVLENBQUM7UUFDeEI7UUFFQXZCLFFBQVEsQ0FBQ3FCLE9BQU8sR0FBR0UsVUFBVTtNQUNqQztJQUNKO0VBQ0o7RUFFQXZDLGNBQUssQ0FBQ29DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCRSxJQUFJLENBQUMsQ0FBQztFQUNWLENBQUMsRUFBRSxDQUFDbEMsV0FBVyxDQUFDRSxhQUFhLENBQUMsQ0FBQyxDQUFDOztFQUVoQztFQUNBTixjQUFLLENBQUNvQyxTQUFTLENBQUMsTUFBTTtJQUNsQixJQUFJLENBQUN0QixjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDLElBQUlxQixnQkFBZ0IsQ0FBQ00sT0FBTyxLQUFLLElBQUksRUFBRTtNQUM1RDFDLEtBQUssQ0FBQ2dELElBQUksQ0FBQyxDQUFDLENBQ1BDLGNBQWMsQ0FBQ2xDLE1BQU0sQ0FBQ21DLFdBQVcsSUFBSW5DLE1BQU0sQ0FBQytCLEVBQUUsRUFBRUssWUFBWSxDQUFDbkQsS0FBSyxDQUFDb0QsTUFBTSxFQUFFbkMsS0FBSyxDQUFDLENBQUM7SUFDM0Y7SUFFQW1CLGdCQUFnQixDQUFDTSxPQUFPLEdBQUcsSUFBSTtFQUNuQyxDQUFDLEVBQUUsQ0FBQ2QsUUFBUSxDQUFDLENBQUM7RUFFZCxNQUFNdUIsWUFBWSxHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLFlBQVksS0FBSztJQUMzQyxJQUFHdEMsTUFBTSxFQUFFO01BQ1AsTUFBTXVDLE9BQU8sR0FBR0MsMkJBQWtCLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDekQsTUFBTUMsSUFBSSxHQUFHakIsY0FBYyxDQUFDRSxPQUFPO01BQ25DLElBQUllLElBQUksS0FBSyxJQUFJLElBQ1ZBLElBQUksQ0FBQ0osWUFBWSxLQUFLQSxZQUFZLElBQ2xDSSxJQUFJLENBQUM3QixRQUFRLEtBQUtBLFFBQVEsSUFDMUI2QixJQUFJLENBQUNILE9BQU8sS0FBS0EsT0FBTyxFQUFFO1FBQzdCLE9BQU9HLElBQUksQ0FBQ2xCLEtBQUs7TUFDckI7TUFFQSxJQUFJbUIsSUFBSSxHQUFHMUQsS0FBSyxDQUFDZ0QsSUFBSSxDQUFDLENBQUMsQ0FDbEJXLFlBQVksQ0FBQzVDLE1BQU0sQ0FBQ21DLFdBQVcsSUFBSW5DLE1BQU0sQ0FBQytCLEVBQUUsQ0FBQztNQUNsRCxJQUFJYyxNQUFNLEdBQUc7UUFBQ3JCLEtBQUssRUFBRTtNQUFJLENBQUM7TUFDMUIsSUFBSSxDQUFDcEIsY0FBSyxDQUFDQyxNQUFNLENBQUNMLE1BQU0sQ0FBQzhDLFNBQVMsQ0FBQyxJQUFJLENBQUMxQyxjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDOEMsU0FBUyxDQUFDQyxNQUFNLENBQUMsRUFBRTtRQUMzRUYsTUFBTSxHQUFHRyxrQkFBUyxDQUFDQyxtQkFBbUIsSUFBQUMsTUFBQSxDQUFJbEQsTUFBTSxDQUFDK0IsRUFBRSxnQkFBYS9CLE1BQU0sQ0FBQzhDLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDO1FBQ3hGLElBQUksQ0FBQ0YsTUFBTSxDQUFDckIsS0FBSyxFQUFFO1VBQ2ZxQixNQUFNLENBQUNNLE9BQU8sR0FBR04sTUFBTSxDQUFDTSxPQUFPLEdBQUdOLE1BQU0sQ0FBQ00sT0FBTyxHQUFHbkQsTUFBTSxDQUFDOEMsU0FBUyxDQUFDSyxPQUFPO1FBQy9FO01BQ0o7TUFFQSxJQUFJTixNQUFNLENBQUNyQixLQUFLLEVBQUU7UUFDZHFCLE1BQU0sR0FBR3pDLGNBQUssQ0FBQ2dELGFBQWEsQ0FBQ1QsSUFBSSxDQUFDL0MsYUFBYSxFQUFFaUIsUUFBUSxFQUNyRDhCLElBQUksQ0FBQ2pELFdBQVcsRUFBRTRDLFlBQVksRUFBRXRDLE1BQU0sQ0FBQzhDLFNBQVMsQ0FBQztNQUN6RDtNQUVBckQsZUFBZSxDQUFDOEMsT0FBTyxJQUFJTSxNQUFNLENBQUNRLFdBQVcsR0FBR1IsTUFBTSxDQUFDTSxPQUFPLEdBQUcsRUFBRSxDQUFDO01BQ3BFOUQsV0FBVyxDQUFDLENBQUN3RCxNQUFNLENBQUNyQixLQUFLLEtBQUtlLE9BQU8sSUFBSU0sTUFBTSxDQUFDUSxXQUFXLENBQUMsQ0FBQztNQUM3RDdCLEtBQUssQ0FBQ0csT0FBTyxHQUFHa0IsTUFBTSxDQUFDckIsS0FBSyxLQUFLZSxPQUFPLElBQUlNLE1BQU0sQ0FBQ1EsV0FBVyxDQUFDO01BRS9ELElBQUlkLE9BQU8sRUFBRTtRQUNUdEQsS0FBSyxDQUFDZ0QsSUFBSSxDQUFDLENBQUMsQ0FDUHFCLGFBQWEsQ0FBQ3RELE1BQU0sQ0FBQytCLEVBQUUsRUFBRSxPQUFPYyxNQUFNLENBQUNNLE9BQU8sS0FBSyxXQUFXLEdBQUcsSUFBSSxHQUFHTixNQUFNLENBQUNNLE9BQU8sQ0FBQztNQUNoRztNQUVBMUIsY0FBYyxDQUFDRSxPQUFPLEdBQUc7UUFBRVcsWUFBWTtRQUFFekIsUUFBUTtRQUFFMEIsT0FBTztRQUFFZixLQUFLLEVBQUVxQixNQUFNLENBQUNyQjtNQUFNLENBQUM7O01BRWpGO01BQ0E7TUFDQTtNQUNBLElBQUksT0FBT3ZDLEtBQUssQ0FBQ2dELElBQUksS0FBSyxVQUFVLElBQUksT0FBT2hELEtBQUssQ0FBQ2dELElBQUksQ0FBQyxDQUFDLENBQUNzQixnQkFBZ0IsS0FBSyxVQUFVLEVBQUU7UUFDekZ0RSxLQUFLLENBQUNnRCxJQUFJLENBQUMsQ0FBQyxDQUFDc0IsZ0JBQWdCLENBQUN2RCxNQUFNLENBQUMrQixFQUFFLElBQUkvQixNQUFNLENBQUNtQyxXQUFXLEVBQUU7VUFDM0RYLEtBQUssRUFBRXFCLE1BQU0sQ0FBQ3JCLEtBQUs7VUFDbkIyQixPQUFPLEVBQUVOLE1BQU0sQ0FBQ00sT0FBTztVQUN2QkUsV0FBVyxFQUFFUixNQUFNLENBQUNRO1FBQ3hCLENBQUMsQ0FBQztNQUNOO01BRUEsT0FBT1IsTUFBTSxDQUFDckIsS0FBSztJQUN2QjtJQUVBLE9BQU8sS0FBSztFQUNoQixDQUFDO0VBRURsQyxjQUFLLENBQUNvQyxTQUFTLENBQUMsTUFBTTtJQUNsQnpDLEtBQUssQ0FBQ3VFLE1BQU0sQ0FBQ0MsR0FBRyxHQUFHQSxHQUFHLENBQUMsQ0FBQztFQUM1QixDQUFDLENBQUM7RUFFRm5FLGNBQUssQ0FBQ29DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUl0QixjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDLEVBQUU7TUFDdEIsSUFBSTBELFlBQVksR0FBR3RELGNBQUssQ0FBQ3VELFdBQVcsQ0FBQzFFLEtBQUssQ0FBQ2UsTUFBTSxFQUFFZixLQUFLLENBQUMyRSxNQUFNLENBQUM7TUFDaEVDLG1CQUFZLENBQUNDLGdCQUFnQixDQUFDSixZQUFZLENBQUNLLG1CQUFtQixFQUFFOUUsS0FBSyxDQUFDdUUsTUFBTSxFQUFFdkUsS0FBSyxDQUFDMkUsTUFBTSxDQUFDO01BQzNGQyxtQkFBWSxDQUFDRyxzQkFBc0IsQ0FBQy9FLEtBQUssQ0FBQzJFLE1BQU0sRUFBRUYsWUFBWSxDQUFDO01BQy9EekQsU0FBUyxDQUFDeUQsWUFBWSxDQUFDO01BQ3ZCOUMsVUFBVSxDQUFDUixjQUFLLENBQUM2RCx5QkFBeUIsQ0FBQ1AsWUFBWSxDQUFDL0MsT0FBTyxFQUFFK0MsWUFBWSxDQUFDM0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3hGckIsV0FBVyxDQUFDTixjQUFLLENBQUM2RCx5QkFBeUIsQ0FBQ1AsWUFBWSxDQUFDakQsUUFBUSxFQUFFaUQsWUFBWSxDQUFDM0IsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO01BRTNGLElBQUltQyxLQUFLLEdBQUcsSUFBSUMsY0FBSyxDQUFDbEYsS0FBSyxDQUFDdUUsTUFBTSxFQUFFdkUsS0FBSyxDQUFDMkUsTUFBTSxFQUFFLElBQUksQ0FBQztNQUN2REMsbUJBQVksQ0FBQ08sU0FBUyxDQUFDQyxrQkFBUyxDQUFDQyxjQUFjLEVBQUVKLEtBQUssQ0FBQztJQUMzRDtFQUNKLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTjVFLGNBQUssQ0FBQ29DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUksQ0FBQ3RCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDb0QsTUFBTSxDQUFDLElBQUksQ0FBQ2pDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDTCxNQUFNLENBQUMsRUFBRTtNQUN0RCxJQUFJMkMsSUFBSSxHQUFHMUQsS0FBSyxDQUFDZ0QsSUFBSSxDQUFDLENBQUMsQ0FDbEJXLFlBQVksQ0FBQzVDLE1BQU0sQ0FBQ21DLFdBQVcsSUFBSW5DLE1BQU0sQ0FBQytCLEVBQUUsRUFBRTlDLEtBQUssQ0FBQ29ELE1BQU0sQ0FBQztNQUNoRSxJQUFJLENBQUNqQyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3NDLElBQUksQ0FBQ2pELFdBQVcsQ0FBQyxFQUFFO1FBQ2pDQyxjQUFjLENBQUNnRCxJQUFJLENBQUNqRCxXQUFXLENBQUM7UUFDaENHLGdCQUFnQixDQUFDOEMsSUFBSSxDQUFDL0MsYUFBYSxDQUFDO01BQ3hDO01BRUEsSUFBSSxDQUFDUSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQ2UsTUFBTSxDQUFDRSxLQUFLLENBQUMsRUFBRTtRQUNuQyxJQUFJcUUsV0FBVyxHQUFHL0IsMkJBQWtCLENBQUNnQyxZQUFZLENBQUN2RixLQUFLLENBQUNlLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLEdBQ2pFOEMsa0JBQVMsQ0FBQ3lCLGFBQWEsQ0FBQ3hGLEtBQUssQ0FBQ2UsTUFBTSxDQUFDK0IsRUFBRSxDQUFDMkMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUV6RixLQUFLLENBQUNlLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLEdBQ3hGakIsS0FBSyxDQUFDZSxNQUFNLENBQUNFLEtBQUs7UUFFdEIsSUFBSSxDQUFDRSxjQUFLLENBQUNDLE1BQU0sQ0FBQ2tFLFdBQVcsQ0FBQyxFQUFFO1VBQzVCLElBQUlJLEdBQUcsR0FBR0osV0FBVyxDQUFDSyxZQUFZLEtBQUssWUFBWSxHQUFHTCxXQUFXLENBQUNyRSxLQUFLLEdBQUdxRSxXQUFXO1VBQ3JGN0UsV0FBVyxDQUFDRSxhQUFhLENBQUMsR0FBRytFLEdBQUc7VUFDaEN4RSxRQUFRLENBQUN3RSxHQUFHLENBQUM7VUFDYnJFLFFBQVEsQ0FBQ3FCLE9BQU8sR0FBR2dELEdBQUc7VUFDdEIxRixLQUFLLENBQUNnRCxJQUFJLENBQUMsQ0FBQyxDQUNQNEMsWUFBWSxDQUFDN0UsTUFBTSxDQUFDbUMsV0FBVyxJQUFJbkMsTUFBTSxDQUFDK0IsRUFBRSxFQUFFNEMsR0FBRyxDQUFDO1FBQzNEO01BQ0o7SUFDSjtFQUNKLENBQUMsRUFBRSxDQUFDMUYsS0FBSyxDQUFDb0QsTUFBTSxFQUFFckMsTUFBTSxDQUFDLENBQUM7RUFFMUJWLGNBQUssQ0FBQ29DLFNBQVMsQ0FBQyxNQUFNO0lBQ2xCLElBQUk1QixVQUFVLENBQUM2QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUN2QixjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDLEVBQUU7TUFDdEQsSUFBSThFLEtBQUssR0FBRzdGLEtBQUssQ0FBQ2dELElBQUksQ0FBQyxDQUFDLENBQ25COEMsUUFBUSxDQUFDL0UsTUFBTSxDQUFDK0IsRUFBRSxJQUFJL0IsTUFBTSxDQUFDbUMsV0FBVyxFQUFFbEQsS0FBSyxDQUFDdUUsTUFBTSxFQUFFdkUsS0FBSyxDQUFDK0YsUUFBUSxFQUFFL0YsS0FBSyxDQUFDZ0csZUFBZSxDQUFDO01BQ25HLElBQUksQ0FBQzdFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDeUUsS0FBSyxDQUFDLElBQUksQ0FBQzFFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDeUUsS0FBSyxDQUFDSSxLQUFLLENBQUMsRUFBRTtRQUNwRCxJQUFJSixLQUFLLENBQUNJLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN4QjlGLFdBQVcsQ0FBQyxJQUFJLENBQUM7VUFDakJJLGVBQWUsQ0FBQ3FGLEtBQUssQ0FBQ0ksS0FBSyxDQUFDO1FBQ2hDO01BQ0o7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FwRixVQUFVLENBQUM2QixPQUFPLEdBQUcsS0FBSztJQUM5QjtFQUNKLENBQUMsQ0FBQztFQUVGckMsY0FBSyxDQUFDb0MsU0FBUyxDQUFDLE1BQU07SUFDbEIsT0FBTyxNQUFNO01BQ1QsSUFBSSxDQUFDdEIsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUNnRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDN0I0QixtQkFBWSxDQUFDdUIsNEJBQTRCLENBQUNuRyxLQUFLLENBQUN1RSxNQUFNLENBQUM7UUFDdkR2RSxLQUFLLENBQUNnRCxJQUFJLENBQUMsQ0FBQyxDQUNQb0QsV0FBVyxDQUFDcEcsS0FBSyxDQUFDZSxNQUFNLENBQUNtQyxXQUFXLElBQUlsRCxLQUFLLENBQUNlLE1BQU0sQ0FBQytCLEVBQUUsQ0FBQztNQUNqRTtJQUNKLENBQUM7RUFDTCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sTUFBTXVELGlCQUFpQixHQUFJQyxRQUFRLElBQUs7SUFDcENqRSxpQkFBaUIsQ0FBQ0ssT0FBTyxHQUFHLElBQUk7SUFDaEMsSUFBSTZELFlBQVksR0FBR0QsUUFBUSxLQUFLakYsUUFBUSxDQUFDcUIsT0FBTztJQUVoRCxJQUFJLENBQUN2QixjQUFLLENBQUNDLE1BQU0sQ0FBQ2tGLFFBQVEsQ0FBQyxJQUFJLENBQUNuRixjQUFLLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDcUIsT0FBTyxDQUFDLEVBQUU7TUFDNUQsSUFBSTFDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsU0FBUyxLQUFLLFFBQVEsSUFBSTdDLEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsU0FBUyxLQUFLLFFBQVEsRUFBRTtRQUM1RTBELFlBQVksR0FBR0QsUUFBUSxDQUFDeEQsRUFBRSxLQUFLekIsUUFBUSxDQUFDcUIsT0FBTyxDQUFDSSxFQUFFO01BQ3RELENBQUMsTUFBTSxJQUFJOUMsS0FBSyxDQUFDZSxNQUFNLENBQUM4QixTQUFTLEtBQUssTUFBTSxJQUFJN0MsS0FBSyxDQUFDZSxNQUFNLENBQUM4QixTQUFTLEtBQUssTUFBTSxFQUFFO1FBQy9FMEQsWUFBWSxHQUFHRCxRQUFRLEtBQUtqRixRQUFRLENBQUNxQixPQUFPO01BQ2hELENBQUMsTUFBTTtRQUNINkQsWUFBWSxHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ3BGLFFBQVEsQ0FBQ3FCLE9BQU8sQ0FBQyxLQUFLOEQsSUFBSSxDQUFDQyxTQUFTLENBQUNILFFBQVEsQ0FBQztNQUNoRjtJQUNKO0lBRUEsSUFBSXRHLEtBQUssQ0FBQ2UsTUFBTSxDQUFDOEIsU0FBUyxLQUFLLE1BQU0sSUFBSXBDLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLEVBQUU7TUFDakVGLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLENBQUMrRixNQUFNLENBQUMsQ0FBQyxFQUFFakcsV0FBVyxDQUFDRSxhQUFhLENBQUMsQ0FBQ3VGLE1BQU0sQ0FBQztNQUV2RSxJQUFJSSxRQUFRLEVBQUU7UUFDVixLQUFLLE1BQU1LLGVBQWUsSUFBSUwsUUFBUSxFQUFFO1VBQ3BDN0YsV0FBVyxDQUFDRSxhQUFhLENBQUMsQ0FBQ2lHLElBQUksQ0FBQ0QsZUFBZSxDQUFDO1FBQ3BEO01BQ0o7TUFFQSxJQUFJN0QsRUFBRSxHQUFHOUMsS0FBSyxDQUFDZSxNQUFNLENBQUNtQyxXQUFXLEdBQUdsRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ21DLFdBQVcsR0FBR2xELEtBQUssQ0FBQ2UsTUFBTSxDQUFDK0IsRUFBRTtNQUM5RTlDLEtBQUssQ0FBQ2dELElBQUksQ0FBQyxDQUFDLENBQ1A0QyxZQUFZLENBQUMsQ0FBQ3pFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDZSxNQUFNLENBQUNtQyxXQUFXLENBQUMsR0FBR2xELEtBQUssQ0FBQ2UsTUFBTSxDQUFDbUMsV0FBVyxHQUFHSixFQUFFLEVBQUV3RCxRQUFRLENBQUM7SUFDeEc7SUFFQSxJQUFJQyxZQUFZLEVBQUU7TUFDZCxJQUFJekQsRUFBRSxHQUFHOUMsS0FBSyxDQUFDZSxNQUFNLENBQUNtQyxXQUFXLEdBQUdsRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ21DLFdBQVcsR0FBR2xELEtBQUssQ0FBQ2UsTUFBTSxDQUFDK0IsRUFBRTtNQUM5RTtNQUNBLElBQUk5QyxLQUFLLENBQUNlLE1BQU0sQ0FBQzhCLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDckMsSUFBSWdFLGdCQUFnQixHQUFHN0csS0FBSyxDQUFDZ0QsSUFBSSxDQUFDLENBQUMsQ0FDOUI4RCxzQkFBc0IsQ0FBQ2hFLEVBQUUsRUFBRXhCLGFBQWEsRUFBRWdGLFFBQVEsQ0FBQztRQUN4RHBGLFFBQVEsQ0FBQzJGLGdCQUFnQixDQUFDO1FBQzFCeEYsUUFBUSxDQUFDcUIsT0FBTyxHQUFHbUUsZ0JBQWdCO1FBQ25DLEtBQUssTUFBTUUsWUFBWSxJQUFJekYsYUFBYSxFQUFFO1VBQ3RDLElBQUl5RixZQUFZLENBQUNqRSxFQUFFLEtBQUt3RCxRQUFRLEVBQUU7WUFDOUJBLFFBQVEsR0FBR1MsWUFBWTtZQUN2QjtVQUNKO1FBQ0o7TUFDSixDQUFDLE1BQU07UUFDSDdGLFFBQVEsQ0FBQ29GLFFBQVEsQ0FBQztRQUNsQmpGLFFBQVEsQ0FBQ3FCLE9BQU8sR0FBRzRELFFBQVE7UUFDM0J0RyxLQUFLLENBQUNnRCxJQUFJLENBQUMsQ0FBQyxDQUNQNEMsWUFBWSxDQUFDLENBQUN6RSxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQ2UsTUFBTSxDQUFDbUMsV0FBVyxDQUFDLEdBQUdsRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ21DLFdBQVcsR0FBR0osRUFBRSxFQUFFd0QsUUFBUSxDQUFDO01BQ3hHO01BRUEsSUFBSSxDQUFDbkYsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUNnSCxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3pDaEgsS0FBSyxDQUFDZ0gsa0JBQWtCLENBQUNWLFFBQVEsQ0FBQztNQUN0QztNQUVBLElBQUlyQixLQUFLLEdBQUcsSUFBSUMsY0FBSyxDQUFDbEYsS0FBSyxDQUFDdUUsTUFBTSxFQUFFdkUsS0FBSyxDQUFDMkUsTUFBTSxFQUFFMkIsUUFBUSxDQUFDO01BQzNEMUIsbUJBQVksQ0FBQ08sU0FBUyxDQUFDQyxrQkFBUyxDQUFDNkIsWUFBWSxFQUFFaEMsS0FBSyxDQUFDO0lBQ3pEO0VBQ0osQ0FBQztFQUVELE1BQU1ULEdBQUcsR0FBR0EsQ0FBQSxLQUFNO0lBQ2QsT0FBTztNQUNIMEMsUUFBUSxFQUFFQSxDQUFDOUQsTUFBTSxFQUFFQyxZQUFZLEtBQUs7UUFDaEMsT0FBT0YsWUFBWSxDQUFDQyxNQUFNLEVBQUVDLFlBQVksQ0FBQztNQUM3QyxDQUFDO01BQ0Q4RCxVQUFVLEVBQUVBLENBQUNsRyxLQUFLLEVBQUVtRyxPQUFPLEtBQUs7UUFDNUIsSUFBSSxDQUFDakcsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUMrQyxXQUFXLENBQUMsRUFBRTtVQUNsQyxPQUFPL0MsS0FBSyxDQUFDK0MsV0FBVyxDQUFDOUIsS0FBSyxFQUFFbUcsT0FBTyxDQUFDO1FBQzVDO1FBRUEsT0FBT25HLEtBQUs7TUFDaEIsQ0FBQztNQUNELElBQUlzQixLQUFLQSxDQUFBLEVBQUc7UUFDUixPQUFPQSxLQUFLLENBQUNHLE9BQU87TUFDeEIsQ0FBQztNQUNELElBQUlJLEVBQUVBLENBQUEsRUFBRztRQUNMLE9BQU85QyxLQUFLLENBQUNlLE1BQU0sQ0FBQytCLEVBQUU7TUFDMUIsQ0FBQztNQUNELElBQUl1RSxJQUFJQSxDQUFBLEVBQUc7UUFDUCxPQUFPckgsS0FBSyxDQUFDc0gsV0FBVyxHQUFHdEgsS0FBSyxDQUFDc0gsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJO01BQ3pELENBQUM7TUFDREMsa0JBQWtCLEVBQUVBLENBQUEsS0FBTTtRQUN0QixPQUFPLENBQUNwRyxjQUFLLENBQUNDLE1BQU0sQ0FBQ0wsTUFBTSxDQUFDOEMsU0FBUyxDQUFDLEdBQUc5QyxNQUFNLENBQUM4QyxTQUFTLENBQUMyRCxLQUFLLEdBQUcsSUFBSTtNQUMxRSxDQUFDO01BQ0RDLEtBQUssRUFBRUEsQ0FBQSxLQUFNO1FBQ1RwQixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDbEYsY0FBSyxDQUFDQyxNQUFNLENBQUNwQixLQUFLLENBQUMwSCxZQUFZLENBQUMsRUFBRTtVQUNuQzFILEtBQUssQ0FBQzBILFlBQVksQ0FBQyxDQUFDO1FBQ3hCO01BQ0osQ0FBQztNQUNEQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNaLElBQUlyRixHQUFHLENBQUNJLE9BQU8sRUFBRTtVQUNiSixHQUFHLENBQUNJLE9BQU8sQ0FBQ2tGLGNBQWMsQ0FBQztZQUN2QkMsUUFBUSxFQUFFLFFBQVE7WUFDbEJDLEtBQUssRUFBRTtVQUNYLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQztNQUNELElBQUk3RyxLQUFLQSxDQUFBLEVBQUc7UUFDUixJQUFJLENBQUNFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDWCxXQUFXLENBQUMsSUFBSSxDQUFDVSxjQUFLLENBQUNDLE1BQU0sQ0FBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQ1EsY0FBSyxDQUFDQyxNQUFNLENBQUNYLFdBQVcsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsRUFBRTtVQUN6RyxPQUFPLENBQUNRLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDK0MsV0FBVyxDQUFDLEdBQ25DL0MsS0FBSyxDQUFDK0MsV0FBVyxDQUFDdEMsV0FBVyxDQUFDRSxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBR0YsV0FBVyxDQUFDRSxhQUFhLENBQUM7UUFDekY7UUFFQSxJQUFJTSxLQUFLLEVBQUU7VUFDUCxJQUFJUixXQUFXLEVBQUU7WUFDYkEsV0FBVyxDQUFDRSxhQUFhLENBQUMsR0FBR00sS0FBSztVQUN0QztVQUVBLE9BQU9qQixLQUFLLENBQUMrQyxXQUFXLEdBQUcvQyxLQUFLLENBQUMrQyxXQUFXLENBQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUdBLEtBQUs7UUFDdEU7UUFFQSxPQUFPLElBQUk7TUFDZixDQUFDO01BQ0QsSUFBSUEsS0FBS0EsQ0FBQ3lFLEdBQUcsRUFBRTtRQUNYVyxpQkFBaUIsQ0FBQ1gsR0FBRyxDQUFDO1FBRXRCLElBQUksQ0FBQ3ZFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDcEIsS0FBSyxDQUFDK0gsbUJBQW1CLENBQUMsRUFBRTtVQUMxQy9ILEtBQUssQ0FBQytILG1CQUFtQixDQUFDckMsR0FBRyxDQUFDO1FBQ2xDO01BQ0osQ0FBQztNQUNELElBQUlsRSxRQUFRQSxDQUFDQSxRQUFRLEVBQUU7UUFDbkJDLFdBQVcsQ0FBQ0QsUUFBUSxDQUFDO01BQ3pCLENBQUM7TUFDRCxJQUFJRSxPQUFPQSxDQUFDQSxPQUFPLEVBQUU7UUFDakJDLFVBQVUsQ0FBQ0QsT0FBTyxDQUFDO01BQ3ZCLENBQUM7TUFDRHNHLGtCQUFrQkEsQ0FBQSxFQUFHO1FBQ2pCbkgsVUFBVSxDQUFDNkIsT0FBTyxHQUFHLEtBQUs7TUFDOUIsQ0FBQztNQUNEdUYsT0FBT0EsQ0FBQSxFQUFHO1FBQ04sSUFBSXhELFlBQVksR0FBR3RELGNBQUssQ0FBQ3VELFdBQVcsQ0FBQzFFLEtBQUssQ0FBQ2UsTUFBTSxFQUFFZixLQUFLLENBQUMyRSxNQUFNLENBQUM7UUFDaEVoRCxVQUFVLENBQUNSLGNBQUssQ0FBQzZELHlCQUF5QixDQUFDUCxZQUFZLENBQUMvQyxPQUFPLEVBQUUrQyxZQUFZLENBQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEZyQixXQUFXLENBQUNOLGNBQUssQ0FBQzZELHlCQUF5QixDQUFDUCxZQUFZLENBQUNqRCxRQUFRLEVBQUVpRCxZQUFZLENBQUMzQixFQUFFLENBQUMsQ0FBQztRQUNwRixJQUFJb0YsY0FBYyxHQUFHLENBQUMvRyxjQUFLLENBQUNDLE1BQU0sQ0FBQ3FELFlBQVksQ0FBQ1osU0FBUyxDQUFDLEdBQ3RELENBQUMxQyxjQUFLLENBQUM2RCx5QkFBeUIsQ0FBQ1AsWUFBWSxDQUFDWixTQUFTLENBQUNzRSxRQUFRLEVBQUUxRCxZQUFZLENBQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLElBQ3JGM0IsY0FBSyxDQUFDNkQseUJBQXlCLENBQUNQLFlBQVksQ0FBQ1osU0FBUyxDQUFDakMsUUFBUSxFQUFFNkMsWUFBWSxDQUFDM0IsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUs7UUFDdkdWLGdCQUFnQixDQUFDTSxPQUFPLEdBQUdkLFFBQVEsS0FBSyxJQUFJLElBQUlBLFFBQVEsS0FBS3NHLGNBQWMsSUFBSXJILFVBQVUsQ0FBQzZCLE9BQU8sS0FBSyxLQUFLO1FBQzNHYixXQUFXLENBQUNxRyxjQUFjLENBQUM7TUFDL0IsQ0FBQztNQUNELElBQUl0RyxRQUFRQSxDQUFBLEVBQUc7UUFDWCxPQUFPQSxRQUFRO01BQ25CLENBQUM7TUFDRCxJQUFJQSxRQUFRQSxDQUFDd0csVUFBVSxFQUFFO1FBQ3JCdkcsV0FBVyxDQUFDdUcsVUFBVSxDQUFDO01BQzNCLENBQUM7TUFDRCxJQUFJdEcsT0FBT0EsQ0FBQ0EsT0FBTyxFQUFFO1FBQ2pCQyxVQUFVLENBQUNELE9BQU8sQ0FBQztNQUN2QixDQUFDO01BQ0QsSUFBSUUsT0FBT0EsQ0FBQ0EsT0FBTyxFQUFFO1FBQ2pCQyxVQUFVLENBQUNELE9BQU8sQ0FBQztNQUN2QixDQUFDO01BQ0QsSUFBSVYsYUFBYUEsQ0FBQ0EsYUFBYSxFQUFFO1FBQzdCQyxnQkFBZ0IsQ0FBQ0QsYUFBYSxDQUFDO01BQ25DLENBQUM7TUFDRCtHLEtBQUtBLENBQUEsRUFBRztRQUNKbEcsY0FBYyxDQUFDLENBQUNELFdBQVcsQ0FBQztNQUNoQyxDQUFDO01BQ0RvRyxnQkFBZ0JBLENBQUNDLE1BQU0sRUFBbUI7UUFBQSxJQUFqQnJCLFFBQVEsR0FBQXNCLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsSUFBSTtRQUNwQ3BHLGdCQUFnQixDQUFDTSxPQUFPLEdBQUd3RSxRQUFRO1FBQ25DckYsV0FBVyxDQUFDMEcsTUFBTSxDQUFDO01BQ3ZCLENBQUM7TUFDREcsV0FBVyxFQUFFQSxDQUFBLEtBQU07UUFDZixJQUFJLENBQUN2SCxjQUFLLENBQUNDLE1BQU0sQ0FBQ3BCLEtBQUssQ0FBQzBJLFdBQVcsQ0FBQyxFQUFFO1VBQ2xDLE9BQU8xSSxLQUFLLENBQUMwSSxXQUFXLENBQUMsQ0FBQztRQUM5QjtRQUVBLE9BQU8sRUFBRTtNQUNiLENBQUM7TUFDREMsUUFBUUEsQ0FBQSxFQUFHO1FBQ1AsSUFBSTNJLEtBQUssQ0FBQzRJLGVBQWUsRUFBRTtVQUN2QjVJLEtBQUssQ0FBQzRJLGVBQWUsQ0FBQyxDQUFDO1FBQzNCO01BQ0o7SUFDSixDQUFDO0VBQ0wsQ0FBQztFQUVELE9BQU83SCxNQUFNLGdCQUNUNUIsTUFBQSxDQUFBVyxPQUFBLENBQUErSSxhQUFBO0lBQUt2RyxHQUFHLEVBQUVBLEdBQUk7SUFBQ3dHLFNBQVMsRUFBQyxTQUFTO0lBQUNDLEdBQUcsRUFBRWhJLE1BQU0sQ0FBQytCLEVBQUc7SUFBQ2tHLEtBQUssRUFBRTtNQUN0REMsU0FBUyxFQUFFLE1BQU07TUFDakJDLFVBQVUsRUFBRSxDQUFDL0gsY0FBSyxDQUFDQyxNQUFNLEVBQUFuQixxQkFBQSxHQUFDRCxLQUFLLENBQUNlLE1BQU0sQ0FBQ29JLFVBQVUsY0FBQWxKLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUF2QkEscUJBQUEsQ0FBeUIrSSxLQUFLLGNBQUEvSSxxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDaUosVUFBVSxDQUFDLElBQUFoSixzQkFBQSxHQUFHRixLQUFLLENBQUNlLE1BQU0sQ0FBQ29JLFVBQVUsY0FBQWpKLHNCQUFBLGdCQUFBQSxzQkFBQSxHQUF2QkEsc0JBQUEsQ0FBeUI4SSxLQUFLLGNBQUE5SSxzQkFBQSx1QkFBOUJBLHNCQUFBLENBQWdDZ0osVUFBVSxHQUM5R2xKLEtBQUssQ0FBQ2UsTUFBTSxDQUFDcUksS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSztNQUN4Q0MsT0FBTyxFQUFFLENBQUMzSCxPQUFPLElBQUlQLGNBQUssQ0FBQ21JLHFCQUFxQixDQUFDdkksTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHO0lBQ2xHO0VBQUUsZ0JBQ0Y1QixNQUFBLENBQUFXLE9BQUEsQ0FBQStJLGFBQUEsZUFDQzdJLEtBQUssQ0FBQ3VKLFFBQVEsQ0FBQztJQUNaekgsT0FBTyxFQUFFQSxPQUFPO0lBQ2hCRSxPQUFPLEVBQUVBLE9BQU87SUFDaEJKLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkosUUFBUSxFQUFFQSxRQUFRO0lBQ2xCZixXQUFXLEVBQUVBLFdBQVc7SUFDeEJFLGFBQWEsRUFBRUEsYUFBYTtJQUM1QjBGLGlCQUFpQixFQUFFQSxpQkFBaUI7SUFDcENuRixRQUFRLEVBQUVBLFFBQVE7SUFDbEJLLGdCQUFnQixFQUFFQSxnQkFBZ0I7SUFDbENELGFBQWEsRUFBRUEsYUFBYTtJQUM1QmEsY0FBYyxFQUFFQSxjQUFjO0lBQzlCRCxXQUFXLEVBQUVBLFdBQVc7SUFDeEJqQixLQUFLLEVBQUVBLEtBQUs7SUFDWmQsUUFBUSxFQUFFQSxRQUFRO0lBQ2xCZ0QsWUFBWSxFQUFFQSxZQUFZO0lBQzFCNUMsWUFBWSxFQUFFQSxZQUFZO0lBQzFCTSxVQUFVLEVBQUVBO0VBQ2hCLENBQUMsQ0FDSyxDQUNELENBQUMsR0FDSixJQUFJO0FBQ2QsQ0FBQztBQUFDMkksT0FBQSxDQUFBekosU0FBQSxHQUFBQSxTQUFBIiwiaWdub3JlTGlzdCI6W119
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9FdmVudFR5cGUiLCJfRHluYW1pY0pTIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQmFzZUZpZWxkIiwicHJvcHMiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUiLCJfcHJvcHMkY29uZmlnJGF0dHJpYnUyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIlJlYWN0IiwidXNlU3RhdGUiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJ2YWx1ZU9iamVjdCIsInNldFZhbHVlT2JqZWN0IiwidmFsdWVQcm9wZXJ0eSIsInNldFZhbHVlUHJvcGVydHkiLCJsb2FkaW5nUmVmIiwidXNlUmVmIiwiY29uZmlnIiwic2V0Q29uZmlnIiwidmFsdWUiLCJzZXRWYWx1ZSIsIlV0aWxzIiwiaXNOdWxsIiwidmFsdWVSZWYiLCJzZWxlY3RPcHRpb25zIiwic2V0U2VsZWN0T3B0aW9ucyIsImRpc2FibGVkIiwic2V0RGlzYWJsZWQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInJlcXVpcmVkIiwic2V0UmVxdWlyZWQiLCJtaW5EYXRlIiwic2V0TWluRGF0ZSIsIm1heERhdGUiLCJzZXRNYXhEYXRlIiwicmVzZXRTd2l0Y2giLCJzZXRSZXNldFN3aXRjaCIsInZhbGlkYXRlT25DaGFuZ2UiLCJpbml0aWFsVmFsdWVCb3VuZCIsInJlZiIsInZhbGlkIiwibGFzdFZhbGlkYXRpb24iLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiYmluZCIsImJvdW5kVmFsdWUiLCJmaWVsZFR5cGUiLCJpZCIsInZhbHVlUGFyc2VyIiwiZm9ybSIsInZhbGlkYXRlUGFyZW50IiwiZGF0YUJpbmRpbmciLCJkb1ZhbGlkYXRpb24iLCJ2YWx1ZXMiLCJjdXJyZW50VmFsdWUiLCJtYXJrZXJzIiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiaXNGb3JtTWFya2Vyc0VuYWJsZWQiLCJsYXN0IiwicGF0aCIsImdldFZhbHVlUGF0aCIsInJlc3VsdCIsInZhbGlkYXRvciIsInNjcmlwdCIsImR5bmFtaWNKUyIsImV4ZWN1dGVTY3JpcHRPYmplY3QiLCJjb25jYXQiLCJtZXNzYWdlIiwidmFsaWRhdGVGaWVsZCIsImZvcmNlTWFya2VyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVmFsaWRpdHkiLCJvblZhbGlkaXR5Q2hhbmdlIiwiaGFuZGxlIiwiYXBpIiwicGFyc2VkQ29uZmlnIiwicGFyc2VDb25maWciLCJ2aWV3SWQiLCJldmVudE1hbmFnZXIiLCJhZGRTdWJzY3JpcHRpb25zIiwiZXZlbnRIYW5kbGluZ0NvbmZpZyIsImFkZFN5c3RlbVN1YnNjcmlwdGlvbnMiLCJldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uIiwiZXZlbnQiLCJFdmVudCIsImZpcmVFdmVudCIsIkV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwic2NyaXB0VmFsdWUiLCJpc0V4cHJlc3Npb24iLCJleGVjdXRlU2NyaXB0IiwicmVwbGFjZSIsInZhbCIsImluc3RhbmNlVHlwZSIsImhhbmRsZUNoYW5nZSIsInByZXZpb3VzbHlFbmFibGVkIiwiZW5hYmxlRm9ybU1hcmtlcnMiLCJjdiIsImN2Rm9yVmFsaWRhdGlvbiIsImZpZWxkIiwiYWRkRmllbGQiLCJwYXJlbnRJZCIsImJpbmRWYWx1ZVRvRm9ybSIsImVycm9yIiwibGVuZ3RoIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInJlbW92ZUZpZWxkIiwiaGFuZGxlVmFsdWVDaGFuZ2UiLCJuZXdWYWx1ZSIsInZhbHVlQ2hhbmdlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzcGxpY2UiLCJuZXdWYWx1ZUVsZW1lbnQiLCJwdXNoIiwic2VsZWN0SXRlbUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJzZWxlY3RPcHRpb24iLCJ2YWx1ZUNoYW5nZUhhbmRsZXIiLCJWQUxVRV9DSEFOR0UiLCJ2YWxpZGF0ZSIsInBhcnNlVmFsdWUiLCJpbmJvdW5kIiwicm93cyIsInJvd3NIYW5kbGVyIiwiZ2V0VmFsaWRhdGlvbkdyb3VwIiwiZ3JvdXAiLCJjbGVhciIsImNsZWFySGFuZGxlciIsInNjcm9sbFRvIiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsImJsb2NrIiwidmFsdWVDaGFuZ2VDYWxsYmFjayIsImhhbmRsZUxvYWRDb21wbGV0ZSIsInJlZnJlc2giLCJyZXF1aXJlZE5ld1ZhbCIsIm51bGxhYmxlIiwiaXNSZXF1aXJlZCIsInJlc2V0Iiwic2V0RmllbGRSZXF1aXJlZCIsIm5ld1ZhbCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImdldENoaWxkcmVuIiwibG9hZERhdGEiLCJsb2FkRGF0YUhhbmRsZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwia2V5Iiwic3R5bGUiLCJ0ZXh0QWxpZ24iLCJtYXJnaW5MZWZ0IiwiYXR0cmlidXRlcyIsImluZGV4IiwiZGlzcGxheSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsImNoaWxkcmVuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Jhc2VGaWVsZC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRUeXBlJztcbmltcG9ydCBkeW5hbWljSlMgZnJvbSAnLi4vLi4vRHluYW1pY0pTJztcblxuZXhwb3J0IGNvbnN0IEJhc2VGaWVsZCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtlcnJvck1lc3NhZ2UsIHNldEVycm9yTWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW3ZhbHVlT2JqZWN0LCBzZXRWYWx1ZU9iamVjdF0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW3ZhbHVlUHJvcGVydHksIHNldFZhbHVlUHJvcGVydHldID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgLy8gVE9ETyA6IFJlcGxhY2UgdGhlIHN0YXRlIHZhbHVlIHdpdGggdGhlIHZhbHVlUmVmIGJlbG93LiBUaGUgc3RhdGUgdmFsdWUgaXMgb2NjYXRpb25hbHkgbm90IGF2YWlsYWJsZSBpbiB0aW1lIGZvciBldmVudCBzY3JpcHRzXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlKSA/IHByb3BzLnZhbHVlIDogbnVsbCk7XG4gICAgLy8gVE9ETyA6IFJlcGxhY2UgdGhlIHN0YXRlIHZhbHVlIHdpdGggdGhpcyByZWYgZm9yIHRoZSByZWFzb24gbWVuc2lvbmVkIGFib3ZlXG4gICAgY29uc3QgdmFsdWVSZWYgPSBSZWFjdC51c2VSZWYoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZSkgPyBwcm9wcy52YWx1ZSA6IG51bGwpO1xuICAgIGNvbnN0IFtzZWxlY3RPcHRpb25zLCBzZXRTZWxlY3RPcHRpb25zXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZGlzYWJsZWQsIHNldERpc2FibGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3JlcXVpcmVkLCBzZXRSZXF1aXJlZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbWluRGF0ZSwgc2V0TWluRGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbWF4RGF0ZSwgc2V0TWF4RGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcmVzZXRTd2l0Y2gsIHNldFJlc2V0U3dpdGNoXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB2YWxpZGF0ZU9uQ2hhbmdlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlQm91bmQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCB2YWxpZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgLy8gTWVtbyBvZiB0aGUgbGFzdCAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgdHVwbGUgKyBpdHMgcmVzdWx0LnZhbGlkLlxuICAgIC8vIGRvVmFsaWRhdGlvbiBzaG9ydC1jaXJjdWl0cyB3aGVuIHRoZSBpbnB1dHMgYXJlIHVuY2hhbmdlZCBzbyByZXBlYXRlZCByZWFkc1xuICAgIC8vIG9mIEAje2Zvcm19LnZhbHVlICh3aGljaCBpdGVyYXRlcyBmaWVsZHMgYW5kIGNhbGxzIHZhbGlkYXRlIG9uIGVhY2ggaW5cbiAgICAvLyBGb3JtLmpzeCBnZXQgdmFsdWUoKSkgZG9uJ3Qga2VlcCBmaXJpbmcgc2V0RXJyb3JNZXNzYWdlL3NldEhhc0Vycm9yIGFuZFxuICAgIC8vIHJlLXJlbmRlci1sb29wIHRoZSB3aG9sZSBmb3JtLlxuICAgIGNvbnN0IGxhc3RWYWxpZGF0aW9uID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBiaW5kKCk7XG4gICAgfSwgW3ZhbHVlT2JqZWN0XSk7XG5cbiAgICBmdW5jdGlvbiBiaW5kKCkge1xuICAgICAgICBsZXQgYm91bmRWYWx1ZSA9IHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldO1xuICAgICAgICBpZiAoYm91bmRWYWx1ZSAmJiAhaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCkge1xuICAgICAgICAgICAgaW5pdGlhbFZhbHVlQm91bmQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0xPT0tVUCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJvdW5kVmFsdWUgfHwgVXRpbHMuaXNOdWxsKGJvdW5kVmFsdWUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZihwcm9wcy52YWx1ZVBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUocHJvcHMudmFsdWVQYXJzZXIoYm91bmRWYWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoYm91bmRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHByb3BzLnZhbHVlUGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKHByb3BzLnZhbHVlUGFyc2VyKGJvdW5kVmFsdWUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShib3VuZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gYm91bmRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGJpbmQoKTtcbiAgICB9LCBbdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV1dKTtcblxuICAgIC8vIENoYW5nZSB0aGUgcmVxdWlyZWQgdmFsdWUgYW5kIHJlLXZhbGlkYXRlIGZpZWxkIGlmIG5lY2Vzc2FyeVxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGNvbmZpZykgJiYgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAudmFsaWRhdGVQYXJlbnQoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgZG9WYWxpZGF0aW9uKHByb3BzLnZhbHVlcywgdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlT25DaGFuZ2UuY3VycmVudCA9IG51bGw7XG4gICAgfSwgW3JlcXVpcmVkXSk7XG5cbiAgICBjb25zdCBkb1ZhbGlkYXRpb24gPSAodmFsdWVzLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJzID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCk7XG4gICAgICAgICAgICBjb25zdCBsYXN0ID0gbGFzdFZhbGlkYXRpb24uY3VycmVudDtcbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBudWxsXG4gICAgICAgICAgICAgICAgJiYgbGFzdC5jdXJyZW50VmFsdWUgPT09IGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICAgICYmIGxhc3QucmVxdWlyZWQgPT09IHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgJiYgbGFzdC5tYXJrZXJzID09PSBtYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QudmFsaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXRoID0gcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlUGF0aChjb25maWcuZGF0YUJpbmRpbmcgfHwgY29uZmlnLmlkKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7dmFsaWQ6IHRydWV9O1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29uZmlnLnZhbGlkYXRvcikgJiYgIVV0aWxzLmlzTnVsbChjb25maWcudmFsaWRhdG9yLnNjcmlwdCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBkeW5hbWljSlMuZXhlY3V0ZVNjcmlwdE9iamVjdChgJHtjb25maWcuaWR9VmFsaWRhdG9yYCwgY29uZmlnLnZhbGlkYXRvci5zY3JpcHQpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlID0gcmVzdWx0Lm1lc3NhZ2UgPyByZXN1bHQubWVzc2FnZSA6IGNvbmZpZy52YWxpZGF0b3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBVdGlscy52YWxpZGF0ZUZpZWxkKHBhdGgudmFsdWVQcm9wZXJ0eSwgcmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QsIGN1cnJlbnRWYWx1ZSwgY29uZmlnLnZhbGlkYXRvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShtYXJrZXJzIHx8IHJlc3VsdC5mb3JjZU1hcmtlciA/IHJlc3VsdC5tZXNzYWdlIDogJycpO1xuICAgICAgICAgICAgc2V0SGFzRXJyb3IoIXJlc3VsdC52YWxpZCAmJiAobWFya2VycyB8fCByZXN1bHQuZm9yY2VNYXJrZXIpKTtcbiAgICAgICAgICAgIHZhbGlkLmN1cnJlbnQgPSByZXN1bHQudmFsaWQgJiYgKG1hcmtlcnMgfHwgcmVzdWx0LmZvcmNlTWFya2VyKTtcblxuICAgICAgICAgICAgaWYgKG1hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLnNldEZpZWxkRXJyb3IoY29uZmlnLmlkLCB0eXBlb2YgcmVzdWx0Lm1lc3NhZ2UgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGFzdFZhbGlkYXRpb24uY3VycmVudCA9IHsgY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycywgdmFsaWQ6IHJlc3VsdC52YWxpZCB9O1xuXG4gICAgICAgICAgICAvLyBQdWJsaXNoIHRvIHRoZSBmb3JtJ3MgdmFsaWRpdHkgcmVnaXN0ZXIuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGhcbiAgICAgICAgICAgIC8vIGZvciBcImlzIHRoaXMgZmllbGQgdmFsaWQ/XCIg4oCUIGZvcm0udmFsdWUgcmVhZHMgZnJvbSBoZXJlIHdpdGhvdXRcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgYmFjayBpbnRvIHRoZSBmaWVsZCAoa2lsbHMgdGhlIGJpLWRpcmVjdGlvbmFsIGNoYWluKS5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMuZm9ybSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcHJvcHMuZm9ybSgpLnNldEZpZWxkVmFsaWRpdHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtKCkuc2V0RmllbGRWYWxpZGl0eShjb25maWcuaWQgfHwgY29uZmlnLmRhdGFCaW5kaW5nLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiByZXN1bHQudmFsaWQsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBmb3JjZU1hcmtlcjogcmVzdWx0LmZvcmNlTWFya2VyLFxuICAgICAgICAgICAgICAgICAgICBvblZhbGlkaXR5Q2hhbmdlOiAodmFsaWQsIGVycm9yTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIYXNFcnJvcighdmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHByb3BzLmhhbmRsZS5hcGkgPSBhcGkoKTtcbiAgICB9KTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwoY29uZmlnKSkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKHBhcnNlZENvbmZpZy5ldmVudEhhbmRsaW5nQ29uZmlnLCBwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyhwcm9wcy52aWV3SWQsIHBhcnNlZENvbmZpZyk7XG4gICAgICAgICAgICBzZXRDb25maWcocGFyc2VkQ29uZmlnKTtcbiAgICAgICAgICAgIHNldFZpc2libGUoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJzZWRDb25maWcudmlzaWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKSk7XG4gICAgICAgICAgICBzZXREaXNhYmxlZChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy5kaXNhYmxlZCwgcGFyc2VkQ29uZmlnLmlkLCBmYWxzZSkpO1xuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykgJiYgIVV0aWxzLmlzTnVsbChjb25maWcpKSB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC5nZXRWYWx1ZVBhdGgoY29uZmlnLmRhdGFCaW5kaW5nIHx8IGNvbmZpZy5pZCwgcHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVPYmplY3QocGF0aC52YWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVQcm9wZXJ0eShwYXRoLnZhbHVlUHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjcmlwdFZhbHVlID0gYXBwbGljYXRpb25NYW5hZ2VyLmlzRXhwcmVzc2lvbihwcm9wcy5jb25maWcudmFsdWUpID9cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQocHJvcHMuY29uZmlnLmlkLnJlcGxhY2UoJy4nLCAnXycpICsgJ1ZhbHVlJywgcHJvcHMuY29uZmlnLnZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNvbmZpZy52YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNjcmlwdFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gc2NyaXB0VmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgPyBzY3JpcHRWYWx1ZS52YWx1ZSA6IHNjcmlwdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKGNvbmZpZy5kYXRhQmluZGluZyB8fCBjb25maWcuaWQsIHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZWxmLWFubm91bmNlOiB2YWxpZGF0ZSB0aGlzIGZpZWxkIGFnYWluc3QgY3VycmVudCBkYXRhIGFuZCBwdXNoXG4gICAgICAgICAgICAvLyB2ZXJkaWN0IHRvIHRoZSBmb3JtJ3MgdmFsaWRpdHkgcmVnaXN0ZXIgdmlhIHNldEZpZWxkVmFsaWRpdHkgKGluXG4gICAgICAgICAgICAvLyBkb1ZhbGlkYXRpb24pLiBNYXJrZXJzIGFyZSBzdXBwcmVzc2VkIGxvY2FsbHkgc28gaW5pdGlhbC1sb2FkXG4gICAgICAgICAgICAvLyB2YWxpZGF0aW9uIG5ldmVyIGZsYXNoZXMgZXJyb3IgVUkg4oCUIGV2ZW4gaWYgZ2xvYmFsIG1hcmtlcnMgYXJlXG4gICAgICAgICAgICAvLyBhbHJlYWR5IG9uIChlLmcuIGFzeW5jIGRhdGEgYXJyaXZpbmcgYWZ0ZXIgRm9ybSdzIENPTVBPTkVOVF9MT0FEXG4gICAgICAgICAgICAvLyBhbHJlYWR5IHJlLWVuYWJsZWQgbWFya2VycykuIENhY2hlIG1ha2VzIHJlcGVhdCBzZWxmLVxuICAgICAgICAgICAgLy8gYW5ub3VuY2VtZW50cyBjaGVhcCB3aGVuIChjdXJyZW50VmFsdWUsIHJlcXVpcmVkLCBtYXJrZXJzKVxuICAgICAgICAgICAgLy8gdHVwbGUgaXMgdW5jaGFuZ2VkLlxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNseUVuYWJsZWQgPSBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c2x5RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN2ID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSdW4gaW5ib3VuZCB2YWx1ZVBhcnNlciBzbyBmaWVsZHMgd2hvc2UgcGFyc2VyIHN5bnRoZXNpc2VzXG4gICAgICAgICAgICAgICAgLy8gYSBkZWZhdWx0IGZvciBudWxsIGlucHV0IChlLmcuIFJhZGlvR3JvdXAg4oaSIGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICAvLyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhlaXIgc2VtYW50aWMgdmFsdWUsIG5vdCB0aGUgcmF3XG4gICAgICAgICAgICAgICAgLy8gbW9kZWwuIGJpbmQoKSBkb2VzIHRoZSBzYW1lIGZvciBub24tbnVsbCBtb2RlbCB2YWx1ZXMuXG4gICAgICAgICAgICAgICAgY29uc3QgY3ZGb3JWYWxpZGF0aW9uID0gIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZVBhcnNlcilcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9wcy52YWx1ZVBhcnNlcihjdiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBjdjtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRpb24ocHJvcHMudmFsdWVzLCBjdkZvclZhbGlkYXRpb24pO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNseUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtwcm9wcy52YWx1ZXMsIGNvbmZpZ10pO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gdHJ1ZSAmJiAhVXRpbHMuaXNOdWxsKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC5hZGRGaWVsZChjb25maWcuaWQgfHwgY29uZmlnLmRhdGFCaW5kaW5nLCBwcm9wcy5oYW5kbGUsIHByb3BzLnBhcmVudElkLCBwcm9wcy5iaW5kVmFsdWVUb0Zvcm0pO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpICYmICFVdGlscy5pc051bGwoZmllbGQuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmVycm9yLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SGFzRXJyb3IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yTWVzc2FnZShmaWVsZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBkbyBOT1QgdmFsaWRhdGUgb24gbW91bnQ6IHZhbHVlUmVmLmN1cnJlbnQgaXMgbm90XG4gICAgICAgICAgICAvLyB5ZXQgYm91bmQgZnJvbSB0aGUgZm9ybSdzIG1hc3RlciBkYXRhIGF0IHRoaXMgcG9pbnQg4oCUIGJpbmQoKVxuICAgICAgICAgICAgLy8gcnVucyBpbiBhIGxhdGVyIHJlbmRlciBjeWNsZSB2aWEgdGhlIFt2YWx1ZU9iamVjdF0gdXNlRWZmZWN0LlxuICAgICAgICAgICAgLy8gVmFsaWRhdGluZyBoZXJlIHdvdWxkIG1hcmsgZXZlcnkgZmllbGQtd2l0aC1tYXN0ZXItdmFsdWUgYXNcbiAgICAgICAgICAgIC8vIGludmFsaWQgKGN1cnJlbnRWYWx1ZT1udWxsKSwgcGVybWFuZW50bHkgZmxpcHBpbmcgZm9ybS52YWx1ZSB0b1xuICAgICAgICAgICAgLy8gbnVsbC4gUmVnaXN0ZXIgc3RheXMgZW1wdHkgZm9yIHRoaXMgZmllbGQgdW50aWwgZWl0aGVyIHVzZXJcbiAgICAgICAgICAgIC8vIGludGVyYWN0aW9uIChoYW5kbGVDaGFuZ2Ug4oaSIHZhbGlkYXRlRmllbGQg4oaSIGRvVmFsaWRhdGlvbiDihpJcbiAgICAgICAgICAgIC8vIHNldEZpZWxkVmFsaWRpdHkpIG9yIGFuIGV4cGxpY2l0IGZvcm0uYXBpLnZhbGlkYXRlQWxsKCkgcnVucy5cbiAgICAgICAgICAgIC8vIGZvcm0udmFsdWUgdHJlYXRzIGVtcHR5LXJlZ2lzdGVyIGFzIFwib3B0aW1pc3RpY2FsbHkgdmFsaWRcIiDigJQgc29cbiAgICAgICAgICAgIC8vIGFueSBzYXZlIGZsb3cgTVVTVCBjYWxsIGZvcm0uYXBpLnZhbGlkYXRlQWxsKCkgYmVmb3JlIHJlYWRpbmdcbiAgICAgICAgICAgIC8vIGZvcm0udmFsdWUsIG9yIGludmFsaWQgZGF0YSB3aWxsIHBhc3MgdGhyb3VnaCBzaWxlbnRseS5cbiAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuZm9ybSgpKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICAgICAgcHJvcHMuZm9ybSgpXG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVGaWVsZChwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcgfHwgcHJvcHMuY29uZmlnLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBoYW5kbGVWYWx1ZUNoYW5nZSA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBpbml0aWFsVmFsdWVCb3VuZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgbGV0IHZhbHVlQ2hhbmdlZCA9IG5ld1ZhbHVlICE9PSB2YWx1ZVJlZi5jdXJyZW50O1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG5ld1ZhbHVlKSAmJiAhVXRpbHMuaXNOdWxsKHZhbHVlUmVmLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ1NFTEVDVCcgfHwgcHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0xPT0tVUCcpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZS5pZCAhPT0gdmFsdWVSZWYuY3VycmVudC5pZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMuY29uZmlnLmZpZWxkVHlwZSA9PT0gJ0RBVEUnIHx8IHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdUSU1FJykge1xuICAgICAgICAgICAgICAgIHZhbHVlQ2hhbmdlZCA9IG5ld1ZhbHVlICE9PSB2YWx1ZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZVJlZi5jdXJyZW50KSAhPT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdHUklEJyAmJiB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSkge1xuICAgICAgICAgICAgdmFsdWVPYmplY3RbdmFsdWVQcm9wZXJ0eV0uc3BsaWNlKDAsIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldLmxlbmd0aCk7XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbmV3VmFsdWVFbGVtZW50IG9mIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldLnB1c2gobmV3VmFsdWVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpZCA9IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA/IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA6IHByb3BzLmNvbmZpZy5pZDtcbiAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgIC5oYW5kbGVDaGFuZ2UoIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuZGF0YUJpbmRpbmcpID8gcHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nIDogaWQsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGxldCBpZCA9IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA/IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA6IHByb3BzLmNvbmZpZy5pZDtcbiAgICAgICAgICAgIC8vYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuICAgICAgICAgICAgaWYgKHByb3BzLmNvbmZpZy5maWVsZFR5cGUgPT09ICdTRUxFQ1QnKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdEl0ZW1DaGFuZ2UgPSBwcm9wcy5mb3JtKClcbiAgICAgICAgICAgICAgICAgICAgLmhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UoaWQsIHNlbGVjdE9wdGlvbnMsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShzZWxlY3RJdGVtQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVJlZi5jdXJyZW50ID0gc2VsZWN0SXRlbUNoYW5nZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdE9wdGlvbiBvZiBzZWxlY3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RPcHRpb24uaWQgPT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHNlbGVjdE9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHByb3BzLmZvcm0oKVxuICAgICAgICAgICAgICAgICAgICAuaGFuZGxlQ2hhbmdlKCFVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmRhdGFCaW5kaW5nKSA/IHByb3BzLmNvbmZpZy5kYXRhQmluZGluZyA6IGlkLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLlZBTFVFX0NIQU5HRSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbGlkYXRlOiAodmFsdWVzLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9WYWxpZGF0aW9uKHZhbHVlcywgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJzZVZhbHVlOiAodmFsdWUsIGluYm91bmQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZVBhcnNlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnZhbHVlUGFyc2VyKHZhbHVlLCBpbmJvdW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHZhbGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZC5jdXJyZW50O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCByb3dzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5yb3dzSGFuZGxlciA/IHByb3BzLnJvd3NIYW5kbGVyKCkgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFZhbGlkYXRpb25Hcm91cDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKGNvbmZpZy52YWxpZGF0b3IpID8gY29uZmlnLnZhbGlkYXRvci5ncm91cCA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVWYWx1ZUNoYW5nZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5jbGVhckhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmNsZWFySGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzY3JvbGxUbzogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZWYuY3VycmVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWhhdmlvcjogXCJzbW9vdGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiBcImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwodmFsdWVQcm9wZXJ0eSkgJiYgIVV0aWxzLmlzTnVsbCh2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFVdGlscy5pc051bGwocHJvcHMudmFsdWVQYXJzZXIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnZhbHVlUGFyc2VyKHZhbHVlT2JqZWN0W3ZhbHVlUHJvcGVydHldLCBmYWxzZSkgOiB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU9iamVjdFt2YWx1ZVByb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnZhbHVlUGFyc2VyID8gcHJvcHMudmFsdWVQYXJzZXIodmFsdWUsIGZhbHNlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCB2YWx1ZSh2YWwpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVWYWx1ZUNoYW5nZSh2YWwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VDYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VDYWxsYmFjayh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChkaXNhYmxlZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHZpc2libGUodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHNldFZpc2libGUodmlzaWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFuZGxlTG9hZENvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZENvbmZpZyA9IFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlKFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLnZpc2libGUsIHBhcnNlZENvbmZpZy5pZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLmRpc2FibGVkLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWlyZWROZXdWYWwgPSAhVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52YWxpZGF0b3IpID9cbiAgICAgICAgICAgICAgICAgICAgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyc2VkQ29uZmlnLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyc2VkQ29uZmlnLmlkLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICB8fCBVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52YWxpZGF0b3IucmVxdWlyZWQsIHBhcnNlZENvbmZpZy5pZCwgZmFsc2UpIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPbkNoYW5nZS5jdXJyZW50ID0gcmVxdWlyZWQgIT09IG51bGwgJiYgcmVxdWlyZWQgIT09IHJlcXVpcmVkTmV3VmFsICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2V0UmVxdWlyZWQocmVxdWlyZWROZXdWYWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCByZXF1aXJlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IHJlcXVpcmVkKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXF1aXJlZChpc1JlcXVpcmVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgbWluRGF0ZShtaW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0TWluRGF0ZShtaW5EYXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgbWF4RGF0ZShtYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0TWF4RGF0ZShtYXhEYXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgc2VsZWN0T3B0aW9ucyhzZWxlY3RPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0T3B0aW9ucyhzZWxlY3RPcHRpb25zKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNldCgpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXNldFN3aXRjaCghcmVzZXRTd2l0Y2gpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldEZpZWxkUmVxdWlyZWQobmV3VmFsLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9uQ2hhbmdlLmN1cnJlbnQgPSB2YWxpZGF0ZTtcbiAgICAgICAgICAgICAgICBzZXRSZXF1aXJlZChuZXdWYWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldENoaWxkcmVuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMuZ2V0Q2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5nZXRDaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2FkRGF0YSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMubG9hZERhdGFIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmxvYWREYXRhSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbmZpZyA/XG4gICAgICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT1cImNvbC0qLSpcIiBrZXk9e2NvbmZpZy5pZH0gc3R5bGU9e3tcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICAgICAgbWFyZ2luTGVmdDogIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuYXR0cmlidXRlcz8uc3R5bGU/Lm1hcmdpbkxlZnQpID8gcHJvcHMuY29uZmlnLmF0dHJpYnV0ZXM/LnN0eWxlPy5tYXJnaW5MZWZ0IDpcbiAgICAgICAgICAgICAgICBwcm9wcy5jb25maWcuaW5kZXggPT09IDAgPyAwIDogJzhweCcsXG4gICAgICAgICAgICBkaXNwbGF5OiAhdmlzaWJsZSB8fCBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnaGlkZGVuJywgZmFsc2UpID09PSB0cnVlID8gJ25vbmUnIDogJ2Jsb2NrJ1xuICAgICAgICB9fT5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgIHtwcm9wcy5jaGlsZHJlbih7XG4gICAgICAgICAgICBtaW5EYXRlOiBtaW5EYXRlLFxuICAgICAgICAgICAgbWF4RGF0ZTogbWF4RGF0ZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIHZhbHVlT2JqZWN0OiB2YWx1ZU9iamVjdCxcbiAgICAgICAgICAgIHZhbHVlUHJvcGVydHk6IHZhbHVlUHJvcGVydHksXG4gICAgICAgICAgICBoYW5kbGVWYWx1ZUNoYW5nZTogaGFuZGxlVmFsdWVDaGFuZ2UsXG4gICAgICAgICAgICBzZXRWYWx1ZTogc2V0VmFsdWUsXG4gICAgICAgICAgICBzZXRTZWxlY3RPcHRpb25zOiBzZXRTZWxlY3RPcHRpb25zLFxuICAgICAgICAgICAgc2VsZWN0T3B0aW9uczogc2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgIHNldFJlc2V0U3dpdGNoOiBzZXRSZXNldFN3aXRjaCxcbiAgICAgICAgICAgIHJlc2V0U3dpdGNoOiByZXNldFN3aXRjaCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGhhc0Vycm9yOiBoYXNFcnJvcixcbiAgICAgICAgICAgIGRvVmFsaWRhdGlvbjogZG9WYWxpZGF0aW9uLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBsb2FkaW5nUmVmOiBsb2FkaW5nUmVmXG4gICAgICAgIH0pfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA6IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxtQkFB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