parse-server 9.10.1-alpha.15 → 9.10.1-alpha.17

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.
@@ -7,11 +7,16 @@ exports.default = exports.LRUCache = void 0;
7
7
  var _lruCache = require("lru-cache");
8
8
  var _defaults = _interopRequireDefault(require("../../defaults"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const isValidTTL = ttl => typeof ttl === 'number' && Number.isFinite(ttl) && ttl > 0;
11
+
12
+ // `lru-cache` expresses "never expires" as a TTL of zero.
13
+ const NO_EXPIRY = 0;
10
14
  class LRUCache {
11
15
  constructor({
12
16
  ttl = _defaults.default.cacheTTL,
13
17
  maxSize = _defaults.default.cacheMaxSize
14
18
  }) {
19
+ this.ttl = ttl;
15
20
  this.cache = new _lruCache.LRUCache({
16
21
  max: maxSize,
17
22
  ttl
@@ -21,7 +26,26 @@ class LRUCache {
21
26
  return this.cache.get(key) || null;
22
27
  }
23
28
  put(key, value, ttl = this.ttl) {
24
- this.cache.set(key, value, ttl);
29
+ // `lru-cache` takes the per-entry TTL as a property of an options object.
30
+ // Passed positionally it is silently discarded, leaving the entry on the
31
+ // cache-wide TTL.
32
+ //
33
+ // A TTL of `Infinity` means "never expires", matching `RedisCacheAdapter`,
34
+ // and is translated to the zero that `lru-cache` uses for that. `Infinity`
35
+ // is not forwarded as-is because Node cannot express it as a timer
36
+ // duration: under `ttlAutopurge` it emits a `TimeoutOverflowWarning` and
37
+ // clamps the timer to 1ms, so the purge timer re-fires every millisecond.
38
+ // Any other TTL that is not a positive, finite number is forwarded as
39
+ // `undefined`, which is how the library expresses "use the cache-wide TTL".
40
+ let entryTTL;
41
+ if (ttl === Infinity) {
42
+ entryTTL = NO_EXPIRY;
43
+ } else if (isValidTTL(ttl)) {
44
+ entryTTL = ttl;
45
+ }
46
+ this.cache.set(key, value, {
47
+ ttl: entryTTL
48
+ });
25
49
  }
26
50
  del(key) {
27
51
  this.cache.delete(key);
@@ -32,4 +56,4 @@ class LRUCache {
32
56
  }
33
57
  exports.LRUCache = LRUCache;
34
58
  var _default = exports.default = LRUCache;
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbHJ1Q2FjaGUiLCJyZXF1aXJlIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkxSVUNhY2hlIiwiY29uc3RydWN0b3IiLCJ0dGwiLCJkZWZhdWx0cyIsImNhY2hlVFRMIiwibWF4U2l6ZSIsImNhY2hlTWF4U2l6ZSIsImNhY2hlIiwiTFJVIiwibWF4IiwiZ2V0Iiwia2V5IiwicHV0IiwidmFsdWUiLCJzZXQiLCJkZWwiLCJkZWxldGUiLCJjbGVhciIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9MUlVDYWNoZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMUlVDYWNoZSBhcyBMUlUgfSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uLy4uL2RlZmF1bHRzJztcblxuZXhwb3J0IGNsYXNzIExSVUNhY2hlIHtcbiAgY29uc3RydWN0b3IoeyB0dGwgPSBkZWZhdWx0cy5jYWNoZVRUTCwgbWF4U2l6ZSA9IGRlZmF1bHRzLmNhY2hlTWF4U2l6ZSB9KSB7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBtYXhTaXplLFxuICAgICAgdHRsLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0KGtleSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpIHx8IG51bGw7XG4gIH1cblxuICBwdXQoa2V5LCB2YWx1ZSwgdHRsID0gdGhpcy50dGwpIHtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlLCB0dGwpO1xuICB9XG5cbiAgZGVsKGtleSkge1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTFJVQ2FjaGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFzQyxTQUFBRSx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUUvQixNQUFNRyxRQUFRLENBQUM7RUFDcEJDLFdBQVdBLENBQUM7SUFBRUMsR0FBRyxHQUFHQyxpQkFBUSxDQUFDQyxRQUFRO0lBQUVDLE9BQU8sR0FBR0YsaUJBQVEsQ0FBQ0c7RUFBYSxDQUFDLEVBQUU7SUFDeEUsSUFBSSxDQUFDQyxLQUFLLEdBQUcsSUFBSUMsa0JBQUcsQ0FBQztNQUNuQkMsR0FBRyxFQUFFSixPQUFPO01BQ1pIO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQVEsR0FBR0EsQ0FBQ0MsR0FBRyxFQUFFO0lBQ1AsT0FBTyxJQUFJLENBQUNKLEtBQUssQ0FBQ0csR0FBRyxDQUFDQyxHQUFHLENBQUMsSUFBSSxJQUFJO0VBQ3BDO0VBRUFDLEdBQUdBLENBQUNELEdBQUcsRUFBRUUsS0FBSyxFQUFFWCxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLEVBQUU7SUFDOUIsSUFBSSxDQUFDSyxLQUFLLENBQUNPLEdBQUcsQ0FBQ0gsR0FBRyxFQUFFRSxLQUFLLEVBQUVYLEdBQUcsQ0FBQztFQUNqQztFQUVBYSxHQUFHQSxDQUFDSixHQUFHLEVBQUU7SUFDUCxJQUFJLENBQUNKLEtBQUssQ0FBQ1MsTUFBTSxDQUFDTCxHQUFHLENBQUM7RUFDeEI7RUFFQU0sS0FBS0EsQ0FBQSxFQUFHO0lBQ04sSUFBSSxDQUFDVixLQUFLLENBQUNVLEtBQUssQ0FBQyxDQUFDO0VBQ3BCO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBbEIsUUFBQSxHQUFBQSxRQUFBO0FBQUEsSUFBQW1CLFFBQUEsR0FBQUQsT0FBQSxDQUFBbkIsT0FBQSxHQUVjQyxRQUFRIiwiaWdub3JlTGlzdCI6W119
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbHJ1Q2FjaGUiLCJyZXF1aXJlIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImlzVmFsaWRUVEwiLCJ0dGwiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk5PX0VYUElSWSIsIkxSVUNhY2hlIiwiY29uc3RydWN0b3IiLCJkZWZhdWx0cyIsImNhY2hlVFRMIiwibWF4U2l6ZSIsImNhY2hlTWF4U2l6ZSIsImNhY2hlIiwiTFJVIiwibWF4IiwiZ2V0Iiwia2V5IiwicHV0IiwidmFsdWUiLCJlbnRyeVRUTCIsIkluZmluaXR5Iiwic2V0IiwiZGVsIiwiZGVsZXRlIiwiY2xlYXIiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQ2FjaGUvTFJVQ2FjaGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTFJVQ2FjaGUgYXMgTFJVIH0gZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi8uLi9kZWZhdWx0cyc7XG5cbmNvbnN0IGlzVmFsaWRUVEwgPSB0dGwgPT4gdHlwZW9mIHR0bCA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHR0bCkgJiYgdHRsID4gMDtcblxuLy8gYGxydS1jYWNoZWAgZXhwcmVzc2VzIFwibmV2ZXIgZXhwaXJlc1wiIGFzIGEgVFRMIG9mIHplcm8uXG5jb25zdCBOT19FWFBJUlkgPSAwO1xuXG5leHBvcnQgY2xhc3MgTFJVQ2FjaGUge1xuICBjb25zdHJ1Y3Rvcih7IHR0bCA9IGRlZmF1bHRzLmNhY2hlVFRMLCBtYXhTaXplID0gZGVmYXVsdHMuY2FjaGVNYXhTaXplIH0pIHtcbiAgICB0aGlzLnR0bCA9IHR0bDtcbiAgICB0aGlzLmNhY2hlID0gbmV3IExSVSh7XG4gICAgICBtYXg6IG1heFNpemUsXG4gICAgICB0dGwsXG4gICAgfSk7XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSkgfHwgbnVsbDtcbiAgfVxuXG4gIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIC8vIGBscnUtY2FjaGVgIHRha2VzIHRoZSBwZXItZW50cnkgVFRMIGFzIGEgcHJvcGVydHkgb2YgYW4gb3B0aW9ucyBvYmplY3QuXG4gICAgLy8gUGFzc2VkIHBvc2l0aW9uYWxseSBpdCBpcyBzaWxlbnRseSBkaXNjYXJkZWQsIGxlYXZpbmcgdGhlIGVudHJ5IG9uIHRoZVxuICAgIC8vIGNhY2hlLXdpZGUgVFRMLlxuICAgIC8vXG4gICAgLy8gQSBUVEwgb2YgYEluZmluaXR5YCBtZWFucyBcIm5ldmVyIGV4cGlyZXNcIiwgbWF0Y2hpbmcgYFJlZGlzQ2FjaGVBZGFwdGVyYCxcbiAgICAvLyBhbmQgaXMgdHJhbnNsYXRlZCB0byB0aGUgemVybyB0aGF0IGBscnUtY2FjaGVgIHVzZXMgZm9yIHRoYXQuIGBJbmZpbml0eWBcbiAgICAvLyBpcyBub3QgZm9yd2FyZGVkIGFzLWlzIGJlY2F1c2UgTm9kZSBjYW5ub3QgZXhwcmVzcyBpdCBhcyBhIHRpbWVyXG4gICAgLy8gZHVyYXRpb246IHVuZGVyIGB0dGxBdXRvcHVyZ2VgIGl0IGVtaXRzIGEgYFRpbWVvdXRPdmVyZmxvd1dhcm5pbmdgIGFuZFxuICAgIC8vIGNsYW1wcyB0aGUgdGltZXIgdG8gMW1zLCBzbyB0aGUgcHVyZ2UgdGltZXIgcmUtZmlyZXMgZXZlcnkgbWlsbGlzZWNvbmQuXG4gICAgLy8gQW55IG90aGVyIFRUTCB0aGF0IGlzIG5vdCBhIHBvc2l0aXZlLCBmaW5pdGUgbnVtYmVyIGlzIGZvcndhcmRlZCBhc1xuICAgIC8vIGB1bmRlZmluZWRgLCB3aGljaCBpcyBob3cgdGhlIGxpYnJhcnkgZXhwcmVzc2VzIFwidXNlIHRoZSBjYWNoZS13aWRlIFRUTFwiLlxuICAgIGxldCBlbnRyeVRUTDtcbiAgICBpZiAodHRsID09PSBJbmZpbml0eSkge1xuICAgICAgZW50cnlUVEwgPSBOT19FWFBJUlk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkVFRMKHR0bCkpIHtcbiAgICAgIGVudHJ5VFRMID0gdHRsO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlLCB7IHR0bDogZW50cnlUVEwgfSk7XG4gIH1cblxuICBkZWwoa2V5KSB7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMUlVDYWNoZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQXNDLFNBQUFFLHVCQUFBQyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXRDLE1BQU1HLFVBQVUsR0FBR0MsR0FBRyxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLElBQUlDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixHQUFHLENBQUMsSUFBSUEsR0FBRyxHQUFHLENBQUM7O0FBRXBGO0FBQ0EsTUFBTUcsU0FBUyxHQUFHLENBQUM7QUFFWixNQUFNQyxRQUFRLENBQUM7RUFDcEJDLFdBQVdBLENBQUM7SUFBRUwsR0FBRyxHQUFHTSxpQkFBUSxDQUFDQyxRQUFRO0lBQUVDLE9BQU8sR0FBR0YsaUJBQVEsQ0FBQ0c7RUFBYSxDQUFDLEVBQUU7SUFDeEUsSUFBSSxDQUFDVCxHQUFHLEdBQUdBLEdBQUc7SUFDZCxJQUFJLENBQUNVLEtBQUssR0FBRyxJQUFJQyxrQkFBRyxDQUFDO01BQ25CQyxHQUFHLEVBQUVKLE9BQU87TUFDWlI7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBYSxHQUFHQSxDQUFDQyxHQUFHLEVBQUU7SUFDUCxPQUFPLElBQUksQ0FBQ0osS0FBSyxDQUFDRyxHQUFHLENBQUNDLEdBQUcsQ0FBQyxJQUFJLElBQUk7RUFDcEM7RUFFQUMsR0FBR0EsQ0FBQ0QsR0FBRyxFQUFFRSxLQUFLLEVBQUVoQixHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLEVBQUU7SUFDOUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLElBQUlpQixRQUFRO0lBQ1osSUFBSWpCLEdBQUcsS0FBS2tCLFFBQVEsRUFBRTtNQUNwQkQsUUFBUSxHQUFHZCxTQUFTO0lBQ3RCLENBQUMsTUFBTSxJQUFJSixVQUFVLENBQUNDLEdBQUcsQ0FBQyxFQUFFO01BQzFCaUIsUUFBUSxHQUFHakIsR0FBRztJQUNoQjtJQUNBLElBQUksQ0FBQ1UsS0FBSyxDQUFDUyxHQUFHLENBQUNMLEdBQUcsRUFBRUUsS0FBSyxFQUFFO01BQUVoQixHQUFHLEVBQUVpQjtJQUFTLENBQUMsQ0FBQztFQUMvQztFQUVBRyxHQUFHQSxDQUFDTixHQUFHLEVBQUU7SUFDUCxJQUFJLENBQUNKLEtBQUssQ0FBQ1csTUFBTSxDQUFDUCxHQUFHLENBQUM7RUFDeEI7RUFFQVEsS0FBS0EsQ0FBQSxFQUFHO0lBQ04sSUFBSSxDQUFDWixLQUFLLENBQUNZLEtBQUssQ0FBQyxDQUFDO0VBQ3BCO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBbkIsUUFBQSxHQUFBQSxRQUFBO0FBQUEsSUFBQW9CLFFBQUEsR0FBQUQsT0FBQSxDQUFBekIsT0FBQSxHQUVjTSxRQUFRIiwiaWdub3JlTGlzdCI6W119
@@ -573,7 +573,9 @@ class ParseLiveQueryServer {
573
573
  const result = {};
574
574
  if (error && error.code === _node.default.Error.INVALID_SESSION_TOKEN) {
575
575
  result.error = error;
576
- this.authCache.set(sessionToken, Promise.resolve(result), this.config.cacheTimeout);
576
+ this.authCache.set(sessionToken, Promise.resolve(result), {
577
+ ttl: this.config.cacheTimeout
578
+ });
577
579
  } else {
578
580
  this.authCache.delete(sessionToken);
579
581
  }
@@ -1164,4 +1166,4 @@ class ParseLiveQueryServer {
1164
1166
  }
1165
1167
  }
1166
1168
  exports.ParseLiveQueryServer = ParseLiveQueryServer;
1167
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHYiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ub2RlIiwiX1N1YnNjcmlwdGlvbiIsIl9DbGllbnQiLCJfUGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJfbG9nZ2VyIiwiX1JlcXVlc3RTY2hlbWEiLCJfUXVlcnlUb29scyIsIl9QYXJzZVB1YlN1YiIsIl9TY2hlbWFDb250cm9sbGVyIiwiX2xvZGFzaCIsIl9jcnlwdG8iLCJfdHJpZ2dlcnMiLCJfQXV0aCIsIl9Db250cm9sbGVycyIsIl9Db25maWciLCJfbHJ1Q2FjaGUiLCJfVXNlcnNSb3V0ZXIiLCJfRGF0YWJhc2VDb250cm9sbGVyIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQYXJzZUxpdmVRdWVyeVNlcnZlciIsImNvbnN0cnVjdG9yIiwic2VydmVyIiwiY29uZmlnIiwicGFyc2VTZXJ2ZXJDb25maWciLCJjbGllbnRzIiwiTWFwIiwic3Vic2NyaXB0aW9ucyIsImFwcElkIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwibWFzdGVyS2V5Iiwia2V5UGFpcnMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwic2V0IiwibG9nZ2VyIiwidmVyYm9zZSIsImRpc2FibGVTaW5nbGVJbnN0YW5jZSIsInNlcnZlclVSTCIsImluaXRpYWxpemUiLCJqYXZhU2NyaXB0S2V5IiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiY2FjaGVUaW1lb3V0IiwiYXV0aENhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwicGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJQYXJzZVdlYlNvY2tldFNlcnZlciIsInBhcnNlV2Vic29ja2V0IiwiX29uQ29ubmVjdCIsInN1YnNjcmliZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVN1YnNjcmliZXIiLCJjb25uZWN0IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY3JlYXRlU3Vic2NyaWJlcnMiLCJzaHV0ZG93biIsImFsbCIsInZhbHVlcyIsIm1hcCIsImNsaWVudCIsInBhcnNlV2ViU29ja2V0Iiwid3MiLCJjbG9zZSIsIkFycmF5IiwiZnJvbSIsInVuc3Vic2NyaWJlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlUmVjaWV2ZWQiLCJjaGFubmVsIiwibWVzc2FnZVN0ciIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJfY2xlYXJDYWNoZWRSb2xlcyIsInVzZXJJZCIsIl9pbmZsYXRlUGFyc2VPYmplY3QiLCJfb25BZnRlclNhdmUiLCJfb25BZnRlckRlbGV0ZSIsIm9uIiwiZmllbGQiLCJzdWJzY3JpYmUiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJVc2VyUm91dGVyIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsImNsYXNzTmFtZSIsInBhcnNlT2JqZWN0IiwiX2ZpbmlzaEZldGNoIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImRlbGV0ZWRQYXJzZU9iamVjdCIsInRvSlNPTiIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsImlkIiwic2l6ZSIsImNsYXNzU3Vic2NyaXB0aW9ucyIsImdldCIsImRlYnVnIiwic3Vic2NyaXB0aW9uIiwiaXNTdWJzY3JpcHRpb25NYXRjaGVkIiwiX21hdGNoZXNTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZHMiLCJfIiwiZW50cmllcyIsImNsaWVudFJlcXVlc3RJZHMiLCJmb3JFYWNoIiwicmVxdWVzdElkIiwibG9jYWxEZWxldGVkUGFyc2VPYmplY3QiLCJzdHJpbmdpZnkiLCJhY2wiLCJnZXRBQ0wiLCJvcCIsIl9nZXRDTFBPcGVyYXRpb24iLCJxdWVyeSIsInJlcyIsIm1hdGNoZXNDTFAiLCJfbWF0Y2hlc0NMUCIsImlzTWF0Y2hlZCIsIl9tYXRjaGVzQUNMIiwiZXZlbnQiLCJzZXNzaW9uVG9rZW4iLCJvYmplY3QiLCJ1c2VNYXN0ZXJLZXkiLCJoYXNNYXN0ZXJLZXkiLCJpbnN0YWxsYXRpb25JZCIsInNlbmRFdmVudCIsInRyaWdnZXIiLCJnZXRUcmlnZ2VyIiwiYXV0aCIsImdldEF1dGhGcm9tQ2xpZW50IiwidXNlciIsImZyb21KU09OIiwicnVuVHJpZ2dlciIsInRvSlNPTndpdGhPYmplY3RzIiwiX2ZpbHRlclNlbnNpdGl2ZURhdGEiLCJwdXNoRGVsZXRlIiwicmVzb2x2ZUVycm9yIiwiQ2xpZW50IiwicHVzaEVycm9yIiwiY29kZSIsImlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkIiwiaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCIsImxvY2FsQ3VycmVudFBhcnNlT2JqZWN0IiwibG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0Iiwib3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UiLCJvcmlnaW5hbEFDTCIsImN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UiLCJjdXJyZW50QUNMIiwiaXNPcmlnaW5hbE1hdGNoZWQiLCJpc0N1cnJlbnRNYXRjaGVkIiwiaGFzaCIsInR5cGUiLCJ3YXRjaEZpZWxkc0NoYW5nZWQiLCJfY2hlY2tXYXRjaEZpZWxkcyIsImN1cnJlbnRSZWFkYWJsZSIsIm9yaWdpbmFsUmVhZGFibGUiLCJvcmlnaW5hbCIsImZ1bmN0aW9uTmFtZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJyZXF1ZXN0IiwidHY0IiwidmFsaWRhdGUiLCJSZXF1ZXN0U2NoZW1hIiwiX2hhbmRsZUNvbm5lY3QiLCJfaGFuZGxlU3Vic2NyaWJlIiwiX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbiIsIl9oYW5kbGVVbnN1YnNjcmliZSIsImluZm8iLCJoYXMiLCJydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzIiwiZGVsZXRlIiwic3Vic2NyaXB0aW9uSW5mbyIsInN1YnNjcmlwdGlvbkluZm9zIiwiZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uIiwiaGFzU3Vic2NyaWJpbmdDbGllbnQiLCJfdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzIiwid2hlcmUiLCJ1bmRlZmluZWQiLCJpc0FycmF5IiwiRXJyb3IiLCJJTlZBTElEX1FVRVJZIiwic3ViUXVlcnkiLCJjb25zdHJhaW50IiwiJHJlZ2V4IiwicmVnZXgiLCJpc1JlZ0V4cExpa2UiLCJzb3VyY2UiLCJmbGFncyIsInBhdHRlcm4iLCIkb3B0aW9ucyIsIlJlZ0V4cCIsIm1hdGNoZXNRdWVyeSIsInN0cnVjdHVyZWRDbG9uZSIsInZhbGlkVG9rZW5zIiwiUXVlcnkiLCJTZXNzaW9uIiwiZXF1YWxUbyIsIlVzZXIiLCJjcmVhdGVXaXRob3V0RGF0YSIsImZpbmQiLCJ0b2tlbiIsImF1dGhQcm9taXNlIiwiYXV0aDEiLCJhdXRoMiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjbGVhclJvbGVDYWNoZSIsImZyb21DYWNoZSIsInRoZW4iLCJjYXRjaCIsInJlc3VsdCIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsImdldFN1YnNjcmlwdGlvbkluZm8iLCJhY2xHcm91cCIsInB1c2giLCJTY2hlbWFDb250cm9sbGVyIiwidmFsaWRhdGVQZXJtaXNzaW9uIiwicGVybWlzc2lvbkZpZWxkIiwiaW5kZXhPZiIsInBvaW50ZXJGaWVsZHMiLCJpbmNsdWRlcyIsImxlbmd0aCIsInRlc3RQZXJtaXNzaW9ucyIsImhhc0FjY2VzcyIsInNvbWUiLCJ2YWx1ZSIsIm9iamVjdElkIiwiaXRlbSIsIl9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMiLCJjbGllbnRBdXRoIiwiZ2V0VXNlclJvbGVzIiwicHJvdGVjdGVkRmllbGRzIiwic3RhcnRzV2l0aCIsImZpbHRlciIsIm9iaiIsImdldERhdGFiYXNlQ29udHJvbGxlciIsImFkZFByb3RlY3RlZEZpZWxkcyIsIkRhdGFiYXNlQ29udHJvbGxlciIsImZpbHRlclNlbnNpdGl2ZURhdGEiLCJwcm90ZWN0ZWRGaWVsZHNPd25lckV4ZW1wdCIsIl92ZXJpZnlBQ0wiLCJpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQiLCJnZXRSZWFkQWNjZXNzIiwiYWNsX2hhc19yb2xlcyIsInBlcm1pc3Npb25zQnlJZCIsInJvbGVOYW1lcyIsInJvbGUiLCJnZXRTZXNzaW9uRnJvbUNsaWVudCIsIndhdGNoIiwiaXNEZWVwU3RyaWN0RXF1YWwiLCJnZXRQdWJsaWNSZWFkQWNjZXNzIiwic3Vic2NyaXB0aW9uVG9rZW4iLCJjbGllbnRTZXNzaW9uVG9rZW4iLCJfdmFsaWRhdGVLZXlzIiwiX2hhc01hc3RlcktleSIsInJhbmRvbVVVSUQiLCJyZXEiLCJwdXNoQ29ubmVjdCIsInZhbGlkS2V5UGFpcnMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc1ZhbGlkIiwic2VjcmV0IiwiYXV0aENhbGxlZCIsInBhcnNlUXVlcnkiLCJ3aXRoSlNPTiIsInRvUG9pbnRlciIsIm1hc3RlciIsImFwcENvbmZpZyIsIkNvbmZpZyIsInJjIiwicmVxdWVzdENvbXBsZXhpdHkiLCJxdWVyeURlcHRoIiwibWF4RGVwdGgiLCJjaGVja0RlcHRoIiwibm9kZSIsImRlcHRoIiwiaXNMb2dpY2FsIiwiYWxsb3dSZWdleCIsImNoZWNrUmVnZXgiLCJzY2hlbWFDb250cm9sbGVyIiwiZGF0YWJhc2UiLCJsb2FkU2NoZW1hIiwiZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zIiwidXNlclJvbGVzIiwiY2hlY2tXaGVyZSIsIndoZXJlS2V5Iiwicm9vdEZpZWxkIiwic3BsaXQiLCJPUEVSQVRJT05fRk9SQklEREVOIiwid2F0Y2hGaWVsZCIsInByZXZpb3VzU3Vic2NyaXB0aW9uSW5mbyIsInByZXZpb3VzU3Vic2NyaXB0aW9uIiwicHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMiLCJzdWJzY3JpcHRpb25IYXNoIiwicXVlcnlIYXNoIiwiU3Vic2NyaXB0aW9uIiwiYWRkU3Vic2NyaXB0aW9uSW5mbyIsImFkZENsaWVudFN1YnNjcmlwdGlvbiIsInB1c2hTdWJzY3JpYmUiLCJub3RpZnlDbGllbnQiLCJkZWxldGVTdWJzY3JpcHRpb25JbmZvIiwicHVzaFVuc3Vic2NyaWJlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvUGFyc2VMaXZlUXVlcnlTZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR2NCBmcm9tICd0djQnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi9DbGllbnQnO1xuaW1wb3J0IHsgUGFyc2VXZWJTb2NrZXRTZXJ2ZXIgfSBmcm9tICcuL1BhcnNlV2ViU29ja2V0U2VydmVyJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBSZXF1ZXN0U2NoZW1hIGZyb20gJy4vUmVxdWVzdFNjaGVtYSc7XG5pbXBvcnQgeyBtYXRjaGVzUXVlcnksIHF1ZXJ5SGFzaCB9IGZyb20gJy4vUXVlcnlUb29scyc7XG5pbXBvcnQgeyBQYXJzZVB1YlN1YiB9IGZyb20gJy4vUGFyc2VQdWJTdWInO1xuaW1wb3J0IFNjaGVtYUNvbnRyb2xsZXIgZnJvbSAnLi4vQ29udHJvbGxlcnMvU2NoZW1hQ29udHJvbGxlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge1xuICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzLFxuICBnZXRUcmlnZ2VyLFxuICBydW5UcmlnZ2VyLFxuICByZXNvbHZlRXJyb3IsXG4gIHRvSlNPTndpdGhPYmplY3RzLFxufSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgeyBnZXRBdXRoRm9yU2Vzc2lvblRva2VuLCBBdXRoIH0gZnJvbSAnLi4vQXV0aCc7XG5pbXBvcnQgeyBnZXRDYWNoZUNvbnRyb2xsZXIsIGdldERhdGFiYXNlQ29udHJvbGxlciB9IGZyb20gJy4uL0NvbnRyb2xsZXJzJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCB7IExSVUNhY2hlIGFzIExSVSB9IGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgVXNlclJvdXRlciBmcm9tICcuLi9Sb3V0ZXJzL1VzZXJzUm91dGVyJztcbmltcG9ydCBEYXRhYmFzZUNvbnRyb2xsZXIgZnJvbSAnLi4vQ29udHJvbGxlcnMvRGF0YWJhc2VDb250cm9sbGVyJztcbmltcG9ydCB7IGlzRGVlcFN0cmljdEVxdWFsIH0gZnJvbSAndXRpbCc7XG5cblxuY2xhc3MgUGFyc2VMaXZlUXVlcnlTZXJ2ZXIge1xuICBzZXJ2ZXI6IGFueTtcbiAgY29uZmlnOiBhbnk7XG4gIGNsaWVudHM6IE1hcDxzdHJpbmcsIGFueT47XG4gIC8vIGNsYXNzTmFtZSAtPiAocXVlcnlIYXNoIC0+IHN1YnNjcmlwdGlvbilcbiAgc3Vic2NyaXB0aW9uczogTWFwPHN0cmluZywgYW55PjtcbiAgcGFyc2VXZWJTb2NrZXRTZXJ2ZXI6IGFueTtcbiAga2V5UGFpcnM6IGFueTtcbiAgLy8gVGhlIHN1YnNjcmliZXIgd2UgdXNlIHRvIGdldCBvYmplY3QgdXBkYXRlIGZyb20gcHVibGlzaGVyXG4gIHN1YnNjcmliZXI6IGFueTtcbiAgYXV0aENhY2hlOiBhbnk7XG4gIGNhY2hlQ29udHJvbGxlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHNlcnZlcjogYW55LCBjb25maWc6IGFueSA9IHt9LCBwYXJzZVNlcnZlckNvbmZpZzogYW55ID0ge30pIHtcbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcbiAgICB0aGlzLmNsaWVudHMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgY29uZmlnLmFwcElkID0gY29uZmlnLmFwcElkIHx8IFBhcnNlLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uZmlnLm1hc3RlcktleSA9IGNvbmZpZy5tYXN0ZXJLZXkgfHwgUGFyc2UubWFzdGVyS2V5O1xuXG4gICAgLy8gU3RvcmUga2V5cywgY29udmVydCBvYmogdG8gbWFwXG4gICAgY29uc3Qga2V5UGFpcnMgPSBjb25maWcua2V5UGFpcnMgfHwge307XG4gICAgdGhpcy5rZXlQYWlycyA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhrZXlQYWlycykpIHtcbiAgICAgIHRoaXMua2V5UGFpcnMuc2V0KGtleSwga2V5UGFpcnNba2V5XSk7XG4gICAgfVxuICAgIGxvZ2dlci52ZXJib3NlKCdTdXBwb3J0IGtleSBwYWlycycsIHRoaXMua2V5UGFpcnMpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBQYXJzZVxuICAgIFBhcnNlLk9iamVjdC5kaXNhYmxlU2luZ2xlSW5zdGFuY2UoKTtcbiAgICBjb25zdCBzZXJ2ZXJVUkwgPSBjb25maWcuc2VydmVyVVJMIHx8IFBhcnNlLnNlcnZlclVSTDtcbiAgICBQYXJzZS5zZXJ2ZXJVUkwgPSBzZXJ2ZXJVUkw7XG4gICAgUGFyc2UuaW5pdGlhbGl6ZShjb25maWcuYXBwSWQsIFBhcnNlLmphdmFTY3JpcHRLZXksIGNvbmZpZy5tYXN0ZXJLZXkpO1xuXG4gICAgLy8gVGhlIGNhY2hlIGNvbnRyb2xsZXIgaXMgYSBwcm9wZXIgY2FjaGUgY29udHJvbGxlclxuICAgIC8vIHdpdGggYWNjZXNzIHRvIFVzZXIgYW5kIFJvbGVzXG4gICAgdGhpcy5jYWNoZUNvbnRyb2xsZXIgPSBnZXRDYWNoZUNvbnRyb2xsZXIocGFyc2VTZXJ2ZXJDb25maWcpO1xuXG4gICAgY29uZmlnLmNhY2hlVGltZW91dCA9IGNvbmZpZy5jYWNoZVRpbWVvdXQgfHwgNSAqIDEwMDA7IC8vIDVzXG5cbiAgICAvLyBUaGlzIGF1dGggY2FjaGUgc3RvcmVzIHRoZSBwcm9taXNlcyBmb3IgZWFjaCBhdXRoIHJlc29sdXRpb24uXG4gICAgLy8gVGhlIG1haW4gYmVuZWZpdCBpcyB0byBiZSBhYmxlIHRvIHJldXNlIHRoZSBzYW1lIHVzZXIgLyBzZXNzaW9uIHRva2VuIHJlc29sdXRpb24uXG4gICAgdGhpcy5hdXRoQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogNTAwLCAvLyA1MDAgY29uY3VycmVudFxuICAgICAgdHRsOiBjb25maWcuY2FjaGVUaW1lb3V0LFxuICAgIH0pO1xuICAgIC8vIEluaXRpYWxpemUgd2Vic29ja2V0IHNlcnZlclxuICAgIHRoaXMucGFyc2VXZWJTb2NrZXRTZXJ2ZXIgPSBuZXcgUGFyc2VXZWJTb2NrZXRTZXJ2ZXIoXG4gICAgICBzZXJ2ZXIsXG4gICAgICBwYXJzZVdlYnNvY2tldCA9PiB0aGlzLl9vbkNvbm5lY3QocGFyc2VXZWJzb2NrZXQpLFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmliZXIgPSBQYXJzZVB1YlN1Yi5jcmVhdGVTdWJzY3JpYmVyKGNvbmZpZyk7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmliZXIuY29ubmVjdCkge1xuICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuc3Vic2NyaWJlci5jb25uZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5zdWJzY3JpYmVyLmNvbm5lY3QoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVTdWJzY3JpYmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaWJlci5pc09wZW4pIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgLi4uWy4uLnRoaXMuY2xpZW50cy52YWx1ZXMoKV0ubWFwKGNsaWVudCA9PiBjbGllbnQucGFyc2VXZWJTb2NrZXQud3MuY2xvc2UoKSksXG4gICAgICAgIHRoaXMucGFyc2VXZWJTb2NrZXRTZXJ2ZXIuY2xvc2U/LigpLFxuICAgICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc3Vic2NyaWJlci5zdWJzY3JpcHRpb25zPy5rZXlzKCkgfHwgW10pLm1hcChrZXkgPT5cbiAgICAgICAgICB0aGlzLnN1YnNjcmliZXIudW5zdWJzY3JpYmUoa2V5KVxuICAgICAgICApLFxuICAgICAgICB0aGlzLnN1YnNjcmliZXIuY2xvc2U/LigpLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJzY3JpYmVyLmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZXIuY2xvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1B1YlN1YkFkYXB0ZXIgZXJyb3Igb24gc2h1dGRvd24nLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5pc09wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlU3Vic2NyaWJlcnMoKSB7XG4gICAgY29uc3QgbWVzc2FnZVJlY2lldmVkID0gKGNoYW5uZWwsIG1lc3NhZ2VTdHIpID0+IHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdTdWJzY3JpYmUgbWVzc2FnZSAlaicsIG1lc3NhZ2VTdHIpO1xuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShtZXNzYWdlU3RyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCd1bmFibGUgdG8gcGFyc2UgbWVzc2FnZScsIG1lc3NhZ2VTdHIsIGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY2hhbm5lbCA9PT0gUGFyc2UuYXBwbGljYXRpb25JZCArICdjbGVhckNhY2hlJykge1xuICAgICAgICB0aGlzLl9jbGVhckNhY2hlZFJvbGVzKG1lc3NhZ2UudXNlcklkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5mbGF0ZVBhcnNlT2JqZWN0KG1lc3NhZ2UpO1xuICAgICAgaWYgKGNoYW5uZWwgPT09IFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJTYXZlJykge1xuICAgICAgICB0aGlzLl9vbkFmdGVyU2F2ZShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbm5lbCA9PT0gUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlckRlbGV0ZScpIHtcbiAgICAgICAgdGhpcy5fb25BZnRlckRlbGV0ZShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignR2V0IG1lc3NhZ2UgJXMgZnJvbSB1bmtub3duIGNoYW5uZWwgJWonLCBtZXNzYWdlLCBjaGFubmVsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlci5vbignbWVzc2FnZScsIChjaGFubmVsLCBtZXNzYWdlU3RyKSA9PiBtZXNzYWdlUmVjaWV2ZWQoY2hhbm5lbCwgbWVzc2FnZVN0cikpO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgWydhZnRlclNhdmUnLCAnYWZ0ZXJEZWxldGUnLCAnY2xlYXJDYWNoZSddKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYCR7UGFyc2UuYXBwbGljYXRpb25JZH0ke2ZpZWxkfWA7XG4gICAgICB0aGlzLnN1YnNjcmliZXIuc3Vic2NyaWJlKGNoYW5uZWwsIG1lc3NhZ2VTdHIgPT4gbWVzc2FnZVJlY2lldmVkKGNoYW5uZWwsIG1lc3NhZ2VTdHIpKTtcbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlci4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IEpTT04gYWZ0ZXIgY2hhbmdlcy5cbiAgLy8gTWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0IGlzIHRoZSBvcmlnaW5hbCBQYXJzZU9iamVjdCBKU09OLlxuICBfaW5mbGF0ZVBhcnNlT2JqZWN0KG1lc3NhZ2U6IGFueSk6IHZvaWQge1xuICAgIC8vIEluZmxhdGUgbWVyZ2VkIG9iamVjdFxuICAgIGNvbnN0IGN1cnJlbnRQYXJzZU9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIFVzZXJSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhjdXJyZW50UGFyc2VPYmplY3QpO1xuICAgIGxldCBjbGFzc05hbWUgPSBjdXJyZW50UGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgIGxldCBwYXJzZU9iamVjdCA9IG5ldyBQYXJzZS5PYmplY3QoY2xhc3NOYW1lKTtcbiAgICBwYXJzZU9iamVjdC5fZmluaXNoRmV0Y2goY3VycmVudFBhcnNlT2JqZWN0KTtcbiAgICBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0O1xuICAgIC8vIEluZmxhdGUgb3JpZ2luYWwgb2JqZWN0XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJzZU9iamVjdCA9IG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdDtcbiAgICBpZiAob3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgICAgVXNlclJvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKG9yaWdpbmFsUGFyc2VPYmplY3QpO1xuICAgICAgY2xhc3NOYW1lID0gb3JpZ2luYWxQYXJzZU9iamVjdC5jbGFzc05hbWU7XG4gICAgICBwYXJzZU9iamVjdCA9IG5ldyBQYXJzZS5PYmplY3QoY2xhc3NOYW1lKTtcbiAgICAgIHBhcnNlT2JqZWN0Ll9maW5pc2hGZXRjaChvcmlnaW5hbFBhcnNlT2JqZWN0KTtcbiAgICAgIG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0O1xuICAgIH1cbiAgfVxuXG4gIC8vIE1lc3NhZ2UgaXMgdGhlIEpTT04gb2JqZWN0IGZyb20gcHVibGlzaGVyIGFmdGVyIGluZmxhdGVkLiBNZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCBpcyB0aGUgUGFyc2VPYmplY3QgYWZ0ZXIgY2hhbmdlcy5cbiAgLy8gTWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0IGlzIHRoZSBvcmlnaW5hbCBQYXJzZU9iamVjdC5cbiAgYXN5bmMgX29uQWZ0ZXJEZWxldGUobWVzc2FnZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlckRlbGV0ZSBpcyB0cmlnZ2VyZWQnKTtcblxuICAgIGxldCBkZWxldGVkUGFyc2VPYmplY3QgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC50b0pTT04oKTtcbiAgICBjb25zdCBjbGFzc0xldmVsUGVybWlzc2lvbnMgPSBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICBjb25zdCBjbGFzc05hbWUgPSBkZWxldGVkUGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDbGFzc05hbWU6ICVqIHwgT2JqZWN0SWQ6ICVzJywgY2xhc3NOYW1lLCBkZWxldGVkUGFyc2VPYmplY3QuaWQpO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXIgOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcblxuICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoY2xhc3NOYW1lKTtcbiAgICBpZiAodHlwZW9mIGNsYXNzU3Vic2NyaXB0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FuIG5vdCBmaW5kIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcyAnICsgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBjbGFzc1N1YnNjcmlwdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGxldCBpc1N1YnNjcmlwdGlvbk1hdGNoZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpc1N1YnNjcmlwdGlvbk1hdGNoZWQgPSB0aGlzLl9tYXRjaGVzU3Vic2NyaXB0aW9uKGRlbGV0ZWRQYXJzZU9iamVjdCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgbWF0Y2hpbmcgc3Vic2NyaXB0aW9uIGZvciBjbGFzcyAke2NsYXNzTmFtZX06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbY2xpZW50SWQsIHJlcXVlc3RJZHNdIG9mIF8uZW50cmllcyhzdWJzY3JpcHRpb24uY2xpZW50UmVxdWVzdElkcykpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2xpZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RJZHMuZm9yRWFjaChhc3luYyByZXF1ZXN0SWQgPT4ge1xuICAgICAgICAgIC8vIERlZXAtY2xvbmUgc2hhcmVkIG9iamVjdCBzbyBlYWNoIGNvbmN1cnJlbnQgY2FsbGJhY2sgd29ya3Mgb24gaXRzIG93biBjb3B5XG4gICAgICAgICAgbGV0IGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWxldGVkUGFyc2VPYmplY3QpKTtcbiAgICAgICAgICBjb25zdCBhY2wgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC5nZXRBQ0woKTtcbiAgICAgICAgICAvLyBDaGVjayBDTFBcbiAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihzdWJzY3JpcHRpb24ucXVlcnkpO1xuICAgICAgICAgIGxldCByZXM6IGFueSA9IHt9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzQ0xQID0gYXdhaXQgdGhpcy5fbWF0Y2hlc0NMUChcbiAgICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoZXNDTFAgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gYXdhaXQgdGhpcy5fbWF0Y2hlc0FDTChhY2wsIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgIGlmICghaXNNYXRjaGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0ge1xuICAgICAgICAgICAgICBldmVudDogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgICAgICAgICAgb2JqZWN0OiBsb2NhbERlbGV0ZWRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgICAgIHNlbmRFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdhZnRlckV2ZW50JywgUGFyc2UuYXBwbGljYXRpb25JZCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgICAgIHJlcy51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0ID0gdG9KU09Od2l0aE9iamVjdHMocmVzLm9iamVjdCwgcmVzLm9iamVjdC5jbGFzc05hbWUgfHwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5vYmplY3QgPSBsb2NhbERlbGV0ZWRQYXJzZU9iamVjdDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5xdWVyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsaWVudC5wdXNoRGVsZXRlKHJlcXVlc3RJZCwgcmVzLm9iamVjdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlciBhZnRlciBpbmZsYXRlZC4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QuXG4gIGFzeW5jIF9vbkFmdGVyU2F2ZShtZXNzYWdlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIudmVyYm9zZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyU2F2ZSBpcyB0cmlnZ2VyZWQnKTtcblxuICAgIGxldCBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbnVsbDtcbiAgICBpZiAobWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0LnRvSlNPTigpO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0xldmVsUGVybWlzc2lvbnMgPSBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICBsZXQgY3VycmVudFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gY3VycmVudFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ2xhc3NOYW1lOiAlcyB8IE9iamVjdElkOiAlcycsIGNsYXNzTmFtZSwgY3VycmVudFBhcnNlT2JqZWN0LmlkKTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyIDogJWQnLCB0aGlzLmNsaWVudHMuc2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjbGFzc1N1YnNjcmlwdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MgJyArIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGNsYXNzU3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgbGV0IGlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkO1xuICAgICAgbGV0IGlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCA9IHRoaXMuX21hdGNoZXNTdWJzY3JpcHRpb24oXG4gICAgICAgICAgb3JpZ2luYWxQYXJzZU9iamVjdCxcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgKTtcbiAgICAgICAgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCA9IHRoaXMuX21hdGNoZXNTdWJzY3JpcHRpb24oXG4gICAgICAgICAgY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCBtYXRjaGluZyBzdWJzY3JpcHRpb24gZm9yIGNsYXNzICR7Y2xhc3NOYW1lfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbY2xpZW50SWQsIHJlcXVlc3RJZHNdIG9mIF8uZW50cmllcyhzdWJzY3JpcHRpb24uY2xpZW50UmVxdWVzdElkcykpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2xpZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RJZHMuZm9yRWFjaChhc3luYyByZXF1ZXN0SWQgPT4ge1xuICAgICAgICAgIC8vIERlZXAtY2xvbmUgc2hhcmVkIG9iamVjdHMgc28gZWFjaCBjb25jdXJyZW50IGNhbGxiYWNrIHdvcmtzIG9uIGl0cyBvd24gY29weS5cbiAgICAgICAgICAvLyBXaXRob3V0IGNsb25pbmcsIF9maWx0ZXJTZW5zaXRpdmVEYXRhJ3MgaW4tcGxhY2UgZmllbGQgZGVsZXRpb24gYW5kIGFmdGVyRXZlbnRcbiAgICAgICAgICAvLyB0cmlnZ2VyIG1vZGlmaWNhdGlvbnMgY29ycnVwdCB0aGUgc2hhcmVkIHN0YXRlIGFjcm9zcyBjb25jdXJyZW50IHN1YnNjcmliZXJzLlxuICAgICAgICAgIGxldCBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudFBhcnNlT2JqZWN0KSk7XG4gICAgICAgICAgbGV0IGxvY2FsT3JpZ2luYWxQYXJzZU9iamVjdCA9IG9yaWdpbmFsUGFyc2VPYmplY3RcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5hbFBhcnNlT2JqZWN0KSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAvLyBTZXQgb3JpZ25hbCBQYXJzZU9iamVjdCBBQ0wgY2hlY2tpbmcgcHJvbWlzZSwgaWYgdGhlIG9iamVjdCBkb2VzIG5vdCBtYXRjaFxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiwgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgQUNMXG4gICAgICAgICAgbGV0IG9yaWdpbmFsQUNMQ2hlY2tpbmdQcm9taXNlO1xuICAgICAgICAgIGlmICghaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsQUNMQ2hlY2tpbmdQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9yaWdpbmFsQUNMO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgICAgICAgICAgICBvcmlnaW5hbEFDTCA9IG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdC5nZXRBQ0woKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yaWdpbmFsQUNMQ2hlY2tpbmdQcm9taXNlID0gdGhpcy5fbWF0Y2hlc0FDTChvcmlnaW5hbEFDTCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTZXQgY3VycmVudCBQYXJzZU9iamVjdCBBQ0wgY2hlY2tpbmcgcHJvbWlzZSwgaWYgdGhlIG9iamVjdCBkb2VzIG5vdCBtYXRjaFxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiwgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgQUNMXG4gICAgICAgICAgbGV0IGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2U7XG4gICAgICAgICAgbGV0IHJlczogYW55ID0ge307XG4gICAgICAgICAgaWYgKCFpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgICAgICBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEFDTCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgICAgY3VycmVudEFDTENoZWNraW5nUHJvbWlzZSA9IHRoaXMuX21hdGNoZXNBQ0woY3VycmVudEFDTCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSB0aGlzLl9nZXRDTFBPcGVyYXRpb24oc3Vic2NyaXB0aW9uLnF1ZXJ5KTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNDTFAgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQ0xQKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlc0NMUCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2lzT3JpZ2luYWxNYXRjaGVkLCBpc0N1cnJlbnRNYXRjaGVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICAgICAgICAnT3JpZ2luYWwgJWogfCBDdXJyZW50ICVqIHwgTWF0Y2g6ICVzLCAlcywgJXMsICVzIHwgUXVlcnk6ICVzJyxcbiAgICAgICAgICAgICAgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzT3JpZ2luYWxNYXRjaGVkLFxuICAgICAgICAgICAgICBpc0N1cnJlbnRNYXRjaGVkLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uaGFzaFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIERlY2lkZSBldmVudCB0eXBlXG4gICAgICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgICAgIGlmIChpc09yaWdpbmFsTWF0Y2hlZCAmJiBpc0N1cnJlbnRNYXRjaGVkKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSAndXBkYXRlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPcmlnaW5hbE1hdGNoZWQgJiYgIWlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICdsZWF2ZSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc09yaWdpbmFsTWF0Y2hlZCAmJiBpc0N1cnJlbnRNYXRjaGVkKSB7XG4gICAgICAgICAgICAgIGlmIChsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2VudGVyJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2NyZWF0ZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2F0Y2hGaWVsZHNDaGFuZ2VkID0gdGhpcy5fY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQsIHJlcXVlc3RJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIXdhdGNoRmllbGRzQ2hhbmdlZCAmJiAodHlwZSA9PT0gJ3VwZGF0ZScgfHwgdHlwZSA9PT0gJ2NyZWF0ZScpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEEgYGxlYXZlYCBvciBgZW50ZXJgIHRyYW5zaXRpb24gY2FuIGJlIGNhdXNlZCBlaXRoZXIgYnkgdGhlIG9iamVjdCdzXG4gICAgICAgICAgICAvLyBxdWVyeSBtYXRjaCBjaGFuZ2luZyAodGhlIHN1YnNjcmliZXIga2VlcHMgcmVhZCBhY2Nlc3MpIG9yIGJ5IHRoZVxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlcidzIEFDTCByZWFkIGFjY2VzcyBiZWluZyByZXZva2VkIG9yIGdyYW50ZWQgaW4gdGhlIHNhbWUgc2F2ZS5cbiAgICAgICAgICAgIC8vIEluIHRoZSBhY2Nlc3MtY2hhbmdlIGNhc2UgdGhlIHN1YnNjcmliZXIgaXMgbm90IGF1dGhvcml6ZWQgdG8gcmVhZCB0aGVcbiAgICAgICAgICAgIC8vIG9iamVjdCBzdGF0ZSB0aGF0IHRyaWdnZXJlZCB0aGUgdHJhbnNpdGlvbiwgc28gdGhhdCBzdGF0ZSBtdXN0IG5vdCBiZVxuICAgICAgICAgICAgLy8gc2VudCBvdmVyIHRoZSBjaGFubmVsLiAoQ0xQIHJlYWQgZGVuaWFsIGlzIGhhbmRsZWQgZWFybGllciBieVxuICAgICAgICAgICAgLy8gYF9tYXRjaGVzQ0xQYCwgd2hpY2ggc2tpcHMgdGhlIGV2ZW50IGVudGlyZWx5LilcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbGVhdmUnKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBwb3N0LXVwZGF0ZSBvYmplY3QgaXMgcmVhZGFibGUgb24gYSBxdWVyeS1taXNtYXRjaCBsZWF2ZSBidXQgbm90XG4gICAgICAgICAgICAgIC8vIG9uIGFuIEFDTC1sb3NzIGxlYXZlLiBPbmx5IHNlbmQgdGhlIHBvc3QtdXBkYXRlIGJvZHkgd2hlbiB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaWJlciBjYW4gc3RpbGwgcmVhZCB0aGUgY3VycmVudCBvYmplY3Q7IG90aGVyd2lzZSBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgYXV0aG9yaXplZCAob3JpZ2luYWwpIHN0YXRlLCB3aGljaCBzdGlsbCBjYXJyaWVzIHRoZSBvYmplY3RJZC5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJlYWRhYmxlID0gaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZFxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IGF3YWl0IHRoaXMuX21hdGNoZXNBQ0wobWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QuZ2V0QUNMKCksIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVhZGFibGUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICAvLyBUaGUgcHJlLXVwZGF0ZSBvYmplY3Qgd2FzIHJlYWRhYmxlIG9uIGEgcXVlcnktbWF0Y2gtZ2FpbiBlbnRlciBidXQgbm90XG4gICAgICAgICAgICAgIC8vIG9uIGFuIEFDTC1ncmFudCBlbnRlci4gT25seSBzZW5kIHRoZSBwcmUtdXBkYXRlIGJvZHkgYXMgYG9yaWdpbmFsYFxuICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBzdWJzY3JpYmVyIGNvdWxkIHJlYWQgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZWFkYWJsZSA9IGlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogYXdhaXQgdGhpcy5fbWF0Y2hlc0FDTChtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QuZ2V0QUNMKCksIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgaWYgKCFvcmlnaW5hbFJlYWRhYmxlKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0ge1xuICAgICAgICAgICAgICBldmVudDogdHlwZSxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICBvYmplY3Q6IGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBvcmlnaW5hbDogbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgICAgc2VuZEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2FmdGVyRXZlbnQnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgICAgICByZXMudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0ID0gdG9KU09Od2l0aE9iamVjdHMocmVzLm9iamVjdCwgcmVzLm9iamVjdC5jbGFzc05hbWUgfHwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXMub3JpZ2luYWwgJiYgdHlwZW9mIHJlcy5vcmlnaW5hbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0ID0gdG9KU09Od2l0aE9iamVjdHMoXG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsLFxuICAgICAgICAgICAgICAgIHJlcy5vcmlnaW5hbC5jbGFzc05hbWUgfHwgY2xhc3NOYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMub2JqZWN0ID0gbG9jYWxDdXJyZW50UGFyc2VPYmplY3Q7XG4gICAgICAgICAgICByZXMub3JpZ2luYWwgPSBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3Q7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24ucXVlcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSAncHVzaCcgKyByZXMuZXZlbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXMuZXZlbnQuc2xpY2UoMSk7XG4gICAgICAgICAgICBpZiAoY2xpZW50W2Z1bmN0aW9uTmFtZV0pIHtcbiAgICAgICAgICAgICAgY2xpZW50W2Z1bmN0aW9uTmFtZV0ocmVxdWVzdElkLCByZXMub2JqZWN0LCByZXMub3JpZ2luYWwgPz8gbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25Db25uZWN0KHBhcnNlV2Vic29ja2V0OiBhbnkpOiB2b2lkIHtcbiAgICBwYXJzZVdlYnNvY2tldC5vbignbWVzc2FnZScsIHJlcXVlc3QgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCd1bmFibGUgdG8gcGFyc2UgcmVxdWVzdCcsIHJlcXVlc3QsIGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ1JlcXVlc3Q6ICVqJywgcmVxdWVzdCk7XG5cbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIGEgdmFsaWQgcmVxdWVzdCwgcmV0dXJuIGVycm9yIGRpcmVjdGx5IGlmIG5vdFxuICAgICAgaWYgKFxuICAgICAgICAhdHY0LnZhbGlkYXRlKHJlcXVlc3QsIFJlcXVlc3RTY2hlbWFbJ2dlbmVyYWwnXSkgfHxcbiAgICAgICAgIXR2NC52YWxpZGF0ZShyZXF1ZXN0LCBSZXF1ZXN0U2NoZW1hW3JlcXVlc3Qub3BdKVxuICAgICAgKSB7XG4gICAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDEsIHR2NC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0IG1lc3NhZ2UgZXJyb3IgJXMnLCB0djQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChyZXF1ZXN0Lm9wKSB7XG4gICAgICAgIGNhc2UgJ2Nvbm5lY3QnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNvbm5lY3QocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldCwgcmVxdWVzdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5zdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCAzLCAnR2V0IHVua25vd24gb3BlcmF0aW9uJyk7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdHZXQgdW5rbm93biBvcGVyYXRpb24nLCByZXF1ZXN0Lm9wKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBhcnNlV2Vic29ja2V0Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYENsaWVudCBkaXNjb25uZWN0OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZVdlYnNvY2tldC5jbGllbnRJZDtcbiAgICAgIGlmICghdGhpcy5jbGllbnRzLmhhcyhjbGllbnRJZCkpIHtcbiAgICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0X2Vycm9yJyxcbiAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICAgICAgICBlcnJvcjogYFVuYWJsZSB0byBmaW5kIGNsaWVudCAke2NsaWVudElkfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuZXJyb3IoYENhbiBub3QgZmluZCBjbGllbnQgJHtjbGllbnRJZH0gb24gZGlzY29ubmVjdGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnRcbiAgICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuICAgICAgdGhpcy5jbGllbnRzLmRlbGV0ZShjbGllbnRJZCk7XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm9dIG9mIF8uZW50cmllcyhjbGllbnQuc3Vic2NyaXB0aW9uSW5mb3MpKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBzdWJzY3JpcHRpb24uZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uKGNsaWVudElkLCByZXF1ZXN0SWQpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNsaWVudCB3aGljaCBpcyBzdWJzY3JpYmluZyB0aGlzIHN1YnNjcmlwdGlvbiwgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHN1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICBpZiAoY2xhc3NTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICAgICAgY2xhc3NTdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uaGFzaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcywgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uY2xhc3NOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgY2xpZW50cyAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IHN1YnNjcmlwdGlvbnMgJWQnLCB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBldmVudDogJ3dzX2Nvbm5lY3QnLFxuICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIF92YWxpZGF0ZVF1ZXJ5Q29uc3RyYWludHMod2hlcmU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2hlcmUgIT09ICdvYmplY3QnIHx8IHdoZXJlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgIGlmICh3aGVyZVtvcF0gIT09IHVuZGVmaW5lZCAmJiAhQXJyYXkuaXNBcnJheSh3aGVyZVtvcF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtvcH0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICB3aGVyZVtvcF0uZm9yRWFjaCgoc3ViUXVlcnk6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlUXVlcnlDb25zdHJhaW50cyhzdWJRdWVyeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh3aGVyZSkpIHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSB3aGVyZVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiBjb25zdHJhaW50ID09PSAnb2JqZWN0JyAmJiBjb25zdHJhaW50ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LiRyZWdleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcmVnZXggPSBjb25zdHJhaW50LiRyZWdleDtcbiAgICAgICAgICBjb25zdCBpc1JlZ0V4cExpa2UgPVxuICAgICAgICAgICAgcmVnZXggIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZWdleCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZWdleC5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVnZXguZmxhZ3MgPT09ICdzdHJpbmcnO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVnZXggIT09ICdzdHJpbmcnICYmICFpc1JlZ0V4cExpa2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAkcmVnZXggbXVzdCBiZSBhIHN0cmluZyBvciBSZWdFeHAnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gaXNSZWdFeHBMaWtlID8gcmVnZXguc291cmNlIDogcmVnZXg7XG4gICAgICAgICAgY29uc3QgZmxhZ3MgPSBpc1JlZ0V4cExpa2UgPyByZWdleC5mbGFncyA6IGNvbnN0cmFpbnQuJG9wdGlvbnMgfHwgJyc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgYEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAke2UubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9tYXRjaGVzU3Vic2NyaXB0aW9uKHBhcnNlT2JqZWN0OiBhbnksIHN1YnNjcmlwdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gT2JqZWN0IGlzIHVuZGVmaW5lZCBvciBudWxsLCBub3QgbWF0Y2hcbiAgICBpZiAoIXBhcnNlT2JqZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzUXVlcnkoc3RydWN0dXJlZENsb25lKHBhcnNlT2JqZWN0KSwgc3Vic2NyaXB0aW9uLnF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIF9jbGVhckNhY2hlZFJvbGVzKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbGlkVG9rZW5zID0gYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlNlc3Npb24pXG4gICAgICAgIC5lcXVhbFRvKCd1c2VyJywgUGFyc2UuVXNlci5jcmVhdGVXaXRob3V0RGF0YSh1c2VySWQpKVxuICAgICAgICAuZmluZCh7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB2YWxpZFRva2Vucy5tYXAoYXN5bmMgdG9rZW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHRva2VuLmdldCgnc2Vzc2lvblRva2VuJyk7XG4gICAgICAgICAgY29uc3QgYXV0aFByb21pc2UgPSB0aGlzLmF1dGhDYWNoZS5nZXQoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICBpZiAoIWF1dGhQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFthdXRoMSwgYXV0aDJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgYXV0aFByb21pc2UsXG4gICAgICAgICAgICBnZXRBdXRoRm9yU2Vzc2lvblRva2VuKHsgY2FjaGVDb250cm9sbGVyOiB0aGlzLmNhY2hlQ29udHJvbGxlciwgc2Vzc2lvblRva2VuIH0pLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIGF1dGgxLmF1dGg/LmNsZWFyUm9sZUNhY2hlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgYXV0aDIuYXV0aD8uY2xlYXJSb2xlQ2FjaGUoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5kZWxldGUoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYENvdWxkIG5vdCBjbGVhciByb2xlIGNhY2hlLiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihzZXNzaW9uVG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPHsgYXV0aD86IEF1dGgsIHVzZXJJZD86IHN0cmluZyB9PiB7XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH1cbiAgICBjb25zdCBmcm9tQ2FjaGUgPSB0aGlzLmF1dGhDYWNoZS5nZXQoc2Vzc2lvblRva2VuKTtcbiAgICBpZiAoZnJvbUNhY2hlKSB7XG4gICAgICByZXR1cm4gZnJvbUNhY2hlO1xuICAgIH1cbiAgICBjb25zdCBhdXRoUHJvbWlzZSA9IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgY2FjaGVDb250cm9sbGVyOiB0aGlzLmNhY2hlQ29udHJvbGxlcixcbiAgICAgIHNlc3Npb25Ub2tlbjogc2Vzc2lvblRva2VuLFxuICAgIH0pXG4gICAgICAudGhlbihhdXRoID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYXV0aCwgdXNlcklkOiBhdXRoICYmIGF1dGgudXNlciAmJiBhdXRoLnVzZXIuaWQgfTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAvLyBUaGVyZSB3YXMgYW4gZXJyb3Igd2l0aCB0aGUgc2Vzc2lvbiB0b2tlblxuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOKSB7XG4gICAgICAgICAgcmVzdWx0LmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuc2V0KHNlc3Npb25Ub2tlbiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCksIHRoaXMuY29uZmlnLmNhY2hlVGltZW91dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuZGVsZXRlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXV0aENhY2hlLnNldChzZXNzaW9uVG9rZW4sIGF1dGhQcm9taXNlKTtcbiAgICByZXR1cm4gYXV0aFByb21pc2U7XG4gIH1cblxuICBhc3luYyBfbWF0Y2hlc0NMUChcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksXG4gICAgb2JqZWN0PzogYW55LFxuICAgIGNsaWVudD86IGFueSxcbiAgICByZXF1ZXN0SWQ/OiBudW1iZXIsXG4gICAgb3A/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBjb25zdCBhY2xHcm91cCA9IFsnKiddO1xuICAgIGxldCB1c2VySWQ7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuKTtcbiAgICAgIHVzZXJJZCA9IHJlc3VsdC51c2VySWQ7XG4gICAgICBpZiAodXNlcklkKSB7XG4gICAgICAgIGFjbEdyb3VwLnB1c2godXNlcklkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgU2NoZW1hQ29udHJvbGxlci52YWxpZGF0ZVBlcm1pc3Npb24oXG4gICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICBvYmplY3QuY2xhc3NOYW1lLFxuICAgICAgYWNsR3JvdXAsXG4gICAgICBvcFxuICAgICk7XG4gICAgLy8gRW5mb3JjZSBwb2ludGVyIHBlcm1pc3Npb25zIHRoYXQgdmFsaWRhdGVQZXJtaXNzaW9uIGRlZmVycy5cbiAgICAvLyBSZXR1cm5zIGZhbHNlIHRvIHNpbGVudGx5IHNraXAgdGhlIGV2ZW50IChsaWtlIEFDTCksIHJhdGhlciB0aGFuXG4gICAgLy8gdGhyb3dpbmcgd2hpY2ggd291bGQgcHVzaCBlcnJvcnMgdG8gdGhlIGNsaWVudCBhbmQgbG9nIG5vaXNlLlxuICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSAmJiBjbGFzc0xldmVsUGVybWlzc2lvbnMpIHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25GaWVsZCA9XG4gICAgICAgIFsnZ2V0JywgJ2ZpbmQnLCAnY291bnQnXS5pbmRleE9mKG9wKSA+IC0xID8gJ3JlYWRVc2VyRmllbGRzJyA6ICd3cml0ZVVzZXJGaWVsZHMnO1xuICAgICAgY29uc3QgcG9pbnRlckZpZWxkcyA9IFtdO1xuICAgICAgaWYgKGNsYXNzTGV2ZWxQZXJtaXNzaW9uc1tvcF0/LnBvaW50ZXJGaWVsZHMpIHtcbiAgICAgICAgcG9pbnRlckZpZWxkcy5wdXNoKC4uLmNsYXNzTGV2ZWxQZXJtaXNzaW9uc1tvcF0ucG9pbnRlckZpZWxkcyk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjbGFzc0xldmVsUGVybWlzc2lvbnNbcGVybWlzc2lvbkZpZWxkXSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjbGFzc0xldmVsUGVybWlzc2lvbnNbcGVybWlzc2lvbkZpZWxkXSkge1xuICAgICAgICAgIGlmICghcG9pbnRlckZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgICAgIHBvaW50ZXJGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9pbnRlckZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIElmIHB1YmxpYyBvciB1c2VyLXNwZWNpZmljIHBlcm1pc3Npb24gYWxyZWFkeSBncmFudHMgYWNjZXNzLCBza2lwIHBvaW50ZXIgY2hlY2tcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFTY2hlbWFDb250cm9sbGVyLnRlc3RQZXJtaXNzaW9ucyhjbGFzc0xldmVsUGVybWlzc2lvbnMsIGFjbEdyb3VwLCBvcClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IHBvaW50ZXIgZmllbGQgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHVzZXJcbiAgICAgICAgICBjb25zdCBoYXNBY2Nlc3MgPSBwb2ludGVyRmllbGRzLnNvbWUoZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICB0eXBlb2Ygb2JqZWN0LmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG9iamVjdC5nZXQoZmllbGQpIDogb2JqZWN0W2ZpZWxkXTtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIFBhcnNlLk9iamVjdCBwb2ludGVyIChoYXMgLmlkKVxuICAgICAgICAgICAgaWYgKHZhbHVlLmlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pZCA9PT0gdXNlcklkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIHJhdyBwb2ludGVyIEpTT04gKGhhcyAub2JqZWN0SWQpXG4gICAgICAgICAgICBpZiAodmFsdWUub2JqZWN0SWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm9iamVjdElkID09PSB1c2VySWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgYXJyYXkgb2YgcG9pbnRlcnNcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc29tZShpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IHVzZXJJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ub2JqZWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm9iamVjdElkID09PSB1c2VySWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCFoYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBgYWRkUHJvdGVjdGVkRmllbGRzYCByZWFkcyByb2xlLXNjb3BlZCBgcHJvdGVjdGVkRmllbGRzYCBncm91cHMgZnJvbVxuICAvLyBgQXV0aC51c2VyUm9sZXNgLCB3aGljaCBzdGF5cyBlbXB0eSB1bmxlc3MgdGhlIHJvbGVzIGFyZSBleHBsaWNpdGx5IGxvYWRlZC5cbiAgLy8gV2l0aG91dCB0aGlzLCBldmVyeSBgcm9sZTpgIGdyb3VwIGlzIHNpbGVudGx5IHNraXBwZWQgYW5kIExpdmVRdWVyeSB3b3VsZFxuICAvLyBkaXNjbG9zZSBmaWVsZHMgdGhhdCB0aGUgUkVTVCBwYXRoIHN0cmlwcyBmb3IgdGhlIHNhbWUgY2FsbGVyLiBUaGUgcm9sZXMgYXJlXG4gIC8vIG9ubHkgZmV0Y2hlZCB3aGVuIHRoZSBjbGFzcyBhY3R1YWxseSBkZWNsYXJlcyBhIGByb2xlOmAgZ3JvdXAsIHNvIGNsYXNzZXNcbiAgLy8gd2l0aG91dCBvbmUga2VlcCBzdWJzY3JpYmluZyBhbmQgcmVjZWl2aW5nIGV2ZW50cyB3aXRob3V0IGEgcm9sZSBsb29rdXAuXG4gIGFzeW5jIF9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMoY2xhc3NMZXZlbFBlcm1pc3Npb25zPzogYW55LCBjbGllbnRBdXRoPzogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBjbGllbnRBdXRoPy5nZXRVc2VyUm9sZXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJvdGVjdGVkRmllbGRzID0gY2xhc3NMZXZlbFBlcm1pc3Npb25zPy5wcm90ZWN0ZWRGaWVsZHM7XG4gICAgaWYgKCFwcm90ZWN0ZWRGaWVsZHMgfHwgQXJyYXkuaXNBcnJheShwcm90ZWN0ZWRGaWVsZHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMocHJvdGVjdGVkRmllbGRzKS5zb21lKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgncm9sZTonKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgY2xpZW50QXV0aC5nZXRVc2VyUm9sZXMoKTtcbiAgfVxuXG4gIGFzeW5jIF9maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucz86IGFueSxcbiAgICByZXM/OiBhbnksXG4gICAgY2xpZW50PzogYW55LFxuICAgIHJlcXVlc3RJZD86IG51bWJlcixcbiAgICBvcD86IHN0cmluZyxcbiAgICBxdWVyeT86IGFueVxuICApIHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBjb25zdCBhY2xHcm91cCA9IFsnKiddO1xuICAgIGxldCBjbGllbnRBdXRoO1xuICAgIGlmICh0eXBlb2Ygc3Vic2NyaXB0aW9uSW5mbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY29ubmVjdC1mcmFtZSB0b2tlbiwgdGhlIHNhbWUgd2F5IGBfbWF0Y2hlc0FDTGAgYW5kXG4gICAgICAvLyBgZ2V0QXV0aEZyb21DbGllbnRgIGFscmVhZHkgZG8uIFRoZSBzdWJzY3JpYmUgZnJhbWUncyBzZXNzaW9uIHRva2VuIGlzXG4gICAgICAvLyBvcHRpb25hbCwgc28gcmVzb2x2aW5nIG9ubHkgaXQgd291bGQgcmVkYWN0IGFnYWluc3QgYW4gYW5vbnltb3VzIGlkZW50aXR5XG4gICAgICAvLyB3aGlsZSB0aGUgQUNMIGNoZWNrIGF1dGhvcml6ZWQgdGhlIHJlYWQgYWdhaW5zdCB0aGUgY29ubmVjdGVkIHVzZXIuIFRoYXRcbiAgICAgIC8vIG1pc21hdGNoIHNraXBzIGV2ZXJ5IGlkZW50aXR5LWRlcml2ZWQgYHByb3RlY3RlZEZpZWxkc2AgZ3JvdXBcbiAgICAgIC8vIChgcm9sZTpgLCBgYXV0aGVudGljYXRlZGAgYW5kIGA8b2JqZWN0SWQ+YCkuXG4gICAgICBjb25zdCB7IHVzZXJJZCwgYXV0aCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKFxuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuXG4gICAgICApO1xuICAgICAgaWYgKHVzZXJJZCkge1xuICAgICAgICBhY2xHcm91cC5wdXNoKHVzZXJJZCk7XG4gICAgICB9XG4gICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICB9XG4gICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5KSB7XG4gICAgICBhd2FpdCB0aGlzLl9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMoY2xhc3NMZXZlbFBlcm1pc3Npb25zLCBjbGllbnRBdXRoKTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHtcbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwcm90ZWN0ZWRGaWVsZHMgPSBjbGFzc0xldmVsUGVybWlzc2lvbnM/LnByb3RlY3RlZEZpZWxkcyB8fCBbXTtcbiAgICAgIGlmIChjbGllbnQuaGFzTWFzdGVyS2V5KSB7XG4gICAgICAgIHByb3RlY3RlZEZpZWxkcyA9IFtdO1xuICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShwcm90ZWN0ZWRGaWVsZHMpKSB7XG4gICAgICAgIHByb3RlY3RlZEZpZWxkcyA9IGdldERhdGFiYXNlQ29udHJvbGxlcih0aGlzLmNvbmZpZykuYWRkUHJvdGVjdGVkRmllbGRzKFxuICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICByZXMub2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICBhY2xHcm91cCxcbiAgICAgICAgICBjbGllbnRBdXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gRGF0YWJhc2VDb250cm9sbGVyLmZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgIGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBhY2xHcm91cCxcbiAgICAgICAgY2xpZW50QXV0aCxcbiAgICAgICAgb3AsXG4gICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgcmVzLm9iamVjdC5jbGFzc05hbWUsXG4gICAgICAgIHByb3RlY3RlZEZpZWxkcyxcbiAgICAgICAgb2JqLFxuICAgICAgICB0aGlzLmNvbmZpZy5wcm90ZWN0ZWRGaWVsZHNPd25lckV4ZW1wdFxuICAgICAgKTtcbiAgICB9O1xuICAgIHJlcy5vYmplY3QgPSBmaWx0ZXIocmVzLm9iamVjdCk7XG4gICAgcmVzLm9yaWdpbmFsID0gZmlsdGVyKHJlcy5vcmlnaW5hbCk7XG4gIH1cblxuICBfZ2V0Q0xQT3BlcmF0aW9uKHF1ZXJ5OiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LmtleXMocXVlcnkpLmxlbmd0aCA9PSAxICYmXG4gICAgICB0eXBlb2YgcXVlcnkub2JqZWN0SWQgPT09ICdzdHJpbmcnXG4gICAgICA/ICdnZXQnXG4gICAgICA6ICdmaW5kJztcbiAgfVxuXG4gIGFzeW5jIF92ZXJpZnlBQ0woYWNsOiBhbnksIHRva2VuOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgeyBhdXRoLCB1c2VySWQgfSA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih0b2tlbik7XG5cbiAgICAvLyBHZXR0aW5nIHRoZSBzZXNzaW9uIHRva2VuIGZhaWxlZFxuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBubyBhZGRpdGlvbmFsIGF1dGggaXMgYXZhaWxhYmxlXG4gICAgLy8gQXQgdGhpcyBwb2ludCwganVzdCBiYWlsIG91dCBhcyBubyBhZGRpdGlvbmFsIHZpc2liaWxpdHkgY2FuIGJlIGluZmVycmVkLlxuICAgIGlmICghYXV0aCB8fCAhdXNlcklkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzU3Vic2NyaXB0aW9uU2Vzc2lvblRva2VuTWF0Y2hlZCA9IGFjbC5nZXRSZWFkQWNjZXNzKHVzZXJJZCk7XG4gICAgaWYgKGlzU3Vic2NyaXB0aW9uU2Vzc2lvblRva2VuTWF0Y2hlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFueSByb2xlcyB0aGF0IG1hdGNoIHRoZSBBQ0xcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gUmVzb2x2ZSBmYWxzZSByaWdodCBhd2F5IGlmIHRoZSBhY2wgZG9lc24ndCBoYXZlIGFueSByb2xlc1xuICAgICAgICBjb25zdCBhY2xfaGFzX3JvbGVzID0gT2JqZWN0LmtleXMoYWNsLnBlcm1pc3Npb25zQnlJZCkuc29tZShrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ3JvbGU6JykpO1xuICAgICAgICBpZiAoIWFjbF9oYXNfcm9sZXMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9sZU5hbWVzID0gYXdhaXQgYXV0aC5nZXRVc2VyUm9sZXMoKTtcbiAgICAgICAgLy8gRmluYWxseSwgc2VlIGlmIGFueSBvZiB0aGUgdXNlcidzIHJvbGVzIGFsbG93IHRoZW0gcmVhZCBhY2Nlc3NcbiAgICAgICAgZm9yIChjb25zdCByb2xlIG9mIHJvbGVOYW1lcykge1xuICAgICAgICAgIC8vIFdlIHVzZSBnZXRSZWFkQWNjZXNzIGFzIGByb2xlYCBpcyBpbiB0aGUgZm9ybSBgcm9sZTpyb2xlTmFtZWBcbiAgICAgICAgICBpZiAoYWNsLmdldFJlYWRBY2Nlc3Mocm9sZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRBdXRoRnJvbUNsaWVudChjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBudW1iZXIsIHNlc3Npb25Ub2tlbj86IHN0cmluZykge1xuICAgIGNvbnN0IGdldFNlc3Npb25Gcm9tQ2xpZW50ID0gKCkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuIHx8IGNsaWVudC5zZXNzaW9uVG9rZW47XG4gICAgfTtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgc2Vzc2lvblRva2VuID0gZ2V0U2Vzc2lvbkZyb21DbGllbnQoKTtcbiAgICB9XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyBhdXRoIH0gPSBhd2FpdCB0aGlzLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oc2Vzc2lvblRva2VuKTtcbiAgICByZXR1cm4gYXV0aDtcbiAgfVxuXG4gIF9jaGVja1dhdGNoRmllbGRzKGNsaWVudDogYW55LCByZXF1ZXN0SWQ6IGFueSwgbWVzc2FnZTogYW55KSB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgY29uc3Qgd2F0Y2ggPSBzdWJzY3JpcHRpb25JbmZvPy53YXRjaDtcbiAgICBpZiAoIXdhdGNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3Qgb2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3Q7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3Q7XG4gICAgcmV0dXJuIHdhdGNoLnNvbWUoZmllbGQgPT4gIWlzRGVlcFN0cmljdEVxdWFsKG9iamVjdC5nZXQoZmllbGQpLCBvcmlnaW5hbD8uZ2V0KGZpZWxkKSkpO1xuICB9XG5cbiAgYXN5bmMgX21hdGNoZXNBQ0woYWNsOiBhbnksIGNsaWVudDogYW55LCByZXF1ZXN0SWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFJldHVybiB0cnVlIGRpcmVjdGx5IGlmIEFDTCBpc24ndCBwcmVzZW50LCBBQ0wgaXMgcHVibGljIHJlYWQsIG9yIGNsaWVudCBoYXMgbWFzdGVyIGtleVxuICAgIGlmICghYWNsIHx8IGFjbC5nZXRQdWJsaWNSZWFkQWNjZXNzKCkgfHwgY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENoZWNrIHN1YnNjcmlwdGlvbiBzZXNzaW9uVG9rZW4gbWF0Y2hlcyBBQ0wgZmlyc3RcbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uVG9rZW4gPSBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbjtcbiAgICBjb25zdCBjbGllbnRTZXNzaW9uVG9rZW4gPSBjbGllbnQuc2Vzc2lvblRva2VuO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuX3ZlcmlmeUFDTChhY2wsIHN1YnNjcmlwdGlvblRva2VuKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuX3ZlcmlmeUFDTChhY2wsIGNsaWVudFNlc3Npb25Ub2tlbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVDb25uZWN0KHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLl92YWxpZGF0ZUtleXMocmVxdWVzdCwgdGhpcy5rZXlQYWlycykpIHtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDQsICdLZXkgaW4gcmVxdWVzdCBpcyBub3QgdmFsaWQnKTtcbiAgICAgIGxvZ2dlci5lcnJvcignS2V5IGluIHJlcXVlc3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhhc01hc3RlcktleSA9IHRoaXMuX2hhc01hc3RlcktleShyZXF1ZXN0LCB0aGlzLmtleVBhaXJzKTtcbiAgICBjb25zdCBjbGllbnRJZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KFxuICAgICAgY2xpZW50SWQsXG4gICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgIGhhc01hc3RlcktleSxcbiAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgcmVxdWVzdC5pbnN0YWxsYXRpb25JZFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBldmVudDogJ2Nvbm5lY3QnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogcmVxdWVzdC5zZXNzaW9uVG9rZW4sXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcXVlc3QuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHVzZXI6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcignQENvbm5lY3QnLCAnYmVmb3JlQ29ubmVjdCcsIFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50LCByZXF1ZXN0LnJlcXVlc3RJZCwgcmVxLnNlc3Npb25Ub2tlbik7XG4gICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgIHJlcS51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGJlZm9yZUNvbm5lY3QuQENvbm5lY3RgLCByZXEsIGF1dGgpO1xuICAgICAgfVxuICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICAgIHRoaXMuY2xpZW50cy5zZXQocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIGNsaWVudCk7XG4gICAgICBsb2dnZXIuaW5mbyhgQ3JlYXRlIG5ldyBjbGllbnQ6ICR7cGFyc2VXZWJzb2NrZXQuY2xpZW50SWR9YCk7XG4gICAgICBjbGllbnQucHVzaENvbm5lY3QoKTtcbiAgICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMocmVxKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIGVycm9yLmNvZGUsIGVycm9yLm1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCBydW5uaW5nIGJlZm9yZUNvbm5lY3QgZm9yIHNlc3Npb24gJHtyZXF1ZXN0LnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaGFzTWFzdGVyS2V5KHJlcXVlc3Q6IGFueSwgdmFsaWRLZXlQYWlyczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWxpZEtleVBhaXJzIHx8IHZhbGlkS2V5UGFpcnMuc2l6ZSA9PSAwIHx8ICF2YWxpZEtleVBhaXJzLmhhcygnbWFzdGVyS2V5JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFyZXF1ZXN0IHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVxdWVzdCwgJ21hc3RlcktleScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0Lm1hc3RlcktleSA9PT0gdmFsaWRLZXlQYWlycy5nZXQoJ21hc3RlcktleScpO1xuICB9XG5cbiAgX3ZhbGlkYXRlS2V5cyhyZXF1ZXN0OiBhbnksIHZhbGlkS2V5UGFpcnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRLZXlQYWlycyB8fCB2YWxpZEtleVBhaXJzLnNpemUgPT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGxldCBpc1ZhbGlkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRdIG9mIHZhbGlkS2V5UGFpcnMpIHtcbiAgICAgIGlmICghcmVxdWVzdFtrZXldIHx8IHJlcXVlc3Rba2V5XSAhPT0gc2VjcmV0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSWYgd2UgY2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCByZXR1cm4gZXJyb3IgdG8gY2xpZW50XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyc2VXZWJzb2NrZXQsICdjbGllbnRJZCcpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0NhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgbWFrZSBzdXJlIHlvdSBjb25uZWN0IHRvIHNlcnZlciBiZWZvcmUgc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKCdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHN1YnNjcmliaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50cy5nZXQocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHJlcXVlc3QucXVlcnkuY2xhc3NOYW1lO1xuICAgIGxldCBhdXRoQ2FsbGVkID0gZmFsc2U7XG4gICAgbGV0IGNsaWVudEF1dGg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2JlZm9yZVN1YnNjcmliZScsIFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50LCByZXF1ZXN0LnJlcXVlc3RJZCwgcmVxdWVzdC5zZXNzaW9uVG9rZW4pO1xuICAgICAgICBhdXRoQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgY2xpZW50QXV0aCA9IGF1dGg7XG4gICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgIHJlcXVlc3QudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlUXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lKTtcbiAgICAgICAgcGFyc2VRdWVyeS53aXRoSlNPTihyZXF1ZXN0LnF1ZXJ5KTtcbiAgICAgICAgcmVxdWVzdC5xdWVyeSA9IHBhcnNlUXVlcnk7XG4gICAgICAgIGF3YWl0IHJ1blRyaWdnZXIodHJpZ2dlciwgYGJlZm9yZVN1YnNjcmliZS4ke2NsYXNzTmFtZX1gLCByZXF1ZXN0LCBhdXRoKTtcblxuICAgICAgICBjb25zdCBxdWVyeSA9IHJlcXVlc3QucXVlcnkudG9KU09OKCk7XG4gICAgICAgIHJlcXVlc3QucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ19TZXNzaW9uJykge1xuICAgICAgICBpZiAoIWF1dGhDYWxsZWQpIHtcbiAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVxdWVzdC5zZXNzaW9uVG9rZW5cbiAgICAgICAgICApO1xuICAgICAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgcmVxdWVzdC51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC51c2VyKSB7XG4gICAgICAgICAgcmVxdWVzdC5xdWVyeS53aGVyZS51c2VyID0gcmVxdWVzdC51c2VyLnRvUG9pbnRlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKCFyZXF1ZXN0Lm1hc3Rlcikge1xuICAgICAgICAgIENsaWVudC5wdXNoRXJyb3IoXG4gICAgICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTixcbiAgICAgICAgICAgICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBWYWxpZGF0ZSBxdWVyeSBjb25kaXRpb24gZGVwdGhcbiAgICAgIGNvbnN0IGFwcENvbmZpZyA9IENvbmZpZy5nZXQodGhpcy5jb25maWcuYXBwSWQpO1xuICAgICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5KSB7XG4gICAgICAgIGNvbnN0IHJjID0gYXBwQ29uZmlnLnJlcXVlc3RDb21wbGV4aXR5O1xuICAgICAgICBpZiAocmMgJiYgcmMucXVlcnlEZXB0aCAhPT0gLTEpIHtcbiAgICAgICAgICBjb25zdCBtYXhEZXB0aCA9IHJjLnF1ZXJ5RGVwdGg7XG4gICAgICAgICAgY29uc3QgY2hlY2tEZXB0aCA9IChub2RlOiBhbnksIGRlcHRoOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgICAgICAgIGBRdWVyeSBjb25kaXRpb24gbmVzdGluZyBkZXB0aCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBkZXB0aCBvZiAke21heERlcHRofWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlID09PSBudWxsIHx8IHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygbm9kZSkge1xuICAgICAgICAgICAgICAgIGNoZWNrRGVwdGgoaXRlbSwgZGVwdGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlc2NlbmQgaW50byBldmVyeSB2YWx1ZSBzbyB0aGF0IGxvZ2ljYWwgb3BlcmF0b3JzICgkb3IvJGFuZC8kbm9yKVxuICAgICAgICAgICAgLy8gbmVzdGVkIHVuZGVyIGZpZWxkLWxldmVsIG9wZXJhdG9ycyAoZS5nLiAkZWxlbU1hdGNoLCAkbm90KSBvciBwbGFpblxuICAgICAgICAgICAgLy8gZmllbGQgbmFtZXMgYXJlIHN0aWxsIGNvdW50ZWQuIE9ubHkgbG9naWNhbCBvcGVyYXRvcnMgaW5jcmVhc2UgdGhlXG4gICAgICAgICAgICAvLyBkZXB0aCwgd2hpY2ggcHJlc2VydmVzIHRoZSBkb2N1bWVudGVkIG1lYW5pbmcgb2YgYHF1ZXJ5RGVwdGhgLlxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNMb2dpY2FsID0ga2V5ID09PSAnJG9yJyB8fCBrZXkgPT09ICckYW5kJyB8fCBrZXkgPT09ICckbm9yJztcbiAgICAgICAgICAgICAgaWYgKGlzTG9naWNhbCAmJiAhQXJyYXkuaXNBcnJheShub2RlW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGAke2tleX0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNoZWNrRGVwdGgobm9kZVtrZXldLCBpc0xvZ2ljYWwgPyBkZXB0aCArIDEgOiBkZXB0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjaGVja0RlcHRoKHJlcXVlc3QucXVlcnkud2hlcmUsIDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFsbG93UmVnZXhcbiAgICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBjb25zdCByYyA9IGFwcENvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eTtcbiAgICAgICAgaWYgKHJjICYmIHJjLmFsbG93UmVnZXggPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tSZWdleCA9ICh3aGVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdoZXJlICE9PSAnb2JqZWN0JyB8fCB3aGVyZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh3aGVyZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29uc3RyYWludCA9IHdoZXJlW2tleV07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc3RyYWludCA9PT0gJ29iamVjdCcgJiYgY29uc3RyYWludCAhPT0gbnVsbCAmJiBjb25zdHJhaW50LiRyZWdleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICckcmVnZXggb3BlcmF0b3IgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGVyZVtvcF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJRdWVyeSBvZiB3aGVyZVtvcF0pIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrUmVnZXgoc3ViUXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hlY2tSZWdleChyZXF1ZXN0LnF1ZXJ5LndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBDTFAgZm9yIHN1YnNjcmliZSBvcGVyYXRpb25cbiAgICAgIGNvbnN0IHNjaGVtYUNvbnRyb2xsZXIgPSBhd2FpdCBhcHBDb25maWcuZGF0YWJhc2UubG9hZFNjaGVtYSgpO1xuICAgICAgY29uc3QgY2xhc3NMZXZlbFBlcm1pc3Npb25zID0gc2NoZW1hQ29udHJvbGxlci5nZXRDbGFzc0xldmVsUGVybWlzc2lvbnMoY2xhc3NOYW1lKTtcbiAgICAgIGNvbnN0IG9wID0gdGhpcy5fZ2V0Q0xQT3BlcmF0aW9uKHJlcXVlc3QucXVlcnkpO1xuICAgICAgY29uc3QgYWNsR3JvdXAgPSBbJyonXTtcbiAgICAgIGlmICghYXV0aENhbGxlZCkge1xuICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0SWQsXG4gICAgICAgICAgcmVxdWVzdC5zZXNzaW9uVG9rZW5cbiAgICAgICAgKTtcbiAgICAgICAgYXV0aENhbGxlZCA9IHRydWU7XG4gICAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXF1ZXN0LnVzZXIgPSBhdXRoLnVzZXI7XG4gICAgICAgICAgYWNsR3JvdXAucHVzaChhdXRoLnVzZXIuaWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QudXNlcikge1xuICAgICAgICBhY2xHcm91cC5wdXNoKHJlcXVlc3QudXNlci5pZCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBTY2hlbWFDb250cm9sbGVyLnZhbGlkYXRlUGVybWlzc2lvbihcbiAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGFjbEdyb3VwLFxuICAgICAgICBvcFxuICAgICAgKTtcblxuICAgICAgLy8gQ2hlY2sgcHJvdGVjdGVkIGZpZWxkcyBpbiBXSEVSRSBjbGF1c2UgYW5kIFdBVENIIHBhcmFtZXRlclxuICAgICAgaWYgKCFjbGllbnQuaGFzTWFzdGVyS2V5KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRSb2xlc0ZvclByb3RlY3RlZEZpZWxkcyhjbGFzc0xldmVsUGVybWlzc2lvbnMsIGNsaWVudEF1dGgpO1xuICAgICAgICAvLyBgY2xpZW50QXV0aGAgaXMgdW5kZWZpbmVkIG9ubHkgd2hlbiBubyBzZXNzaW9uIHRva2VuIHdhcyBzdXBwbGllZCBvblxuICAgICAgICAvLyBlaXRoZXIgZnJhbWUsIGluIHdoaWNoIGNhc2UgYSBgYmVmb3JlU3Vic2NyaWJlYCB0cmlnZ2VyIGlzIHRoZSBvbmx5IHdheVxuICAgICAgICAvLyBgcmVxdWVzdC51c2VyYCBjYW4gYmUgc2V0LiBUaGVyZSBpcyBubyBzZXNzaW9uIHRvIHJlc29sdmUgcm9sZXMgZnJvbSBmb3JcbiAgICAgICAgLy8gc3VjaCBhIHRyaWdnZXItYXNzaWduZWQgdXNlciwgc28gYHJvbGU6YCBncm91cHMgY2Fubm90IGJlIGFwcGxpZWQgdG8gaXQuXG4gICAgICAgIGNvbnN0IGF1dGggPSByZXF1ZXN0LnVzZXIgPyBjbGllbnRBdXRoIHx8IHsgdXNlcjogcmVxdWVzdC51c2VyLCB1c2VyUm9sZXM6IFtdIH0gOiB7fTtcbiAgICAgICAgY29uc3QgcHJvdGVjdGVkRmllbGRzID1cbiAgICAgICAgICBhcHBDb25maWcuZGF0YWJhc2UuYWRkUHJvdGVjdGVkRmllbGRzKFxuICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgcmVxdWVzdC5xdWVyeS53aGVyZSxcbiAgICAgICAgICAgIGFjbEdyb3VwLFxuICAgICAgICAgICAgYXV0aFxuICAgICAgICAgICkgfHwgW107XG4gICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiByZXF1ZXN0LnF1ZXJ5LndoZXJlKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tXaGVyZSA9ICh3aGVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdoZXJlICE9PSAnb2JqZWN0JyB8fCB3aGVyZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdoZXJlS2V5IG9mIE9iamVjdC5rZXlzKHdoZXJlKSkge1xuICAgICAgICAgICAgICBjb25zdCByb290RmllbGQgPSB3aGVyZUtleS5zcGxpdCgnLicpWzBdO1xuICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHdoZXJlS2V5KSB8fCBwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMocm9vdEZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAgICAgICAnUGVybWlzc2lvbiBkZW5pZWQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBvcCBvZiBbJyRvcicsICckYW5kJywgJyRub3InXSkge1xuICAgICAgICAgICAgICBpZiAod2hlcmVbb3BdICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtvcH0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtvcF0uZm9yRWFjaCgoc3ViUXVlcnk6IGFueSkgPT4gY2hlY2tXaGVyZShzdWJRdWVyeSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjaGVja1doZXJlKHJlcXVlc3QucXVlcnkud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KHJlcXVlc3QucXVlcnkud2F0Y2gpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3YXRjaEZpZWxkIG9mIHJlcXVlc3QucXVlcnkud2F0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RGaWVsZCA9IHdhdGNoRmllbGQuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRGaWVsZHMuaW5jbHVkZXMod2F0Y2hGaWVsZCkgfHwgcHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHJvb3RGaWVsZCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAgICAgJ1Blcm1pc3Npb24gZGVuaWVkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSByZWdleCBwYXR0ZXJucyBpbiB0aGUgc3Vic2NyaXB0aW9uIHF1ZXJ5XG4gICAgICB0aGlzLl92YWxpZGF0ZVF1ZXJ5Q29uc3RyYWludHMocmVxdWVzdC5xdWVyeS53aGVyZSk7XG5cbiAgICAgIC8vIElmIHRoaXMgY2xpZW50IGFscmVhZHkgaGFzIGEgc3Vic2NyaXB0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgdGhpc1xuICAgICAgLy8gcmVxdWVzdElkLCByZXBsYWNlIGl0IGJ5IHRlYXJpbmcgZG93biB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIGJlZm9yZVxuICAgICAgLy8gY3JlYXRpbmcgdGhlIG5ldyBvbmUuIFRoZSBjbGllbnQtc2lkZSBtZXRhZGF0YSBtYXAgaXMga2V5ZWQgb25seSBieVxuICAgICAgLy8gcmVxdWVzdElkLCBzbyBhIGR1cGxpY2F0ZSBgc3Vic2NyaWJlYCBmcmFtZSB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIGl0XG4gICAgICAvLyB3aGlsZSB0aGUgcHJldmlvdXMgU3Vic2NyaXB0aW9uIHN0YXlzIGluIHRoZSBzZXJ2ZXItd2lkZSBtYXAsIGxlYWtpbmcgaXRcbiAgICAgIC8vIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MgKGRpc2Nvbm5lY3QgY2xlYW51cCBvbmx5IHdhbGtzIHRoZVxuICAgICAgLy8gc3Vydml2aW5nIGNsaWVudCBtZXRhZGF0YSBhbmQgbmV2ZXIgcmVhY2hlcyB0aGUgb3JwaGFuZWQgc3Vic2NyaXB0aW9uKS5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgIGlmIChwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8pIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdWJzY3JpcHRpb24gPSBwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBwcmV2aW91c1N1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHByZXZpb3VzU3Vic2NyaXB0aW9uLmNsYXNzTmFtZSk7XG4gICAgICAgIGlmIChwcmV2aW91c0NsYXNzU3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgIGlmICghcHJldmlvdXNTdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICAgICAgcHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHByZXZpb3VzU3Vic2NyaXB0aW9uLmhhc2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShwcmV2aW91c1N1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgc3Vic2NyaXB0aW9uIGZyb20gc3Vic2NyaXB0aW9ucywgY3JlYXRlIG9uZSBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkhhc2ggPSBxdWVyeUhhc2gocmVxdWVzdC5xdWVyeSk7XG4gICAgICAvLyBBZGQgY2xhc3NOYW1lIHRvIHN1YnNjcmlwdGlvbnMgaWYgbmVjZXNzYXJ5XG5cbiAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhjbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoY2xhc3NOYW1lLCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuaGFzKHN1YnNjcmlwdGlvbkhhc2gpKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IGNsYXNzU3Vic2NyaXB0aW9ucy5nZXQoc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKGNsYXNzTmFtZSwgcmVxdWVzdC5xdWVyeS53aGVyZSwgc3Vic2NyaXB0aW9uSGFzaCk7XG4gICAgICAgIGNsYXNzU3Vic2NyaXB0aW9ucy5zZXQoc3Vic2NyaXB0aW9uSGFzaCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHN1YnNjcmlwdGlvbkluZm8gdG8gY2xpZW50XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvOiBhbnkgPSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIC8vIEFkZCBzZWxlY3RlZCBmaWVsZHMsIHNlc3Npb25Ub2tlbiBhbmQgaW5zdGFsbGF0aW9uSWQgZm9yIHRoaXMgc3Vic2NyaXB0aW9uIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkua2V5cykge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLmtleXMgPSBBcnJheS5pc0FycmF5KHJlcXVlc3QucXVlcnkua2V5cylcbiAgICAgICAgICA/IHJlcXVlc3QucXVlcnkua2V5c1xuICAgICAgICAgIDogcmVxdWVzdC5xdWVyeS5rZXlzLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxdWVzdC5xdWVyeS53YXRjaCkge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLndhdGNoID0gcmVxdWVzdC5xdWVyeS53YXRjaDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1ZXN0LnNlc3Npb25Ub2tlbikge1xuICAgICAgICBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiA9IHJlcXVlc3Quc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgY2xpZW50LmFkZFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdC5yZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm8pO1xuXG4gICAgICAvLyBBZGQgY2xpZW50SWQgdG8gc3Vic2NyaXB0aW9uXG4gICAgICBzdWJzY3JpcHRpb24uYWRkQ2xpZW50U3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICAgIGNsaWVudC5wdXNoU3Vic2NyaWJlKHJlcXVlc3QucmVxdWVzdElkKTtcblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICAgIGBDcmVhdGUgY2xpZW50ICR7cGFyc2VXZWJzb2NrZXQuY2xpZW50SWR9IG5ldyBzdWJzY3JpcHRpb246ICR7cmVxdWVzdC5yZXF1ZXN0SWR9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXI6ICVkJywgdGhpcy5jbGllbnRzLnNpemUpO1xuICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgZXZlbnQ6ICdzdWJzY3JpYmUnLFxuICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogcmVxdWVzdC5zZXNzaW9uVG9rZW4sXG4gICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGUpO1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihwYXJzZVdlYnNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCBydW5uaW5nIGJlZm9yZVN1YnNjcmliZSBvbiAke2NsYXNzTmFtZX0gZm9yIHNlc3Npb24gJHtyZXF1ZXN0LnNlc3Npb25Ub2tlbn0gd2l0aDpcXG4gRXJyb3I6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSk6IGFueSB7XG4gICAgdGhpcy5faGFuZGxlVW5zdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QsIGZhbHNlKTtcbiAgICB0aGlzLl9oYW5kbGVTdWJzY3JpYmUocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICB9XG5cbiAgX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0OiBhbnksIHJlcXVlc3Q6IGFueSwgbm90aWZ5Q2xpZW50OiBib29sZWFuID0gdHJ1ZSk6IGFueSB7XG4gICAgLy8gSWYgd2UgY2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCByZXR1cm4gZXJyb3IgdG8gY2xpZW50XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyc2VXZWJzb2NrZXQsICdjbGllbnRJZCcpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0NhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgbWFrZSBzdXJlIHlvdSBjb25uZWN0IHRvIHNlcnZlciBiZWZvcmUgdW5zdWJzY3JpYmluZydcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0SWQgPSByZXF1ZXN0LnJlcXVlc3RJZDtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBpZiAodHlwZW9mIGNsaWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IoXG4gICAgICAgIHBhcnNlV2Vic29ja2V0LFxuICAgICAgICAyLFxuICAgICAgICAnQ2Fubm90IGZpbmQgY2xpZW50IHdpdGggY2xpZW50SWQgJyArXG4gICAgICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgK1xuICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBsaXZlIHF1ZXJ5IHNlcnZlciBiZWZvcmUgdW5zdWJzY3JpYmluZy4nXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKCdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQgJyArIHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb25JbmZvID0gY2xpZW50LmdldFN1YnNjcmlwdGlvbkluZm8ocmVxdWVzdElkKTtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIHN1YnNjcmlwdGlvbiB3aXRoIGNsaWVudElkICcgK1xuICAgICAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkICtcbiAgICAgICAgICAnIHN1YnNjcmlwdGlvbklkICcgK1xuICAgICAgICAgIHJlcXVlc3RJZCArXG4gICAgICAgICAgJy4gTWFrZSBzdXJlIHlvdSBzdWJzY3JpYmUgdG8gbGl2ZSBxdWVyeSBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcuJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb24gd2l0aCBjbGllbnRJZCAnICtcbiAgICAgICAgICBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCArXG4gICAgICAgICAgJyBzdWJzY3JpcHRpb25JZCAnICtcbiAgICAgICAgICByZXF1ZXN0SWRcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHN1YnNjcmlwdGlvbiBmcm9tIGNsaWVudFxuICAgIGNsaWVudC5kZWxldGVTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgLy8gUmVtb3ZlIGNsaWVudCBmcm9tIHN1YnNjcmlwdGlvblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHN1YnNjcmlwdGlvbi5jbGFzc05hbWU7XG4gICAgc3Vic2NyaXB0aW9uLmRlbGV0ZUNsaWVudFN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldC5jbGllbnRJZCwgcmVxdWVzdElkKTtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBjbGllbnQgd2hpY2ggaXMgc3Vic2NyaWJpbmcgdGhpcyBzdWJzY3JpcHRpb24sIHJlbW92ZSBpdCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucykge1xuICAgICAgaWYgKCFzdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICBjbGFzc1N1YnNjcmlwdGlvbnMuZGVsZXRlKHN1YnNjcmlwdGlvbi5oYXNoKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcywgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgaWYgKGNsYXNzU3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBjbGllbnQsXG4gICAgICBldmVudDogJ3Vuc3Vic2NyaWJlJyxcbiAgICAgIGNsaWVudHM6IHRoaXMuY2xpZW50cy5zaXplLFxuICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICBzZXNzaW9uVG9rZW46IHN1YnNjcmlwdGlvbkluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgdXNlTWFzdGVyS2V5OiBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIGlmICghbm90aWZ5Q2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xpZW50LnB1c2hVbnN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBEZWxldGUgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSB8IHN1YnNjcmlwdGlvbjogJHtyZXF1ZXN0LnJlcXVlc3RJZH1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUxpdmVRdWVyeVNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxHQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxhQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLE9BQUEsR0FBQVgs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
1169
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHYiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9ub2RlIiwiX1N1YnNjcmlwdGlvbiIsIl9DbGllbnQiLCJfUGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJfbG9nZ2VyIiwiX1JlcXVlc3RTY2hlbWEiLCJfUXVlcnlUb29scyIsIl9QYXJzZVB1YlN1YiIsIl9TY2hlbWFDb250cm9sbGVyIiwiX2xvZGFzaCIsIl9jcnlwdG8iLCJfdHJpZ2dlcnMiLCJfQXV0aCIsIl9Db250cm9sbGVycyIsIl9Db25maWciLCJfbHJ1Q2FjaGUiLCJfVXNlcnNSb3V0ZXIiLCJfRGF0YWJhc2VDb250cm9sbGVyIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQYXJzZUxpdmVRdWVyeVNlcnZlciIsImNvbnN0cnVjdG9yIiwic2VydmVyIiwiY29uZmlnIiwicGFyc2VTZXJ2ZXJDb25maWciLCJjbGllbnRzIiwiTWFwIiwic3Vic2NyaXB0aW9ucyIsImFwcElkIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwibWFzdGVyS2V5Iiwia2V5UGFpcnMiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwic2V0IiwibG9nZ2VyIiwidmVyYm9zZSIsImRpc2FibGVTaW5nbGVJbnN0YW5jZSIsInNlcnZlclVSTCIsImluaXRpYWxpemUiLCJqYXZhU2NyaXB0S2V5IiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiY2FjaGVUaW1lb3V0IiwiYXV0aENhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwicGFyc2VXZWJTb2NrZXRTZXJ2ZXIiLCJQYXJzZVdlYlNvY2tldFNlcnZlciIsInBhcnNlV2Vic29ja2V0IiwiX29uQ29ubmVjdCIsInN1YnNjcmliZXIiLCJQYXJzZVB1YlN1YiIsImNyZWF0ZVN1YnNjcmliZXIiLCJjb25uZWN0IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY3JlYXRlU3Vic2NyaWJlcnMiLCJzaHV0ZG93biIsImFsbCIsInZhbHVlcyIsIm1hcCIsImNsaWVudCIsInBhcnNlV2ViU29ja2V0Iiwid3MiLCJjbG9zZSIsIkFycmF5IiwiZnJvbSIsInVuc3Vic2NyaWJlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlUmVjaWV2ZWQiLCJjaGFubmVsIiwibWVzc2FnZVN0ciIsIm1lc3NhZ2UiLCJKU09OIiwicGFyc2UiLCJfY2xlYXJDYWNoZWRSb2xlcyIsInVzZXJJZCIsIl9pbmZsYXRlUGFyc2VPYmplY3QiLCJfb25BZnRlclNhdmUiLCJfb25BZnRlckRlbGV0ZSIsIm9uIiwiZmllbGQiLCJzdWJzY3JpYmUiLCJjdXJyZW50UGFyc2VPYmplY3QiLCJVc2VyUm91dGVyIiwicmVtb3ZlSGlkZGVuUHJvcGVydGllcyIsImNsYXNzTmFtZSIsInBhcnNlT2JqZWN0IiwiX2ZpbmlzaEZldGNoIiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImRlbGV0ZWRQYXJzZU9iamVjdCIsInRvSlNPTiIsImNsYXNzTGV2ZWxQZXJtaXNzaW9ucyIsImlkIiwic2l6ZSIsImNsYXNzU3Vic2NyaXB0aW9ucyIsImdldCIsImRlYnVnIiwic3Vic2NyaXB0aW9uIiwiaXNTdWJzY3JpcHRpb25NYXRjaGVkIiwiX21hdGNoZXNTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZHMiLCJfIiwiZW50cmllcyIsImNsaWVudFJlcXVlc3RJZHMiLCJmb3JFYWNoIiwicmVxdWVzdElkIiwibG9jYWxEZWxldGVkUGFyc2VPYmplY3QiLCJzdHJpbmdpZnkiLCJhY2wiLCJnZXRBQ0wiLCJvcCIsIl9nZXRDTFBPcGVyYXRpb24iLCJxdWVyeSIsInJlcyIsIm1hdGNoZXNDTFAiLCJfbWF0Y2hlc0NMUCIsImlzTWF0Y2hlZCIsIl9tYXRjaGVzQUNMIiwiZXZlbnQiLCJzZXNzaW9uVG9rZW4iLCJvYmplY3QiLCJ1c2VNYXN0ZXJLZXkiLCJoYXNNYXN0ZXJLZXkiLCJpbnN0YWxsYXRpb25JZCIsInNlbmRFdmVudCIsInRyaWdnZXIiLCJnZXRUcmlnZ2VyIiwiYXV0aCIsImdldEF1dGhGcm9tQ2xpZW50IiwidXNlciIsImZyb21KU09OIiwicnVuVHJpZ2dlciIsInRvSlNPTndpdGhPYmplY3RzIiwiX2ZpbHRlclNlbnNpdGl2ZURhdGEiLCJwdXNoRGVsZXRlIiwicmVzb2x2ZUVycm9yIiwiQ2xpZW50IiwicHVzaEVycm9yIiwiY29kZSIsImlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkIiwiaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCIsImxvY2FsQ3VycmVudFBhcnNlT2JqZWN0IiwibG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0Iiwib3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UiLCJvcmlnaW5hbEFDTCIsImN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UiLCJjdXJyZW50QUNMIiwiaXNPcmlnaW5hbE1hdGNoZWQiLCJpc0N1cnJlbnRNYXRjaGVkIiwiaGFzaCIsInR5cGUiLCJ3YXRjaEZpZWxkc0NoYW5nZWQiLCJfY2hlY2tXYXRjaEZpZWxkcyIsImN1cnJlbnRSZWFkYWJsZSIsIm9yaWdpbmFsUmVhZGFibGUiLCJvcmlnaW5hbCIsImZ1bmN0aW9uTmFtZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJyZXF1ZXN0IiwidHY0IiwidmFsaWRhdGUiLCJSZXF1ZXN0U2NoZW1hIiwiX2hhbmRsZUNvbm5lY3QiLCJfaGFuZGxlU3Vic2NyaWJlIiwiX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbiIsIl9oYW5kbGVVbnN1YnNjcmliZSIsImluZm8iLCJoYXMiLCJydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzIiwiZGVsZXRlIiwic3Vic2NyaXB0aW9uSW5mbyIsInN1YnNjcmlwdGlvbkluZm9zIiwiZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uIiwiaGFzU3Vic2NyaWJpbmdDbGllbnQiLCJfdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzIiwid2hlcmUiLCJ1bmRlZmluZWQiLCJpc0FycmF5IiwiRXJyb3IiLCJJTlZBTElEX1FVRVJZIiwic3ViUXVlcnkiLCJjb25zdHJhaW50IiwiJHJlZ2V4IiwicmVnZXgiLCJpc1JlZ0V4cExpa2UiLCJzb3VyY2UiLCJmbGFncyIsInBhdHRlcm4iLCIkb3B0aW9ucyIsIlJlZ0V4cCIsIm1hdGNoZXNRdWVyeSIsInN0cnVjdHVyZWRDbG9uZSIsInZhbGlkVG9rZW5zIiwiUXVlcnkiLCJTZXNzaW9uIiwiZXF1YWxUbyIsIlVzZXIiLCJjcmVhdGVXaXRob3V0RGF0YSIsImZpbmQiLCJ0b2tlbiIsImF1dGhQcm9taXNlIiwiYXV0aDEiLCJhdXRoMiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjbGVhclJvbGVDYWNoZSIsImZyb21DYWNoZSIsInRoZW4iLCJjYXRjaCIsInJlc3VsdCIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsImdldFN1YnNjcmlwdGlvbkluZm8iLCJhY2xHcm91cCIsInB1c2giLCJTY2hlbWFDb250cm9sbGVyIiwidmFsaWRhdGVQZXJtaXNzaW9uIiwicGVybWlzc2lvbkZpZWxkIiwiaW5kZXhPZiIsInBvaW50ZXJGaWVsZHMiLCJpbmNsdWRlcyIsImxlbmd0aCIsInRlc3RQZXJtaXNzaW9ucyIsImhhc0FjY2VzcyIsInNvbWUiLCJ2YWx1ZSIsIm9iamVjdElkIiwiaXRlbSIsIl9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMiLCJjbGllbnRBdXRoIiwiZ2V0VXNlclJvbGVzIiwicHJvdGVjdGVkRmllbGRzIiwic3RhcnRzV2l0aCIsImZpbHRlciIsIm9iaiIsImdldERhdGFiYXNlQ29udHJvbGxlciIsImFkZFByb3RlY3RlZEZpZWxkcyIsIkRhdGFiYXNlQ29udHJvbGxlciIsImZpbHRlclNlbnNpdGl2ZURhdGEiLCJwcm90ZWN0ZWRGaWVsZHNPd25lckV4ZW1wdCIsIl92ZXJpZnlBQ0wiLCJpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQiLCJnZXRSZWFkQWNjZXNzIiwiYWNsX2hhc19yb2xlcyIsInBlcm1pc3Npb25zQnlJZCIsInJvbGVOYW1lcyIsInJvbGUiLCJnZXRTZXNzaW9uRnJvbUNsaWVudCIsIndhdGNoIiwiaXNEZWVwU3RyaWN0RXF1YWwiLCJnZXRQdWJsaWNSZWFkQWNjZXNzIiwic3Vic2NyaXB0aW9uVG9rZW4iLCJjbGllbnRTZXNzaW9uVG9rZW4iLCJfdmFsaWRhdGVLZXlzIiwiX2hhc01hc3RlcktleSIsInJhbmRvbVVVSUQiLCJyZXEiLCJwdXNoQ29ubmVjdCIsInZhbGlkS2V5UGFpcnMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpc1ZhbGlkIiwic2VjcmV0IiwiYXV0aENhbGxlZCIsInBhcnNlUXVlcnkiLCJ3aXRoSlNPTiIsInRvUG9pbnRlciIsIm1hc3RlciIsImFwcENvbmZpZyIsIkNvbmZpZyIsInJjIiwicmVxdWVzdENvbXBsZXhpdHkiLCJxdWVyeURlcHRoIiwibWF4RGVwdGgiLCJjaGVja0RlcHRoIiwibm9kZSIsImRlcHRoIiwiaXNMb2dpY2FsIiwiYWxsb3dSZWdleCIsImNoZWNrUmVnZXgiLCJzY2hlbWFDb250cm9sbGVyIiwiZGF0YWJhc2UiLCJsb2FkU2NoZW1hIiwiZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zIiwidXNlclJvbGVzIiwiY2hlY2tXaGVyZSIsIndoZXJlS2V5Iiwicm9vdEZpZWxkIiwic3BsaXQiLCJPUEVSQVRJT05fRk9SQklEREVOIiwid2F0Y2hGaWVsZCIsInByZXZpb3VzU3Vic2NyaXB0aW9uSW5mbyIsInByZXZpb3VzU3Vic2NyaXB0aW9uIiwicHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMiLCJzdWJzY3JpcHRpb25IYXNoIiwicXVlcnlIYXNoIiwiU3Vic2NyaXB0aW9uIiwiYWRkU3Vic2NyaXB0aW9uSW5mbyIsImFkZENsaWVudFN1YnNjcmlwdGlvbiIsInB1c2hTdWJzY3JpYmUiLCJub3RpZnlDbGllbnQiLCJkZWxldGVTdWJzY3JpcHRpb25JbmZvIiwicHVzaFVuc3Vic2NyaWJlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvUGFyc2VMaXZlUXVlcnlTZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR2NCBmcm9tICd0djQnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi9DbGllbnQnO1xuaW1wb3J0IHsgUGFyc2VXZWJTb2NrZXRTZXJ2ZXIgfSBmcm9tICcuL1BhcnNlV2ViU29ja2V0U2VydmVyJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBSZXF1ZXN0U2NoZW1hIGZyb20gJy4vUmVxdWVzdFNjaGVtYSc7XG5pbXBvcnQgeyBtYXRjaGVzUXVlcnksIHF1ZXJ5SGFzaCB9IGZyb20gJy4vUXVlcnlUb29scyc7XG5pbXBvcnQgeyBQYXJzZVB1YlN1YiB9IGZyb20gJy4vUGFyc2VQdWJTdWInO1xuaW1wb3J0IFNjaGVtYUNvbnRyb2xsZXIgZnJvbSAnLi4vQ29udHJvbGxlcnMvU2NoZW1hQ29udHJvbGxlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge1xuICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzLFxuICBnZXRUcmlnZ2VyLFxuICBydW5UcmlnZ2VyLFxuICByZXNvbHZlRXJyb3IsXG4gIHRvSlNPTndpdGhPYmplY3RzLFxufSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgeyBnZXRBdXRoRm9yU2Vzc2lvblRva2VuLCBBdXRoIH0gZnJvbSAnLi4vQXV0aCc7XG5pbXBvcnQgeyBnZXRDYWNoZUNvbnRyb2xsZXIsIGdldERhdGFiYXNlQ29udHJvbGxlciB9IGZyb20gJy4uL0NvbnRyb2xsZXJzJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCB7IExSVUNhY2hlIGFzIExSVSB9IGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgVXNlclJvdXRlciBmcm9tICcuLi9Sb3V0ZXJzL1VzZXJzUm91dGVyJztcbmltcG9ydCBEYXRhYmFzZUNvbnRyb2xsZXIgZnJvbSAnLi4vQ29udHJvbGxlcnMvRGF0YWJhc2VDb250cm9sbGVyJztcbmltcG9ydCB7IGlzRGVlcFN0cmljdEVxdWFsIH0gZnJvbSAndXRpbCc7XG5cblxuY2xhc3MgUGFyc2VMaXZlUXVlcnlTZXJ2ZXIge1xuICBzZXJ2ZXI6IGFueTtcbiAgY29uZmlnOiBhbnk7XG4gIGNsaWVudHM6IE1hcDxzdHJpbmcsIGFueT47XG4gIC8vIGNsYXNzTmFtZSAtPiAocXVlcnlIYXNoIC0+IHN1YnNjcmlwdGlvbilcbiAgc3Vic2NyaXB0aW9uczogTWFwPHN0cmluZywgYW55PjtcbiAgcGFyc2VXZWJTb2NrZXRTZXJ2ZXI6IGFueTtcbiAga2V5UGFpcnM6IGFueTtcbiAgLy8gVGhlIHN1YnNjcmliZXIgd2UgdXNlIHRvIGdldCBvYmplY3QgdXBkYXRlIGZyb20gcHVibGlzaGVyXG4gIHN1YnNjcmliZXI6IGFueTtcbiAgYXV0aENhY2hlOiBhbnk7XG4gIGNhY2hlQ29udHJvbGxlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHNlcnZlcjogYW55LCBjb25maWc6IGFueSA9IHt9LCBwYXJzZVNlcnZlckNvbmZpZzogYW55ID0ge30pIHtcbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcbiAgICB0aGlzLmNsaWVudHMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgY29uZmlnLmFwcElkID0gY29uZmlnLmFwcElkIHx8IFBhcnNlLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uZmlnLm1hc3RlcktleSA9IGNvbmZpZy5tYXN0ZXJLZXkgfHwgUGFyc2UubWFzdGVyS2V5O1xuXG4gICAgLy8gU3RvcmUga2V5cywgY29udmVydCBvYmogdG8gbWFwXG4gICAgY29uc3Qga2V5UGFpcnMgPSBjb25maWcua2V5UGFpcnMgfHwge307XG4gICAgdGhpcy5rZXlQYWlycyA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhrZXlQYWlycykpIHtcbiAgICAgIHRoaXMua2V5UGFpcnMuc2V0KGtleSwga2V5UGFpcnNba2V5XSk7XG4gICAgfVxuICAgIGxvZ2dlci52ZXJib3NlKCdTdXBwb3J0IGtleSBwYWlycycsIHRoaXMua2V5UGFpcnMpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBQYXJzZVxuICAgIFBhcnNlLk9iamVjdC5kaXNhYmxlU2luZ2xlSW5zdGFuY2UoKTtcbiAgICBjb25zdCBzZXJ2ZXJVUkwgPSBjb25maWcuc2VydmVyVVJMIHx8IFBhcnNlLnNlcnZlclVSTDtcbiAgICBQYXJzZS5zZXJ2ZXJVUkwgPSBzZXJ2ZXJVUkw7XG4gICAgUGFyc2UuaW5pdGlhbGl6ZShjb25maWcuYXBwSWQsIFBhcnNlLmphdmFTY3JpcHRLZXksIGNvbmZpZy5tYXN0ZXJLZXkpO1xuXG4gICAgLy8gVGhlIGNhY2hlIGNvbnRyb2xsZXIgaXMgYSBwcm9wZXIgY2FjaGUgY29udHJvbGxlclxuICAgIC8vIHdpdGggYWNjZXNzIHRvIFVzZXIgYW5kIFJvbGVzXG4gICAgdGhpcy5jYWNoZUNvbnRyb2xsZXIgPSBnZXRDYWNoZUNvbnRyb2xsZXIocGFyc2VTZXJ2ZXJDb25maWcpO1xuXG4gICAgY29uZmlnLmNhY2hlVGltZW91dCA9IGNvbmZpZy5jYWNoZVRpbWVvdXQgfHwgNSAqIDEwMDA7IC8vIDVzXG5cbiAgICAvLyBUaGlzIGF1dGggY2FjaGUgc3RvcmVzIHRoZSBwcm9taXNlcyBmb3IgZWFjaCBhdXRoIHJlc29sdXRpb24uXG4gICAgLy8gVGhlIG1haW4gYmVuZWZpdCBpcyB0byBiZSBhYmxlIHRvIHJldXNlIHRoZSBzYW1lIHVzZXIgLyBzZXNzaW9uIHRva2VuIHJlc29sdXRpb24uXG4gICAgdGhpcy5hdXRoQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogNTAwLCAvLyA1MDAgY29uY3VycmVudFxuICAgICAgdHRsOiBjb25maWcuY2FjaGVUaW1lb3V0LFxuICAgIH0pO1xuICAgIC8vIEluaXRpYWxpemUgd2Vic29ja2V0IHNlcnZlclxuICAgIHRoaXMucGFyc2VXZWJTb2NrZXRTZXJ2ZXIgPSBuZXcgUGFyc2VXZWJTb2NrZXRTZXJ2ZXIoXG4gICAgICBzZXJ2ZXIsXG4gICAgICBwYXJzZVdlYnNvY2tldCA9PiB0aGlzLl9vbkNvbm5lY3QocGFyc2VXZWJzb2NrZXQpLFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmliZXIgPSBQYXJzZVB1YlN1Yi5jcmVhdGVTdWJzY3JpYmVyKGNvbmZpZyk7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmliZXIuY29ubmVjdCkge1xuICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuc3Vic2NyaWJlci5jb25uZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5zdWJzY3JpYmVyLmNvbm5lY3QoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVTdWJzY3JpYmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaWJlci5pc09wZW4pIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgLi4uWy4uLnRoaXMuY2xpZW50cy52YWx1ZXMoKV0ubWFwKGNsaWVudCA9PiBjbGllbnQucGFyc2VXZWJTb2NrZXQud3MuY2xvc2UoKSksXG4gICAgICAgIHRoaXMucGFyc2VXZWJTb2NrZXRTZXJ2ZXIuY2xvc2U/LigpLFxuICAgICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc3Vic2NyaWJlci5zdWJzY3JpcHRpb25zPy5rZXlzKCkgfHwgW10pLm1hcChrZXkgPT5cbiAgICAgICAgICB0aGlzLnN1YnNjcmliZXIudW5zdWJzY3JpYmUoa2V5KVxuICAgICAgICApLFxuICAgICAgICB0aGlzLnN1YnNjcmliZXIuY2xvc2U/LigpLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJzY3JpYmVyLmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZXIuY2xvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1B1YlN1YkFkYXB0ZXIgZXJyb3Igb24gc2h1dGRvd24nLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlci5pc09wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlU3Vic2NyaWJlcnMoKSB7XG4gICAgY29uc3QgbWVzc2FnZVJlY2lldmVkID0gKGNoYW5uZWwsIG1lc3NhZ2VTdHIpID0+IHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdTdWJzY3JpYmUgbWVzc2FnZSAlaicsIG1lc3NhZ2VTdHIpO1xuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShtZXNzYWdlU3RyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCd1bmFibGUgdG8gcGFyc2UgbWVzc2FnZScsIG1lc3NhZ2VTdHIsIGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY2hhbm5lbCA9PT0gUGFyc2UuYXBwbGljYXRpb25JZCArICdjbGVhckNhY2hlJykge1xuICAgICAgICB0aGlzLl9jbGVhckNhY2hlZFJvbGVzKG1lc3NhZ2UudXNlcklkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5mbGF0ZVBhcnNlT2JqZWN0KG1lc3NhZ2UpO1xuICAgICAgaWYgKGNoYW5uZWwgPT09IFBhcnNlLmFwcGxpY2F0aW9uSWQgKyAnYWZ0ZXJTYXZlJykge1xuICAgICAgICB0aGlzLl9vbkFmdGVyU2F2ZShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbm5lbCA9PT0gUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlckRlbGV0ZScpIHtcbiAgICAgICAgdGhpcy5fb25BZnRlckRlbGV0ZShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignR2V0IG1lc3NhZ2UgJXMgZnJvbSB1bmtub3duIGNoYW5uZWwgJWonLCBtZXNzYWdlLCBjaGFubmVsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlci5vbignbWVzc2FnZScsIChjaGFubmVsLCBtZXNzYWdlU3RyKSA9PiBtZXNzYWdlUmVjaWV2ZWQoY2hhbm5lbCwgbWVzc2FnZVN0cikpO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgWydhZnRlclNhdmUnLCAnYWZ0ZXJEZWxldGUnLCAnY2xlYXJDYWNoZSddKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYCR7UGFyc2UuYXBwbGljYXRpb25JZH0ke2ZpZWxkfWA7XG4gICAgICB0aGlzLnN1YnNjcmliZXIuc3Vic2NyaWJlKGNoYW5uZWwsIG1lc3NhZ2VTdHIgPT4gbWVzc2FnZVJlY2lldmVkKGNoYW5uZWwsIG1lc3NhZ2VTdHIpKTtcbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlci4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IEpTT04gYWZ0ZXIgY2hhbmdlcy5cbiAgLy8gTWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0IGlzIHRoZSBvcmlnaW5hbCBQYXJzZU9iamVjdCBKU09OLlxuICBfaW5mbGF0ZVBhcnNlT2JqZWN0KG1lc3NhZ2U6IGFueSk6IHZvaWQge1xuICAgIC8vIEluZmxhdGUgbWVyZ2VkIG9iamVjdFxuICAgIGNvbnN0IGN1cnJlbnRQYXJzZU9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIFVzZXJSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhjdXJyZW50UGFyc2VPYmplY3QpO1xuICAgIGxldCBjbGFzc05hbWUgPSBjdXJyZW50UGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgIGxldCBwYXJzZU9iamVjdCA9IG5ldyBQYXJzZS5PYmplY3QoY2xhc3NOYW1lKTtcbiAgICBwYXJzZU9iamVjdC5fZmluaXNoRmV0Y2goY3VycmVudFBhcnNlT2JqZWN0KTtcbiAgICBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0O1xuICAgIC8vIEluZmxhdGUgb3JpZ2luYWwgb2JqZWN0XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJzZU9iamVjdCA9IG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdDtcbiAgICBpZiAob3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgICAgVXNlclJvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKG9yaWdpbmFsUGFyc2VPYmplY3QpO1xuICAgICAgY2xhc3NOYW1lID0gb3JpZ2luYWxQYXJzZU9iamVjdC5jbGFzc05hbWU7XG4gICAgICBwYXJzZU9iamVjdCA9IG5ldyBQYXJzZS5PYmplY3QoY2xhc3NOYW1lKTtcbiAgICAgIHBhcnNlT2JqZWN0Ll9maW5pc2hGZXRjaChvcmlnaW5hbFBhcnNlT2JqZWN0KTtcbiAgICAgIG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0O1xuICAgIH1cbiAgfVxuXG4gIC8vIE1lc3NhZ2UgaXMgdGhlIEpTT04gb2JqZWN0IGZyb20gcHVibGlzaGVyIGFmdGVyIGluZmxhdGVkLiBNZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCBpcyB0aGUgUGFyc2VPYmplY3QgYWZ0ZXIgY2hhbmdlcy5cbiAgLy8gTWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0IGlzIHRoZSBvcmlnaW5hbCBQYXJzZU9iamVjdC5cbiAgYXN5bmMgX29uQWZ0ZXJEZWxldGUobWVzc2FnZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoUGFyc2UuYXBwbGljYXRpb25JZCArICdhZnRlckRlbGV0ZSBpcyB0cmlnZ2VyZWQnKTtcblxuICAgIGxldCBkZWxldGVkUGFyc2VPYmplY3QgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC50b0pTT04oKTtcbiAgICBjb25zdCBjbGFzc0xldmVsUGVybWlzc2lvbnMgPSBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICBjb25zdCBjbGFzc05hbWUgPSBkZWxldGVkUGFyc2VPYmplY3QuY2xhc3NOYW1lO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDbGFzc05hbWU6ICVqIHwgT2JqZWN0SWQ6ICVzJywgY2xhc3NOYW1lLCBkZWxldGVkUGFyc2VPYmplY3QuaWQpO1xuICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IGNsaWVudCBudW1iZXIgOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcblxuICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoY2xhc3NOYW1lKTtcbiAgICBpZiAodHlwZW9mIGNsYXNzU3Vic2NyaXB0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FuIG5vdCBmaW5kIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcyAnICsgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBjbGFzc1N1YnNjcmlwdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGxldCBpc1N1YnNjcmlwdGlvbk1hdGNoZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpc1N1YnNjcmlwdGlvbk1hdGNoZWQgPSB0aGlzLl9tYXRjaGVzU3Vic2NyaXB0aW9uKGRlbGV0ZWRQYXJzZU9iamVjdCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgbWF0Y2hpbmcgc3Vic2NyaXB0aW9uIGZvciBjbGFzcyAke2NsYXNzTmFtZX06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbY2xpZW50SWQsIHJlcXVlc3RJZHNdIG9mIF8uZW50cmllcyhzdWJzY3JpcHRpb24uY2xpZW50UmVxdWVzdElkcykpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2xpZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RJZHMuZm9yRWFjaChhc3luYyByZXF1ZXN0SWQgPT4ge1xuICAgICAgICAgIC8vIERlZXAtY2xvbmUgc2hhcmVkIG9iamVjdCBzbyBlYWNoIGNvbmN1cnJlbnQgY2FsbGJhY2sgd29ya3Mgb24gaXRzIG93biBjb3B5XG4gICAgICAgICAgbGV0IGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWxldGVkUGFyc2VPYmplY3QpKTtcbiAgICAgICAgICBjb25zdCBhY2wgPSBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdC5nZXRBQ0woKTtcbiAgICAgICAgICAvLyBDaGVjayBDTFBcbiAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihzdWJzY3JpcHRpb24ucXVlcnkpO1xuICAgICAgICAgIGxldCByZXM6IGFueSA9IHt9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzQ0xQID0gYXdhaXQgdGhpcy5fbWF0Y2hlc0NMUChcbiAgICAgICAgICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICBtZXNzYWdlLmN1cnJlbnRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoZXNDTFAgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNNYXRjaGVkID0gYXdhaXQgdGhpcy5fbWF0Y2hlc0FDTChhY2wsIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgIGlmICghaXNNYXRjaGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0ge1xuICAgICAgICAgICAgICBldmVudDogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgICAgICAgICAgb2JqZWN0OiBsb2NhbERlbGV0ZWRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgICAgIHNlbmRFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdhZnRlckV2ZW50JywgUGFyc2UuYXBwbGljYXRpb25JZCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICAgICAgICBjb25zdCBhdXRoID0gYXdhaXQgdGhpcy5nZXRBdXRoRnJvbUNsaWVudChjbGllbnQsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgIGlmIChhdXRoICYmIGF1dGgudXNlcikge1xuICAgICAgICAgICAgICAgIHJlcy51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGxvY2FsRGVsZXRlZFBhcnNlT2JqZWN0ID0gdG9KU09Od2l0aE9iamVjdHMocmVzLm9iamVjdCwgcmVzLm9iamVjdC5jbGFzc05hbWUgfHwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5vYmplY3QgPSBsb2NhbERlbGV0ZWRQYXJzZU9iamVjdDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZpbHRlclNlbnNpdGl2ZURhdGEoXG4gICAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5xdWVyeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsaWVudC5wdXNoRGVsZXRlKHJlcXVlc3RJZCwgcmVzLm9iamVjdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNZXNzYWdlIGlzIHRoZSBKU09OIG9iamVjdCBmcm9tIHB1Ymxpc2hlciBhZnRlciBpbmZsYXRlZC4gTWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QgaXMgdGhlIFBhcnNlT2JqZWN0IGFmdGVyIGNoYW5nZXMuXG4gIC8vIE1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCBpcyB0aGUgb3JpZ2luYWwgUGFyc2VPYmplY3QuXG4gIGFzeW5jIF9vbkFmdGVyU2F2ZShtZXNzYWdlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIudmVyYm9zZShQYXJzZS5hcHBsaWNhdGlvbklkICsgJ2FmdGVyU2F2ZSBpcyB0cmlnZ2VyZWQnKTtcblxuICAgIGxldCBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbnVsbDtcbiAgICBpZiAobWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0KSB7XG4gICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0LnRvSlNPTigpO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0xldmVsUGVybWlzc2lvbnMgPSBtZXNzYWdlLmNsYXNzTGV2ZWxQZXJtaXNzaW9ucztcbiAgICBsZXQgY3VycmVudFBhcnNlT2JqZWN0ID0gbWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QudG9KU09OKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gY3VycmVudFBhcnNlT2JqZWN0LmNsYXNzTmFtZTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ2xhc3NOYW1lOiAlcyB8IE9iamVjdElkOiAlcycsIGNsYXNzTmFtZSwgY3VycmVudFBhcnNlT2JqZWN0LmlkKTtcbiAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyIDogJWQnLCB0aGlzLmNsaWVudHMuc2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGNsYXNzTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBjbGFzc1N1YnNjcmlwdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NhbiBub3QgZmluZCBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MgJyArIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGNsYXNzU3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgbGV0IGlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkO1xuICAgICAgbGV0IGlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpc09yaWdpbmFsU3Vic2NyaXB0aW9uTWF0Y2hlZCA9IHRoaXMuX21hdGNoZXNTdWJzY3JpcHRpb24oXG4gICAgICAgICAgb3JpZ2luYWxQYXJzZU9iamVjdCxcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgKTtcbiAgICAgICAgaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZCA9IHRoaXMuX21hdGNoZXNTdWJzY3JpcHRpb24oXG4gICAgICAgICAgY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgIHN1YnNjcmlwdGlvblxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCBtYXRjaGluZyBzdWJzY3JpcHRpb24gZm9yIGNsYXNzICR7Y2xhc3NOYW1lfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBbY2xpZW50SWQsIHJlcXVlc3RJZHNdIG9mIF8uZW50cmllcyhzdWJzY3JpcHRpb24uY2xpZW50UmVxdWVzdElkcykpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChjbGllbnRJZCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2xpZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RJZHMuZm9yRWFjaChhc3luYyByZXF1ZXN0SWQgPT4ge1xuICAgICAgICAgIC8vIERlZXAtY2xvbmUgc2hhcmVkIG9iamVjdHMgc28gZWFjaCBjb25jdXJyZW50IGNhbGxiYWNrIHdvcmtzIG9uIGl0cyBvd24gY29weS5cbiAgICAgICAgICAvLyBXaXRob3V0IGNsb25pbmcsIF9maWx0ZXJTZW5zaXRpdmVEYXRhJ3MgaW4tcGxhY2UgZmllbGQgZGVsZXRpb24gYW5kIGFmdGVyRXZlbnRcbiAgICAgICAgICAvLyB0cmlnZ2VyIG1vZGlmaWNhdGlvbnMgY29ycnVwdCB0aGUgc2hhcmVkIHN0YXRlIGFjcm9zcyBjb25jdXJyZW50IHN1YnNjcmliZXJzLlxuICAgICAgICAgIGxldCBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudFBhcnNlT2JqZWN0KSk7XG4gICAgICAgICAgbGV0IGxvY2FsT3JpZ2luYWxQYXJzZU9iamVjdCA9IG9yaWdpbmFsUGFyc2VPYmplY3RcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5hbFBhcnNlT2JqZWN0KSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAvLyBTZXQgb3JpZ25hbCBQYXJzZU9iamVjdCBBQ0wgY2hlY2tpbmcgcHJvbWlzZSwgaWYgdGhlIG9iamVjdCBkb2VzIG5vdCBtYXRjaFxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiwgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgQUNMXG4gICAgICAgICAgbGV0IG9yaWdpbmFsQUNMQ2hlY2tpbmdQcm9taXNlO1xuICAgICAgICAgIGlmICghaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsQUNMQ2hlY2tpbmdQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9yaWdpbmFsQUNMO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgICAgICAgICAgICBvcmlnaW5hbEFDTCA9IG1lc3NhZ2Uub3JpZ2luYWxQYXJzZU9iamVjdC5nZXRBQ0woKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yaWdpbmFsQUNMQ2hlY2tpbmdQcm9taXNlID0gdGhpcy5fbWF0Y2hlc0FDTChvcmlnaW5hbEFDTCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTZXQgY3VycmVudCBQYXJzZU9iamVjdCBBQ0wgY2hlY2tpbmcgcHJvbWlzZSwgaWYgdGhlIG9iamVjdCBkb2VzIG5vdCBtYXRjaFxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiwgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgQUNMXG4gICAgICAgICAgbGV0IGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2U7XG4gICAgICAgICAgbGV0IHJlczogYW55ID0ge307XG4gICAgICAgICAgaWYgKCFpc0N1cnJlbnRTdWJzY3JpcHRpb25NYXRjaGVkKSB7XG4gICAgICAgICAgICBjdXJyZW50QUNMQ2hlY2tpbmdQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEFDTCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LmdldEFDTCgpO1xuICAgICAgICAgICAgY3VycmVudEFDTENoZWNraW5nUHJvbWlzZSA9IHRoaXMuX21hdGNoZXNBQ0woY3VycmVudEFDTCwgY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSB0aGlzLl9nZXRDTFBPcGVyYXRpb24oc3Vic2NyaXB0aW9uLnF1ZXJ5KTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNDTFAgPSBhd2FpdCB0aGlzLl9tYXRjaGVzQ0xQKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgb3BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlc0NMUCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2lzT3JpZ2luYWxNYXRjaGVkLCBpc0N1cnJlbnRNYXRjaGVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICAgIGN1cnJlbnRBQ0xDaGVja2luZ1Byb21pc2UsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICAgICAgICAnT3JpZ2luYWwgJWogfCBDdXJyZW50ICVqIHwgTWF0Y2g6ICVzLCAlcywgJXMsICVzIHwgUXVlcnk6ICVzJyxcbiAgICAgICAgICAgICAgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdCxcbiAgICAgICAgICAgICAgaXNPcmlnaW5hbFN1YnNjcmlwdGlvbk1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzQ3VycmVudFN1YnNjcmlwdGlvbk1hdGNoZWQsXG4gICAgICAgICAgICAgIGlzT3JpZ2luYWxNYXRjaGVkLFxuICAgICAgICAgICAgICBpc0N1cnJlbnRNYXRjaGVkLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uaGFzaFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIERlY2lkZSBldmVudCB0eXBlXG4gICAgICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgICAgIGlmIChpc09yaWdpbmFsTWF0Y2hlZCAmJiBpc0N1cnJlbnRNYXRjaGVkKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSAndXBkYXRlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPcmlnaW5hbE1hdGNoZWQgJiYgIWlzQ3VycmVudE1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgdHlwZSA9ICdsZWF2ZSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc09yaWdpbmFsTWF0Y2hlZCAmJiBpc0N1cnJlbnRNYXRjaGVkKSB7XG4gICAgICAgICAgICAgIGlmIChsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2VudGVyJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gJ2NyZWF0ZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2F0Y2hGaWVsZHNDaGFuZ2VkID0gdGhpcy5fY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQsIHJlcXVlc3RJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIXdhdGNoRmllbGRzQ2hhbmdlZCAmJiAodHlwZSA9PT0gJ3VwZGF0ZScgfHwgdHlwZSA9PT0gJ2NyZWF0ZScpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEEgYGxlYXZlYCBvciBgZW50ZXJgIHRyYW5zaXRpb24gY2FuIGJlIGNhdXNlZCBlaXRoZXIgYnkgdGhlIG9iamVjdCdzXG4gICAgICAgICAgICAvLyBxdWVyeSBtYXRjaCBjaGFuZ2luZyAodGhlIHN1YnNjcmliZXIga2VlcHMgcmVhZCBhY2Nlc3MpIG9yIGJ5IHRoZVxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlcidzIEFDTCByZWFkIGFjY2VzcyBiZWluZyByZXZva2VkIG9yIGdyYW50ZWQgaW4gdGhlIHNhbWUgc2F2ZS5cbiAgICAgICAgICAgIC8vIEluIHRoZSBhY2Nlc3MtY2hhbmdlIGNhc2UgdGhlIHN1YnNjcmliZXIgaXMgbm90IGF1dGhvcml6ZWQgdG8gcmVhZCB0aGVcbiAgICAgICAgICAgIC8vIG9iamVjdCBzdGF0ZSB0aGF0IHRyaWdnZXJlZCB0aGUgdHJhbnNpdGlvbiwgc28gdGhhdCBzdGF0ZSBtdXN0IG5vdCBiZVxuICAgICAgICAgICAgLy8gc2VudCBvdmVyIHRoZSBjaGFubmVsLiAoQ0xQIHJlYWQgZGVuaWFsIGlzIGhhbmRsZWQgZWFybGllciBieVxuICAgICAgICAgICAgLy8gYF9tYXRjaGVzQ0xQYCwgd2hpY2ggc2tpcHMgdGhlIGV2ZW50IGVudGlyZWx5LilcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnbGVhdmUnKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBwb3N0LXVwZGF0ZSBvYmplY3QgaXMgcmVhZGFibGUgb24gYSBxdWVyeS1taXNtYXRjaCBsZWF2ZSBidXQgbm90XG4gICAgICAgICAgICAgIC8vIG9uIGFuIEFDTC1sb3NzIGxlYXZlLiBPbmx5IHNlbmQgdGhlIHBvc3QtdXBkYXRlIGJvZHkgd2hlbiB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaWJlciBjYW4gc3RpbGwgcmVhZCB0aGUgY3VycmVudCBvYmplY3Q7IG90aGVyd2lzZSBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgYXV0aG9yaXplZCAob3JpZ2luYWwpIHN0YXRlLCB3aGljaCBzdGlsbCBjYXJyaWVzIHRoZSBvYmplY3RJZC5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJlYWRhYmxlID0gaXNDdXJyZW50U3Vic2NyaXB0aW9uTWF0Y2hlZFxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IGF3YWl0IHRoaXMuX21hdGNoZXNBQ0wobWVzc2FnZS5jdXJyZW50UGFyc2VPYmplY3QuZ2V0QUNMKCksIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVhZGFibGUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEN1cnJlbnRQYXJzZU9iamVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICAvLyBUaGUgcHJlLXVwZGF0ZSBvYmplY3Qgd2FzIHJlYWRhYmxlIG9uIGEgcXVlcnktbWF0Y2gtZ2FpbiBlbnRlciBidXQgbm90XG4gICAgICAgICAgICAgIC8vIG9uIGFuIEFDTC1ncmFudCBlbnRlci4gT25seSBzZW5kIHRoZSBwcmUtdXBkYXRlIGJvZHkgYXMgYG9yaWdpbmFsYFxuICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBzdWJzY3JpYmVyIGNvdWxkIHJlYWQgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZWFkYWJsZSA9IGlzT3JpZ2luYWxTdWJzY3JpcHRpb25NYXRjaGVkXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogYXdhaXQgdGhpcy5fbWF0Y2hlc0FDTChtZXNzYWdlLm9yaWdpbmFsUGFyc2VPYmplY3QuZ2V0QUNMKCksIGNsaWVudCwgcmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgaWYgKCFvcmlnaW5hbFJlYWRhYmxlKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0ge1xuICAgICAgICAgICAgICBldmVudDogdHlwZSxcbiAgICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBjbGllbnQuc2Vzc2lvblRva2VuLFxuICAgICAgICAgICAgICBvYmplY3Q6IGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBvcmlnaW5hbDogbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uczogdGhpcy5zdWJzY3JpcHRpb25zLnNpemUsXG4gICAgICAgICAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGNsaWVudC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgICAgc2VuZEV2ZW50OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgJ2FmdGVyRXZlbnQnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgICAgICAgIGlmIChyZXMub2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmVzLm9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihyZXMub2JqZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsID0gUGFyc2UuT2JqZWN0LmZyb21KU09OKHJlcy5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50LCByZXF1ZXN0SWQpO1xuICAgICAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgICAgICByZXMudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBhZnRlckV2ZW50LiR7Y2xhc3NOYW1lfWAsIHJlcywgYXV0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlcy5zZW5kRXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcy5vYmplY3QgJiYgdHlwZW9mIHJlcy5vYmplY3QudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGxvY2FsQ3VycmVudFBhcnNlT2JqZWN0ID0gdG9KU09Od2l0aE9iamVjdHMocmVzLm9iamVjdCwgcmVzLm9iamVjdC5jbGFzc05hbWUgfHwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXMub3JpZ2luYWwgJiYgdHlwZW9mIHJlcy5vcmlnaW5hbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgbG9jYWxPcmlnaW5hbFBhcnNlT2JqZWN0ID0gdG9KU09Od2l0aE9iamVjdHMoXG4gICAgICAgICAgICAgICAgcmVzLm9yaWdpbmFsLFxuICAgICAgICAgICAgICAgIHJlcy5vcmlnaW5hbC5jbGFzc05hbWUgfHwgY2xhc3NOYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMub2JqZWN0ID0gbG9jYWxDdXJyZW50UGFyc2VPYmplY3Q7XG4gICAgICAgICAgICByZXMub3JpZ2luYWwgPSBsb2NhbE9yaWdpbmFsUGFyc2VPYmplY3Q7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24ucXVlcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSAncHVzaCcgKyByZXMuZXZlbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXMuZXZlbnQuc2xpY2UoMSk7XG4gICAgICAgICAgICBpZiAoY2xpZW50W2Z1bmN0aW9uTmFtZV0pIHtcbiAgICAgICAgICAgICAgY2xpZW50W2Z1bmN0aW9uTmFtZV0ocmVxdWVzdElkLCByZXMub2JqZWN0LCByZXMub3JpZ2luYWwgPz8gbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICAgICAgICBDbGllbnQucHVzaEVycm9yKGNsaWVudC5wYXJzZVdlYlNvY2tldCwgZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSwgZmFsc2UsIHJlcXVlc3RJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBhZnRlckxpdmVRdWVyeUV2ZW50IG9uIGNsYXNzICR7Y2xhc3NOYW1lfSBmb3IgZXZlbnQgJHtyZXMuZXZlbnR9IHdpdGggc2Vzc2lvbiAke3Jlcy5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25Db25uZWN0KHBhcnNlV2Vic29ja2V0OiBhbnkpOiB2b2lkIHtcbiAgICBwYXJzZVdlYnNvY2tldC5vbignbWVzc2FnZScsIHJlcXVlc3QgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCd1bmFibGUgdG8gcGFyc2UgcmVxdWVzdCcsIHJlcXVlc3QsIGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ1JlcXVlc3Q6ICVqJywgcmVxdWVzdCk7XG5cbiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIGEgdmFsaWQgcmVxdWVzdCwgcmV0dXJuIGVycm9yIGRpcmVjdGx5IGlmIG5vdFxuICAgICAgaWYgKFxuICAgICAgICAhdHY0LnZhbGlkYXRlKHJlcXVlc3QsIFJlcXVlc3RTY2hlbWFbJ2dlbmVyYWwnXSkgfHxcbiAgICAgICAgIXR2NC52YWxpZGF0ZShyZXF1ZXN0LCBSZXF1ZXN0U2NoZW1hW3JlcXVlc3Qub3BdKVxuICAgICAgKSB7XG4gICAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIDEsIHR2NC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0IG1lc3NhZ2UgZXJyb3IgJXMnLCB0djQuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChyZXF1ZXN0Lm9wKSB7XG4gICAgICAgIGNhc2UgJ2Nvbm5lY3QnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNvbm5lY3QocGFyc2VXZWJzb2NrZXQsIHJlcXVlc3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldCwgcmVxdWVzdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgdGhpcy5faGFuZGxlVXBkYXRlU3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5zdWJzY3JpYmUnOlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCAzLCAnR2V0IHVua25vd24gb3BlcmF0aW9uJyk7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdHZXQgdW5rbm93biBvcGVyYXRpb24nLCByZXF1ZXN0Lm9wKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBhcnNlV2Vic29ja2V0Lm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYENsaWVudCBkaXNjb25uZWN0OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZVdlYnNvY2tldC5jbGllbnRJZDtcbiAgICAgIGlmICghdGhpcy5jbGllbnRzLmhhcyhjbGllbnRJZCkpIHtcbiAgICAgICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0X2Vycm9yJyxcbiAgICAgICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICAgICAgICBlcnJvcjogYFVuYWJsZSB0byBmaW5kIGNsaWVudCAke2NsaWVudElkfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuZXJyb3IoYENhbiBub3QgZmluZCBjbGllbnQgJHtjbGllbnRJZH0gb24gZGlzY29ubmVjdGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnRcbiAgICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50cy5nZXQoY2xpZW50SWQpO1xuICAgICAgdGhpcy5jbGllbnRzLmRlbGV0ZShjbGllbnRJZCk7XG5cbiAgICAgIC8vIERlbGV0ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SWQsIHN1YnNjcmlwdGlvbkluZm9dIG9mIF8uZW50cmllcyhjbGllbnQuc3Vic2NyaXB0aW9uSW5mb3MpKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbkluZm8uc3Vic2NyaXB0aW9uO1xuICAgICAgICBzdWJzY3JpcHRpb24uZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uKGNsaWVudElkLCByZXF1ZXN0SWQpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNsaWVudCB3aGljaCBpcyBzdWJzY3JpYmluZyB0aGlzIHN1YnNjcmlwdGlvbiwgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgICBjb25zdCBjbGFzc1N1YnNjcmlwdGlvbnMgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHN1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICBpZiAoY2xhc3NTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb24uaGFzU3Vic2NyaWJpbmdDbGllbnQoKSkge1xuICAgICAgICAgICAgY2xhc3NTdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uaGFzaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbnMgdW5kZXIgdGhpcyBjbGFzcywgcmVtb3ZlIGl0IGZyb20gc3Vic2NyaXB0aW9uc1xuICAgICAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uY2xhc3NOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0N1cnJlbnQgY2xpZW50cyAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIGxvZ2dlci52ZXJib3NlKCdDdXJyZW50IHN1YnNjcmlwdGlvbnMgJWQnLCB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHtcbiAgICAgICAgZXZlbnQ6ICd3c19kaXNjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogY2xpZW50LnNlc3Npb25Ub2tlbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyh7XG4gICAgICBldmVudDogJ3dzX2Nvbm5lY3QnLFxuICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIF92YWxpZGF0ZVF1ZXJ5Q29uc3RyYWludHMod2hlcmU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2hlcmUgIT09ICdvYmplY3QnIHx8IHdoZXJlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgIGlmICh3aGVyZVtvcF0gIT09IHVuZGVmaW5lZCAmJiAhQXJyYXkuaXNBcnJheSh3aGVyZVtvcF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtvcH0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICB3aGVyZVtvcF0uZm9yRWFjaCgoc3ViUXVlcnk6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlUXVlcnlDb25zdHJhaW50cyhzdWJRdWVyeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh3aGVyZSkpIHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSB3aGVyZVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiBjb25zdHJhaW50ID09PSAnb2JqZWN0JyAmJiBjb25zdHJhaW50ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjb25zdHJhaW50LiRyZWdleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcmVnZXggPSBjb25zdHJhaW50LiRyZWdleDtcbiAgICAgICAgICBjb25zdCBpc1JlZ0V4cExpa2UgPVxuICAgICAgICAgICAgcmVnZXggIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZWdleCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiByZWdleC5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVnZXguZmxhZ3MgPT09ICdzdHJpbmcnO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVnZXggIT09ICdzdHJpbmcnICYmICFpc1JlZ0V4cExpa2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAkcmVnZXggbXVzdCBiZSBhIHN0cmluZyBvciBSZWdFeHAnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gaXNSZWdFeHBMaWtlID8gcmVnZXguc291cmNlIDogcmVnZXg7XG4gICAgICAgICAgY29uc3QgZmxhZ3MgPSBpc1JlZ0V4cExpa2UgPyByZWdleC5mbGFncyA6IGNvbnN0cmFpbnQuJG9wdGlvbnMgfHwgJyc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgYEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAke2UubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9tYXRjaGVzU3Vic2NyaXB0aW9uKHBhcnNlT2JqZWN0OiBhbnksIHN1YnNjcmlwdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gT2JqZWN0IGlzIHVuZGVmaW5lZCBvciBudWxsLCBub3QgbWF0Y2hcbiAgICBpZiAoIXBhcnNlT2JqZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzUXVlcnkoc3RydWN0dXJlZENsb25lKHBhcnNlT2JqZWN0KSwgc3Vic2NyaXB0aW9uLnF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIF9jbGVhckNhY2hlZFJvbGVzKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbGlkVG9rZW5zID0gYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlNlc3Npb24pXG4gICAgICAgIC5lcXVhbFRvKCd1c2VyJywgUGFyc2UuVXNlci5jcmVhdGVXaXRob3V0RGF0YSh1c2VySWQpKVxuICAgICAgICAuZmluZCh7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB2YWxpZFRva2Vucy5tYXAoYXN5bmMgdG9rZW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHRva2VuLmdldCgnc2Vzc2lvblRva2VuJyk7XG4gICAgICAgICAgY29uc3QgYXV0aFByb21pc2UgPSB0aGlzLmF1dGhDYWNoZS5nZXQoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICBpZiAoIWF1dGhQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFthdXRoMSwgYXV0aDJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgYXV0aFByb21pc2UsXG4gICAgICAgICAgICBnZXRBdXRoRm9yU2Vzc2lvblRva2VuKHsgY2FjaGVDb250cm9sbGVyOiB0aGlzLmNhY2hlQ29udHJvbGxlciwgc2Vzc2lvblRva2VuIH0pLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIGF1dGgxLmF1dGg/LmNsZWFyUm9sZUNhY2hlKHNlc3Npb25Ub2tlbik7XG4gICAgICAgICAgYXV0aDIuYXV0aD8uY2xlYXJSb2xlQ2FjaGUoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICB0aGlzLmF1dGhDYWNoZS5kZWxldGUoc2Vzc2lvblRva2VuKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYENvdWxkIG5vdCBjbGVhciByb2xlIGNhY2hlLiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihzZXNzaW9uVG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPHsgYXV0aD86IEF1dGgsIHVzZXJJZD86IHN0cmluZyB9PiB7XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH1cbiAgICBjb25zdCBmcm9tQ2FjaGUgPSB0aGlzLmF1dGhDYWNoZS5nZXQoc2Vzc2lvblRva2VuKTtcbiAgICBpZiAoZnJvbUNhY2hlKSB7XG4gICAgICByZXR1cm4gZnJvbUNhY2hlO1xuICAgIH1cbiAgICBjb25zdCBhdXRoUHJvbWlzZSA9IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgY2FjaGVDb250cm9sbGVyOiB0aGlzLmNhY2hlQ29udHJvbGxlcixcbiAgICAgIHNlc3Npb25Ub2tlbjogc2Vzc2lvblRva2VuLFxuICAgIH0pXG4gICAgICAudGhlbihhdXRoID0+IHtcbiAgICAgICAgcmV0dXJuIHsgYXV0aCwgdXNlcklkOiBhdXRoICYmIGF1dGgudXNlciAmJiBhdXRoLnVzZXIuaWQgfTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAvLyBUaGVyZSB3YXMgYW4gZXJyb3Igd2l0aCB0aGUgc2Vzc2lvbiB0b2tlblxuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOKSB7XG4gICAgICAgICAgcmVzdWx0LmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5hdXRoQ2FjaGUuc2V0KHNlc3Npb25Ub2tlbiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCksIHtcbiAgICAgICAgICAgIHR0bDogdGhpcy5jb25maWcuY2FjaGVUaW1lb3V0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXV0aENhY2hlLmRlbGV0ZShzZXNzaW9uVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB0aGlzLmF1dGhDYWNoZS5zZXQoc2Vzc2lvblRva2VuLCBhdXRoUHJvbWlzZSk7XG4gICAgcmV0dXJuIGF1dGhQcm9taXNlO1xuICB9XG5cbiAgYXN5bmMgX21hdGNoZXNDTFAoXG4gICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zPzogYW55LFxuICAgIG9iamVjdD86IGFueSxcbiAgICBjbGllbnQ/OiBhbnksXG4gICAgcmVxdWVzdElkPzogbnVtYmVyLFxuICAgIG9wPzogc3RyaW5nXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYWNsR3JvdXAgPSBbJyonXTtcbiAgICBsZXQgdXNlcklkO1xuICAgIGlmICh0eXBlb2Ygc3Vic2NyaXB0aW9uSW5mbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbik7XG4gICAgICB1c2VySWQgPSByZXN1bHQudXNlcklkO1xuICAgICAgaWYgKHVzZXJJZCkge1xuICAgICAgICBhY2xHcm91cC5wdXNoKHVzZXJJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IFNjaGVtYUNvbnRyb2xsZXIudmFsaWRhdGVQZXJtaXNzaW9uKFxuICAgICAgY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgICAgb2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgIGFjbEdyb3VwLFxuICAgICAgb3BcbiAgICApO1xuICAgIC8vIEVuZm9yY2UgcG9pbnRlciBwZXJtaXNzaW9ucyB0aGF0IHZhbGlkYXRlUGVybWlzc2lvbiBkZWZlcnMuXG4gICAgLy8gUmV0dXJucyBmYWxzZSB0byBzaWxlbnRseSBza2lwIHRoZSBldmVudCAobGlrZSBBQ0wpLCByYXRoZXIgdGhhblxuICAgIC8vIHRocm93aW5nIHdoaWNoIHdvdWxkIHB1c2ggZXJyb3JzIHRvIHRoZSBjbGllbnQgYW5kIGxvZyBub2lzZS5cbiAgICBpZiAoIWNsaWVudC5oYXNNYXN0ZXJLZXkgJiYgY2xhc3NMZXZlbFBlcm1pc3Npb25zKSB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uRmllbGQgPVxuICAgICAgICBbJ2dldCcsICdmaW5kJywgJ2NvdW50J10uaW5kZXhPZihvcCkgPiAtMSA/ICdyZWFkVXNlckZpZWxkcycgOiAnd3JpdGVVc2VyRmllbGRzJztcbiAgICAgIGNvbnN0IHBvaW50ZXJGaWVsZHMgPSBbXTtcbiAgICAgIGlmIChjbGFzc0xldmVsUGVybWlzc2lvbnNbb3BdPy5wb2ludGVyRmllbGRzKSB7XG4gICAgICAgIHBvaW50ZXJGaWVsZHMucHVzaCguLi5jbGFzc0xldmVsUGVybWlzc2lvbnNbb3BdLnBvaW50ZXJGaWVsZHMpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2xhc3NMZXZlbFBlcm1pc3Npb25zW3Blcm1pc3Npb25GaWVsZF0pKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2xhc3NMZXZlbFBlcm1pc3Npb25zW3Blcm1pc3Npb25GaWVsZF0pIHtcbiAgICAgICAgICBpZiAoIXBvaW50ZXJGaWVsZHMuaW5jbHVkZXMoZmllbGQpKSB7XG4gICAgICAgICAgICBwb2ludGVyRmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvaW50ZXJGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBJZiBwdWJsaWMgb3IgdXNlci1zcGVjaWZpYyBwZXJtaXNzaW9uIGFscmVhZHkgZ3JhbnRzIGFjY2Vzcywgc2tpcCBwb2ludGVyIGNoZWNrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhU2NoZW1hQ29udHJvbGxlci50ZXN0UGVybWlzc2lvbnMoY2xhc3NMZXZlbFBlcm1pc3Npb25zLCBhY2xHcm91cCwgb3ApXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICghdXNlcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBwb2ludGVyIGZpZWxkIHBvaW50cyB0byB0aGUgY3VycmVudCB1c2VyXG4gICAgICAgICAgY29uc3QgaGFzQWNjZXNzID0gcG9pbnRlckZpZWxkcy5zb21lKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgPyBvYmplY3QuZ2V0KGZpZWxkKSA6IG9iamVjdFtmaWVsZF07XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhhbmRsZSBQYXJzZS5PYmplY3QgcG9pbnRlciAoaGFzIC5pZClcbiAgICAgICAgICAgIGlmICh2YWx1ZS5pZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaWQgPT09IHVzZXJJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEhhbmRsZSByYXcgcG9pbnRlciBKU09OIChoYXMgLm9iamVjdElkKVxuICAgICAgICAgICAgaWYgKHZhbHVlLm9iamVjdElkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5vYmplY3RJZCA9PT0gdXNlcklkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIGFycmF5IG9mIHBvaW50ZXJzXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09PSB1c2VySWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm9iamVjdElkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5vYmplY3RJZCA9PT0gdXNlcklkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghaGFzQWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gYGFkZFByb3RlY3RlZEZpZWxkc2AgcmVhZHMgcm9sZS1zY29wZWQgYHByb3RlY3RlZEZpZWxkc2AgZ3JvdXBzIGZyb21cbiAgLy8gYEF1dGgudXNlclJvbGVzYCwgd2hpY2ggc3RheXMgZW1wdHkgdW5sZXNzIHRoZSByb2xlcyBhcmUgZXhwbGljaXRseSBsb2FkZWQuXG4gIC8vIFdpdGhvdXQgdGhpcywgZXZlcnkgYHJvbGU6YCBncm91cCBpcyBzaWxlbnRseSBza2lwcGVkIGFuZCBMaXZlUXVlcnkgd291bGRcbiAgLy8gZGlzY2xvc2UgZmllbGRzIHRoYXQgdGhlIFJFU1QgcGF0aCBzdHJpcHMgZm9yIHRoZSBzYW1lIGNhbGxlci4gVGhlIHJvbGVzIGFyZVxuICAvLyBvbmx5IGZldGNoZWQgd2hlbiB0aGUgY2xhc3MgYWN0dWFsbHkgZGVjbGFyZXMgYSBgcm9sZTpgIGdyb3VwLCBzbyBjbGFzc2VzXG4gIC8vIHdpdGhvdXQgb25lIGtlZXAgc3Vic2NyaWJpbmcgYW5kIHJlY2VpdmluZyBldmVudHMgd2l0aG91dCBhIHJvbGUgbG9va3VwLlxuICBhc3luYyBfbG9hZFJvbGVzRm9yUHJvdGVjdGVkRmllbGRzKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucz86IGFueSwgY2xpZW50QXV0aD86IGFueSkge1xuICAgIGlmICh0eXBlb2YgY2xpZW50QXV0aD8uZ2V0VXNlclJvbGVzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3RlY3RlZEZpZWxkcyA9IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucz8ucHJvdGVjdGVkRmllbGRzO1xuICAgIGlmICghcHJvdGVjdGVkRmllbGRzIHx8IEFycmF5LmlzQXJyYXkocHJvdGVjdGVkRmllbGRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5rZXlzKHByb3RlY3RlZEZpZWxkcykuc29tZShrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ3JvbGU6JykpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGNsaWVudEF1dGguZ2V0VXNlclJvbGVzKCk7XG4gIH1cblxuICBhc3luYyBfZmlsdGVyU2Vuc2l0aXZlRGF0YShcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM/OiBhbnksXG4gICAgcmVzPzogYW55LFxuICAgIGNsaWVudD86IGFueSxcbiAgICByZXF1ZXN0SWQ/OiBudW1iZXIsXG4gICAgb3A/OiBzdHJpbmcsXG4gICAgcXVlcnk/OiBhbnlcbiAgKSB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYWNsR3JvdXAgPSBbJyonXTtcbiAgICBsZXQgY2xpZW50QXV0aDtcbiAgICBpZiAodHlwZW9mIHN1YnNjcmlwdGlvbkluZm8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGNvbm5lY3QtZnJhbWUgdG9rZW4sIHRoZSBzYW1lIHdheSBgX21hdGNoZXNBQ0xgIGFuZFxuICAgICAgLy8gYGdldEF1dGhGcm9tQ2xpZW50YCBhbHJlYWR5IGRvLiBUaGUgc3Vic2NyaWJlIGZyYW1lJ3Mgc2Vzc2lvbiB0b2tlbiBpc1xuICAgICAgLy8gb3B0aW9uYWwsIHNvIHJlc29sdmluZyBvbmx5IGl0IHdvdWxkIHJlZGFjdCBhZ2FpbnN0IGFuIGFub255bW91cyBpZGVudGl0eVxuICAgICAgLy8gd2hpbGUgdGhlIEFDTCBjaGVjayBhdXRob3JpemVkIHRoZSByZWFkIGFnYWluc3QgdGhlIGNvbm5lY3RlZCB1c2VyLiBUaGF0XG4gICAgICAvLyBtaXNtYXRjaCBza2lwcyBldmVyeSBpZGVudGl0eS1kZXJpdmVkIGBwcm90ZWN0ZWRGaWVsZHNgIGdyb3VwXG4gICAgICAvLyAoYHJvbGU6YCwgYGF1dGhlbnRpY2F0ZWRgIGFuZCBgPG9iamVjdElkPmApLlxuICAgICAgY29uc3QgeyB1c2VySWQsIGF1dGggfSA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZvclNlc3Npb25Ub2tlbihcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW4gfHwgY2xpZW50LnNlc3Npb25Ub2tlblxuICAgICAgKTtcbiAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaCh1c2VySWQpO1xuICAgICAgfVxuICAgICAgY2xpZW50QXV0aCA9IGF1dGg7XG4gICAgfVxuICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZFJvbGVzRm9yUHJvdGVjdGVkRmllbGRzKGNsYXNzTGV2ZWxQZXJtaXNzaW9ucywgY2xpZW50QXV0aCk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcHJvdGVjdGVkRmllbGRzID0gY2xhc3NMZXZlbFBlcm1pc3Npb25zPy5wcm90ZWN0ZWRGaWVsZHMgfHwgW107XG4gICAgICBpZiAoY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocHJvdGVjdGVkRmllbGRzKSkge1xuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMgPSBnZXREYXRhYmFzZUNvbnRyb2xsZXIodGhpcy5jb25maWcpLmFkZFByb3RlY3RlZEZpZWxkcyhcbiAgICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgICAgcmVzLm9iamVjdC5jbGFzc05hbWUsXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgICAgY2xpZW50QXV0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIERhdGFiYXNlQ29udHJvbGxlci5maWx0ZXJTZW5zaXRpdmVEYXRhKFxuICAgICAgICBjbGllbnQuaGFzTWFzdGVyS2V5LFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgYWNsR3JvdXAsXG4gICAgICAgIGNsaWVudEF1dGgsXG4gICAgICAgIG9wLFxuICAgICAgICBjbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgICAgIHJlcy5vYmplY3QuY2xhc3NOYW1lLFxuICAgICAgICBwcm90ZWN0ZWRGaWVsZHMsXG4gICAgICAgIG9iaixcbiAgICAgICAgdGhpcy5jb25maWcucHJvdGVjdGVkRmllbGRzT3duZXJFeGVtcHRcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXMub2JqZWN0ID0gZmlsdGVyKHJlcy5vYmplY3QpO1xuICAgIHJlcy5vcmlnaW5hbCA9IGZpbHRlcihyZXMub3JpZ2luYWwpO1xuICB9XG5cbiAgX2dldENMUE9wZXJhdGlvbihxdWVyeTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5KS5sZW5ndGggPT0gMSAmJlxuICAgICAgdHlwZW9mIHF1ZXJ5Lm9iamVjdElkID09PSAnc3RyaW5nJ1xuICAgICAgPyAnZ2V0J1xuICAgICAgOiAnZmluZCc7XG4gIH1cblxuICBhc3luYyBfdmVyaWZ5QUNMKGFjbDogYW55LCB0b2tlbjogc3RyaW5nKSB7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYXV0aCwgdXNlcklkIH0gPSBhd2FpdCB0aGlzLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4odG9rZW4pO1xuXG4gICAgLy8gR2V0dGluZyB0aGUgc2Vzc2lvbiB0b2tlbiBmYWlsZWRcbiAgICAvLyBUaGlzIG1lYW5zIHRoYXQgbm8gYWRkaXRpb25hbCBhdXRoIGlzIGF2YWlsYWJsZVxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGp1c3QgYmFpbCBvdXQgYXMgbm8gYWRkaXRpb25hbCB2aXNpYmlsaXR5IGNhbiBiZSBpbmZlcnJlZC5cbiAgICBpZiAoIWF1dGggfHwgIXVzZXJJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQgPSBhY2wuZ2V0UmVhZEFjY2Vzcyh1c2VySWQpO1xuICAgIGlmIChpc1N1YnNjcmlwdGlvblNlc3Npb25Ub2tlbk1hdGNoZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBhbnkgcm9sZXMgdGhhdCBtYXRjaCB0aGUgQUNMXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFJlc29sdmUgZmFsc2UgcmlnaHQgYXdheSBpZiB0aGUgYWNsIGRvZXNuJ3QgaGF2ZSBhbnkgcm9sZXNcbiAgICAgICAgY29uc3QgYWNsX2hhc19yb2xlcyA9IE9iamVjdC5rZXlzKGFjbC5wZXJtaXNzaW9uc0J5SWQpLnNvbWUoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdyb2xlOicpKTtcbiAgICAgICAgaWYgKCFhY2xfaGFzX3JvbGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvbGVOYW1lcyA9IGF3YWl0IGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gICAgICAgIC8vIEZpbmFsbHksIHNlZSBpZiBhbnkgb2YgdGhlIHVzZXIncyByb2xlcyBhbGxvdyB0aGVtIHJlYWQgYWNjZXNzXG4gICAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlTmFtZXMpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgZ2V0UmVhZEFjY2VzcyBhcyBgcm9sZWAgaXMgaW4gdGhlIGZvcm0gYHJvbGU6cm9sZU5hbWVgXG4gICAgICAgICAgaWYgKGFjbC5nZXRSZWFkQWNjZXNzKHJvbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aEZyb21DbGllbnQoY2xpZW50OiBhbnksIHJlcXVlc3RJZDogbnVtYmVyLCBzZXNzaW9uVG9rZW4/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBnZXRTZXNzaW9uRnJvbUNsaWVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbiB8fCBjbGllbnQuc2Vzc2lvblRva2VuO1xuICAgIH07XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHNlc3Npb25Ub2tlbiA9IGdldFNlc3Npb25Gcm9tQ2xpZW50KCk7XG4gICAgfVxuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgYXV0aCB9ID0gYXdhaXQgdGhpcy5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHNlc3Npb25Ub2tlbik7XG4gICAgcmV0dXJuIGF1dGg7XG4gIH1cblxuICBfY2hlY2tXYXRjaEZpZWxkcyhjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIGNvbnN0IHdhdGNoID0gc3Vic2NyaXB0aW9uSW5mbz8ud2F0Y2g7XG4gICAgaWYgKCF3YXRjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdCA9IG1lc3NhZ2UuY3VycmVudFBhcnNlT2JqZWN0O1xuICAgIGNvbnN0IG9yaWdpbmFsID0gbWVzc2FnZS5vcmlnaW5hbFBhcnNlT2JqZWN0O1xuICAgIHJldHVybiB3YXRjaC5zb21lKGZpZWxkID0+ICFpc0RlZXBTdHJpY3RFcXVhbChvYmplY3QuZ2V0KGZpZWxkKSwgb3JpZ2luYWw/LmdldChmaWVsZCkpKTtcbiAgfVxuXG4gIGFzeW5jIF9tYXRjaGVzQUNMKGFjbDogYW55LCBjbGllbnQ6IGFueSwgcmVxdWVzdElkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBSZXR1cm4gdHJ1ZSBkaXJlY3RseSBpZiBBQ0wgaXNuJ3QgcHJlc2VudCwgQUNMIGlzIHB1YmxpYyByZWFkLCBvciBjbGllbnQgaGFzIG1hc3RlciBrZXlcbiAgICBpZiAoIWFjbCB8fCBhY2wuZ2V0UHVibGljUmVhZEFjY2VzcygpIHx8IGNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDaGVjayBzdWJzY3JpcHRpb24gc2Vzc2lvblRva2VuIG1hdGNoZXMgQUNMIGZpcnN0XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvblRva2VuID0gc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW47XG4gICAgY29uc3QgY2xpZW50U2Vzc2lvblRva2VuID0gY2xpZW50LnNlc3Npb25Ub2tlbjtcblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBzdWJzY3JpcHRpb25Ub2tlbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLl92ZXJpZnlBQ0woYWNsLCBjbGllbnRTZXNzaW9uVG9rZW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQ29ubmVjdChwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5fdmFsaWRhdGVLZXlzKHJlcXVlc3QsIHRoaXMua2V5UGFpcnMpKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCA0LCAnS2V5IGluIHJlcXVlc3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0tleSBpbiByZXF1ZXN0IGlzIG5vdCB2YWxpZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNNYXN0ZXJLZXkgPSB0aGlzLl9oYXNNYXN0ZXJLZXkocmVxdWVzdCwgdGhpcy5rZXlQYWlycyk7XG4gICAgY29uc3QgY2xpZW50SWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudChcbiAgICAgIGNsaWVudElkLFxuICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICBoYXNNYXN0ZXJLZXksXG4gICAgICByZXF1ZXN0LnNlc3Npb25Ub2tlbixcbiAgICAgIHJlcXVlc3QuaW5zdGFsbGF0aW9uSWRcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXEgPSB7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgZXZlbnQ6ICdjb25uZWN0JyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICBzZXNzaW9uVG9rZW46IHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiByZXF1ZXN0Lmluc3RhbGxhdGlvbklkLFxuICAgICAgICB1c2VyOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoJ0BDb25uZWN0JywgJ2JlZm9yZUNvbm5lY3QnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcS5zZXNzaW9uVG9rZW4pO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXEudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVDb25uZWN0LkBDb25uZWN0YCwgcmVxLCBhdXRoKTtcbiAgICAgIH1cbiAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkID0gY2xpZW50SWQ7XG4gICAgICB0aGlzLmNsaWVudHMuc2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCBjbGllbnQpO1xuICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZSBuZXcgY2xpZW50OiAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfWApO1xuICAgICAgY2xpZW50LnB1c2hDb25uZWN0KCk7XG4gICAgICBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKHJlcSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSByZXNvbHZlRXJyb3IoZSk7XG4gICAgICBDbGllbnQucHVzaEVycm9yKHBhcnNlV2Vic29ja2V0LCBlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCBmYWxzZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVDb25uZWN0IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhc01hc3RlcktleShyZXF1ZXN0OiBhbnksIHZhbGlkS2V5UGFpcnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsaWRLZXlQYWlycyB8fCB2YWxpZEtleVBhaXJzLnNpemUgPT0gMCB8fCAhdmFsaWRLZXlQYWlycy5oYXMoJ21hc3RlcktleScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghcmVxdWVzdCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVlc3QsICdtYXN0ZXJLZXknKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdC5tYXN0ZXJLZXkgPT09IHZhbGlkS2V5UGFpcnMuZ2V0KCdtYXN0ZXJLZXknKTtcbiAgfVxuXG4gIF92YWxpZGF0ZUtleXMocmVxdWVzdDogYW55LCB2YWxpZEtleVBhaXJzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbGlkS2V5UGFpcnMgfHwgdmFsaWRLZXlQYWlycy5zaXplID09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgc2VjcmV0XSBvZiB2YWxpZEtleVBhaXJzKSB7XG4gICAgICBpZiAoIXJlcXVlc3Rba2V5XSB8fCByZXF1ZXN0W2tleV0gIT09IHNlY3JldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSBzdWJzY3JpYmluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudHMuZ2V0KHBhcnNlV2Vic29ja2V0LmNsaWVudElkKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSByZXF1ZXN0LnF1ZXJ5LmNsYXNzTmFtZTtcbiAgICBsZXQgYXV0aENhbGxlZCA9IGZhbHNlO1xuICAgIGxldCBjbGllbnRBdXRoO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmlnZ2VyID0gZ2V0VHJpZ2dlcihjbGFzc05hbWUsICdiZWZvcmVTdWJzY3JpYmUnLCBQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBhd2FpdCB0aGlzLmdldEF1dGhGcm9tQ2xpZW50KGNsaWVudCwgcmVxdWVzdC5yZXF1ZXN0SWQsIHJlcXVlc3Quc2Vzc2lvblRva2VuKTtcbiAgICAgICAgYXV0aENhbGxlZCA9IHRydWU7XG4gICAgICAgIGNsaWVudEF1dGggPSBhdXRoO1xuICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICByZXF1ZXN0LnVzZXIgPSBhdXRoLnVzZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZVF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KGNsYXNzTmFtZSk7XG4gICAgICAgIHBhcnNlUXVlcnkud2l0aEpTT04ocmVxdWVzdC5xdWVyeSk7XG4gICAgICAgIHJlcXVlc3QucXVlcnkgPSBwYXJzZVF1ZXJ5O1xuICAgICAgICBhd2FpdCBydW5UcmlnZ2VyKHRyaWdnZXIsIGBiZWZvcmVTdWJzY3JpYmUuJHtjbGFzc05hbWV9YCwgcmVxdWVzdCwgYXV0aCk7XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSByZXF1ZXN0LnF1ZXJ5LnRvSlNPTigpO1xuICAgICAgICByZXF1ZXN0LnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgaWYgKCFhdXRoQ2FsbGVkKSB7XG4gICAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoXG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICAgICAgICBpZiAoYXV0aCAmJiBhdXRoLnVzZXIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QudXNlciA9IGF1dGgudXNlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudXNlcikge1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkud2hlcmUudXNlciA9IHJlcXVlc3QudXNlci50b1BvaW50ZXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICghcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICAgICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sXG4gICAgICAgICAgICAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0SWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgcXVlcnkgY29uZGl0aW9uIGRlcHRoXG4gICAgICBjb25zdCBhcHBDb25maWcgPSBDb25maWcuZ2V0KHRoaXMuY29uZmlnLmFwcElkKTtcbiAgICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBjb25zdCByYyA9IGFwcENvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eTtcbiAgICAgICAgaWYgKHJjICYmIHJjLnF1ZXJ5RGVwdGggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgbWF4RGVwdGggPSByYy5xdWVyeURlcHRoO1xuICAgICAgICAgIGNvbnN0IGNoZWNrRGVwdGggPSAobm9kZTogYW55LCBkZXB0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwdGggPiBtYXhEZXB0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSxcbiAgICAgICAgICAgICAgICBgUXVlcnkgY29uZGl0aW9uIG5lc3RpbmcgZGVwdGggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgZGVwdGggb2YgJHttYXhEZXB0aH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCB0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUpIHtcbiAgICAgICAgICAgICAgICBjaGVja0RlcHRoKGl0ZW0sIGRlcHRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZXNjZW5kIGludG8gZXZlcnkgdmFsdWUgc28gdGhhdCBsb2dpY2FsIG9wZXJhdG9ycyAoJG9yLyRhbmQvJG5vcilcbiAgICAgICAgICAgIC8vIG5lc3RlZCB1bmRlciBmaWVsZC1sZXZlbCBvcGVyYXRvcnMgKGUuZy4gJGVsZW1NYXRjaCwgJG5vdCkgb3IgcGxhaW5cbiAgICAgICAgICAgIC8vIGZpZWxkIG5hbWVzIGFyZSBzdGlsbCBjb3VudGVkLiBPbmx5IGxvZ2ljYWwgb3BlcmF0b3JzIGluY3JlYXNlIHRoZVxuICAgICAgICAgICAgLy8gZGVwdGgsIHdoaWNoIHByZXNlcnZlcyB0aGUgZG9jdW1lbnRlZCBtZWFuaW5nIG9mIGBxdWVyeURlcHRoYC5cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTG9naWNhbCA9IGtleSA9PT0gJyRvcicgfHwga2V5ID09PSAnJGFuZCcgfHwga2V5ID09PSAnJG5vcic7XG4gICAgICAgICAgICAgIGlmIChpc0xvZ2ljYWwgJiYgIUFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgJHtrZXl9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGVja0RlcHRoKG5vZGVba2V5XSwgaXNMb2dpY2FsID8gZGVwdGggKyAxIDogZGVwdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hlY2tEZXB0aChyZXF1ZXN0LnF1ZXJ5LndoZXJlLCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBhbGxvd1JlZ2V4XG4gICAgICBpZiAoIWNsaWVudC5oYXNNYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgcmMgPSBhcHBDb25maWcucmVxdWVzdENvbXBsZXhpdHk7XG4gICAgICAgIGlmIChyYyAmJiByYy5hbGxvd1JlZ2V4ID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrUmVnZXggPSAod2hlcmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSB3aGVyZVtrZXldO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0cmFpbnQgPT09ICdvYmplY3QnICYmIGNvbnN0cmFpbnQgIT09IG51bGwgJiYgY29uc3RyYWludC4kcmVnZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnJHJlZ2V4IG9wZXJhdG9yIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVbb3BdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViUXVlcnkgb2Ygd2hlcmVbb3BdKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja1JlZ2V4KHN1YlF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNoZWNrUmVnZXgocmVxdWVzdC5xdWVyeS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgQ0xQIGZvciBzdWJzY3JpYmUgb3BlcmF0aW9uXG4gICAgICBjb25zdCBzY2hlbWFDb250cm9sbGVyID0gYXdhaXQgYXBwQ29uZmlnLmRhdGFiYXNlLmxvYWRTY2hlbWEoKTtcbiAgICAgIGNvbnN0IGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IHNjaGVtYUNvbnRyb2xsZXIuZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zKGNsYXNzTmFtZSk7XG4gICAgICBjb25zdCBvcCA9IHRoaXMuX2dldENMUE9wZXJhdGlvbihyZXF1ZXN0LnF1ZXJ5KTtcbiAgICAgIGNvbnN0IGFjbEdyb3VwID0gWycqJ107XG4gICAgICBpZiAoIWF1dGhDYWxsZWQpIHtcbiAgICAgICAgY29uc3QgYXV0aCA9IGF3YWl0IHRoaXMuZ2V0QXV0aEZyb21DbGllbnQoXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvblRva2VuXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhDYWxsZWQgPSB0cnVlO1xuICAgICAgICBjbGllbnRBdXRoID0gYXV0aDtcbiAgICAgICAgaWYgKGF1dGggJiYgYXV0aC51c2VyKSB7XG4gICAgICAgICAgcmVxdWVzdC51c2VyID0gYXV0aC51c2VyO1xuICAgICAgICAgIGFjbEdyb3VwLnB1c2goYXV0aC51c2VyLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LnVzZXIpIHtcbiAgICAgICAgYWNsR3JvdXAucHVzaChyZXF1ZXN0LnVzZXIuaWQpO1xuICAgICAgfVxuICAgICAgYXdhaXQgU2NoZW1hQ29udHJvbGxlci52YWxpZGF0ZVBlcm1pc3Npb24oXG4gICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBhY2xHcm91cCxcbiAgICAgICAgb3BcbiAgICAgICk7XG5cbiAgICAgIC8vIENoZWNrIHByb3RlY3RlZCBmaWVsZHMgaW4gV0hFUkUgY2xhdXNlIGFuZCBXQVRDSCBwYXJhbWV0ZXJcbiAgICAgIGlmICghY2xpZW50Lmhhc01hc3RlcktleSkge1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkUm9sZXNGb3JQcm90ZWN0ZWRGaWVsZHMoY2xhc3NMZXZlbFBlcm1pc3Npb25zLCBjbGllbnRBdXRoKTtcbiAgICAgICAgLy8gYGNsaWVudEF1dGhgIGlzIHVuZGVmaW5lZCBvbmx5IHdoZW4gbm8gc2Vzc2lvbiB0b2tlbiB3YXMgc3VwcGxpZWQgb25cbiAgICAgICAgLy8gZWl0aGVyIGZyYW1lLCBpbiB3aGljaCBjYXNlIGEgYGJlZm9yZVN1YnNjcmliZWAgdHJpZ2dlciBpcyB0aGUgb25seSB3YXlcbiAgICAgICAgLy8gYHJlcXVlc3QudXNlcmAgY2FuIGJlIHNldC4gVGhlcmUgaXMgbm8gc2Vzc2lvbiB0byByZXNvbHZlIHJvbGVzIGZyb20gZm9yXG4gICAgICAgIC8vIHN1Y2ggYSB0cmlnZ2VyLWFzc2lnbmVkIHVzZXIsIHNvIGByb2xlOmAgZ3JvdXBzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIGl0LlxuICAgICAgICBjb25zdCBhdXRoID0gcmVxdWVzdC51c2VyID8gY2xpZW50QXV0aCB8fCB7IHVzZXI6IHJlcXVlc3QudXNlciwgdXNlclJvbGVzOiBbXSB9IDoge307XG4gICAgICAgIGNvbnN0IHByb3RlY3RlZEZpZWxkcyA9XG4gICAgICAgICAgYXBwQ29uZmlnLmRhdGFiYXNlLmFkZFByb3RlY3RlZEZpZWxkcyhcbiAgICAgICAgICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHJlcXVlc3QucXVlcnkud2hlcmUsXG4gICAgICAgICAgICBhY2xHcm91cCxcbiAgICAgICAgICAgIGF1dGhcbiAgICAgICAgICApIHx8IFtdO1xuICAgICAgICBpZiAocHJvdGVjdGVkRmllbGRzLmxlbmd0aCA+IDAgJiYgcmVxdWVzdC5xdWVyeS53aGVyZSkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrV2hlcmUgPSAod2hlcmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB3aGVyZUtleSBvZiBPYmplY3Qua2V5cyh3aGVyZSkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgcm9vdEZpZWxkID0gd2hlcmVLZXkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZEZpZWxkcy5pbmNsdWRlcyh3aGVyZUtleSkgfHwgcHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHJvb3RGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgICAgICAgJ1Blcm1pc3Npb24gZGVuaWVkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgWyckb3InLCAnJGFuZCcsICckbm9yJ10pIHtcbiAgICAgICAgICAgICAgaWYgKHdoZXJlW29wXSAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KHdoZXJlW29wXSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgYCR7b3B9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGVyZVtvcF0pKSB7XG4gICAgICAgICAgICAgICAgd2hlcmVbb3BdLmZvckVhY2goKHN1YlF1ZXJ5OiBhbnkpID0+IGNoZWNrV2hlcmUoc3ViUXVlcnkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgY2hlY2tXaGVyZShyZXF1ZXN0LnF1ZXJ5LndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvdGVjdGVkRmllbGRzLmxlbmd0aCA+IDAgJiYgQXJyYXkuaXNBcnJheShyZXF1ZXN0LnF1ZXJ5LndhdGNoKSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgd2F0Y2hGaWVsZCBvZiByZXF1ZXN0LnF1ZXJ5LndhdGNoKSB7XG4gICAgICAgICAgICBjb25zdCByb290RmllbGQgPSB3YXRjaEZpZWxkLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBpZiAocHJvdGVjdGVkRmllbGRzLmluY2x1ZGVzKHdhdGNoRmllbGQpIHx8IHByb3RlY3RlZEZpZWxkcy5pbmNsdWRlcyhyb290RmllbGQpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgICAgICdQZXJtaXNzaW9uIGRlbmllZCdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgcmVnZXggcGF0dGVybnMgaW4gdGhlIHN1YnNjcmlwdGlvbiBxdWVyeVxuICAgICAgdGhpcy5fdmFsaWRhdGVRdWVyeUNvbnN0cmFpbnRzKHJlcXVlc3QucXVlcnkud2hlcmUpO1xuXG4gICAgICAvLyBJZiB0aGlzIGNsaWVudCBhbHJlYWR5IGhhcyBhIHN1YnNjcmlwdGlvbiByZWdpc3RlcmVkIHVuZGVyIHRoaXNcbiAgICAgIC8vIHJlcXVlc3RJZCwgcmVwbGFjZSBpdCBieSB0ZWFyaW5nIGRvd24gdGhlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBiZWZvcmVcbiAgICAgIC8vIGNyZWF0aW5nIHRoZSBuZXcgb25lLiBUaGUgY2xpZW50LXNpZGUgbWV0YWRhdGEgbWFwIGlzIGtleWVkIG9ubHkgYnlcbiAgICAgIC8vIHJlcXVlc3RJZCwgc28gYSBkdXBsaWNhdGUgYHN1YnNjcmliZWAgZnJhbWUgd291bGQgb3RoZXJ3aXNlIG92ZXJ3cml0ZSBpdFxuICAgICAgLy8gd2hpbGUgdGhlIHByZXZpb3VzIFN1YnNjcmlwdGlvbiBzdGF5cyBpbiB0aGUgc2VydmVyLXdpZGUgbWFwLCBsZWFraW5nIGl0XG4gICAgICAvLyBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBwcm9jZXNzIChkaXNjb25uZWN0IGNsZWFudXAgb25seSB3YWxrcyB0aGVcbiAgICAgIC8vIHN1cnZpdmluZyBjbGllbnQgbWV0YWRhdGEgYW5kIG5ldmVyIHJlYWNoZXMgdGhlIG9ycGhhbmVkIHN1YnNjcmlwdGlvbikuXG4gICAgICBjb25zdCBwcmV2aW91c1N1YnNjcmlwdGlvbkluZm8gPSBjbGllbnQuZ2V0U3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICBpZiAocHJldmlvdXNTdWJzY3JpcHRpb25JbmZvKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3Vic2NyaXB0aW9uID0gcHJldmlvdXNTdWJzY3JpcHRpb25JbmZvLnN1YnNjcmlwdGlvbjtcbiAgICAgICAgcHJldmlvdXNTdWJzY3JpcHRpb24uZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uKHBhcnNlV2Vic29ja2V0LmNsaWVudElkLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChwcmV2aW91c1N1YnNjcmlwdGlvbi5jbGFzc05hbWUpO1xuICAgICAgICBpZiAocHJldmlvdXNDbGFzc1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICBpZiAoIXByZXZpb3VzU3Vic2NyaXB0aW9uLmhhc1N1YnNjcmliaW5nQ2xpZW50KCkpIHtcbiAgICAgICAgICAgIHByZXZpb3VzQ2xhc3NTdWJzY3JpcHRpb25zLmRlbGV0ZShwcmV2aW91c1N1YnNjcmlwdGlvbi5oYXNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXZpb3VzQ2xhc3NTdWJzY3JpcHRpb25zLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUocHJldmlvdXNTdWJzY3JpcHRpb24uY2xhc3NOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHN1YnNjcmlwdGlvbiBmcm9tIHN1YnNjcmlwdGlvbnMsIGNyZWF0ZSBvbmUgaWYgbmVjZXNzYXJ5XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25IYXNoID0gcXVlcnlIYXNoKHJlcXVlc3QucXVlcnkpO1xuICAgICAgLy8gQWRkIGNsYXNzTmFtZSB0byBzdWJzY3JpcHRpb25zIGlmIG5lY2Vzc2FyeVxuXG4gICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoY2xhc3NOYW1lKSkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KGNsYXNzTmFtZSwgbmV3IE1hcCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsYXNzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoY2xhc3NOYW1lKTtcbiAgICAgIGxldCBzdWJzY3JpcHRpb247XG4gICAgICBpZiAoY2xhc3NTdWJzY3JpcHRpb25zLmhhcyhzdWJzY3JpcHRpb25IYXNoKSkge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBjbGFzc1N1YnNjcmlwdGlvbnMuZ2V0KHN1YnNjcmlwdGlvbkhhc2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbihjbGFzc05hbWUsIHJlcXVlc3QucXVlcnkud2hlcmUsIHN1YnNjcmlwdGlvbkhhc2gpO1xuICAgICAgICBjbGFzc1N1YnNjcmlwdGlvbnMuc2V0KHN1YnNjcmlwdGlvbkhhc2gsIHN1YnNjcmlwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBzdWJzY3JpcHRpb25JbmZvIHRvIGNsaWVudFxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbzogYW55ID0ge1xuICAgICAgICBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbixcbiAgICAgIH07XG4gICAgICAvLyBBZGQgc2VsZWN0ZWQgZmllbGRzLCBzZXNzaW9uVG9rZW4gYW5kIGluc3RhbGxhdGlvbklkIGZvciB0aGlzIHN1YnNjcmlwdGlvbiBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChyZXF1ZXN0LnF1ZXJ5LmtleXMpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5rZXlzID0gQXJyYXkuaXNBcnJheShyZXF1ZXN0LnF1ZXJ5LmtleXMpXG4gICAgICAgICAgPyByZXF1ZXN0LnF1ZXJ5LmtleXNcbiAgICAgICAgICA6IHJlcXVlc3QucXVlcnkua2V5cy5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcXVlc3QucXVlcnkud2F0Y2gpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby53YXRjaCA9IHJlcXVlc3QucXVlcnkud2F0Y2g7XG4gICAgICB9XG4gICAgICBpZiAocmVxdWVzdC5zZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uSW5mby5zZXNzaW9uVG9rZW4gPSByZXF1ZXN0LnNlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGNsaWVudC5hZGRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3QucmVxdWVzdElkLCBzdWJzY3JpcHRpb25JbmZvKTtcblxuICAgICAgLy8gQWRkIGNsaWVudElkIHRvIHN1YnNjcmlwdGlvblxuICAgICAgc3Vic2NyaXB0aW9uLmFkZENsaWVudFN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldC5jbGllbnRJZCwgcmVxdWVzdC5yZXF1ZXN0SWQpO1xuXG4gICAgICBjbGllbnQucHVzaFN1YnNjcmliZShyZXF1ZXN0LnJlcXVlc3RJZCk7XG5cbiAgICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgICBgQ3JlYXRlIGNsaWVudCAke3BhcnNlV2Vic29ja2V0LmNsaWVudElkfSBuZXcgc3Vic2NyaXB0aW9uOiAke3JlcXVlc3QucmVxdWVzdElkfWBcbiAgICAgICk7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnQ3VycmVudCBjbGllbnQgbnVtYmVyOiAlZCcsIHRoaXMuY2xpZW50cy5zaXplKTtcbiAgICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMoe1xuICAgICAgICBjbGllbnQsXG4gICAgICAgIGV2ZW50OiAnc3Vic2NyaWJlJyxcbiAgICAgICAgY2xpZW50czogdGhpcy5jbGllbnRzLnNpemUsXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgICBzZXNzaW9uVG9rZW46IHJlcXVlc3Quc2Vzc2lvblRva2VuLFxuICAgICAgICB1c2VNYXN0ZXJLZXk6IGNsaWVudC5oYXNNYXN0ZXJLZXksXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHJlc29sdmVFcnJvcihlKTtcbiAgICAgIENsaWVudC5wdXNoRXJyb3IocGFyc2VXZWJzb2NrZXQsIGVycm9yLmNvZGUsIGVycm9yLm1lc3NhZ2UsIGZhbHNlLCByZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBGYWlsZWQgcnVubmluZyBiZWZvcmVTdWJzY3JpYmUgb24gJHtjbGFzc05hbWV9IGZvciBzZXNzaW9uICR7cmVxdWVzdC5zZXNzaW9uVG9rZW59IHdpdGg6XFxuIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvcilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZVVwZGF0ZVN1YnNjcmlwdGlvbihwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnkpOiBhbnkge1xuICAgIHRoaXMuX2hhbmRsZVVuc3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0LCBmYWxzZSk7XG4gICAgdGhpcy5faGFuZGxlU3Vic2NyaWJlKHBhcnNlV2Vic29ja2V0LCByZXF1ZXN0KTtcbiAgfVxuXG4gIF9oYW5kbGVVbnN1YnNjcmliZShwYXJzZVdlYnNvY2tldDogYW55LCByZXF1ZXN0OiBhbnksIG5vdGlmeUNsaWVudDogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xuICAgIC8vIElmIHdlIGNhbiBub3QgZmluZCB0aGlzIGNsaWVudCwgcmV0dXJuIGVycm9yIHRvIGNsaWVudFxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcnNlV2Vic29ja2V0LCAnY2xpZW50SWQnKSkge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW4gbm90IGZpbmQgdGhpcyBjbGllbnQsIG1ha2Ugc3VyZSB5b3UgY29ubmVjdCB0byBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcnXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAnQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50LCBtYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gc2VydmVyIGJlZm9yZSB1bnN1YnNjcmliaW5nJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVxdWVzdC5yZXF1ZXN0SWQ7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnRzLmdldChwYXJzZVdlYnNvY2tldC5jbGllbnRJZCk7XG4gICAgaWYgKHR5cGVvZiBjbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBDbGllbnQucHVzaEVycm9yKFxuICAgICAgICBwYXJzZVdlYnNvY2tldCxcbiAgICAgICAgMixcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIGNsaWVudCB3aXRoIGNsaWVudElkICcgK1xuICAgICAgICAgIHBhcnNlV2Vic29ja2V0LmNsaWVudElkICtcbiAgICAgICAgICAnLiBNYWtlIHN1cmUgeW91IGNvbm5lY3QgdG8gbGl2ZSBxdWVyeSBzZXJ2ZXIgYmVmb3JlIHVuc3Vic2NyaWJpbmcuJ1xuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIHRoaXMgY2xpZW50ICcgKyBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uSW5mbyA9IGNsaWVudC5nZXRTdWJzY3JpcHRpb25JbmZvKHJlcXVlc3RJZCk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpcHRpb25JbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgQ2xpZW50LnB1c2hFcnJvcihcbiAgICAgICAgcGFyc2VXZWJzb2NrZXQsXG4gICAgICAgIDIsXG4gICAgICAgICdDYW5ub3QgZmluZCBzdWJzY3JpcHRpb24gd2l0aCBjbGllbnRJZCAnICtcbiAgICAgICAgICBwYXJzZVdlYnNvY2tldC5jbGllbnRJZCArXG4gICAgICAgICAgJyBzdWJzY3JpcHRpb25JZCAnICtcbiAgICAgICAgICByZXF1ZXN0SWQgK1xuICAgICAgICAgICcuIE1ha2Ugc3VyZSB5b3Ugc3Vic2NyaWJlIHRvIGxpdmUgcXVlcnkgc2VydmVyIGJlZm9yZSB1bnN1YnNjcmliaW5nLidcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICdDYW4gbm90IGZpbmQgc3Vic2NyaXB0aW9uIHdpdGggY2xpZW50SWQgJyArXG4gICAgICAgICAgcGFyc2VXZWJzb2NrZXQuY2xpZW50SWQgK1xuICAgICAgICAgICcgc3Vic2NyaXB0aW9uSWQgJyArXG4gICAgICAgICAgcmVxdWVzdElkXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBzdWJzY3JpcHRpb24gZnJvbSBjbGllbnRcbiAgICBjbGllbnQuZGVsZXRlU3Vic2NyaXB0aW9uSW5mbyhyZXF1ZXN0SWQpO1xuICAgIC8vIFJlbW92ZSBjbGllbnQgZnJvbSBzdWJzY3JpcHRpb25cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25JbmZvLnN1YnNjcmlwdGlvbjtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBzdWJzY3JpcHRpb24uY2xhc3NOYW1lO1xuICAgIHN1YnNjcmlwdGlvbi5kZWxldGVDbGllbnRTdWJzY3JpcHRpb24ocGFyc2VXZWJzb2NrZXQuY2xpZW50SWQsIHJlcXVlc3RJZCk7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gY2xpZW50IHdoaWNoIGlzIHN1YnNjcmliaW5nIHRoaXMgc3Vic2NyaXB0aW9uLCByZW1vdmUgaXQgZnJvbSBzdWJzY3JpcHRpb25zXG4gICAgY29uc3QgY2xhc3NTdWJzY3JpcHRpb25zID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChjbGFzc05hbWUpO1xuICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMpIHtcbiAgICAgIGlmICghc3Vic2NyaXB0aW9uLmhhc1N1YnNjcmliaW5nQ2xpZW50KCkpIHtcbiAgICAgICAgY2xhc3NTdWJzY3JpcHRpb25zLmRlbGV0ZShzdWJzY3JpcHRpb24uaGFzaCk7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdWJzY3JpcHRpb25zIHVuZGVyIHRoaXMgY2xhc3MsIHJlbW92ZSBpdCBmcm9tIHN1YnNjcmlwdGlvbnNcbiAgICAgIGlmIChjbGFzc1N1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZGVsZXRlKGNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMoe1xuICAgICAgY2xpZW50LFxuICAgICAgZXZlbnQ6ICd1bnN1YnNjcmliZScsXG4gICAgICBjbGllbnRzOiB0aGlzLmNsaWVudHMuc2l6ZSxcbiAgICAgIHN1YnNjcmlwdGlvbnM6IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplLFxuICAgICAgc2Vzc2lvblRva2VuOiBzdWJzY3JpcHRpb25JbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgIHVzZU1hc3RlcktleTogY2xpZW50Lmhhc01hc3RlcktleSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBjbGllbnQuaW5zdGFsbGF0aW9uSWQsXG4gICAgfSk7XG5cbiAgICBpZiAoIW5vdGlmeUNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsaWVudC5wdXNoVW5zdWJzY3JpYmUocmVxdWVzdC5yZXF1ZXN0SWQpO1xuXG4gICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICBgRGVsZXRlIGNsaWVudDogJHtwYXJzZVdlYnNvY2tldC5jbGllbnRJZH0gfCBzdWJzY3JpcHRpb246ICR7cmVxdWVzdC5yZXF1ZXN0SWR9YFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VMaXZlUXVlcnlTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsYUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUkscUJBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLGNBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGlCQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxPQUFBLEdBQUFYLHNCQUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.10.1-alpha.15",
3
+ "version": "9.10.1-alpha.17",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "@graphql-tools/schema": "10.0.31",
28
28
  "@graphql-tools/utils": "11.0.0",
29
29
  "@parse/fs-files-adapter": "3.0.0",
30
- "@parse/push-adapter": "8.4.0",
30
+ "@parse/push-adapter": "8.5.3",
31
31
  "bcryptjs": "3.0.3",
32
32
  "commander": "14.0.3",
33
33
  "cors": "2.8.6",
@@ -43,7 +43,7 @@
43
43
  "jwks-rsa": "3.2.0",
44
44
  "ldapjs": "3.0.7",
45
45
  "lodash": "4.18.1",
46
- "lru-cache": "11.2.7",
46
+ "lru-cache": "11.5.2",
47
47
  "mime": "4.1.0",
48
48
  "mongodb": "7.1.0",
49
49
  "mustache": "4.2.0",