@wavemaker/app-ng-runtime 11.8.0-next.27302 → 11.8.0-next.27306

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.
@@ -4707,9 +4707,8 @@
4707
4707
  this.instance.validationmessage = lodashEs.get(err, 'errorMessage');
4708
4708
  }
4709
4709
  else {
4710
- // @ts-ignore
4711
- const keys = keys(err);
4712
- this.instance.validationmessage = (err[keys[0]]).toString();
4710
+ const keys$1 = lodashEs.keys(err);
4711
+ this.instance.validationmessage = (err[keys$1[0]]).toString();
4713
4712
  }
4714
4713
  return err;
4715
4714
  }).then(response => {
@@ -4849,9 +4848,8 @@
4849
4848
  this.instance.validationmessage = lodashEs.get(fieldErrors, 'errorMessage');
4850
4849
  }
4851
4850
  else {
4852
- // @ts-ignore
4853
- const keys = keys(fieldErrors);
4854
- const key = keys[0];
4851
+ const keys$1 = lodashEs.keys(fieldErrors);
4852
+ const key = keys$1[0];
4855
4853
  const validationMsgKey = lodashEs.get(DEFAULT_VALIDATOR, key) || this.formwidget.validateType;
4856
4854
  if (validationMsgKey) {
4857
4855
  const msg = lodashEs.get(this.defaultValidatorMessages, validationMsgKey) || this.instance.validationmessage;
@@ -21,7 +21,7 @@ export const LIVE_CONSTANTS = {
21
21
  'EMPTY': 'empty'
22
22
  };
23
23
  // Returns true if widget is autocomplete or chips
24
- function isSearchWidgetType(widget) {
24
+ export function isSearchWidgetType(widget) {
25
25
  return includes([FormWidgetType.AUTOCOMPLETE, FormWidgetType.TYPEAHEAD, FormWidgetType.CHIPS], widget);
26
26
  }
27
27
  function onSuccess(response, res, rej) {
@@ -578,4 +578,4 @@ export function transformData(dataObject, variableName) {
578
578
  }
579
579
  return dataObject;
580
580
  }
581
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvdXRpbHMvZGF0YS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFDSCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUNsQixRQUFRLEVBQ1IsWUFBWSxFQUNaLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUM1QixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFDMUIsS0FBSyxFQUNSLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV2QixNQUFNLENBQU4sSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3ZCLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0lBQ2pCLGdDQUFhLENBQUE7QUFDakIsQ0FBQyxFQUxXLGVBQWUsS0FBZixlQUFlLFFBSzFCO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDMUIsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxhQUFhLEVBQUUsVUFBVTtJQUN6QixXQUFXLEVBQUUsS0FBSztJQUNsQixhQUFhLEVBQUUsT0FBTztJQUN0QixZQUFZLEVBQUUsQ0FBQyxNQUFN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QVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlLCBkZWJvdW5jZSwgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVdpZGdldFR5cGUsIGlzRGVmaW5lZCwgTWF0Y2hNb2RlIH0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQgeyBpc0RhdGFTZXRXaWRnZXQgfSBmcm9tICcuL3dpZGdldC11dGlscyc7XG5pbXBvcnQge1xuICAgIGVhY2gsXG4gICAgZmlsdGVyLFxuICAgIGZvckVhY2gsIGdldCwgaGVhZCxcbiAgICBpbmNsdWRlcyxcbiAgICBpbnRlcnNlY3Rpb24sXG4gICAgaXNBcnJheSwgaXNFbXB0eSwgaXNGdW5jdGlvbixcbiAgICBpc051bGwsXG4gICAgaXNPYmplY3QsXG4gICAgaXNTdHJpbmcsXG4gICAgaXNVbmRlZmluZWQsIGtleXMsIHJlcGxhY2UsXG4gICAgc3BsaXRcbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBub29wID0gKCkgPT4geyB9O1xuXG5leHBvcnQgZW51bSBMaXZlX09wZXJhdGlvbnMge1xuICAgIElOU0VSVCA9ICdpbnNlcnQnLFxuICAgIFVQREFURSA9ICd1cGRhdGUnLFxuICAgIERFTEVURSA9ICdkZWxldGUnLFxuICAgIFJFQUQgPSAncmVhZCdcbn1cblxuZXhwb3J0IGNvbnN0IEFMTEZJRUxEUyA9ICdBbGwgRmllbGRzJztcblxuZXhwb3J0IGNvbnN0IExJVkVfQ09OU1RBTlRTID0ge1xuICAgICdFTVBUWV9LRVknOiAnRU1QVFlfTlVMTF9GSUxURVInLFxuICAgICdFTVBUWV9WQUxVRSc6ICdObyBWYWx1ZScsXG4gICAgJ0xBQkVMX0tFWSc6ICdrZXknLFxuICAgICdMQUJFTF9WQUxVRSc6ICd2YWx1ZScsXG4gICAgJ05VTExfRU1QVFknOiBbJ251bGwnLCAnZW1wdHknXSxcbiAgICAnTlVMTCc6ICdudWxsJyxcbiAgICAnRU1QVFknOiAnZW1wdHknXG59O1xuXG4vLyBSZXR1cm5zIHRydWUgaWYgd2lkZ2V0IGlzIGF1dG9jb21wbGV0ZSBvciBjaGlwc1xuZnVuY3Rpb24gaXNTZWFyY2hXaWRnZXRUeXBlKHdpZGdldCkge1xuICAgIHJldHVybiBpbmNsdWRlcyhbRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFLCBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQsIEZvcm1XaWRnZXRUeXBlLkNISVBTXSwgd2lkZ2V0KTtcbn1cblxuZnVuY3Rpb24gb25TdWNjZXNzKHJlc3BvbnNlLCByZXMsIHJlaikge1xuICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICByZWoocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcyhyZXNwb25zZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybURhdGFPcGVyYXRpb24oZGF0YVNvdXJjZSwgcmVxdWVzdERhdGEsIG9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19DUlVEKSkge1xuICAgICAgICAgICAgbGV0IGZuO1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uVHlwZSA9IG9wdGlvbnMub3BlcmF0aW9uVHlwZTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTGl2ZV9PcGVyYXRpb25zLlVQREFURTpcbiAgICAgICAgICAgICAgICAgICAgZm4gPSBEYXRhU291cmNlLk9wZXJhdGlvbi5VUERBVEVfUkVDT1JEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExpdmVfT3BlcmF0aW9ucy5JTlNFUlQ6XG4gICAgICAgICAgICAgICAgICAgIGZuID0gRGF0YVNvdXJjZS5PcGVyYXRpb24uSU5TRVJUX1JFQ09SRDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMaXZlX09wZXJhdGlvbnMuREVMRVRFOlxuICAgICAgICAgICAgICAgICAgICBmbiA9IERhdGFTb3VyY2UuT3BlcmF0aW9uLkRFTEVURV9SRUNPUkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YVNvdXJjZS5leGVjdXRlKGZuLCByZXF1ZXN0RGF0YSkudGhlbihyZXNwb25zZSA9PiBvblN1Y2Nlc3MocmVzcG9uc2UsIHJlcywgcmVqKSwgcmVqKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSkge1xuICAgICAgICAgICAgaWYoZGF0YVNvdXJjZS5jYXRlZ29yeSA9PT0gXCJ3bS5DcnVkVmFyaWFibGVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IG9wdGlvbnMub3BlcmF0aW9uVHlwZSA9PT0gJ2luc2VydCcgPyAnY3JlYXRlJyA6IChvcHRpb25zLm9wZXJhdGlvblR5cGUgPT09ICdkZWxldGUnID8gJ2RlbGV0ZScgOiAndXBkYXRlJyk7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklOVk9LRSwge1xuICAgICAgICAgICAgICAgICAgICAnc2tpcE5vdGlmaWNhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICdvcGVyYXRpb24nOiBvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICdpbnB1dEZpZWxkcyc6IHJlcXVlc3REYXRhXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXMsIHJlaik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TRVRfSU5QVVQsIHJlcXVlc3REYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSU5WT0tFLCB7XG4gICAgICAgICAgICAgICAgICAgICdza2lwTm90aWZpY2F0aW9uJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzLCByZWopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzKHJlcXVlc3REYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFTb3VyY2UoZGF0YVNvdXJjZSwgb3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJlaigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiBvcHRpb25zLmZpbHRlckZpZWxkcyB8fCB7fSxcbiAgICAgICAgICAgICdvcmRlckJ5Jzogb3B0aW9ucy5vcmRlckJ5LFxuICAgICAgICAgICAgJ3BhZ2UnOiBvcHRpb25zLnBhZ2UgfHwgMSxcbiAgICAgICAgICAgICdsb2dpY2FsT3AnIDogb3B0aW9ucy5jb25kaXRpb24gfHwgJydcbiAgICAgICAgfSkudGhlbihyZXMsIHJlaik7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuZmV0Y2hSZWxhdGVkRmllbGREYXRhXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIGRhdGEgZm9yIHRoZSByZWxhdGVkIGZpZWxkIGluIGxpdmUgZm9ybS8gZ3JpZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5EZWYgZmllbGQgZGVmaW5pdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0ZWRGaWVsZCByZWxhdGVkIGZpZWxkIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhZmllbGQgRGF0YWZpZWxkIHRvIGJlIHNldCBvbiB3aWRnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aWRnZXQgVHlwZSBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0ge29iamVjdH0gZWxTY29wZSBlbGVtZW50IHNjb3BlXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyZW50U2NvcGUgbGl2ZSBmb3JtLy8gZ3JpZCBzY29wZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hSZWxhdGVkRmllbGREYXRhKGRhdGFTb3VyY2UsIGZvcm1GaWVsZCwgb3B0aW9ucykge1xuICAgIGxldCBwcmltYXJ5S2V5cztcbiAgICBsZXQgZGlzcGxheUZpZWxkO1xuICAgIGNvbnN0IHJlbGF0ZWRGaWVsZCA9IG9wdGlvbnMucmVsYXRlZEZpZWxkO1xuICAgIGNvbnN0IGRhdGFmaWVsZCA9IG9wdGlvbnMuZGF0YWZpZWxkO1xuXG4gICAgaWYgKCFkYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJpbWFyeUtleXMgPSBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1JFTEFURURfUFJJTUFSWV9LRVlTLCByZWxhdGVkRmllbGQpO1xuICAgIGZvcm1GaWVsZC5kYXRhZmllbGQgPSBkYXRhZmllbGQ7XG4gICAgZm9ybUZpZWxkLl9wcmltYXJ5S2V5ID0gaXNFbXB0eShwcmltYXJ5S2V5cykgPyB1bmRlZmluZWQgOiBwcmltYXJ5S2V5c1swXTtcbiAgICBmb3JtRmllbGQuY29tcGFyZWJ5ID0gcHJpbWFyeUtleXMgJiYgcHJpbWFyeUtleXMuam9pbignLCcpO1xuXG4gICAgZGlzcGxheUZpZWxkID0gZGF0YWZpZWxkID09PSBBTExGSUVMRFMgPyB1bmRlZmluZWQgOiBkYXRhZmllbGQ7XG4gICAgZm9ybUZpZWxkLmRpc3BsYXlmaWVsZCA9IGRpc3BsYXlGaWVsZCA9IChmb3JtRmllbGQuZGlzcGxheWZpZWxkIHx8IGRpc3BsYXlGaWVsZCB8fCBmb3JtRmllbGQuX3ByaW1hcnlLZXkpO1xuXG4gICAgaWYgKGlzU2VhcmNoV2lkZ2V0VHlwZShmb3JtRmllbGRbb3B0aW9ucy53aWRnZXRdKSkge1xuICAgICAgICBmb3JtRmllbGQuZGF0YW9wdGlvbnMgPSB7ICdyZWxhdGVkRmllbGQnOiByZWxhdGVkRmllbGQsICdmaWx0ZXJFeHByJzogZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID8gZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zIDoge30gfTtcbiAgICAgICAgZm9ybUZpZWxkLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICBmb3JtRmllbGQuc2VhcmNoa2V5ID0gZm9ybUZpZWxkLnNlYXJjaGtleSB8fCBkaXNwbGF5RmllbGQ7XG4gICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5bGFiZWwgPSBmb3JtRmllbGQuZGlzcGxheWZpZWxkID0gKGZvcm1GaWVsZC5kaXNwbGF5bGFiZWwgfHwgZGlzcGxheUZpZWxkKTtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5zaG93UGVuZGluZ1NwaW5uZXIpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5zaG93UGVuZGluZ1NwaW5uZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVycG9sYXRlQmluZEV4cHJlc3Npb25zKGZvcm1GaWVsZC52aWV3UGFyZW50LCBmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMsIChmaWx0ZXJleHByZXNzaW9ucykgPT4ge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID0gZmlsdGVyZXhwcmVzc2lvbnM7XG4gICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1JFTEFURURfVEFCTEVfREFUQSwge1xuICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZCxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogZm9ybUZpZWxkLmxpbWl0LFxuICAgICAgICAgICAgICAgIG9yZGVyQnk6IGZvcm1GaWVsZC5vcmRlcmJ5ID8gcmVwbGFjZShmb3JtRmllbGQub3JkZXJieSwgLzovZywgJyAnKSA6ICcnLFxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkczoge30sXG4gICAgICAgICAgICAgICAgZmlsdGVyRXhwcjogZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID8gZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zIDoge31cbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kYXRhc2V0ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheWZpZWxkID0gZm9ybUZpZWxkLmRpc3BsYXlmaWVsZCB8fCBoZWFkKGtleXMoZ2V0KHJlc3BvbnNlLCAnWzBdJykpKTtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkLnNob3dQZW5kaW5nU3Bpbm5lcikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuc2hvd1BlbmRpbmdTcGlubmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbm9vcCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiB1c2VkIHRvIGludGVycG9sYXRlIHRoZSBiaW5kIGV4cHJlc3Npb24gZm9yIGtleXMgaW4gdGhlIHF1ZXJ5IGJ1aWxkZXJcbiAqIEBwYXJhbSBjb250ZXh0IHdoZXJlIHdlIGZpbmQgdGhlIHZhcmlhYmxlIG9ialxuICogQHBhcmFtIGZpbHRlcmV4cHJlc3Npb25zIC0gb2JqIGNvbnRhaW5pbmcgYWxsIHRoZSBydWxlIG9ianNcbiAqIEBwYXJhbSBjYWxsYmFja0ZuIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdpdGggdGhlIG5ldyByZXBsYWNlZCB2YWx1ZXMgaWYgYW55IGluIHRoZSBmaWx0ZXJleHByZXNzaW9ucyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGludGVycG9sYXRlQmluZEV4cHJlc3Npb25zID0gKGNvbnRleHQsIGZpbHRlcmV4cHJlc3Npb25zLCBjYWxsYmFja0ZuKSA9PiB7XG4gICAgY29uc3QgZGVib3VuY2VkRm4gPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrRm4pKSB7XG4gICAgICAgICAgICBjYWxsYmFja0ZuKGZpbHRlcmV4cHJlc3Npb25zKTtcbiAgICAgICAgfVxuICAgIH0sIDMwMCk7XG5cbiAgICAvKipcbiAgICAgKiBjYWxsaW5nIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gZmlyc3QgZm9yIHRoZSBjYXNlIHdoZXJlIGlmIHRoZXJlIGlzIGFueSBmaWx0ZXJleHByZXNzaW9uIHdpdGhvdXQgdGhlIGJpbmRlZHZhcmlhYmxlcy5cbiAgICAgKiB3aXRob3V0IHRoaXMgaXQgd2lsbCBuZXZlciBiZSBjYWxsZWQuIHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSB3aWxsIGJlIGNhbGxlZCBvbmx5IGZvciB0aGUgYmluZGVkIHZhcmlhYmxlIGV4cHJlc3Npb25zLlxuICAgICAqL1xuICAgIGRlYm91bmNlZEZuKCk7XG4gICAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbnMgPSBmaWx0ZXJleHByZXNzaW9ucyA/IChpc09iamVjdChmaWx0ZXJleHByZXNzaW9ucykgPyBmaWx0ZXJleHByZXNzaW9ucyA6IEpTT04ucGFyc2UoZmlsdGVyZXhwcmVzc2lvbnMpKSA6IHt9O1xuICAgIGNvbnN0IGRlc3Ryb3lGbiA9IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIgPyBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyLmJpbmQoY29udGV4dCkgOiBub29wO1xuICAgIGNvbnN0IGZpbHRlclN1YnNjcmlwdGlvbiA9IHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZShjb250ZXh0LCBmaWx0ZXJFeHByZXNzaW9ucykuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGZpbHRlcmV4cHJlc3Npb25zID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZmlsdGVyRXhwcmVzc2lvbnMpO1xuICAgICAgICBkZWJvdW5jZWRGbigpO1xuICAgIH0pO1xuICAgIGRlc3Ryb3lGbigoKSA9PiBmaWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG59O1xuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHMjZ2V0RGlzdGluY3RGaWVsZFByb3BlcnRpZXNcbiAqIEBtZXRob2RPZiB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIGRhdGFzZXQgd2lkZ2V0c1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhU291cmNlIHZhcmlhYmxlIHNvdXJjZSBmb3IgdGhlIHdpZGdldFxuICogQHBhcmFtIHtvYmplY3R9IGZvcm1GaWVsZCBkZWZpbml0aW9uIG9mIHRoZSBjb2x1bW4vIGZpZWxkXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0RGlzdGluY3RGaWVsZFByb3BlcnRpZXMgPSAoZGF0YVNvdXJjZSwgZm9ybUZpZWxkKSA9PiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHt9O1xuICAgIGxldCBmaWVsZENvbHVtbjtcbiAgICBpZiAoZm9ybUZpZWxkWydpcy1yZWxhdGVkJ10pIHtcbiAgICAgICAgcHJvcHMudGFibGVOYW1lID0gZm9ybUZpZWxkWydsb29rdXAtdHlwZSddO1xuICAgICAgICBmaWVsZENvbHVtbiA9IGZvcm1GaWVsZFsnbG9va3VwLWZpZWxkJ107XG4gICAgICAgIHByb3BzLmRpc3RpbmN0RmllbGQgPSBmaWVsZENvbHVtbjtcbiAgICAgICAgcHJvcHMuYWxpYXNDb2x1bW4gPSBmaWVsZENvbHVtbi5yZXBsYWNlKCcuJywgJyQnKTsgLy8gRm9yIHJlbGF0ZWQgZmllbGRzLCBJbiByZXNwb25zZSAuIGlzIHJlcGxhY2VkIGJ5ICRcbiAgICAgICAgcHJvcHMuZmlsdGVyRXhwciA9IGZvcm1GaWVsZC5maWx0ZXJleHByZXNzaW9ucyA/IChpc09iamVjdChmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMpID8gZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zIDogSlNPTi5wYXJzZShmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMpKSA6IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BzLnRhYmxlTmFtZSA9IGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfRU5USVRZX05BTUUpO1xuICAgICAgICBmaWVsZENvbHVtbiA9IGZvcm1GaWVsZC5maWVsZCB8fCBmb3JtRmllbGQua2V5O1xuICAgICAgICBwcm9wcy5kaXN0aW5jdEZpZWxkID0gZmllbGRDb2x1bW47XG4gICAgICAgIHByb3BzLmFsaWFzQ29sdW1uID0gZmllbGRDb2x1bW47XG4gICAgfVxuICAgIHJldHVybiBwcm9wcztcbn07XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzI2dldERpc3RpbmN0VmFsdWVzXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRoZSBkaXN0aW5jdCB2YWx1ZXMgZm9yIGEgZmllbGRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZm9ybUZpZWxkIGRlZmluaXRpb24gb2YgdGhlIGNvbHVtbi8gZmllbGRcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aWRnZXQgd2lkZ2V0IHByb3BlcnR5IG9uIHRoZSBmaWVsZFxuICogQHBhcmFtIHtvYmplY3R9IHZhcmlhYmxlIHZhcmlhYmxlIGZvciB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsQmFjayBGdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciBmZXRjaGluZyByZXN1bHRzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGluY3RWYWx1ZXMoZGF0YVNvdXJjZSwgZm9ybUZpZWxkLCB3aWRnZXQpIHtcbiAgICBsZXQgcHJvcHM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgIGlmIChpc0RhdGFTZXRXaWRnZXQoZm9ybUZpZWxkW3dpZGdldF0pICYmICghZm9ybUZpZWxkLmlzRGF0YVNldEJvdW5kIHx8IHdpZGdldCA9PT0gJ2ZpbHRlcndpZGdldCcpKSB7XG4gICAgICAgICAgICBwcm9wcyA9IGdldERpc3RpbmN0RmllbGRQcm9wZXJ0aWVzKGRhdGFTb3VyY2UsIGZvcm1GaWVsZCk7XG4gICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0RJU1RJTkNUX0RBVEFfQllfRklFTERTLCB7XG4gICAgICAgICAgICAgICAgZmllbGRzOiBwcm9wcy5kaXN0aW5jdEZpZWxkLFxuICAgICAgICAgICAgICAgIGVudGl0eU5hbWU6IHByb3BzLnRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogZm9ybUZpZWxkLmxpbWl0LFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHI6IGZvcm1GaWVsZC5maWx0ZXJleHByZXNzaW9ucyA/IEpTT04ucGFyc2UoZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zKSA6IHt9XG4gICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICByZXMoeyAnZmllbGQnOiBmb3JtRmllbGQsICdkYXRhJzogcmVzcG9uc2UuZGF0YSwgJ2FsaWFzQ29sdW1uJzogcHJvcHMuYWxpYXNDb2x1bW4gfSk7XG4gICAgICAgICAgICB9LCByZWopO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFNldCB0aGUgZGF0YSBmaWVsZCBwcm9wZXJ0aWVzIG9uIGRhdGFzZXQgd2lkZ2V0c1xuZnVuY3Rpb24gc2V0RGF0YUZpZWxkcyhmb3JtRmllbGQsIG9wdGlvbnM/KSB7XG4gICAgLy8gRm9yIHNlYXJjaCB3aWRnZXQsIHNldCBzZWFyY2gga2V5IGFuZCBkaXNwbGF5IGxhYmVsXG4gICAgaWYgKGlzU2VhcmNoV2lkZ2V0VHlwZShmb3JtRmllbGRbb3B0aW9ucy53aWRnZXRdKSkge1xuICAgICAgICBmb3JtRmllbGQuZGF0YWZpZWxkID0gb3B0aW9ucy5hbGlhc0NvbHVtbiB8fCBMSVZFX0NPTlNUQU5UUy5MQUJFTF9LRVk7XG4gICAgICAgIGZvcm1GaWVsZC5zZWFyY2hrZXkgPSBvcHRpb25zLmRpc3RpbmN0RmllbGQgfHwgTElWRV9DT05TVEFOVFMuTEFCRUxfS0VZO1xuICAgICAgICBmb3JtRmllbGQuZGlzcGxheWxhYmVsID0gZm9ybUZpZWxkLmRpc3BsYXlmaWVsZCA9IChvcHRpb25zLmFsaWFzQ29sdW1uIHx8IExJVkVfQ09OU1RBTlRTLkxBQkVMX1ZBTFVFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtRmllbGQuZGF0YWZpZWxkID0gTElWRV9DT05TVEFOVFMuTEFCRUxfS0VZO1xuICAgIGZvcm1GaWVsZC5kaXNwbGF5ZmllbGQgPSBMSVZFX0NPTlNUQU5UUy5MQUJFTF9WQUxVRTtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHMjc2V0RmllbGREYXRhU2V0XG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGdW5jdGlvbiB0byBzZXQgdGhlIGRhdGFTZXQgb24gdGhlIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBmb3JtRmllbGQgZGVmaW5pdGlvbiBvZiB0aGUgY29sdW1uLyBmaWVsZFxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0NvbHVtbiBjb2x1bW4gZmllbGQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHdpZGdldCB3aWRnZXQgcHJvcGVydHkgb24gdGhlIGZpZWxkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW5hYmxlRW1wdHlGaWx0ZXIgaXMgbnVsbCBvciBlbXB0eSB2YWx1ZXMgYWxsb3dlZCBvbiBmaWx0ZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIHNldEZpZWxkRGF0YVNldChmb3JtRmllbGQsIGRhdGEsIG9wdGlvbnM/KSB7XG4gICAgY29uc3QgZW1wdHlTdXBwb3J0V2lkZ2V0cyA9IFtGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QsIEZvcm1XaWRnZXRUeXBlLlJBRElPU0VUXTtcbiAgICBjb25zdCBlbXB0eU9wdGlvbiA9IHt9O1xuICAgIGNvbnN0IGRhdGFTZXQgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5pc0VuYWJsZUVtcHR5RmlsdGVyICYmIGluY2x1ZGVzKGVtcHR5U3VwcG9ydFdpZGdldHMsIGZvcm1GaWVsZFtvcHRpb25zLndpZGdldF0pICYmXG4gICAgICAgICFmb3JtRmllbGRbJ2lzLXJhbmdlJ10gJiYgIWZvcm1GaWVsZC5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiBlbXB0eSBvcHRpb24gaXMgc2VsZWN0ZWQsIHB1c2ggYW4gZW1wdHkgb2JqZWN0IGluIHRvIGRhdGFTZXRcbiAgICAgICAgZW1wdHlPcHRpb25bTElWRV9DT05TVEFOVFMuTEFCRUxfS0VZXSA9IExJVkVfQ09OU1RBTlRTLkVNUFRZX0tFWTtcbiAgICAgICAgZW1wdHlPcHRpb25bTElWRV9DT05TVEFOVFMuTEFCRUxfVkFMVUVdID0gb3B0aW9ucy5FTVBUWV9WQUxVRSB8fCBMSVZFX0NPTlNUQU5UUy5FTVBUWV9WQUxVRTtcbiAgICAgICAgZGF0YVNldC5wdXNoKGVtcHR5T3B0aW9uKTtcbiAgICB9XG4gICAgZWFjaChkYXRhLCBrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGtleVtvcHRpb25zLmFsaWFzQ29sdW1uXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgIG9wdGlvbltMSVZFX0NPTlNUQU5UUy5MQUJFTF9LRVldID0gdmFsdWU7XG4gICAgICAgICAgICBvcHRpb25bTElWRV9DT05TVEFOVFMuTEFCRUxfVkFMVUVdID0gdmFsdWU7XG4gICAgICAgICAgICBkYXRhU2V0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHNldERhdGFGaWVsZHMoZm9ybUZpZWxkLCBvcHRpb25zKTtcbiAgICBmb3JtRmllbGQuZGF0YXNldCA9IGRhdGFTZXQ7XG59XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzI2ZldGNoRGlzdGluY3RWYWx1ZXNcbiAqIEBtZXRob2RPZiB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZ1bmN0aW9uIHRvIGZldGNoIHRoZSBkaXN0aW5jdCB2YWx1ZXMgZm9yIGEgZmllbGRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc2NvcGUgc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIHtvYmplY3R9IGZvcm1GaWVsZHMgZGVmaW5pdGlvbnMgb2YgdGhlIGNvbHVtbi8gZmllbGRcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aWRnZXQgd2lkZ2V0IHByb3BlcnR5IG9uIHRoZSBmaWVsZFxuICogQHBhcmFtIHtib29sZWFufSBpc0VuYWJsZUVtcHR5RmlsdGVyIGlzIG51bGwgb3IgZW1wdHkgdmFsdWVzIGFsbG93ZWQgb24gZmlsdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hEaXN0aW5jdFZhbHVlcyhkYXRhU291cmNlLCBmb3JtRmllbGRzLCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRW1wdHkoZm9ybUZpZWxkcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtRmllbGRzLmZvckVhY2goZm9ybUZpZWxkID0+IHtcbiAgICAgICAgZ2V0RGlzdGluY3RWYWx1ZXNGb3JGaWVsZChkYXRhU291cmNlLCBmb3JtRmllbGQsIG9wdGlvbnMpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlscyNnZXREaXN0aW5jdFZhbHVlc0ZvckZpZWxkXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGdW5jdGlvbiB0byBmZXRjaCB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIGZpZWxkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNjb3BlIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBmb3JtRmllbGRzIGRlZmluaXRpb25zIG9mIHRoZSBjb2x1bW4vIGZpZWxkXG4gKiBAcGFyYW0ge3N0cmluZ30gd2lkZ2V0IHdpZGdldCBwcm9wZXJ0eSBvbiB0aGUgZmllbGRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbmFibGVFbXB0eUZpbHRlciBpcyBudWxsIG9yIGVtcHR5IHZhbHVlcyBhbGxvd2VkIG9uIGZpbHRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQoZGF0YVNvdXJjZSwgZm9ybUZpZWxkLCBvcHRpb25zPykge1xuICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZm9ybUZpZWxkIHx8IGZvcm1GaWVsZC5pc0RhdGFTZXRCb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1NlYXJjaFdpZGdldFR5cGUoZm9ybUZpZWxkW29wdGlvbnMud2lkZ2V0XSkpIHtcbiAgICAgICAgY29uc3QgZGF0YW9wdGlvbnMgPSBnZXREaXN0aW5jdEZpZWxkUHJvcGVydGllcyhkYXRhU291cmNlLCBmb3JtRmllbGQpO1xuICAgICAgICBmb3JtRmllbGQuZGF0YW9wdGlvbnMgPSBkYXRhb3B0aW9ucztcbiAgICAgICAgc2V0RGF0YUZpZWxkcyhmb3JtRmllbGQsIE9iamVjdC5hc3NpZ24ob3B0aW9ucyB8fCB7fSwgZGF0YW9wdGlvbnMpKTtcbiAgICAgICAgZm9ybUZpZWxkLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVycG9sYXRlQmluZEV4cHJlc3Npb25zKGZvcm1GaWVsZC52aWV3UGFyZW50LCBmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMsIChmaWx0ZXJleHByZXNzaW9ucykgPT4ge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID0gZmlsdGVyZXhwcmVzc2lvbnM7XG4gICAgICAgICAgICBnZXREaXN0aW5jdFZhbHVlcyhkYXRhU291cmNlLCBmb3JtRmllbGQsIG9wdGlvbnMud2lkZ2V0KS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldEZpZWxkRGF0YVNldChyZXMuZmllbGQsIHJlcy5kYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQ29sdW1uOiByZXMuYWxpYXNDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogb3B0aW9ucy53aWRnZXQsXG4gICAgICAgICAgICAgICAgICAgIGlzRW5hYmxlRW1wdHlGaWx0ZXI6IGdldEVuYWJsZUVtcHR5RmlsdGVyKG9wdGlvbnMuZW5hYmxlZW1wdHlmaWx0ZXIpLFxuICAgICAgICAgICAgICAgICAgICBFTVBUWV9WQUxVRTogb3B0aW9ucy5FTVBUWV9WQUxVRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkQW5kTm90RW1wdHkodmFsKSB7XG4gICAgcmV0dXJuIGlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gJycgJiYgdmFsICE9PSBudWxsO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmdldFJhbmdlRmllbGRWYWx1ZVxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBmaWVsZCB2YWx1ZSBmb3IgcmFuZ2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWluVmFsdWUgbWluIHZhbHVlIHNlbGVjdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gbWF4VmFsdWUgbWF4IHZhbHVlIHNlbGVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5nZUZpZWxkVmFsdWUobWluVmFsdWUsIG1heFZhbHVlKSB7XG4gICAgbGV0IGZpZWxkVmFsdWU7XG4gICAgaWYgKGlzRGVmaW5lZEFuZE5vdEVtcHR5KG1pblZhbHVlKSAmJiBpc0RlZmluZWRBbmROb3RFbXB0eShtYXhWYWx1ZSkpIHtcbiAgICAgICAgZmllbGRWYWx1ZSA9IFttaW5WYWx1ZSwgbWF4VmFsdWVdO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkQW5kTm90RW1wdHkobWluVmFsdWUpKSB7XG4gICAgICAgIGZpZWxkVmFsdWUgPSBtaW5WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmaW5lZEFuZE5vdEVtcHR5KG1heFZhbHVlKSkge1xuICAgICAgICBmaWVsZFZhbHVlID0gbWF4VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZFZhbHVlO1xufVxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5nZXRSYW5nZU1hdGNoTW9kZVxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBtYXRjaCBtb2RlIGZvciByYW5nZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtaW5WYWx1ZSBtaW4gdmFsdWUgc2VsZWN0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXhWYWx1ZSBtYXggdmFsdWUgc2VsZWN0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmdlTWF0Y2hNb2RlKG1pblZhbHVlLCBtYXhWYWx1ZSkge1xuICAgIGxldCBtYXRjaE1vZGU7XG4gICAgLy8gSWYgdHdvIHZhbHVlcyBleGlzdHMsIHRoZW4gaXQgaXMgYmV0d2Vlbi4gT3RoZXJ3aXNlLCBncmVhdGVyIG9yIGxlc3NlclxuICAgIGlmIChpc0RlZmluZWRBbmROb3RFbXB0eShtaW5WYWx1ZSkgJiYgaXNEZWZpbmVkQW5kTm90RW1wdHkobWF4VmFsdWUpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5CRVRXRUVOO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkQW5kTm90RW1wdHkobWluVmFsdWUpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5HUkVBVEVSO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkQW5kTm90RW1wdHkobWF4VmFsdWUpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5MRVNTRVI7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaE1vZGU7XG59XG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmdldEVuYWJsZUVtcHR5RmlsdGVyXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBlbmFibGUgZmlsdGVyIG9wdGlvbnMgaXMgc2V0IG9uIGxpdmUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGVuYWJsZWVtcHR5ZmlsdGVyIGVtcHR5IGZpbHRlciBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmFibGVFbXB0eUZpbHRlcihlbmFibGVlbXB0eWZpbHRlcikge1xuICAgIHJldHVybiBlbmFibGVlbXB0eWZpbHRlciAmJiBpbnRlcnNlY3Rpb24oZW5hYmxlZW1wdHlmaWx0ZXIuc3BsaXQoJywnKSwgTElWRV9DT05TVEFOVFMuTlVMTF9FTVBUWSkubGVuZ3RoID4gMDtcbn1cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuZ2V0RW1wdHlNYXRjaE1vZGVcbiAqIEBtZXRob2RPZiB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgbWF0Y2ggbW9kZSBiYXNlZCBvbiB0aGUgZmlsdGVyIHNlbGVjdGVkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGVuYWJsZWVtcHR5ZmlsdGVyIGVtcHR5IGZpbHRlciBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eU1hdGNoTW9kZShlbmFibGVlbXB0eWZpbHRlcikge1xuICAgIGxldCBtYXRjaE1vZGU7XG4gICAgY29uc3QgZW1wdHlGaWx0ZXJPcHRpb25zID0gc3BsaXQoZW5hYmxlZW1wdHlmaWx0ZXIsICcsJyk7XG4gICAgaWYgKGludGVyc2VjdGlvbihlbXB0eUZpbHRlck9wdGlvbnMsIExJVkVfQ09OU1RBTlRTLk5VTExfRU1QVFkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBtYXRjaE1vZGUgPSBNYXRjaE1vZGUuTlVMTE9SRU1QVFk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlcyhlbXB0eUZpbHRlck9wdGlvbnMsIExJVkVfQ09OU1RBTlRTLk5VTEwpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5OVUxMO1xuICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMoZW1wdHlGaWx0ZXJPcHRpb25zLCBMSVZFX0NPTlNUQU5UUy5FTVBUWSkpIHtcbiAgICAgICAgbWF0Y2hNb2RlID0gTWF0Y2hNb2RlLkVNUFRZO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hNb2RlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIHRoZSBkYXRhIHBhc3NlZCB0byBhcnJheS5cbiAqICAtPiBBcnJheTogWzEsMiwzXSAtIFsxLDIsM11cbiAqICAtPiBTdHJpbmc6IGEsYixjIC0gWydhJywnYicsJ2MnXVxuICogIC0+IG9iamVjdDoge2E6MX0gLSBbe2E6MX1dXG4gKiAgLT4gbnVsbCAtIFtdXG4gKiAgLT4gdW5kZWZpbmVkIC0gW11cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJucyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFycmF5RnJvbSA9IChkYXRhKTogQXJyYXk8YW55PiA9PiB7XG5cbiAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEuc3BsaXQoJywnKS5tYXAoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmFwcGx5RmlsdGVyT25GaWVsZFxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB1cGRhdGVkIHZhbHVlcyB3aGVuIGZpbHRlciBvbiBmaWVsZCBpcyBjaGFuZ2VkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICRzY29wZSBzY29wZSBvZiB0aGUgZmlsdGVyIGZpZWxkL2Zvcm0gZmllbGRcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXJEZWYgZmlsdGVyL2Zvcm0gZGVmaW5pdGlvbiBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGaXJzdCBib29sZWFuIHZhbHVlIHRvIGNoZWNrIGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBsb2FkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlck9uRmllbGQoZGF0YVNvdXJjZSwgZmlsdGVyRGVmLCBmb3JtRmllbGRzLCBuZXdWYWwsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyRGVmLmZpZWxkIHx8IGZpbHRlckRlZi5rZXk7XG4gICAgY29uc3QgZmlsdGVyT25GaWVsZHMgPSBmaWx0ZXIoZm9ybUZpZWxkcywgeydmaWx0ZXItb24nOiBmaWVsZE5hbWV9KTtcblxuICAgIG5ld1ZhbCA9IGZpbHRlckRlZlsnaXMtcmFuZ2UnXSA/IGdldFJhbmdlRmllbGRWYWx1ZShmaWx0ZXJEZWYubWluVmFsdWUsIGZpbHRlckRlZi5tYXhWYWx1ZSkgOiAoaXNEZWZpbmVkKG5ld1ZhbCkgPyBuZXdWYWwgOiBmaWx0ZXJEZWYudmFsdWUpO1xuICAgIGlmICghZGF0YVNvdXJjZSB8fCAob3B0aW9ucy5pc0ZpcnN0ICYmIChpc1VuZGVmaW5lZChuZXdWYWwpIHx8IG5ld1ZhbCA9PT0gJycpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIExvb3Agb3ZlciB0aGUgZmllbGRzIGZvciB3aGljaCB0aGUgY3VycmVudCBmaWVsZCBpcyBmaWx0ZXIgb24gZmllbGRcbiAgICBmb3JFYWNoKGZpbHRlck9uRmllbGRzLCBmaWx0ZXJGaWVsZCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcktleSA9IGZpbHRlckZpZWxkLmZpZWxkIHx8IGZpbHRlckZpZWxkLmtleTtcbiAgICAgICAgY29uc3QgbG9va1VwRmllbGQgPSBmaWx0ZXJEZWZbJ2xvb2t1cC1maWVsZCddIHx8IGZpbHRlckRlZi5fcHJpbWFyeUtleTtcbiAgICAgICAgY29uc3QgZmlsdGVyV2lkZ2V0ID0gZmlsdGVyRmllbGRbJ2VkaXQtd2lkZ2V0LXR5cGUnXSB8fCBmaWx0ZXJGaWVsZC53aWRnZXR0eXBlO1xuICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGxldCBmaWx0ZXJPbiA9IGZpbHRlckZpZWxkWydmaWx0ZXItb24nXTtcbiAgICAgICAgbGV0IGZpbHRlclZhbDtcbiAgICAgICAgbGV0IGZpZWxkQ29sdW1uO1xuICAgICAgICBsZXQgbWF0Y2hNb2RlO1xuICAgICAgICBpZiAoIWlzRGF0YVNldFdpZGdldChmaWx0ZXJXaWRnZXQpIHx8IGZpbHRlckZpZWxkLmlzRGF0YVNldEJvdW5kIHx8IGZpbHRlck9uID09PSBmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgcmVsYXRlZCBmaWVsZHMsIGFkZCBsb29rdXBmaWVsZCBmb3IgcXVlcnkgZ2VuZXJhdGlvblxuICAgICAgICBpZiAoZmlsdGVyRGVmICYmIGZpbHRlckRlZlsnaXMtcmVsYXRlZCddKSB7XG4gICAgICAgICAgICBmaWx0ZXJPbiArPSAnLicgKyBsb29rVXBGaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJEZWZbJ2lzLXJhbmdlJ10pIHtcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBnZXRSYW5nZU1hdGNoTW9kZShmaWx0ZXJEZWYubWluVmFsdWUsIGZpbHRlckRlZi5tYXhWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdldEVuYWJsZUVtcHR5RmlsdGVyKG9wdGlvbnMuZW5hYmxlZW1wdHlmaWx0ZXIpICYmIG5ld1ZhbCA9PT0gTElWRV9DT05TVEFOVFMuRU1QVFlfS0VZKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gZ2V0RW1wdHlNYXRjaE1vZGUob3B0aW9ucy5lbmFibGVlbXB0eWZpbHRlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5FUVVBTFM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSAoaXNPYmplY3QobmV3VmFsKSAmJiAhaXNBcnJheShuZXdWYWwpKSA/IG5ld1ZhbFtsb29rVXBGaWVsZF0gOiBuZXdWYWw7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHNbZmlsdGVyT25dID0ge1xuICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZpbHRlclZhbCxcbiAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogbWF0Y2hNb2RlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRDb2x1bW4gPSBmaWx0ZXJLZXk7XG5cbiAgICAgICAgaWYgKGlzU2VhcmNoV2lkZ2V0VHlwZShmaWx0ZXJXaWRnZXQpICYmIGZpbHRlckZpZWxkLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZC5kYXRhb3B0aW9ucy5maWx0ZXJGaWVsZHMgPSBmaWx0ZXJGaWVsZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0RJU1RJTkNUX0RBVEFfQllfRklFTERTLCB7XG4gICAgICAgICAgICAgICAgJ2ZpZWxkcyc6IGZpZWxkQ29sdW1uLFxuICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICAgICAgJ3BhZ2VzaXplJzogZmlsdGVyRmllbGQubGltaXRcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHNldEZpZWxkRGF0YVNldChmaWx0ZXJGaWVsZCwgcmVzcG9uc2UuZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0NvbHVtbjogZmllbGRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogb3B0aW9ucy53aWRnZXQgfHwgJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBpc0VuYWJsZUVtcHR5RmlsdGVyOiBnZXRFbmFibGVFbXB0eUZpbHRlcihvcHRpb25zLmVuYWJsZWVtcHR5ZmlsdGVyKSxcbiAgICAgICAgICAgICAgICAgICAgRU1QVFlfVkFMVUU6IG9wdGlvbnMuRU1QVFlfVkFMVUVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIG5vb3ApO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFRyYW5zZm9ybSBkYXRhIGFzIHJlcXVpcmVkIGJ5IGRhdGEgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGFPYmplY3QsIHZhcmlhYmxlTmFtZSkge1xuICAgIGxldCBuZXdPYmosXG4gICAgICAgIHRlbXBBcnIsXG4gICAgICAgIGtleXMsXG4gICAgICAgIG9sZEtleXMsXG4gICAgICAgIG51bUtleXMsXG4gICAgICAgIG5ld09iamVjdCxcbiAgICAgICAgdGVtcE9iajtcblxuICAgIC8vIGRhdGEgc2FuaXR5IHRlc3RpbmdcbiAgICBkYXRhT2JqZWN0ID0gZGF0YU9iamVjdCB8fCBbXTtcbiAgICAvLyBpZiB0aGUgZGF0YU9iamVjdCBpcyBub3QgYW4gYXJyYXkgbWFrZSBpdCBhbiBhcnJheVxuICAgIGlmICghaXNBcnJheShkYXRhT2JqZWN0KSkge1xuICAgICAgICAvLyBpZiB0aGUgZGF0YSByZXR1cm5lZCBpcyBvZiB0eXBlIHN0cmluZywgbWFrZSBpdCBhbiBvYmplY3QgaW5zaWRlIGFuIGFycmF5XG4gICAgICAgIGlmIChpc1N0cmluZyhkYXRhT2JqZWN0KSkge1xuICAgICAgICAgICAga2V5cyA9IHZhcmlhYmxlTmFtZS5zdWJzdHJpbmcodmFyaWFibGVOYW1lLmluZGV4T2YoJy4nKSArIDEsIHZhcmlhYmxlTmFtZS5sZW5ndGgpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBvbGRLZXlzID0gW107XG4gICAgICAgICAgICBudW1LZXlzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICBuZXdPYmplY3QgPSB7fTtcbiAgICAgICAgICAgIHRlbXBPYmogPSBuZXdPYmplY3Q7XG5cbiAgICAgICAgICAgIC8vIGxvb3Agb3ZlciB0aGUga2V5cyB0byBmb3JtIGFwcHJvcHJpYXRlIGRhdGEgb2JqZWN0IHJlcXVpcmVkIGZvciBncmlkXG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBsb29wIG92ZXIgb2xkIGtleXMgdG8gY3JlYXRlIG5ldyBvYmplY3QgYXQgdGhlIGl0ZXJhdGl2ZSBsZXZlbFxuICAgICAgICAgICAgICAgIG9sZEtleXMuZm9yRWFjaChvbGRLZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wT2JqID0gbmV3T2JqZWN0W29sZEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGVtcE9ialtrZXldID0gaW5kZXggPT09IG51bUtleXMgLSAxID8gZGF0YU9iamVjdCA6IHt9O1xuICAgICAgICAgICAgICAgIG9sZEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgc3RyaW5nIGRhdGEgdG8gdGhlIG5ldyBkYXRhT2JqZWN0IGZvcm1lZFxuICAgICAgICAgICAgZGF0YU9iamVjdCA9IG5ld09iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0ID0gW2RhdGFPYmplY3RdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qaWYgdGhlIGRhdGFPYmplY3QgaXMgYW4gYXJyYXkgYW5kIGVhY2ggdmFsdWUgaXMgYSBzdHJpbmcsIHRoZW4gbGl0ZS10cmFuc2Zvcm0gdGhlIHN0cmluZyB0byBhbiBvYmplY3RcbiAgICAgICAgICogbGl0ZS10cmFuc2Zvcm06IGp1c3QgY2hlY2tpbmcgaWYgdGhlIGZpcnN0IHZhbHVlIGlzIHN0cmluZyBhbmQgdGhlbiB0cmFuc2Zvcm1pbmcgdGhlIG9iamVjdCwgaW5zdGVhZCBvZiB0cmF2ZXJzaW5nIHRocm91Z2ggdGhlIHdob2xlIGFycmF5XG4gICAgICAgICAqICovXG4gICAgICAgIGlmIChpc1N0cmluZyhkYXRhT2JqZWN0WzBdKSkge1xuICAgICAgICAgICAgdGVtcEFyciA9IFtdO1xuICAgICAgICAgICAgZm9yRWFjaChkYXRhT2JqZWN0LCBzdHIgPT4ge1xuICAgICAgICAgICAgICAgIG5ld09iaiA9IHt9O1xuICAgICAgICAgICAgICAgIG5ld09ialt2YXJpYWJsZU5hbWUuc3BsaXQoJy4nKS5qb2luKCctJyldID0gc3RyO1xuICAgICAgICAgICAgICAgIHRlbXBBcnIucHVzaChuZXdPYmopO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhT2JqZWN0ID0gdGVtcEFycjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YU9iamVjdDtcbn1cbiJdfQ==
581
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvdXRpbHMvZGF0YS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFDSCxJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUNsQixRQUFRLEVBQ1IsWUFBWSxFQUNaLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUM1QixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFDMUIsS0FBSyxFQUNSLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV2QixNQUFNLENBQU4sSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3ZCLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0lBQ2pCLG9DQUFpQixDQUFBO0lBQ2pCLGdDQUFhLENBQUE7QUFDakIsQ0FBQyxFQUxXLGVBQWUsS0FBZixlQUFlLFFBSzFCO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDMUIsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxhQUFhLEVBQUUsVUFBVTtJQUN6QixXQUFXLEVBQUUsS0FBSztJQUNsQixhQUFhLEVBQUUsT0FBTztJQUN0QixZQUFZLEVBQUUsQ0FBQyxNQUFN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QUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7WUFDSCxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UsIGRlYm91bmNlLCBwcm9jZXNzRmlsdGVyRXhwQmluZE5vZGUgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBGb3JtV2lkZ2V0VHlwZSwgaXNEZWZpbmVkLCBNYXRjaE1vZGUgfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7IGlzRGF0YVNldFdpZGdldCB9IGZyb20gJy4vd2lkZ2V0LXV0aWxzJztcbmltcG9ydCB7XG4gICAgZWFjaCxcbiAgICBmaWx0ZXIsXG4gICAgZm9yRWFjaCwgZ2V0LCBoZWFkLFxuICAgIGluY2x1ZGVzLFxuICAgIGludGVyc2VjdGlvbixcbiAgICBpc0FycmF5LCBpc0VtcHR5LCBpc0Z1bmN0aW9uLFxuICAgIGlzTnVsbCxcbiAgICBpc09iamVjdCxcbiAgICBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCwga2V5cywgcmVwbGFjZSxcbiAgICBzcGxpdFxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7IH07XG5cbmV4cG9ydCBlbnVtIExpdmVfT3BlcmF0aW9ucyB7XG4gICAgSU5TRVJUID0gJ2luc2VydCcsXG4gICAgVVBEQVRFID0gJ3VwZGF0ZScsXG4gICAgREVMRVRFID0gJ2RlbGV0ZScsXG4gICAgUkVBRCA9ICdyZWFkJ1xufVxuXG5leHBvcnQgY29uc3QgQUxMRklFTERTID0gJ0FsbCBGaWVsZHMnO1xuXG5leHBvcnQgY29uc3QgTElWRV9DT05TVEFOVFMgPSB7XG4gICAgJ0VNUFRZX0tFWSc6ICdFTVBUWV9OVUxMX0ZJTFRFUicsXG4gICAgJ0VNUFRZX1ZBTFVFJzogJ05vIFZhbHVlJyxcbiAgICAnTEFCRUxfS0VZJzogJ2tleScsXG4gICAgJ0xBQkVMX1ZBTFVFJzogJ3ZhbHVlJyxcbiAgICAnTlVMTF9FTVBUWSc6IFsnbnVsbCcsICdlbXB0eSddLFxuICAgICdOVUxMJzogJ251bGwnLFxuICAgICdFTVBUWSc6ICdlbXB0eSdcbn07XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB3aWRnZXQgaXMgYXV0b2NvbXBsZXRlIG9yIGNoaXBzXG5leHBvcnQgZnVuY3Rpb24gaXNTZWFyY2hXaWRnZXRUeXBlKHdpZGdldCkge1xuICAgIHJldHVybiBpbmNsdWRlcyhbRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFLCBGb3JtV2lkZ2V0VHlwZS5UWVBFQUhFQUQsIEZvcm1XaWRnZXRUeXBlLkNISVBTXSwgd2lkZ2V0KTtcbn1cblxuZnVuY3Rpb24gb25TdWNjZXNzKHJlc3BvbnNlLCByZXMsIHJlaikge1xuICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICByZWoocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcyhyZXNwb25zZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybURhdGFPcGVyYXRpb24oZGF0YVNvdXJjZSwgcmVxdWVzdERhdGEsIG9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19DUlVEKSkge1xuICAgICAgICAgICAgbGV0IGZuO1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uVHlwZSA9IG9wdGlvbnMub3BlcmF0aW9uVHlwZTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTGl2ZV9PcGVyYXRpb25zLlVQREFURTpcbiAgICAgICAgICAgICAgICAgICAgZm4gPSBEYXRhU291cmNlLk9wZXJhdGlvbi5VUERBVEVfUkVDT1JEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExpdmVfT3BlcmF0aW9ucy5JTlNFUlQ6XG4gICAgICAgICAgICAgICAgICAgIGZuID0gRGF0YVNvdXJjZS5PcGVyYXRpb24uSU5TRVJUX1JFQ09SRDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBMaXZlX09wZXJhdGlvbnMuREVMRVRFOlxuICAgICAgICAgICAgICAgICAgICBmbiA9IERhdGFTb3VyY2UuT3BlcmF0aW9uLkRFTEVURV9SRUNPUkQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YVNvdXJjZS5leGVjdXRlKGZuLCByZXF1ZXN0RGF0YSkudGhlbihyZXNwb25zZSA9PiBvblN1Y2Nlc3MocmVzcG9uc2UsIHJlcywgcmVqKSwgcmVqKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSkge1xuICAgICAgICAgICAgaWYoZGF0YVNvdXJjZS5jYXRlZ29yeSA9PT0gXCJ3bS5DcnVkVmFyaWFibGVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IG9wdGlvbnMub3BlcmF0aW9uVHlwZSA9PT0gJ2luc2VydCcgPyAnY3JlYXRlJyA6IChvcHRpb25zLm9wZXJhdGlvblR5cGUgPT09ICdkZWxldGUnID8gJ2RlbGV0ZScgOiAndXBkYXRlJyk7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklOVk9LRSwge1xuICAgICAgICAgICAgICAgICAgICAnc2tpcE5vdGlmaWNhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICdvcGVyYXRpb24nOiBvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICdpbnB1dEZpZWxkcyc6IHJlcXVlc3REYXRhXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXMsIHJlaik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TRVRfSU5QVVQsIHJlcXVlc3REYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSU5WT0tFLCB7XG4gICAgICAgICAgICAgICAgICAgICdza2lwTm90aWZpY2F0aW9uJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzLCByZWopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzKHJlcXVlc3REYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFTb3VyY2UoZGF0YVNvdXJjZSwgb3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJlaigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiBvcHRpb25zLmZpbHRlckZpZWxkcyB8fCB7fSxcbiAgICAgICAgICAgICdvcmRlckJ5Jzogb3B0aW9ucy5vcmRlckJ5LFxuICAgICAgICAgICAgJ3BhZ2UnOiBvcHRpb25zLnBhZ2UgfHwgMSxcbiAgICAgICAgICAgICdsb2dpY2FsT3AnIDogb3B0aW9ucy5jb25kaXRpb24gfHwgJydcbiAgICAgICAgfSkudGhlbihyZXMsIHJlaik7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuZmV0Y2hSZWxhdGVkRmllbGREYXRhXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIGRhdGEgZm9yIHRoZSByZWxhdGVkIGZpZWxkIGluIGxpdmUgZm9ybS8gZ3JpZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5EZWYgZmllbGQgZGVmaW5pdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0ZWRGaWVsZCByZWxhdGVkIGZpZWxkIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhZmllbGQgRGF0YWZpZWxkIHRvIGJlIHNldCBvbiB3aWRnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aWRnZXQgVHlwZSBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0ge29iamVjdH0gZWxTY29wZSBlbGVtZW50IHNjb3BlXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyZW50U2NvcGUgbGl2ZSBmb3JtLy8gZ3JpZCBzY29wZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hSZWxhdGVkRmllbGREYXRhKGRhdGFTb3VyY2UsIGZvcm1GaWVsZCwgb3B0aW9ucykge1xuICAgIGxldCBwcmltYXJ5S2V5cztcbiAgICBsZXQgZGlzcGxheUZpZWxkO1xuICAgIGNvbnN0IHJlbGF0ZWRGaWVsZCA9IG9wdGlvbnMucmVsYXRlZEZpZWxkO1xuICAgIGNvbnN0IGRhdGFmaWVsZCA9IG9wdGlvbnMuZGF0YWZpZWxkO1xuXG4gICAgaWYgKCFkYXRhU291cmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJpbWFyeUtleXMgPSBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1JFTEFURURfUFJJTUFSWV9LRVlTLCByZWxhdGVkRmllbGQpO1xuICAgIGZvcm1GaWVsZC5kYXRhZmllbGQgPSBkYXRhZmllbGQ7XG4gICAgZm9ybUZpZWxkLl9wcmltYXJ5S2V5ID0gaXNFbXB0eShwcmltYXJ5S2V5cykgPyB1bmRlZmluZWQgOiBwcmltYXJ5S2V5c1swXTtcbiAgICBmb3JtRmllbGQuY29tcGFyZWJ5ID0gcHJpbWFyeUtleXMgJiYgcHJpbWFyeUtleXMuam9pbignLCcpO1xuXG4gICAgZGlzcGxheUZpZWxkID0gZGF0YWZpZWxkID09PSBBTExGSUVMRFMgPyB1bmRlZmluZWQgOiBkYXRhZmllbGQ7XG4gICAgZm9ybUZpZWxkLmRpc3BsYXlmaWVsZCA9IGRpc3BsYXlGaWVsZCA9IChmb3JtRmllbGQuZGlzcGxheWZpZWxkIHx8IGRpc3BsYXlGaWVsZCB8fCBmb3JtRmllbGQuX3ByaW1hcnlLZXkpO1xuXG4gICAgaWYgKGlzU2VhcmNoV2lkZ2V0VHlwZShmb3JtRmllbGRbb3B0aW9ucy53aWRnZXRdKSkge1xuICAgICAgICBmb3JtRmllbGQuZGF0YW9wdGlvbnMgPSB7ICdyZWxhdGVkRmllbGQnOiByZWxhdGVkRmllbGQsICdmaWx0ZXJFeHByJzogZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID8gZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zIDoge30gfTtcbiAgICAgICAgZm9ybUZpZWxkLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICBmb3JtRmllbGQuc2VhcmNoa2V5ID0gZm9ybUZpZWxkLnNlYXJjaGtleSB8fCBkaXNwbGF5RmllbGQ7XG4gICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5bGFiZWwgPSBmb3JtRmllbGQuZGlzcGxheWZpZWxkID0gKGZvcm1GaWVsZC5kaXNwbGF5bGFiZWwgfHwgZGlzcGxheUZpZWxkKTtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5zaG93UGVuZGluZ1NwaW5uZXIpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5zaG93UGVuZGluZ1NwaW5uZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVycG9sYXRlQmluZEV4cHJlc3Npb25zKGZvcm1GaWVsZC52aWV3UGFyZW50LCBmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMsIChmaWx0ZXJleHByZXNzaW9ucykgPT4ge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID0gZmlsdGVyZXhwcmVzc2lvbnM7XG4gICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1JFTEFURURfVEFCTEVfREFUQSwge1xuICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZCxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogZm9ybUZpZWxkLmxpbWl0LFxuICAgICAgICAgICAgICAgIG9yZGVyQnk6IGZvcm1GaWVsZC5vcmRlcmJ5ID8gcmVwbGFjZShmb3JtRmllbGQub3JkZXJieSwgLzovZywgJyAnKSA6ICcnLFxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkczoge30sXG4gICAgICAgICAgICAgICAgZmlsdGVyRXhwcjogZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID8gZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zIDoge31cbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kYXRhc2V0ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheWZpZWxkID0gZm9ybUZpZWxkLmRpc3BsYXlmaWVsZCB8fCBoZWFkKGtleXMoZ2V0KHJlc3BvbnNlLCAnWzBdJykpKTtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkLnNob3dQZW5kaW5nU3Bpbm5lcikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuc2hvd1BlbmRpbmdTcGlubmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbm9vcCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiB1c2VkIHRvIGludGVycG9sYXRlIHRoZSBiaW5kIGV4cHJlc3Npb24gZm9yIGtleXMgaW4gdGhlIHF1ZXJ5IGJ1aWxkZXJcbiAqIEBwYXJhbSBjb250ZXh0IHdoZXJlIHdlIGZpbmQgdGhlIHZhcmlhYmxlIG9ialxuICogQHBhcmFtIGZpbHRlcmV4cHJlc3Npb25zIC0gb2JqIGNvbnRhaW5pbmcgYWxsIHRoZSBydWxlIG9ianNcbiAqIEBwYXJhbSBjYWxsYmFja0ZuIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdpdGggdGhlIG5ldyByZXBsYWNlZCB2YWx1ZXMgaWYgYW55IGluIHRoZSBmaWx0ZXJleHByZXNzaW9ucyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGludGVycG9sYXRlQmluZEV4cHJlc3Npb25zID0gKGNvbnRleHQsIGZpbHRlcmV4cHJlc3Npb25zLCBjYWxsYmFja0ZuKSA9PiB7XG4gICAgY29uc3QgZGVib3VuY2VkRm4gPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrRm4pKSB7XG4gICAgICAgICAgICBjYWxsYmFja0ZuKGZpbHRlcmV4cHJlc3Npb25zKTtcbiAgICAgICAgfVxuICAgIH0sIDMwMCk7XG5cbiAgICAvKipcbiAgICAgKiBjYWxsaW5nIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gZmlyc3QgZm9yIHRoZSBjYXNlIHdoZXJlIGlmIHRoZXJlIGlzIGFueSBmaWx0ZXJleHByZXNzaW9uIHdpdGhvdXQgdGhlIGJpbmRlZHZhcmlhYmxlcy5cbiAgICAgKiB3aXRob3V0IHRoaXMgaXQgd2lsbCBuZXZlciBiZSBjYWxsZWQuIHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSB3aWxsIGJlIGNhbGxlZCBvbmx5IGZvciB0aGUgYmluZGVkIHZhcmlhYmxlIGV4cHJlc3Npb25zLlxuICAgICAqL1xuICAgIGRlYm91bmNlZEZuKCk7XG4gICAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbnMgPSBmaWx0ZXJleHByZXNzaW9ucyA/IChpc09iamVjdChmaWx0ZXJleHByZXNzaW9ucykgPyBmaWx0ZXJleHByZXNzaW9ucyA6IEpTT04ucGFyc2UoZmlsdGVyZXhwcmVzc2lvbnMpKSA6IHt9O1xuICAgIGNvbnN0IGRlc3Ryb3lGbiA9IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIgPyBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyLmJpbmQoY29udGV4dCkgOiBub29wO1xuICAgIGNvbnN0IGZpbHRlclN1YnNjcmlwdGlvbiA9IHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZShjb250ZXh0LCBmaWx0ZXJFeHByZXNzaW9ucykuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGZpbHRlcmV4cHJlc3Npb25zID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZmlsdGVyRXhwcmVzc2lvbnMpO1xuICAgICAgICBkZWJvdW5jZWRGbigpO1xuICAgIH0pO1xuICAgIGRlc3Ryb3lGbigoKSA9PiBmaWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG59O1xuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHMjZ2V0RGlzdGluY3RGaWVsZFByb3BlcnRpZXNcbiAqIEBtZXRob2RPZiB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdGhlIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIGRhdGFzZXQgd2lkZ2V0c1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhU291cmNlIHZhcmlhYmxlIHNvdXJjZSBmb3IgdGhlIHdpZGdldFxuICogQHBhcmFtIHtvYmplY3R9IGZvcm1GaWVsZCBkZWZpbml0aW9uIG9mIHRoZSBjb2x1bW4vIGZpZWxkXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0RGlzdGluY3RGaWVsZFByb3BlcnRpZXMgPSAoZGF0YVNvdXJjZSwgZm9ybUZpZWxkKSA9PiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHt9O1xuICAgIGxldCBmaWVsZENvbHVtbjtcbiAgICBpZiAoZm9ybUZpZWxkWydpcy1yZWxhdGVkJ10pIHtcbiAgICAgICAgcHJvcHMudGFibGVOYW1lID0gZm9ybUZpZWxkWydsb29rdXAtdHlwZSddO1xuICAgICAgICBmaWVsZENvbHVtbiA9IGZvcm1GaWVsZFsnbG9va3VwLWZpZWxkJ107XG4gICAgICAgIHByb3BzLmRpc3RpbmN0RmllbGQgPSBmaWVsZENvbHVtbjtcbiAgICAgICAgcHJvcHMuYWxpYXNDb2x1bW4gPSBmaWVsZENvbHVtbi5yZXBsYWNlKCcuJywgJyQnKTsgLy8gRm9yIHJlbGF0ZWQgZmllbGRzLCBJbiByZXNwb25zZSAuIGlzIHJlcGxhY2VkIGJ5ICRcbiAgICAgICAgcHJvcHMuZmlsdGVyRXhwciA9IGZvcm1GaWVsZC5maWx0ZXJleHByZXNzaW9ucyA/IChpc09iamVjdChmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMpID8gZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zIDogSlNPTi5wYXJzZShmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMpKSA6IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BzLnRhYmxlTmFtZSA9IGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfRU5USVRZX05BTUUpO1xuICAgICAgICBmaWVsZENvbHVtbiA9IGZvcm1GaWVsZC5maWVsZCB8fCBmb3JtRmllbGQua2V5O1xuICAgICAgICBwcm9wcy5kaXN0aW5jdEZpZWxkID0gZmllbGRDb2x1bW47XG4gICAgICAgIHByb3BzLmFsaWFzQ29sdW1uID0gZmllbGRDb2x1bW47XG4gICAgfVxuICAgIHJldHVybiBwcm9wcztcbn07XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzI2dldERpc3RpbmN0VmFsdWVzXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRoZSBkaXN0aW5jdCB2YWx1ZXMgZm9yIGEgZmllbGRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZm9ybUZpZWxkIGRlZmluaXRpb24gb2YgdGhlIGNvbHVtbi8gZmllbGRcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aWRnZXQgd2lkZ2V0IHByb3BlcnR5IG9uIHRoZSBmaWVsZFxuICogQHBhcmFtIHtvYmplY3R9IHZhcmlhYmxlIHZhcmlhYmxlIGZvciB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsQmFjayBGdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciBmZXRjaGluZyByZXN1bHRzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGluY3RWYWx1ZXMoZGF0YVNvdXJjZSwgZm9ybUZpZWxkLCB3aWRnZXQpIHtcbiAgICBsZXQgcHJvcHM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgIGlmIChpc0RhdGFTZXRXaWRnZXQoZm9ybUZpZWxkW3dpZGdldF0pICYmICghZm9ybUZpZWxkLmlzRGF0YVNldEJvdW5kIHx8IHdpZGdldCA9PT0gJ2ZpbHRlcndpZGdldCcpKSB7XG4gICAgICAgICAgICBwcm9wcyA9IGdldERpc3RpbmN0RmllbGRQcm9wZXJ0aWVzKGRhdGFTb3VyY2UsIGZvcm1GaWVsZCk7XG4gICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0RJU1RJTkNUX0RBVEFfQllfRklFTERTLCB7XG4gICAgICAgICAgICAgICAgZmllbGRzOiBwcm9wcy5kaXN0aW5jdEZpZWxkLFxuICAgICAgICAgICAgICAgIGVudGl0eU5hbWU6IHByb3BzLnRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogZm9ybUZpZWxkLmxpbWl0LFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHI6IGZvcm1GaWVsZC5maWx0ZXJleHByZXNzaW9ucyA/IEpTT04ucGFyc2UoZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zKSA6IHt9XG4gICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICByZXMoeyAnZmllbGQnOiBmb3JtRmllbGQsICdkYXRhJzogcmVzcG9uc2UuZGF0YSwgJ2FsaWFzQ29sdW1uJzogcHJvcHMuYWxpYXNDb2x1bW4gfSk7XG4gICAgICAgICAgICB9LCByZWopO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFNldCB0aGUgZGF0YSBmaWVsZCBwcm9wZXJ0aWVzIG9uIGRhdGFzZXQgd2lkZ2V0c1xuZnVuY3Rpb24gc2V0RGF0YUZpZWxkcyhmb3JtRmllbGQsIG9wdGlvbnM/KSB7XG4gICAgLy8gRm9yIHNlYXJjaCB3aWRnZXQsIHNldCBzZWFyY2gga2V5IGFuZCBkaXNwbGF5IGxhYmVsXG4gICAgaWYgKGlzU2VhcmNoV2lkZ2V0VHlwZShmb3JtRmllbGRbb3B0aW9ucy53aWRnZXRdKSkge1xuICAgICAgICBmb3JtRmllbGQuZGF0YWZpZWxkID0gb3B0aW9ucy5hbGlhc0NvbHVtbiB8fCBMSVZFX0NPTlNUQU5UUy5MQUJFTF9LRVk7XG4gICAgICAgIGZvcm1GaWVsZC5zZWFyY2hrZXkgPSBvcHRpb25zLmRpc3RpbmN0RmllbGQgfHwgTElWRV9DT05TVEFOVFMuTEFCRUxfS0VZO1xuICAgICAgICBmb3JtRmllbGQuZGlzcGxheWxhYmVsID0gZm9ybUZpZWxkLmRpc3BsYXlmaWVsZCA9IChvcHRpb25zLmFsaWFzQ29sdW1uIHx8IExJVkVfQ09OU1RBTlRTLkxBQkVMX1ZBTFVFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtRmllbGQuZGF0YWZpZWxkID0gTElWRV9DT05TVEFOVFMuTEFCRUxfS0VZO1xuICAgIGZvcm1GaWVsZC5kaXNwbGF5ZmllbGQgPSBMSVZFX0NPTlNUQU5UUy5MQUJFTF9WQUxVRTtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHMjc2V0RmllbGREYXRhU2V0XG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGdW5jdGlvbiB0byBzZXQgdGhlIGRhdGFTZXQgb24gdGhlIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBmb3JtRmllbGQgZGVmaW5pdGlvbiBvZiB0aGUgY29sdW1uLyBmaWVsZFxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc0NvbHVtbiBjb2x1bW4gZmllbGQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHdpZGdldCB3aWRnZXQgcHJvcGVydHkgb24gdGhlIGZpZWxkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW5hYmxlRW1wdHlGaWx0ZXIgaXMgbnVsbCBvciBlbXB0eSB2YWx1ZXMgYWxsb3dlZCBvbiBmaWx0ZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIHNldEZpZWxkRGF0YVNldChmb3JtRmllbGQsIGRhdGEsIG9wdGlvbnM/KSB7XG4gICAgY29uc3QgZW1wdHlTdXBwb3J0V2lkZ2V0cyA9IFtGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QsIEZvcm1XaWRnZXRUeXBlLlJBRElPU0VUXTtcbiAgICBjb25zdCBlbXB0eU9wdGlvbiA9IHt9O1xuICAgIGNvbnN0IGRhdGFTZXQgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5pc0VuYWJsZUVtcHR5RmlsdGVyICYmIGluY2x1ZGVzKGVtcHR5U3VwcG9ydFdpZGdldHMsIGZvcm1GaWVsZFtvcHRpb25zLndpZGdldF0pICYmXG4gICAgICAgICFmb3JtRmllbGRbJ2lzLXJhbmdlJ10gJiYgIWZvcm1GaWVsZC5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiBlbXB0eSBvcHRpb24gaXMgc2VsZWN0ZWQsIHB1c2ggYW4gZW1wdHkgb2JqZWN0IGluIHRvIGRhdGFTZXRcbiAgICAgICAgZW1wdHlPcHRpb25bTElWRV9DT05TVEFOVFMuTEFCRUxfS0VZXSA9IExJVkVfQ09OU1RBTlRTLkVNUFRZX0tFWTtcbiAgICAgICAgZW1wdHlPcHRpb25bTElWRV9DT05TVEFOVFMuTEFCRUxfVkFMVUVdID0gb3B0aW9ucy5FTVBUWV9WQUxVRSB8fCBMSVZFX0NPTlNUQU5UUy5FTVBUWV9WQUxVRTtcbiAgICAgICAgZGF0YVNldC5wdXNoKGVtcHR5T3B0aW9uKTtcbiAgICB9XG4gICAgZWFjaChkYXRhLCBrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGtleVtvcHRpb25zLmFsaWFzQ29sdW1uXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgIG9wdGlvbltMSVZFX0NPTlNUQU5UUy5MQUJFTF9LRVldID0gdmFsdWU7XG4gICAgICAgICAgICBvcHRpb25bTElWRV9DT05TVEFOVFMuTEFCRUxfVkFMVUVdID0gdmFsdWU7XG4gICAgICAgICAgICBkYXRhU2V0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHNldERhdGFGaWVsZHMoZm9ybUZpZWxkLCBvcHRpb25zKTtcbiAgICBmb3JtRmllbGQuZGF0YXNldCA9IGRhdGFTZXQ7XG59XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzI2ZldGNoRGlzdGluY3RWYWx1ZXNcbiAqIEBtZXRob2RPZiB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZ1bmN0aW9uIHRvIGZldGNoIHRoZSBkaXN0aW5jdCB2YWx1ZXMgZm9yIGEgZmllbGRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc2NvcGUgc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIHtvYmplY3R9IGZvcm1GaWVsZHMgZGVmaW5pdGlvbnMgb2YgdGhlIGNvbHVtbi8gZmllbGRcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aWRnZXQgd2lkZ2V0IHByb3BlcnR5IG9uIHRoZSBmaWVsZFxuICogQHBhcmFtIHtib29sZWFufSBpc0VuYWJsZUVtcHR5RmlsdGVyIGlzIG51bGwgb3IgZW1wdHkgdmFsdWVzIGFsbG93ZWQgb24gZmlsdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hEaXN0aW5jdFZhbHVlcyhkYXRhU291cmNlLCBmb3JtRmllbGRzLCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRW1wdHkoZm9ybUZpZWxkcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3JtRmllbGRzLmZvckVhY2goZm9ybUZpZWxkID0+IHtcbiAgICAgICAgZ2V0RGlzdGluY3RWYWx1ZXNGb3JGaWVsZChkYXRhU291cmNlLCBmb3JtRmllbGQsIG9wdGlvbnMpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlscyNnZXREaXN0aW5jdFZhbHVlc0ZvckZpZWxkXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGdW5jdGlvbiB0byBmZXRjaCB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIGZpZWxkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNjb3BlIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBmb3JtRmllbGRzIGRlZmluaXRpb25zIG9mIHRoZSBjb2x1bW4vIGZpZWxkXG4gKiBAcGFyYW0ge3N0cmluZ30gd2lkZ2V0IHdpZGdldCBwcm9wZXJ0eSBvbiB0aGUgZmllbGRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbmFibGVFbXB0eUZpbHRlciBpcyBudWxsIG9yIGVtcHR5IHZhbHVlcyBhbGxvd2VkIG9uIGZpbHRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RpbmN0VmFsdWVzRm9yRmllbGQoZGF0YVNvdXJjZSwgZm9ybUZpZWxkLCBvcHRpb25zPykge1xuICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZm9ybUZpZWxkIHx8IGZvcm1GaWVsZC5pc0RhdGFTZXRCb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1NlYXJjaFdpZGdldFR5cGUoZm9ybUZpZWxkW29wdGlvbnMud2lkZ2V0XSkpIHtcbiAgICAgICAgY29uc3QgZGF0YW9wdGlvbnMgPSBnZXREaXN0aW5jdEZpZWxkUHJvcGVydGllcyhkYXRhU291cmNlLCBmb3JtRmllbGQpO1xuICAgICAgICBmb3JtRmllbGQuZGF0YW9wdGlvbnMgPSBkYXRhb3B0aW9ucztcbiAgICAgICAgc2V0RGF0YUZpZWxkcyhmb3JtRmllbGQsIE9iamVjdC5hc3NpZ24ob3B0aW9ucyB8fCB7fSwgZGF0YW9wdGlvbnMpKTtcbiAgICAgICAgZm9ybUZpZWxkLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVycG9sYXRlQmluZEV4cHJlc3Npb25zKGZvcm1GaWVsZC52aWV3UGFyZW50LCBmb3JtRmllbGQuZmlsdGVyZXhwcmVzc2lvbnMsIChmaWx0ZXJleHByZXNzaW9ucykgPT4ge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmZpbHRlcmV4cHJlc3Npb25zID0gZmlsdGVyZXhwcmVzc2lvbnM7XG4gICAgICAgICAgICBnZXREaXN0aW5jdFZhbHVlcyhkYXRhU291cmNlLCBmb3JtRmllbGQsIG9wdGlvbnMud2lkZ2V0KS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldEZpZWxkRGF0YVNldChyZXMuZmllbGQsIHJlcy5kYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQ29sdW1uOiByZXMuYWxpYXNDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogb3B0aW9ucy53aWRnZXQsXG4gICAgICAgICAgICAgICAgICAgIGlzRW5hYmxlRW1wdHlGaWx0ZXI6IGdldEVuYWJsZUVtcHR5RmlsdGVyKG9wdGlvbnMuZW5hYmxlZW1wdHlmaWx0ZXIpLFxuICAgICAgICAgICAgICAgICAgICBFTVBUWV9WQUxVRTogb3B0aW9ucy5FTVBUWV9WQUxVRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNEZWZpbmVkQW5kTm90RW1wdHkodmFsKSB7XG4gICAgcmV0dXJuIGlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gJycgJiYgdmFsICE9PSBudWxsO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmdldFJhbmdlRmllbGRWYWx1ZVxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBmaWVsZCB2YWx1ZSBmb3IgcmFuZ2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWluVmFsdWUgbWluIHZhbHVlIHNlbGVjdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gbWF4VmFsdWUgbWF4IHZhbHVlIHNlbGVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5nZUZpZWxkVmFsdWUobWluVmFsdWUsIG1heFZhbHVlKSB7XG4gICAgbGV0IGZpZWxkVmFsdWU7XG4gICAgaWYgKGlzRGVmaW5lZEFuZE5vdEVtcHR5KG1pblZhbHVlKSAmJiBpc0RlZmluZWRBbmROb3RFbXB0eShtYXhWYWx1ZSkpIHtcbiAgICAgICAgZmllbGRWYWx1ZSA9IFttaW5WYWx1ZSwgbWF4VmFsdWVdO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkQW5kTm90RW1wdHkobWluVmFsdWUpKSB7XG4gICAgICAgIGZpZWxkVmFsdWUgPSBtaW5WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmaW5lZEFuZE5vdEVtcHR5KG1heFZhbHVlKSkge1xuICAgICAgICBmaWVsZFZhbHVlID0gbWF4VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZFZhbHVlO1xufVxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5nZXRSYW5nZU1hdGNoTW9kZVxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBtYXRjaCBtb2RlIGZvciByYW5nZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtaW5WYWx1ZSBtaW4gdmFsdWUgc2VsZWN0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXhWYWx1ZSBtYXggdmFsdWUgc2VsZWN0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmdlTWF0Y2hNb2RlKG1pblZhbHVlLCBtYXhWYWx1ZSkge1xuICAgIGxldCBtYXRjaE1vZGU7XG4gICAgLy8gSWYgdHdvIHZhbHVlcyBleGlzdHMsIHRoZW4gaXQgaXMgYmV0d2Vlbi4gT3RoZXJ3aXNlLCBncmVhdGVyIG9yIGxlc3NlclxuICAgIGlmIChpc0RlZmluZWRBbmROb3RFbXB0eShtaW5WYWx1ZSkgJiYgaXNEZWZpbmVkQW5kTm90RW1wdHkobWF4VmFsdWUpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5CRVRXRUVOO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkQW5kTm90RW1wdHkobWluVmFsdWUpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5HUkVBVEVSO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkQW5kTm90RW1wdHkobWF4VmFsdWUpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5MRVNTRVI7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaE1vZGU7XG59XG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmdldEVuYWJsZUVtcHR5RmlsdGVyXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBlbmFibGUgZmlsdGVyIG9wdGlvbnMgaXMgc2V0IG9uIGxpdmUgZmlsdGVyXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGVuYWJsZWVtcHR5ZmlsdGVyIGVtcHR5IGZpbHRlciBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmFibGVFbXB0eUZpbHRlcihlbmFibGVlbXB0eWZpbHRlcikge1xuICAgIHJldHVybiBlbmFibGVlbXB0eWZpbHRlciAmJiBpbnRlcnNlY3Rpb24oZW5hYmxlZW1wdHlmaWx0ZXIuc3BsaXQoJywnKSwgTElWRV9DT05TVEFOVFMuTlVMTF9FTVBUWSkubGVuZ3RoID4gMDtcbn1cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuZ2V0RW1wdHlNYXRjaE1vZGVcbiAqIEBtZXRob2RPZiB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgbWF0Y2ggbW9kZSBiYXNlZCBvbiB0aGUgZmlsdGVyIHNlbGVjdGVkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGVuYWJsZWVtcHR5ZmlsdGVyIGVtcHR5IGZpbHRlciBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eU1hdGNoTW9kZShlbmFibGVlbXB0eWZpbHRlcikge1xuICAgIGxldCBtYXRjaE1vZGU7XG4gICAgY29uc3QgZW1wdHlGaWx0ZXJPcHRpb25zID0gc3BsaXQoZW5hYmxlZW1wdHlmaWx0ZXIsICcsJyk7XG4gICAgaWYgKGludGVyc2VjdGlvbihlbXB0eUZpbHRlck9wdGlvbnMsIExJVkVfQ09OU1RBTlRTLk5VTExfRU1QVFkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBtYXRjaE1vZGUgPSBNYXRjaE1vZGUuTlVMTE9SRU1QVFk7XG4gICAgfSBlbHNlIGlmIChpbmNsdWRlcyhlbXB0eUZpbHRlck9wdGlvbnMsIExJVkVfQ09OU1RBTlRTLk5VTEwpKSB7XG4gICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5OVUxMO1xuICAgIH0gZWxzZSBpZiAoaW5jbHVkZXMoZW1wdHlGaWx0ZXJPcHRpb25zLCBMSVZFX0NPTlNUQU5UUy5FTVBUWSkpIHtcbiAgICAgICAgbWF0Y2hNb2RlID0gTWF0Y2hNb2RlLkVNUFRZO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hNb2RlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIHRoZSBkYXRhIHBhc3NlZCB0byBhcnJheS5cbiAqICAtPiBBcnJheTogWzEsMiwzXSAtIFsxLDIsM11cbiAqICAtPiBTdHJpbmc6IGEsYixjIC0gWydhJywnYicsJ2MnXVxuICogIC0+IG9iamVjdDoge2E6MX0gLSBbe2E6MX1dXG4gKiAgLT4gbnVsbCAtIFtdXG4gKiAgLT4gdW5kZWZpbmVkIC0gW11cbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJucyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFycmF5RnJvbSA9IChkYXRhKTogQXJyYXk8YW55PiA9PiB7XG5cbiAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEuc3BsaXQoJywnKS5tYXAoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsIFN0cmluZy5wcm90b3R5cGUudHJpbSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmFwcGx5RmlsdGVyT25GaWVsZFxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB1cGRhdGVkIHZhbHVlcyB3aGVuIGZpbHRlciBvbiBmaWVsZCBpcyBjaGFuZ2VkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICRzY29wZSBzY29wZSBvZiB0aGUgZmlsdGVyIGZpZWxkL2Zvcm0gZmllbGRcbiAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXJEZWYgZmlsdGVyL2Zvcm0gZGVmaW5pdGlvbiBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGaXJzdCBib29sZWFuIHZhbHVlIHRvIGNoZWNrIGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBsb2FkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlck9uRmllbGQoZGF0YVNvdXJjZSwgZmlsdGVyRGVmLCBmb3JtRmllbGRzLCBuZXdWYWwsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyRGVmLmZpZWxkIHx8IGZpbHRlckRlZi5rZXk7XG4gICAgY29uc3QgZmlsdGVyT25GaWVsZHMgPSBmaWx0ZXIoZm9ybUZpZWxkcywgeydmaWx0ZXItb24nOiBmaWVsZE5hbWV9KTtcblxuICAgIG5ld1ZhbCA9IGZpbHRlckRlZlsnaXMtcmFuZ2UnXSA/IGdldFJhbmdlRmllbGRWYWx1ZShmaWx0ZXJEZWYubWluVmFsdWUsIGZpbHRlckRlZi5tYXhWYWx1ZSkgOiAoaXNEZWZpbmVkKG5ld1ZhbCkgPyBuZXdWYWwgOiBmaWx0ZXJEZWYudmFsdWUpO1xuICAgIGlmICghZGF0YVNvdXJjZSB8fCAob3B0aW9ucy5pc0ZpcnN0ICYmIChpc1VuZGVmaW5lZChuZXdWYWwpIHx8IG5ld1ZhbCA9PT0gJycpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIExvb3Agb3ZlciB0aGUgZmllbGRzIGZvciB3aGljaCB0aGUgY3VycmVudCBmaWVsZCBpcyBmaWx0ZXIgb24gZmllbGRcbiAgICBmb3JFYWNoKGZpbHRlck9uRmllbGRzLCBmaWx0ZXJGaWVsZCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcktleSA9IGZpbHRlckZpZWxkLmZpZWxkIHx8IGZpbHRlckZpZWxkLmtleTtcbiAgICAgICAgY29uc3QgbG9va1VwRmllbGQgPSBmaWx0ZXJEZWZbJ2xvb2t1cC1maWVsZCddIHx8IGZpbHRlckRlZi5fcHJpbWFyeUtleTtcbiAgICAgICAgY29uc3QgZmlsdGVyV2lkZ2V0ID0gZmlsdGVyRmllbGRbJ2VkaXQtd2lkZ2V0LXR5cGUnXSB8fCBmaWx0ZXJGaWVsZC53aWRnZXR0eXBlO1xuICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGxldCBmaWx0ZXJPbiA9IGZpbHRlckZpZWxkWydmaWx0ZXItb24nXTtcbiAgICAgICAgbGV0IGZpbHRlclZhbDtcbiAgICAgICAgbGV0IGZpZWxkQ29sdW1uO1xuICAgICAgICBsZXQgbWF0Y2hNb2RlO1xuICAgICAgICBpZiAoIWlzRGF0YVNldFdpZGdldChmaWx0ZXJXaWRnZXQpIHx8IGZpbHRlckZpZWxkLmlzRGF0YVNldEJvdW5kIHx8IGZpbHRlck9uID09PSBmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgcmVsYXRlZCBmaWVsZHMsIGFkZCBsb29rdXBmaWVsZCBmb3IgcXVlcnkgZ2VuZXJhdGlvblxuICAgICAgICBpZiAoZmlsdGVyRGVmICYmIGZpbHRlckRlZlsnaXMtcmVsYXRlZCddKSB7XG4gICAgICAgICAgICBmaWx0ZXJPbiArPSAnLicgKyBsb29rVXBGaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJEZWZbJ2lzLXJhbmdlJ10pIHtcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBnZXRSYW5nZU1hdGNoTW9kZShmaWx0ZXJEZWYubWluVmFsdWUsIGZpbHRlckRlZi5tYXhWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdldEVuYWJsZUVtcHR5RmlsdGVyKG9wdGlvbnMuZW5hYmxlZW1wdHlmaWx0ZXIpICYmIG5ld1ZhbCA9PT0gTElWRV9DT05TVEFOVFMuRU1QVFlfS0VZKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gZ2V0RW1wdHlNYXRjaE1vZGUob3B0aW9ucy5lbmFibGVlbXB0eWZpbHRlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSA9IE1hdGNoTW9kZS5FUVVBTFM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJWYWwgPSAoaXNPYmplY3QobmV3VmFsKSAmJiAhaXNBcnJheShuZXdWYWwpKSA/IG5ld1ZhbFtsb29rVXBGaWVsZF0gOiBuZXdWYWw7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHNbZmlsdGVyT25dID0ge1xuICAgICAgICAgICAgICAgICd2YWx1ZSc6IGZpbHRlclZhbCxcbiAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogbWF0Y2hNb2RlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRDb2x1bW4gPSBmaWx0ZXJLZXk7XG5cbiAgICAgICAgaWYgKGlzU2VhcmNoV2lkZ2V0VHlwZShmaWx0ZXJXaWRnZXQpICYmIGZpbHRlckZpZWxkLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZC5kYXRhb3B0aW9ucy5maWx0ZXJGaWVsZHMgPSBmaWx0ZXJGaWVsZHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0RJU1RJTkNUX0RBVEFfQllfRklFTERTLCB7XG4gICAgICAgICAgICAgICAgJ2ZpZWxkcyc6IGZpZWxkQ29sdW1uLFxuICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICAgICAgJ3BhZ2VzaXplJzogZmlsdGVyRmllbGQubGltaXRcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHNldEZpZWxkRGF0YVNldChmaWx0ZXJGaWVsZCwgcmVzcG9uc2UuZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICBhbGlhc0NvbHVtbjogZmllbGRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldDogb3B0aW9ucy53aWRnZXQgfHwgJ3dpZGdldHR5cGUnLFxuICAgICAgICAgICAgICAgICAgICBpc0VuYWJsZUVtcHR5RmlsdGVyOiBnZXRFbmFibGVFbXB0eUZpbHRlcihvcHRpb25zLmVuYWJsZWVtcHR5ZmlsdGVyKSxcbiAgICAgICAgICAgICAgICAgICAgRU1QVFlfVkFMVUU6IG9wdGlvbnMuRU1QVFlfVkFMVUVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIG5vb3ApO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFRyYW5zZm9ybSBkYXRhIGFzIHJlcXVpcmVkIGJ5IGRhdGEgdGFibGVcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGFPYmplY3QsIHZhcmlhYmxlTmFtZSkge1xuICAgIGxldCBuZXdPYmosXG4gICAgICAgIHRlbXBBcnIsXG4gICAgICAgIGtleXMsXG4gICAgICAgIG9sZEtleXMsXG4gICAgICAgIG51bUtleXMsXG4gICAgICAgIG5ld09iamVjdCxcbiAgICAgICAgdGVtcE9iajtcblxuICAgIC8vIGRhdGEgc2FuaXR5IHRlc3RpbmdcbiAgICBkYXRhT2JqZWN0ID0gZGF0YU9iamVjdCB8fCBbXTtcbiAgICAvLyBpZiB0aGUgZGF0YU9iamVjdCBpcyBub3QgYW4gYXJyYXkgbWFrZSBpdCBhbiBhcnJheVxuICAgIGlmICghaXNBcnJheShkYXRhT2JqZWN0KSkge1xuICAgICAgICAvLyBpZiB0aGUgZGF0YSByZXR1cm5lZCBpcyBvZiB0eXBlIHN0cmluZywgbWFrZSBpdCBhbiBvYmplY3QgaW5zaWRlIGFuIGFycmF5XG4gICAgICAgIGlmIChpc1N0cmluZyhkYXRhT2JqZWN0KSkge1xuICAgICAgICAgICAga2V5cyA9IHZhcmlhYmxlTmFtZS5zdWJzdHJpbmcodmFyaWFibGVOYW1lLmluZGV4T2YoJy4nKSArIDEsIHZhcmlhYmxlTmFtZS5sZW5ndGgpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBvbGRLZXlzID0gW107XG4gICAgICAgICAgICBudW1LZXlzID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICBuZXdPYmplY3QgPSB7fTtcbiAgICAgICAgICAgIHRlbXBPYmogPSBuZXdPYmplY3Q7XG5cbiAgICAgICAgICAgIC8vIGxvb3Agb3ZlciB0aGUga2V5cyB0byBmb3JtIGFwcHJvcHJpYXRlIGRhdGEgb2JqZWN0IHJlcXVpcmVkIGZvciBncmlkXG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBsb29wIG92ZXIgb2xkIGtleXMgdG8gY3JlYXRlIG5ldyBvYmplY3QgYXQgdGhlIGl0ZXJhdGl2ZSBsZXZlbFxuICAgICAgICAgICAgICAgIG9sZEtleXMuZm9yRWFjaChvbGRLZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wT2JqID0gbmV3T2JqZWN0W29sZEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGVtcE9ialtrZXldID0gaW5kZXggPT09IG51bUtleXMgLSAxID8gZGF0YU9iamVjdCA6IHt9O1xuICAgICAgICAgICAgICAgIG9sZEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgc3RyaW5nIGRhdGEgdG8gdGhlIG5ldyBkYXRhT2JqZWN0IGZvcm1lZFxuICAgICAgICAgICAgZGF0YU9iamVjdCA9IG5ld09iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0ID0gW2RhdGFPYmplY3RdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qaWYgdGhlIGRhdGFPYmplY3QgaXMgYW4gYXJyYXkgYW5kIGVhY2ggdmFsdWUgaXMgYSBzdHJpbmcsIHRoZW4gbGl0ZS10cmFuc2Zvcm0gdGhlIHN0cmluZyB0byBhbiBvYmplY3RcbiAgICAgICAgICogbGl0ZS10cmFuc2Zvcm06IGp1c3QgY2hlY2tpbmcgaWYgdGhlIGZpcnN0IHZhbHVlIGlzIHN0cmluZyBhbmQgdGhlbiB0cmFuc2Zvcm1pbmcgdGhlIG9iamVjdCwgaW5zdGVhZCBvZiB0cmF2ZXJzaW5nIHRocm91Z2ggdGhlIHdob2xlIGFycmF5XG4gICAgICAgICAqICovXG4gICAgICAgIGlmIChpc1N0cmluZyhkYXRhT2JqZWN0WzBdKSkge1xuICAgICAgICAgICAgdGVtcEFyciA9IFtdO1xuICAgICAgICAgICAgZm9yRWFjaChkYXRhT2JqZWN0LCBzdHIgPT4ge1xuICAgICAgICAgICAgICAgIG5ld09iaiA9IHt9O1xuICAgICAgICAgICAgICAgIG5ld09ialt2YXJpYWJsZU5hbWUuc3BsaXQoJy4nKS5qb2luKCctJyldID0gc3RyO1xuICAgICAgICAgICAgICAgIHRlbXBBcnIucHVzaChuZXdPYmopO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhT2JqZWN0ID0gdGVtcEFycjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YU9iamVjdDtcbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Validators } from '@angular/forms';
2
- import { VALIDATOR, $watch, $unwatch, FormWidgetType } from '@wm/core';
3
- import { cloneDeep, concat, extend, filter, find, forEach, get, isEmpty, isFunction, toUpper } from "lodash-es";
2
+ import { $unwatch, $watch, FormWidgetType, VALIDATOR } from '@wm/core';
3
+ import { cloneDeep, concat, extend, filter, find, forEach, get, isEmpty, isFunction, keys as _keys, toUpper } from "lodash-es";
4
4
  const DEFAULT_VALIDATOR = {
5
5
  pattern: 'regexp',
6
6
  max: 'maxvalue',
@@ -101,8 +101,7 @@ export class BaseFieldValidations {
101
101
  this.instance.validationmessage = get(err, 'errorMessage');
102
102
  }
103
103
  else {
104
- // @ts-ignore
105
- const keys = keys(err);
104
+ const keys = _keys(err);
106
105
  this.instance.validationmessage = (err[keys[0]]).toString();
107
106
  }
108
107
  return err;
@@ -243,8 +242,7 @@ export class BaseFieldValidations {
243
242
  this.instance.validationmessage = get(fieldErrors, 'errorMessage');
244
243
  }
245
244
  else {
246
- // @ts-ignore
247
- const keys = keys(fieldErrors);
245
+ const keys = _keys(fieldErrors);
248
246
  const key = keys[0];
249
247
  const validationMsgKey = get(DEFAULT_VALIDATOR, key) || this.formwidget.validateType;
250
248
  if (validationMsgKey) {
@@ -264,4 +262,4 @@ export class BaseFieldValidations {
264
262
  }
265
263
  }
266
264
  }
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFOUcsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixPQUFPLEVBQUUsUUFBUTtJQUNqQixHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxVQUFVO0lBQ2YsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFLFVBQVU7SUFDckIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsYUFBYSxFQUFDLGVBQWU7Q0FDaEMsQ0FBQztBQUVGLE1BQU0sT0FBTyxvQkFBb0I7SUFvQjdCLFlBQVksUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFlO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFh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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUNyRixJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dCQUNwRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksUUFBUSxFQUFFLENBQUM7b0JBQ2pDLHdFQUF3RTtvQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztnQkFDMUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSix3RkFBd0Y7Z0JBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVkFMSURBVE9SLCAkd2F0Y2gsICR1bndhdGNoLCBGb3JtV2lkZ2V0VHlwZSB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Y2xvbmVEZWVwLCBjb25jYXQsIGV4dGVuZCwgZmlsdGVyLCBmaW5kLCBmb3JFYWNoLCBnZXQsIGlzRW1wdHksIGlzRnVuY3Rpb24sIHRvVXBwZXJ9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9WQUxJREFUT1IgPSB7XG4gICAgcGF0dGVybjogJ3JlZ2V4cCcsXG4gICAgbWF4OiAnbWF4dmFsdWUnLFxuICAgIG1pbjogJ21pbnZhbHVlJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgICBtYXhsZW5ndGg6ICdtYXhjaGFycycsXG4gICAgbWluZGF0ZTogJ21pbmRhdGUnLFxuICAgIG1heGRhdGU6ICdtYXhkYXRlJyxcbiAgICBleGNsdWRlZGF0ZXM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIGV4Y2x1ZGVkYXlzOiAnZXhjbHVkZWRheXMnLFxuICAgIGludmFsaWROdW1iZXI6J2ludmFsaWROdW1iZXInXG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUZpZWxkVmFsaWRhdGlvbnMge1xuICAgIHByaXZhdGUgaGFzVmFsaWRhdG9ycztcblxuICAgIC8vIEluc3RhbmNlIG9mIHRoZSBkaXJlY3RpdmUgdGFibGUtY29sdW1uLCBmb3JtLWZpZWxkLi5cbiAgICBwcml2YXRlIGluc3RhbmNlO1xuICAgIC8vIElubGluZSBmb3JtIHdpZGdldFxuICAgIHB1YmxpYyBmb3Jtd2lkZ2V0O1xuICAgIC8vIFdpZGdldCB0eXBlXG4gICAgcHJpdmF0ZSB3aWRnZXR0eXBlO1xuICAgIC8vIEZyb20gY29udHJvbFxuICAgIHByaXZhdGUgd2lkZ2V0Q29udHJvbDtcbiAgICAvLyBQYXJlbnQgd2lkZ2V0IGNvbnRleHQgVGFibGUsIEZvcm0uLlxuICAgIHByaXZhdGUgd2lkZ2V0Q29udGV4dDtcbiAgICAvLyBPcHRpb25hbCB0YWJsZSBjb2x1bW4gdHlwZSBxdWlja2VkaXQgbmV3cm93LyBpbmxpbmUgZWRpdFxuICAgIHByaXZhdGUgdGFibGVGaWVsZFR5cGU7XG5cbiAgICBwcml2YXRlIGRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlczogYW55O1xuICAgIHByaXZhdGUgX3N5bmNWYWxpZGF0b3JzOiBhbnk7XG4gICAgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JGbjogYW55O1xuXG4gICAgY29uc3RydWN0b3IoaW5zdGFuY2UsIGZvcm13aWRnZXQsIHdpZGdldHR5cGUsIHdpZGdldENvbnRyb2wsIHdpZGdldENvbnRleHQsIHRhYmxlRmllbGRUeXBlPyl7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgdGhpcy5mb3Jtd2lkZ2V0ID0gZm9ybXdpZGdldDtcbiAgICAgICAgdGhpcy53aWRnZXR0eXBlID0gd2lkZ2V0dHlwZTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sID0gd2lkZ2V0Q29udHJvbDtcbiAgICAgICAgdGhpcy53aWRnZXRDb250ZXh0ID0gd2lkZ2V0Q29udGV4dDtcblxuICAgICAgICB0aGlzLmRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlcyA9IFtdO1xuICAgICAgICBpZiAodGFibGVGaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVGaWVsZFR5cGUgPSB0YWJsZUZpZWxkVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydGVkIGRlZmF1bHQgdmFsaWRhdG9yc1xuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKSB7XG4gICAgICAgIGNvbnN0IF92YWxpZGF0b3IgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVxdWlyZWQgJiYgdGhpcy5pbnN0YW5jZS5zaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94L3RvZ2dsZSB3aWRnZXQsIHJlcXVpcmVkIHZhbGlkYXRpb24gc2hvdWxkIGNvbnNpZGVyIHRydWUgdmFsdWUgb25seVxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1ggfHwgdGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLmluc3RhbmNlLm1heGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWludmFsdWUpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmluc3RhbmNlLm1pbnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4dmFsdWUgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5SQVRJTkcpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmluc3RhbmNlLm1heHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVnZXhwKSB7XG4gICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuaW5zdGFuY2UucmVnZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiBpc0Z1bmN0aW9uKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaCh0aGlzLmZvcm13aWRnZXQudmFsaWRhdGUuYmluZCh0aGlzLmZvcm13aWRnZXQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3ZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICAvLyBPbiBjaGFuZ2Ugb2YgYW55IHZhbGlkYXRpb24gcHJvcGVydHksIHNldCB0aGUgYW5ndWxhciBmb3JtIHZhbGlkYXRvcnNcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5fdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcblxuICAgICAgICBpZiAoY3VzdG9tVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzLnB1c2goY3VzdG9tVmFsaWRhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndpZGdldENvbnRleHQubmdmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbGlkYXRvcnMsIChmbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gZm47XG4gICAgICAgICAgICBpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBmbi5iaW5kKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGZuKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBzZXRzIHRoZSBhc3luY1ZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGQuIEFzc2lnbnMgdmFsaWRhdGlvbm1lc3NhZ2VzIGZyb20gdGhlIHJldHVybmVkIHJlc3BvbnNlXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuZ2V0UHJvbWlzZUxpc3QodmFsaWRhdG9ycykpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGVyciBvYmogaGFzIHZhbGlkYXRpb25NZXNzYWdlIGtleSwgdGhlbiBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UgdXNpbmcgdGhpcyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSBpbiB0aGUgZXJyIG9iamVjdCBhcyB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGVyciwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IGtleXMoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAoZXJyW2tleXNbMF1dKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gY29udHJvbCBzdGF0dXMgaXMgbm90IGNoYW5nZWQgZnJvbSBwZW5kaW5nLiBUaGlzIGlzIGFuIGFuZ3VsYXIgaXNzdWUgcmVmZXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTMyMDBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tGb3JTdGF0dXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhdHVzQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5vblN0YXR1c0NoYW5nZSh0aGlzLndpZGdldENvbnRyb2wuc3RhdHVzLCB0aGlzLnRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICBpZih0aGlzLndpZGdldENvbnRleHQubmdmb3JtLnRvdWNoZWQpe1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRGVmYXVsdFZhbGlkYXRvcih0eXBlKSB7XG4gICAgICAgIHJldHVybiBnZXQoVkFMSURBVE9SLCB0b1VwcGVyKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHZhbGlkYXRvciBpcyBib3VuZCB0byBhIGZ1bmN0aW9uIHRoZW4gd2F0Y2ggZm9yIHZhbHVlIGNoYW5nZXNcbiAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSBvZiBkZWZhdWx0IHZhbGlkYXRvciBkaXJlY3RseVxuICAgIHNldERlZmF1bHRWYWxpZGF0b3Ioa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBkZWZhdWx0IHZhbGlkYXRvciBmdW5jdGlvblxuICAgICAgICAgICAgdGhpcy53YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKHZhbHVlLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCksIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICBsZXQgX2Nsb25lVmFsaWRhdG9ycyA9IGNsb25lRGVlcCh2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5oYXNWYWxpZGF0b3JzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChfY2xvbmVWYWxpZGF0b3JzLCAob2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRpb24gaXMgYm91bmQgdG8gZnVuY3Rpb24uXG4gICAgICAgICAgICBpZiAob2JqICYmIG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBvYmogKGkuZS4gdmFsaWRhdG9yIGZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIF9jbG9uZVZhbGlkYXRvcnNbaW5kZXhdID0gb2JqLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMucHVzaChfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgZGVmYXVsdCB2YWxpZGF0b3IgbGlrZSByZXF1aXJlZCwgbWF4Y2hhcnMgZXRjLlxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldChvYmosICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXNba2V5XSA9IGdldChvYmosICdlcnJvck1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRWYWxpZGF0b3Ioa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChvYmosICd2YWxpZGF0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gX3N5bmNWYWxpZGF0b3JzIGNvbnRhaW5zIGFsbCB0aGUgY3VzdG9tIHZhbGlkYXRpb25zIG9uIHRoZSBmb3JtIGZpZWxkLiB3aWxsIG5vdCBpbmNsdWRlIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBmaWx0ZXIoX2Nsb25lVmFsaWRhdG9ycywgdmFsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcywgY29udGV4dCkge1xuICAgICAgICBmb3JFYWNoKGZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWZpZWxkID0gZmluZCh0aGlzLndpZGdldENvbnRleHRbY29udGV4dF0sIHsna2V5JzogZmllbGR9KTtcbiAgICAgICAgICAgIGlmIChmb3JtZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzLnB1c2godGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FzeW5jVmFsaWRhdG9yRm4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG93IHRoZSB2YWxpZGF0aW9uIGVycm9zIHNob3cgd2hlbiBmb3JtIGlzIHRvdWNoZWQgYW5kIG5vdCBvbiBsb2FkLiBUaGlzIGp1c3QgaGlnaGxpZ2h0cyB0aGUgZmllbGQgdGhhdCBpcyBzdWJzY3JpYmVkIGZvciBjaGFuZ2VzLlxuICAgICAgICBpZiAodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2F0Y2hlcyBmb3IgY2hhbmdlcyBpbiB0aGUgYm91bmQgZnVuY3Rpb24gZm9yIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICB3YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKGZuLCBrZXkpIHtcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy5pbnN0YW5jZS53aWRnZXRJZH1fYCArIGtleSArICdfZm9ybUZpZWxkJztcbiAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgLy9bVG9kby1DU1BdOiBOZWVkIGNsYXJpdHkgZ2VuZXJhdGUgdGhpcyBleHByIGZuIGlmIGZvcm0gaXMgcHJlc2VudCBpbiB0aGUgcGFnZVxuICAgICAgICB0aGlzLmluc3RhbmNlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCgnYm91bmRGbihmbiknLCBleHRlbmQodGhpcy5pbnN0YW5jZSwgdGhpcy5pbnN0YW5jZS52aWV3UGFyZW50KSwge2ZufSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IG52O1xuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgIH1cbiAgICBpc051bGxPckVtcHR5T3JGYWxzeSh2YWx1ZSkgIHtcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGludm9rZXMgYm90aCBjdXN0b20gc3luYyB2YWxpZGF0aW9ucyBhbmQgZGVmYXVsdCB2YWxpZGF0aW9ucy5cbiAgICBhcHBseURlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb25jYXQodGhpcy5fc3luY1ZhbGlkYXRvcnMgfHwgW10sIHZhbGlkYXRvcnMpKTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIH1cblxuICAgIHNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHRoaXMud2lkZ2V0Q29udHJvbCAmJiB0aGlzLndpZGdldENvbnRyb2wuZXJyb3JzO1xuXG4gICAgICAgIGlmICghZmllbGRFcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGZpZWxkRXJyb3JzLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBrZXlzID0ga2V5cyhmaWVsZEVycm9ycyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1zZ0tleSA9IGdldChERUZBVUxUX1ZBTElEQVRPUiwga2V5KSB8fCB0aGlzLmZvcm13aWRnZXQudmFsaWRhdGVUeXBlO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25Nc2dLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBnZXQodGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXMsIHZhbGlkYXRpb25Nc2dLZXkpIHx8IHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBtc2cgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzaW5nIGZvcm1maWVsZCBhbmQgZm9ybSBhcyBhcmd1bWVudHMgdG8gdGhlIGVycm9yTWVzc2FnZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZyh0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWRhdGlvbm1lc3NhZ2UgZm9yIGZpZWxkcyBvdGhlciB0aGFuIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFVBQVUsRUFDVixJQUFJLElBQUksS0FBSyxFQUNiLE9BQU8sRUFDVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsVUFBVTtJQUNyQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsU0FBUztJQUNsQixZQUFZLEVBQUUsY0FBYztJQUM1QixXQUFXLEVBQUUsYUFBYTtJQUMxQixhQUFhLEVBQUMsZUFBZTtDQUNoQyxDQUFDO0FBRUYsTUFBTSxPQUFPLG9CQUFvQjtJQW9CN0IsWUFBWSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWU7UUFDdkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7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RyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1lBQ3JGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3BHLElBQUksR0FBRyxJQUFJLEdBQUcsWUFBWSxRQUFRLEVBQUUsQ0FBQztvQkFDakMsd0VBQXdFO29CQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO2dCQUMxQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLHdGQUF3RjtnQkFDeEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDekMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHskdW53YXRjaCwgJHdhdGNoLCBGb3JtV2lkZ2V0VHlwZSwgVkFMSURBVE9SfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIGNsb25lRGVlcCxcbiAgICBjb25jYXQsXG4gICAgZXh0ZW5kLFxuICAgIGZpbHRlcixcbiAgICBmaW5kLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGlzRW1wdHksXG4gICAgaXNGdW5jdGlvbixcbiAgICBrZXlzIGFzIF9rZXlzLFxuICAgIHRvVXBwZXJcbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBERUZBVUxUX1ZBTElEQVRPUiA9IHtcbiAgICBwYXR0ZXJuOiAncmVnZXhwJyxcbiAgICBtYXg6ICdtYXh2YWx1ZScsXG4gICAgbWluOiAnbWludmFsdWUnLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICAgIG1heGxlbmd0aDogJ21heGNoYXJzJyxcbiAgICBtaW5kYXRlOiAnbWluZGF0ZScsXG4gICAgbWF4ZGF0ZTogJ21heGRhdGUnLFxuICAgIGV4Y2x1ZGVkYXRlczogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgZXhjbHVkZWRheXM6ICdleGNsdWRlZGF5cycsXG4gICAgaW52YWxpZE51bWJlcjonaW52YWxpZE51bWJlcidcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlRmllbGRWYWxpZGF0aW9ucyB7XG4gICAgcHJpdmF0ZSBoYXNWYWxpZGF0b3JzO1xuXG4gICAgLy8gSW5zdGFuY2Ugb2YgdGhlIGRpcmVjdGl2ZSB0YWJsZS1jb2x1bW4sIGZvcm0tZmllbGQuLlxuICAgIHByaXZhdGUgaW5zdGFuY2U7XG4gICAgLy8gSW5saW5lIGZvcm0gd2lkZ2V0XG4gICAgcHVibGljIGZvcm13aWRnZXQ7XG4gICAgLy8gV2lkZ2V0IHR5cGVcbiAgICBwcml2YXRlIHdpZGdldHR5cGU7XG4gICAgLy8gRnJvbSBjb250cm9sXG4gICAgcHJpdmF0ZSB3aWRnZXRDb250cm9sO1xuICAgIC8vIFBhcmVudCB3aWRnZXQgY29udGV4dCBUYWJsZSwgRm9ybS4uXG4gICAgcHJpdmF0ZSB3aWRnZXRDb250ZXh0O1xuICAgIC8vIE9wdGlvbmFsIHRhYmxlIGNvbHVtbiB0eXBlIHF1aWNrZWRpdCBuZXdyb3cvIGlubGluZSBlZGl0XG4gICAgcHJpdmF0ZSB0YWJsZUZpZWxkVHlwZTtcblxuICAgIHByaXZhdGUgZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzOiBhbnk7XG4gICAgcHJpdmF0ZSBfc3luY1ZhbGlkYXRvcnM6IGFueTtcbiAgICBwcml2YXRlIF9hc3luY1ZhbGlkYXRvckZuOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnN0YW5jZSwgZm9ybXdpZGdldCwgd2lkZ2V0dHlwZSwgd2lkZ2V0Q29udHJvbCwgd2lkZ2V0Q29udGV4dCwgdGFibGVGaWVsZFR5cGU/KXtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICB0aGlzLmZvcm13aWRnZXQgPSBmb3Jtd2lkZ2V0O1xuICAgICAgICB0aGlzLndpZGdldHR5cGUgPSB3aWRnZXR0eXBlO1xuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wgPSB3aWRnZXRDb250cm9sO1xuICAgICAgICB0aGlzLndpZGdldENvbnRleHQgPSB3aWRnZXRDb250ZXh0O1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzID0gW107XG4gICAgICAgIGlmICh0YWJsZUZpZWxkVHlwZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUZpZWxkVHlwZSA9IHRhYmxlRmllbGRUeXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiBzdXBwb3J0ZWQgZGVmYXVsdCB2YWxpZGF0b3JzXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsaWRhdG9ycygpIHtcbiAgICAgICAgY29uc3QgX3ZhbGlkYXRvciA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5yZXF1aXJlZCAmJiB0aGlzLmluc3RhbmNlLnNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBGb3IgY2hlY2tib3gvdG9nZ2xlIHdpZGdldCwgcmVxdWlyZWQgdmFsaWRhdGlvbiBzaG91bGQgY29uc2lkZXIgdHJ1ZSB2YWx1ZSBvbmx5XG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWCB8fCB0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRPR0dMRSkge1xuICAgICAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5tYXhjaGFycykge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5taW52YWx1ZSkge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMubWluKHRoaXMuaW5zdGFuY2UubWludmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5tYXh2YWx1ZSAmJiB0aGlzLndpZGdldHR5cGUgIT09IEZvcm1XaWRnZXRUeXBlLlJBVElORykge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMubWF4KHRoaXMuaW5zdGFuY2UubWF4dmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5yZWdleHApIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5pbnN0YW5jZS5yZWdleHApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmIGlzRnVuY3Rpb24odGhpcy5mb3Jtd2lkZ2V0LnZhbGlkYXRlKSkge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZS5iaW5kKHRoaXMuZm9ybXdpZGdldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdmFsaWRhdG9yO1xuICAgIH1cblxuICAgIC8vIE9uIGNoYW5nZSBvZiBhbnkgdmFsaWRhdGlvbiBwcm9wZXJ0eSwgc2V0IHRoZSBhbmd1bGFyIGZvcm0gdmFsaWRhdG9yc1xuICAgIHNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3I/KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuXG4gICAgICAgIGlmIChjdXN0b21WYWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX3ZhbGlkYXRvcnMucHVzaChjdXN0b21WYWxpZGF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuaW5zdGFuY2UuX3ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb21pc2VMaXN0KHZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvckVhY2godmFsaWRhdG9ycywgKGZuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSBmbjtcbiAgICAgICAgICAgIGlmIChmbiBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGZuLmJpbmQpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlID0gZm4odGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHNldHMgdGhlIGFzeW5jVmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZC4gQXNzaWducyB2YWxpZGF0aW9ubWVzc2FnZXMgZnJvbSB0aGUgcmV0dXJuZWQgcmVzcG9uc2VcbiAgICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5nZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXJyIG9iaiBoYXMgdmFsaWRhdGlvbk1lc3NhZ2Uga2V5LCB0aGVuIHNldCB2YWxpZGF0aW9uTWVzc2FnZSB1c2luZyB0aGlzIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qga2V5IGluIHRoZSBlcnIgb2JqZWN0IGFzIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5oYXNPd25Qcm9wZXJ0eSgnZXJyb3JNZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSBnZXQoZXJyLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gX2tleXMoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAoZXJyW2tleXNbMF1dKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gY29udHJvbCBzdGF0dXMgaXMgbm90IGNoYW5nZWQgZnJvbSBwZW5kaW5nLiBUaGlzIGlzIGFuIGFuZ3VsYXIgaXNzdWUgcmVmZXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTMyMDBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tGb3JTdGF0dXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhdHVzQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5vblN0YXR1c0NoYW5nZSh0aGlzLndpZGdldENvbnRyb2wuc3RhdHVzLCB0aGlzLnRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICBpZih0aGlzLndpZGdldENvbnRleHQubmdmb3JtLnRvdWNoZWQpe1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRGVmYXVsdFZhbGlkYXRvcih0eXBlKSB7XG4gICAgICAgIHJldHVybiBnZXQoVkFMSURBVE9SLCB0b1VwcGVyKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHZhbGlkYXRvciBpcyBib3VuZCB0byBhIGZ1bmN0aW9uIHRoZW4gd2F0Y2ggZm9yIHZhbHVlIGNoYW5nZXNcbiAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSBvZiBkZWZhdWx0IHZhbGlkYXRvciBkaXJlY3RseVxuICAgIHNldERlZmF1bHRWYWxpZGF0b3Ioa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBkZWZhdWx0IHZhbGlkYXRvciBmdW5jdGlvblxuICAgICAgICAgICAgdGhpcy53YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKHZhbHVlLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCksIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICBsZXQgX2Nsb25lVmFsaWRhdG9ycyA9IGNsb25lRGVlcCh2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5oYXNWYWxpZGF0b3JzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChfY2xvbmVWYWxpZGF0b3JzLCAob2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRpb24gaXMgYm91bmQgdG8gZnVuY3Rpb24uXG4gICAgICAgICAgICBpZiAob2JqICYmIG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBvYmogKGkuZS4gdmFsaWRhdG9yIGZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIF9jbG9uZVZhbGlkYXRvcnNbaW5kZXhdID0gb2JqLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMucHVzaChfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgZGVmYXVsdCB2YWxpZGF0b3IgbGlrZSByZXF1aXJlZCwgbWF4Y2hhcnMgZXRjLlxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldChvYmosICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXNba2V5XSA9IGdldChvYmosICdlcnJvck1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRWYWxpZGF0b3Ioa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChvYmosICd2YWxpZGF0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gX3N5bmNWYWxpZGF0b3JzIGNvbnRhaW5zIGFsbCB0aGUgY3VzdG9tIHZhbGlkYXRpb25zIG9uIHRoZSBmb3JtIGZpZWxkLiB3aWxsIG5vdCBpbmNsdWRlIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBmaWx0ZXIoX2Nsb25lVmFsaWRhdG9ycywgdmFsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcywgY29udGV4dCkge1xuICAgICAgICBmb3JFYWNoKGZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWZpZWxkID0gZmluZCh0aGlzLndpZGdldENvbnRleHRbY29udGV4dF0sIHsna2V5JzogZmllbGR9KTtcbiAgICAgICAgICAgIGlmIChmb3JtZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzLnB1c2godGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FzeW5jVmFsaWRhdG9yRm4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG93IHRoZSB2YWxpZGF0aW9uIGVycm9zIHNob3cgd2hlbiBmb3JtIGlzIHRvdWNoZWQgYW5kIG5vdCBvbiBsb2FkLiBUaGlzIGp1c3QgaGlnaGxpZ2h0cyB0aGUgZmllbGQgdGhhdCBpcyBzdWJzY3JpYmVkIGZvciBjaGFuZ2VzLlxuICAgICAgICBpZiAodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2F0Y2hlcyBmb3IgY2hhbmdlcyBpbiB0aGUgYm91bmQgZnVuY3Rpb24gZm9yIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICB3YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKGZuLCBrZXkpIHtcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy5pbnN0YW5jZS53aWRnZXRJZH1fYCArIGtleSArICdfZm9ybUZpZWxkJztcbiAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgLy9bVG9kby1DU1BdOiBOZWVkIGNsYXJpdHkgZ2VuZXJhdGUgdGhpcyBleHByIGZuIGlmIGZvcm0gaXMgcHJlc2VudCBpbiB0aGUgcGFnZVxuICAgICAgICB0aGlzLmluc3RhbmNlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCgnYm91bmRGbihmbiknLCBleHRlbmQodGhpcy5pbnN0YW5jZSwgdGhpcy5pbnN0YW5jZS52aWV3UGFyZW50KSwge2ZufSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IG52O1xuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgIH1cbiAgICBpc051bGxPckVtcHR5T3JGYWxzeSh2YWx1ZSkgIHtcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGludm9rZXMgYm90aCBjdXN0b20gc3luYyB2YWxpZGF0aW9ucyBhbmQgZGVmYXVsdCB2YWxpZGF0aW9ucy5cbiAgICBhcHBseURlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb25jYXQodGhpcy5fc3luY1ZhbGlkYXRvcnMgfHwgW10sIHZhbGlkYXRvcnMpKTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIH1cblxuICAgIHNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHRoaXMud2lkZ2V0Q29udHJvbCAmJiB0aGlzLndpZGdldENvbnRyb2wuZXJyb3JzO1xuXG4gICAgICAgIGlmICghZmllbGRFcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGZpZWxkRXJyb3JzLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gX2tleXMoZmllbGRFcnJvcnMpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25Nc2dLZXkgPSBnZXQoREVGQVVMVF9WQUxJREFUT1IsIGtleSkgfHwgdGhpcy5mb3Jtd2lkZ2V0LnZhbGlkYXRlVHlwZTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uTXNnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZ2V0KHRoaXMuZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzLCB2YWxpZGF0aW9uTXNnS2V5KSB8fCB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgbXNnIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBlcnJvck1lc3NhZ2UgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSBtc2codGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmYWxsYmFjayB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkYXRpb25tZXNzYWdlIGZvciBmaWVsZHMgb3RoZXIgdGhhbiBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -4703,9 +4703,8 @@ class BaseFieldValidations {
4703
4703
  this.instance.validationmessage = get(err, 'errorMessage');
4704
4704
  }
4705
4705
  else {
4706
- // @ts-ignore
4707
- const keys = keys(err);
4708
- this.instance.validationmessage = (err[keys[0]]).toString();
4706
+ const keys$1 = keys(err);
4707
+ this.instance.validationmessage = (err[keys$1[0]]).toString();
4709
4708
  }
4710
4709
  return err;
4711
4710
  }).then(response => {
@@ -4845,9 +4844,8 @@ class BaseFieldValidations {
4845
4844
  this.instance.validationmessage = get(fieldErrors, 'errorMessage');
4846
4845
  }
4847
4846
  else {
4848
- // @ts-ignore
4849
- const keys = keys(fieldErrors);
4850
- const key = keys[0];
4847
+ const keys$1 = keys(fieldErrors);
4848
+ const key = keys$1[0];
4851
4849
  const validationMsgKey = get(DEFAULT_VALIDATOR, key) || this.formwidget.validateType;
4852
4850
  if (validationMsgKey) {
4853
4851
  const msg = get(this.defaultValidatorMessages, validationMsgKey) || this.instance.validationmessage;