@wavemaker/app-ng-runtime 11.8.0-next.141671 → 11.8.0-next.141676

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.
@@ -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==