@discordeno/rest 21.0.0-next.cd396cf → 21.0.0-next.d8cfccb

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.
@@ -408,11 +408,11 @@ export function createRestManager(options) {
408
408
  }
409
409
  const result = await fetch(`${rest.baseUrl}/v${rest.version}${route}`, rest.createRequestBody(method, options));
410
410
  if (!result.ok) {
411
- const errText = await result.text().catch(()=>null);
411
+ const body = (result.headers.get('Content-Type') === 'application/json' ? await result.json() : await result.text()).catch(()=>null);
412
412
  error.cause = {
413
413
  ok: false,
414
414
  status: result.status,
415
- body: errText
415
+ body
416
416
  };
417
417
  throw error;
418
418
  }
@@ -1494,4 +1494,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1494
1494
  return HttpResponseCode;
1495
1495
  }(HttpResponseCode || {});
1496
1496
 
1497
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRJbnZpdGUsXG4gIHR5cGUgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICB0eXBlIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZSxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgdHlwZSBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgdHlwZSBEaXNjb3JkU3RpY2tlcixcbiAgdHlwZSBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIHR5cGUgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25zdW1lIHRoZSByZXNwb25zZSBib2R5IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGVyclRleHQgPSBhd2FpdCByZXN1bHQudGV4dCgpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHk6IGVyclRleHQsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb25bXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbj4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kU291bmRib2FyZFNvdW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuc2VuZFNvdW5kKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kW10+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQubGlzdERlZmF1bHQoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdIH0+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNhbGN1bGF0ZUJpdHMiLCJjYW1lbFRvU25ha2VDYXNlIiwiY2FtZWxpemUiLCJkZWxheSIsImdldEJvdElkRnJvbVRva2VuIiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIkRJU0NPUkRfQVBJX1VSTCIsIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJhcnJheUJ1ZmZlciIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwibWVzc2FnZSIsInJlc3VsdCIsImVyclRleHQiLCJjYXVzZSIsImpzb24iLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGQiLCJndWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJtZmEiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwid2VsY29tZSIsImVkaXRXaWRnZXRTZXR0aW5ncyIsIndpZGdldCIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwiZm9sbG93Iiwid2ViaG9va0NoYW5uZWxJZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudElkIiwiZ2V0R3JvdXBEbUNoYW5uZWwiLCJnZXRFbW9qaSIsImVtb2ppSWQiLCJnZXRBcHBsaWNhdGlvbkVtb2ppIiwiZ2V0RW1vamlzIiwiZ2V0QXBwbGljYXRpb25FbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrIiwic3RpY2tlclBhY2tJZCIsInN0aWNrZXJQYWNrIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRSb2xlIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJwYXJhbXMiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUFDcEMsU0FvREVDLHdCQUF3QixRQUduQixvQkFBbUI7QUFDMUIsU0FDRUMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBQ2JDLGdCQUFnQixFQUNoQkMsUUFBUSxFQUNSQyxLQUFLLEVBQ0xDLGlCQUFpQixFQUNqQkMsTUFBTSxFQUNOQyxxQkFBcUIsRUFD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
1497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRJbnZpdGUsXG4gIHR5cGUgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICB0eXBlIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZSxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgdHlwZSBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgdHlwZSBEaXNjb3JkU3RpY2tlcixcbiAgdHlwZSBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIHR5cGUgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25zdW1lIHRoZSByZXNwb25zZSBib2R5IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IGF3YWl0IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb25bXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbj4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kU291bmRib2FyZFNvdW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuc2VuZFNvdW5kKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kW10+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQubGlzdERlZmF1bHQoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdIH0+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNhbGN1bGF0ZUJpdHMiLCJjYW1lbFRvU25ha2VDYXNlIiwiY2FtZWxpemUiLCJkZWxheSIsImdldEJvdElkRnJvbVRva2VuIiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIkRJU0NPUkRfQVBJX1VSTCIsIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJhcnJheUJ1ZmZlciIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwibWVzc2FnZSIsInJlc3VsdCIsImpzb24iLCJjYXVzZSIsIlByb21pc2UiLCJkYXRhIiwicGFyc2UiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInRlbXBsYXRlcyIsImNvZGUiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJ0eXBlIiwiVXBkYXRlTWVzc2FnZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rQ2hhbm5lbElkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50SWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2siLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsY0FBYTtBQUNwQyxTQW9ERUMsd0JBQXdCLFFBR25CLG9CQUFtQjtBQUMxQixTQUNFQyxrQkFBa0IsRUFDbEJDLGFBQWEsRUFDYkMsZ0JBQWdCLEVB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