@kontur.candy/tools 2.202.0 → 2.204.0

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.
Files changed (32) hide show
  1. package/distr/Common/CandyApiClient/CandyApiClient.js +9 -1
  2. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -1
  3. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +7 -1
  4. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -1
  5. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  6. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -1
  7. package/distr/Common/FSPrinterClient/FSPrinterClient.js +22 -6
  8. package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -1
  9. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +1 -1
  10. package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -1
  11. package/distr/Common/HttpClient/HttpClient.js +5 -1
  12. package/distr/Common/HttpClient/HttpClient.js.map +1 -1
  13. package/distr/Common/HttpClient/IHttpClient.js +1 -1
  14. package/distr/Common/HttpClient/IHttpClient.js.map +1 -1
  15. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +3 -3
  16. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -1
  17. package/distr/Common/ModelPath/ModelPath.js +10 -1
  18. package/distr/Common/ModelPath/ModelPath.js.map +1 -1
  19. package/distr/Common/TypingUtils.js +8 -1
  20. package/distr/Common/TypingUtils.js.map +1 -1
  21. package/distr/Common/UseTypedSelector.js +3 -2
  22. package/distr/Common/UseTypedSelector.js.map +1 -1
  23. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -8
  24. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -1
  25. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  26. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  27. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  28. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +104 -96
  29. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  30. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +14 -9
  31. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  32. package/package.json +1 -1
@@ -232,9 +232,9 @@
232
232
  });
233
233
  return e.ok = !1, e.status = 0, e.type = "error", e;
234
234
  };
235
- var T = [301, 302, 303, 307, 308];
235
+ var S = [301, 302, 303, 307, 308];
236
236
  j.redirect = function (e, t) {
237
- if (-1 === T.indexOf(t)) throw new RangeError("Invalid status code");
237
+ if (-1 === S.indexOf(t)) throw new RangeError("Invalid status code");
238
238
  return new j(null, {
239
239
  status: t,
240
240
  headers: {
@@ -242,20 +242,20 @@
242
242
  }
243
243
  });
244
244
  };
245
- var S = i.DOMException;
245
+ var T = i.DOMException;
246
246
  try {
247
- new S();
247
+ new T();
248
248
  } catch (e) {
249
- (S = function (e, t) {
249
+ (T = function (e, t) {
250
250
  this.message = e, this.name = t;
251
251
  var r = Error(e);
252
252
  this.stack = r.stack;
253
- }).prototype = Object.create(Error.prototype), S.prototype.constructor = S;
253
+ }).prototype = Object.create(Error.prototype), T.prototype.constructor = T;
254
254
  }
255
255
  function P(e, t) {
256
256
  return new Promise(function (r, n) {
257
257
  var o = new k(e, t);
258
- if (o.signal && o.signal.aborted) return n(new S("Aborted", "AbortError"));
258
+ if (o.signal && o.signal.aborted) return n(new T("Aborted", "AbortError"));
259
259
  var a = new XMLHttpRequest();
260
260
  function u() {
261
261
  a.abort();
@@ -295,7 +295,7 @@
295
295
  }, 0);
296
296
  }, a.onabort = function () {
297
297
  setTimeout(function () {
298
- n(new S("Aborted", "AbortError"));
298
+ n(new T("Aborted", "AbortError"));
299
299
  }, 0);
300
300
  }, a.open(o.method, function (e) {
301
301
  try {
@@ -866,6 +866,11 @@
866
866
  value: function () {
867
867
  throw new V();
868
868
  }
869
+ }, {
870
+ key: "getSelectedInstances",
871
+ value: function (e, t, r) {
872
+ return Promise.resolve([]);
873
+ }
869
874
  }]);
870
875
  var e, r, o;
871
876
  }();
@@ -1068,4 +1073,4 @@
1068
1073
  };
1069
1074
  e.g.CF = ne;
1070
1075
  }();
1071
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJyIiwibiIsInRvUHJpbWl0aXZlIiwibyIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwiQXJyYXkiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwid2luZG93IiwiaSIsInNlbGYiLCJhIiwidSIsInMiLCJCbG9iIiwiYyIsImwiLCJmIiwiaCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInRvU3RyaW5nIiwiZCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsInAiLCJ5IiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsIm0iLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ2IiwiX25vQm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJ3IiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIkUiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJleGVjIiwicmVhZEFzVGV4dCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJmb3JtRGF0YSIsIkEiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZGVsZXRlIiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJPIiwiayIsImJvZHkiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1ldGhvZCIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsIkFib3J0Q29udHJvbGxlciIsInJlZmVycmVyIiwiY2FjaGUiLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJ0cmltIiwic3BsaXQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJqIiwic3RhdHVzIiwiUmFuZ2VFcnJvciIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiVCIsInJlZGlyZWN0IiwibG9jYXRpb24iLCJTIiwiRE9NRXhjZXB0aW9uIiwibWVzc2FnZSIsIm5hbWUiLCJzdGFjayIsImNyZWF0ZSIsIlAiLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsImNvbnNvbGUiLCJ3YXJuIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0Iiwib3BlbiIsImhyZWYiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJfIiwiQiIsImtleSIsIkMiLCJwb2x5ZmlsbCIsImZldGNoIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiUiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJJIiwiQm9vbGVhbiIsIkQiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwia29udHVyRG9tYWlucyIsIlUiLCJ4IiwiYXJndW1lbnRzIiwiYXBwbHkiLCJGIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJNIiwiTiIsIkwiLCJ2YWx1ZU9mIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJIIiwiTWFwIiwiX3dyYXBOYXRpdmVTdXBlciIsIlJlZmVyZW5jZUVycm9yIiwiViIsInoiLCIkIiwiWCIsImZpbHRlciIsIkoiLCJyZWR1Y2UiLCJHIiwiVyIsImZvcm0iLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwid3JhcCIsInByZXYiLCJzdG9wIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXREaWdlc3RBcGlQaWNrbGlzdCIsInF1ZXJ5IiwiZXZlbnRNYW5hZ2VyIiwib24iLCJvZmYiLCJjaGFuZ2VTZXQiLCJzdG9wQXV0b3NlbmQiLCJ1bm1vdW50IiwibW9kZWwiLCJnZXRDaHVuayIsInNldHRpbmdzIiwiZm9ybVJvb3QiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZUFsbCIsImZpbGwiLCJjb25jYXQiLCJZIiwiZWUiLCJDRiIsImtlZm9ybXNVcmwiLCJ0ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlIiwic2VhcmNoIiwiZmluZCIsInJldHVybiIsImZyb20iLCJuZSIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiUSIsInNob3dOYXZpZ2F0aW9uU2lkZWJhciIsIm9uUmVtb3ZlQXR0YWNobWVudCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiZW50cnlQb2ludCIsInN0eWxlU2hlZXQiLCJzY3JpcHQiLCJ0aGVtZSIsImRlZmF1bHQiLCJwdWJsaWNGb3JtIiwiY2F0Y2giLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybS50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vVHlwaW5nVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xuICByZXR1cm4gbjtcbn1cbmV4cG9ydCB7IF9hcnJheUxpa2VUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVDbGFzcyBhcyBkZWZhdWx0IH07IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5leHBvcnQgeyBfZ2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufVxuZXhwb3J0IHsgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgdmFyIHIgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgICBpZiAobnVsbCA9PT0gdCB8fCAhaXNOYXRpdmVGdW5jdGlvbih0KSkgcmV0dXJuIHQ7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgIGlmIChyLmhhcyh0KSkgcmV0dXJuIHIuZ2V0KHQpO1xuICAgICAgci5zZXQodCwgV3JhcHBlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KHQsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfVxuICAgIH0pLCBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCB0KTtcbiAgfSwgX3dyYXBOYXRpdmVTdXBlcih0KTtcbn1cbmV4cG9ydCB7IF93cmFwTmF0aXZlU3VwZXIgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKHQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gLTEgIT09IEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIik7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0O1xuICB9XG59XG5leHBvcnQgeyBfaXNOYXRpdmVGdW5jdGlvbiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2NvbnN0cnVjdCh0LCBlLCByKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gW251bGxdO1xuICBvLnB1c2guYXBwbHkobywgZSk7XG4gIHZhciBwID0gbmV3ICh0LmJpbmQuYXBwbHkodCwgbykpKCk7XG4gIHJldHVybiByICYmIHNldFByb3RvdHlwZU9mKHAsIHIucHJvdG90eXBlKSwgcDtcbn1cbmV4cG9ydCB7IF9jb25zdHJ1Y3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxuZXhwb3J0IHsgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbXBsb3llZSxcbiAgICBFbXBsb3llZUxpc3QsXG4gICAgR2V0RW1wbG95ZWVzV2l0aEFjdGl2ZVBlcmlvZFF1ZXJ5LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIE1hdGNoRW1wbG95ZWVSZXF1ZXN0LFxuICAgIE1hdGNoRW1wbG95ZWVSZXNwb25zZSxcbiAgICBNZXJnZVJlbGF0aXZlUmVzcG9uc2UsXG4gICAgUGF0Y2hSZWxhdGl2ZVJlc3BvbnNlLFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLXNlbGVjdG9yLXdpZGdldFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIkVuZ2luZS9zcmMvRW5naW5lL0Zvcm0vTW9kZWxDaGFuZ2VFdmVudExpc3RlbmVyXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcbmltcG9ydCB7XG4gICAgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyxcbiAgICBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMsXG4gICAgUHJlZmVycmVkSW50ZXJkb2N1bWVudFRyYW5zZmVyUHJvcHMsXG59IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0luaXRTZWN0aW9uTGlnaHRib3hcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IEZpYXNBcGksIEZpYXNDbGllbnRJbml0T3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9WYWx1ZUVkaXRvcnMvRmlhcy9GaWFzSW5wdXQvRmlhc0FwaVwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0RyYWZ0QWN0aW9ucy9Db21iaW5lRnVmUmVzdWx0XCI7XG5pbXBvcnQgeyBJQ2FuZHlDb21wb25lbnRIYW5kbGUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29tcG9uZW50SGFuZGxlUmVnaXN0cnkvSUNhbmR5Q29tcG9uZW50SGFuZGxlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUGF0aE1hcHBlciB9IGZyb20gXCIuLi8uLi9JbmplY3RhYmxlTW9kdWxlcy9JbmplY3RhYmxlRW5naW5lTW9kdWxlc1wiO1xuaW1wb3J0IHtcbiAgICBFbXBsb3llck5vcm1hbGl6ZWRUYWcsXG4gICAgSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vLi4vU3RhZmZTZXJ2aWNlSW50ZWdyYXRpb24vRW1wbG95ZWVTZXJ2aWNlVHlwZXNcIjtcbmltcG9ydCB7IFRhYkluZm9zU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvTXVsdGlDb250cm9scy9UYWJzL1N0b3JlL1RhYkluZm9zU3RhdGVcIjtcbmltcG9ydCB7IE1ldHJpY3NQYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9NZXRyaWNzL01ldHJpY3NQcm92aWRlclwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGVCeUhpZ2hsYW5kZXJQYXRocyhwYXRoczogc3RyaW5nW10pOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsU2VsZWN0UmVsYXRpdmUoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXZpZ2F0aW9uUGF0aE1hcHBlcigpOiBOYXZpZ2F0aW9uUGF0aE1hcHBlciB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiYXRjaFVwZGF0ZSh1cGRhdGVQcm9jOiAodXBkYXRlQWNjZXNzb3I6IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvcikgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQ2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFcnJvckxvZyhlcnJvckxvZzogUGFydGlhbDxTZXJ2ZXJFcnJvckxvZz4pOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHZhbGlkYXRlQ2hpbGRyZW5CeVBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfX0lOVEVSTkFMX19pbXBvcnRGcm9tRW1wbG95ZWVTZXJ2aWNlKCk6IFByb21pc2U8RW1wbG95ZWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX19JTlRFUk5BTF9fZ2V0U2VsZWN0RnVuY3Rpb25Gb3JEaXNhYmxlRW1wbG95ZWVJblNTKFxuICAgICAgICBwYXRoU3BlYzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTwoZW1wbG95ZWU6IEVtcGxveWVlKSA9PiBib29sZWFuPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RhbFVuaXRPcGVuZWRJbnN0YW5jZShwYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFic1N0YXRlKCk6IFRhYkluZm9zU3RhdGUge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGUobmF2aWdhdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8SUNhbmR5Q29tcG9uZW50SGFuZGxlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llckRvY3VtZW50cyhcbiAgICAgICAgb3B0aW9uczogSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zXG4gICAgKTogUHJvbWlzZTxFbXBsb3llck5vcm1hbGl6ZWRUYWcgfCB1bmRlZmluZWQgfCBudWxsPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZXNXaXRoQWN0aXZlUGVyaW9kUXVlcnkpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVtcGxveWVlcygpOiBQcm9taXNlPEVtcGxveWVlTGlzdD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlUmVsYXRpdmUoKTogUHJvbWlzZTxNZXJnZVJlbGF0aXZlUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaFJlbGF0aXZlKCk6IFByb21pc2U8UGF0Y2hSZWxhdGl2ZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZE1ldHJpY3MoYWN0aW9uOiBzdHJpbmcsIHBheWxvYWQ/OiBNZXRyaWNzUGF5bG9hZCk6IHZvaWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEVtcGxveWVlKHF1ZXJ5OiBNYXRjaEVtcGxveWVlUmVxdWVzdCk6IFByb21pc2U8TWF0Y2hFbXBsb3llZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVsb2FkSW5uZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ya2luZ0V2ZW50c0ZvckVtcGxveWVlKGZpbHRlcnM6IEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0KTogUHJvbWlzZTxXb3JraW5nRXZlbnRMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1dWlkR2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd01vZGFsKG9wdGlvbnM6IE1vZGFsT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWN0aW9uKG9wdGlvbnM6IEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsSW5pdFNlY3Rpb24ob3B0aW9uczogQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmVmZXJyZWRJbnRlcmRvY3VtZW50VHJhbnNmZXIob3B0aW9uczogUHJlZmVycmVkSW50ZXJkb2N1bWVudFRyYW5zZmVyUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG5wKCk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoaW50PzogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGlkPzogc3RyaW5nO1xuICAgIHdlaWdodDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVuZGVyRm9ybVNldHRpbmdzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIHBhbmVsQWN0aW9ucz86IEFjdGlvbkRlc2NyaXB0aW9uW107XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5fXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xuICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcj86IGJvb2xlYW47XG4gICAgb25SZW1vdmVBdHRhY2htZW50PzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcjogb3B0aW9ucy5zaG93TmF2aWdhdGlvblNpZGViYXIgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblJlbW92ZUF0dGFjaG1lbnQ6IG9wdGlvbnMub25SZW1vdmVBdHRhY2htZW50LFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xuICBpZiAocikge1xuICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcbiAgICB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cbmV4cG9ydCB7IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0VBQ0EsSUFBSUEsQ0FBQSxHQUFzQixDQUFDO0VDRDNCLFNBQVNDLEVBQVFELENBQUE7SUFHZixPQUFPQyxDQUFBLEdBQVUscUJBQXFCQyxNQUFBLElBQVUsbUJBQW1CQSxNQUFBLENBQU9DLFFBQUEsR0FBVyxVQUFVSCxDQUFBO01BQzdGLGNBQWNBLENBQ2hCO0lBQUEsSUFBSSxVQUFVQSxDQUFBO01BQ1osT0FBT0EsQ0FBQSxJQUFLLHFCQUFxQkUsTUFBQSxJQUFVRixDQUFBLENBQUVJLFdBQUEsS0FBZ0JGLE1BQUEsSUFBVUYsQ0FBQSxLQUFNRSxNQUFBLENBQU9HLFNBQUEsR0FBWSxrQkFBa0JMLENBQ3BIO0lBQUEsR0FBR0MsQ0FBQSxDQUFRRCxDQUFBLENBQ2I7RUFBQTtFQ05BLFNBQVNNLEVBQWNOLENBQUE7SUFDckIsSUFBSU0sQ0FBQSxHQ0ZOLFVBQXFCTixDQUFBLEVBQUdNLENBQUE7TUFDdEIsSUFBSSxZQUFZTCxDQUFBLENBQVFELENBQUEsTUFBT0EsQ0FBQSxFQUFHLE9BQU9BLENBQUE7TUFDekMsSUFBSU8sQ0FBQSxHQUFJUCxDQUFBLENBQUVFLE1BQUEsQ0FBT00sV0FBQTtNQUNqQixTQUFJLE1BQVdELENBQUEsRUFBRztRQUNoQixJQUFJRSxDQUFBLEdBQUlGLENBQUEsQ0FBRUcsSUFBQSxDQUFLVixDQUFBLEVBQUc7UUFDbEIsSUFBSSxZQUFZQyxDQUFBLENBQVFRLENBQUEsR0FBSSxPQUFPQSxDQUFBO1FBQ25DLE1BQU0sSUFBSUUsU0FBQSxDQUFVLCtDQUN0QjtNQUFBO01BQ0EsT0FBeUJDLE1BQUEsQ0FBaUJaLENBQUEsQ0FDNUM7SUFBQSxDRFBVLENBQVlBLENBQUE7SUFDcEIsT0FBTyxZQUFZQyxDQUFBLENBQVFLLENBQUEsSUFBS0EsQ0FBQSxHQUFJQSxDQUFBLEdBQUksRUFDMUM7RUFBQTtFRUpBLFNBQVNDLEVBQWdCUCxDQUFBLEVBQUdDLENBQUEsRUFBR00sQ0FBQTtJQUM3QixRQUFRTixDQUFBLEdBQUlLLENBQUEsQ0FBY0wsQ0FBQSxNQUFPRCxDQUFBLEdBQUlhLE1BQUEsQ0FBT0MsY0FBQSxDQUFlZCxDQUFBLEVBQUdDLENBQUEsRUFBRztNQUMvRGMsS0FBQSxFQUFPUixDQUFBO01BQ1BTLFVBQUEsR0FBWTtNQUNaQyxZQUFBLEdBQWM7TUFDZEMsUUFBQSxHQUFVO0lBQUEsS0FDUGxCLENBQUEsQ0FBRUMsQ0FBQSxJQUFLTSxDQUFBLEVBQUdQLENBQ2pCO0VBQUE7RUNSQSxTQUFTUyxFQUFrQlQsQ0FBQSxFQUFHQyxDQUFBO0lBQUEsQ0FDM0IsUUFBUUEsQ0FBQSxJQUFLQSxDQUFBLEdBQUlELENBQUEsQ0FBRW1CLE1BQUEsTUFBWWxCLENBQUEsR0FBSUQsQ0FBQSxDQUFFbUIsTUFBQTtJQUN0QyxLQUFLLElBQUliLENBQUEsR0FBSSxHQUFHQyxDQUFBLEdBQUlhLEtBQUEsQ0FBTW5CLENBQUEsR0FBSUssQ0FBQSxHQUFJTCxDQUFBLEVBQUdLLENBQUEsSUFBS0MsQ0FBQSxDQUFFRCxDQUFBLElBQUtOLENBQUEsQ0FBRU0sQ0FBQTtJQUNuRCxPQUFPQyxDQUNUO0VBQUE7RUNKQVAsQ0FBQSxDQUFvQnFCLENBQUEsR0FBSTtJQUN2QixJQUEwQixtQkFBZkMsVUFBQSxFQUF5QixPQUFPQSxVQUFBO0lBQzNDO01BQ0MsT0FBTyxRQUFRLElBQUlDLFFBQUEsQ0FBUyxjQUFiLEVBQ2hCO0lBQUEsQ0FBRSxRQUFPdkIsQ0FBQTtNQUNSLElBQXNCLG1CQUFYd0IsTUFBQSxFQUFxQixPQUFPQSxNQUN4QztJQUFBO0VBQ0EsQ0FQdUI7RUNDeEIsSUFBSUMsQ0FBQSxHQUNxQixzQkFBZkgsVUFBQSxJQUE4QkEsVUFBQSxJQUNyQixzQkFBVEksSUFBQSxJQUF3QkEsSUFBQSxTQUViLE1BQVgxQixDQUFBLENBQUFxQixDQUFBLElBQTBCckIsQ0FBQSxDQUFBcUIsQ0FBQSxJQUNsQyxDQUFDO0lBRUNNLENBQUEsSUFDWSxxQkFBcUJGLENBQUE7SUFEakNHLENBQUEsR0FFUSxZQUFZSCxDQUFBLElBQUssY0FBY3ZCLE1BQUE7SUFGdkMyQixDQUFBLEdBSUEsZ0JBQWdCSixDQUFBLElBQ2hCLFVBQVVBLENBQUEsSUFDVjtNQUNFO1FBRUUsT0FEQSxJQUFJSyxJQUFBLEtBQ0csQ0FDVDtNQUFBLENBQUUsUUFBTzlCLENBQUE7UUFDUCxRQUFPLENBQ1Q7TUFBQTtJQUNELENBUEQ7SUFOQStCLENBQUEsSUFjUSxjQUFjTixDQUFBO0lBZHRCTyxDQUFBLElBZVcsaUJBQWlCUCxDQUFBO0VBT2hDLElBQUlPLENBQUEsRUFDRixJQUFJQyxDQUFBLEdBQWMsQ0FDaEIsc0JBQ0EsdUJBQ0EsOEJBQ0EsdUJBQ0Esd0JBQ0EsdUJBQ0Esd0JBQ0EseUJBQ0E7SUFHRUMsQ0FBQSxHQUNGQyxXQUFBLENBQVlDLE1BQUEsSUFDWixVQUFTcEMsQ0FBQTtNQUNQLE9BQU9BLENBQUEsSUFBT2lDLENBQUEsQ0FBWUksT0FBQSxDQUFReEIsTUFBQSxDQUFPUixTQUFBLENBQVVpQyxRQUFBLENBQVM1QixJQUFBLENBQUtWLENBQUEsTUFBUyxDQUM1RTtJQUFBO0VBR0osU0FBU3VDLEVBQWN2QyxDQUFBO0lBSXJCLElBSG9CLG1CQUFUQSxDQUFBLEtBQ1RBLENBQUEsR0FBT1ksTUFBQSxDQUFPWixDQUFBLElBRVosNkJBQTZCd0MsSUFBQSxDQUFLeEMsQ0FBQSxLQUFrQixPQUFUQSxDQUFBLEVBQzdDLE1BQU0sSUFBSVcsU0FBQSxDQUFVLDhDQUE4Q1gsQ0FBQSxHQUFPO0lBRTNFLE9BQU9BLENBQUEsQ0FBS3lDLFdBQUEsRUFDZDtFQUFBO0VBRUEsU0FBU0MsRUFBZTFDLENBQUE7SUFJdEIsT0FIcUIsbUJBQVZBLENBQUEsS0FDVEEsQ0FBQSxHQUFRWSxNQUFBLENBQU9aLENBQUEsSUFFVkEsQ0FDVDtFQUFBO0VBR0EsU0FBUzJDLEVBQVkzQyxDQUFBO0lBQ25CLElBQUlDLENBQUEsR0FBVztNQUNiMkMsSUFBQSxFQUFNLFNBQUFBLENBQUE7UUFDSixJQUFJM0MsQ0FBQSxHQUFRRCxDQUFBLENBQU02QyxLQUFBO1FBQ2xCLE9BQU87VUFBQ0MsSUFBQSxPQUFnQixNQUFWN0MsQ0FBQTtVQUFxQmMsS0FBQSxFQUFPZDtRQUFBLENBQzVDO01BQUE7SUFBQTtJQVNGLE9BTkkyQixDQUFBLEtBQ0YzQixDQUFBLENBQVNDLE1BQUEsQ0FBT0MsUUFBQSxJQUFZO01BQzFCLE9BQU9GLENBQ1Q7SUFBQSxJQUdLQSxDQUNUO0VBQUE7RUFFTyxTQUFTOEMsRUFBUS9DLENBQUE7SUFDdEIsS0FBS2dELEdBQUEsR0FBTSxDQUFDLEdBRVJoRCxDQUFBLFlBQW1CK0MsQ0FBQSxHQUNyQi9DLENBQUEsQ0FBUWlELE9BQUEsQ0FBUSxVQUFTakQsQ0FBQSxFQUFPQyxDQUFBO01BQzlCLEtBQUtpRCxNQUFBLENBQU9qRCxDQUFBLEVBQU1ELENBQUEsQ0FDcEI7SUFBQSxHQUFHLFFBQ01vQixLQUFBLENBQU0rQixPQUFBLENBQVFuRCxDQUFBLElBQ3ZCQSxDQUFBLENBQVFpRCxPQUFBLENBQVEsVUFBU2pELENBQUE7TUFDdkIsSUFBcUIsS0FBakJBLENBQUEsQ0FBT21CLE1BQUEsRUFDVCxNQUFNLElBQUlSLFNBQUEsQ0FBVSx3RUFBd0VYLENBQUEsQ0FBT21CLE1BQUE7TUFFckcsS0FBSytCLE1BQUEsQ0FBT2xELENBQUEsQ0FBTyxJQUFJQSxDQUFBLENBQU8sR0FDaEM7SUFBQSxHQUFHLFFBQ01BLENBQUEsSUFDVGEsTUFBQSxDQUFPdUMsbUJBQUEsQ0FBb0JwRCxDQUFBLEVBQVNpRCxPQUFBLENBQVEsVUFBU2hELENBQUE7TUFDbkQsS0FBS2lELE1BQUEsQ0FBT2pELENBQUEsRUFBTUQsQ0FBQSxDQUFRQyxDQUFBLEVBQzVCO0lBQUEsR0FBRyxLQUVQO0VBQUE7RUE4REEsU0FBU29ELEVBQVNyRCxDQUFBO0lBQ2hCLEtBQUlBLENBQUEsQ0FBS3NELE9BQUEsRUFDVCxPQUFJdEQsQ0FBQSxDQUFLdUQsUUFBQSxHQUNBQyxPQUFBLENBQVFDLE1BQUEsQ0FBTyxJQUFJOUMsU0FBQSxDQUFVLHlCQUV0Q1gsQ0FBQSxDQUFLdUQsUUFBQSxJQUFXLEVBQ2xCO0VBQUE7RUFFQSxTQUFTRyxFQUFnQjFELENBQUE7SUFDdkIsT0FBTyxJQUFJd0QsT0FBQSxDQUFRLFVBQVN2RCxDQUFBLEVBQVNLLENBQUE7TUFDbkNOLENBQUEsQ0FBTzJELE1BQUEsR0FBUztRQUNkMUQsQ0FBQSxDQUFRRCxDQUFBLENBQU80RCxNQUFBLENBQ2pCO01BQUEsR0FDQTVELENBQUEsQ0FBTzZELE9BQUEsR0FBVTtRQUNmdkQsQ0FBQSxDQUFPTixDQUFBLENBQU84RCxLQUFBLENBQ2hCO01BQUEsQ0FDRjtJQUFBLEVBQ0Y7RUFBQTtFQUVBLFNBQVNDLEVBQXNCL0QsQ0FBQTtJQUM3QixJQUFJQyxDQUFBLEdBQVMsSUFBSStELFVBQUE7TUFDYjFELENBQUEsR0FBVW9ELENBQUEsQ0FBZ0J6RCxDQUFBO0lBRTlCLE9BREFBLENBQUEsQ0FBT2dFLGlCQUFBLENBQWtCakUsQ0FBQSxHQUNsQk0sQ0FDVDtFQUFBO0VBcUJBLFNBQVNlLEVBQVlyQixDQUFBO0lBQ25CLElBQUlBLENBQUEsQ0FBSWtFLEtBQUEsRUFDTixPQUFPbEUsQ0FBQSxDQUFJa0UsS0FBQSxDQUFNO0lBRWpCLElBQUlqRSxDQUFBLEdBQU8sSUFBSWtFLFVBQUEsQ0FBV25FLENBQUEsQ0FBSW9FLFVBQUE7SUFFOUIsT0FEQW5FLENBQUEsQ0FBS29FLEdBQUEsQ0FBSSxJQUFJRixVQUFBLENBQVduRSxDQUFBLElBQ2pCQyxDQUFBLENBQUtxRSxNQUVoQjtFQUFBO0VBRUEsU0FBU0MsRUFBQTtJQXFIUCxPQXBIQSxLQUFLaEIsUUFBQSxJQUFXLEdBRWhCLEtBQUtpQixTQUFBLEdBQVksVUFBU3hFLENBQUE7TUF0TTVCLElBQW9CQyxDQUFBO01Ba05oQixLQUFLc0QsUUFBQSxHQUFXLEtBQUtBLFFBQUEsRUFDckIsS0FBS2tCLFNBQUEsR0FBWXpFLENBQUEsRUFDWkEsQ0FBQSxHQUdzQixtQkFBVEEsQ0FBQSxHQUNoQixLQUFLMEUsU0FBQSxHQUFZMUUsQ0FBQSxHQUNSNkIsQ0FBQSxJQUFnQkMsSUFBQSxDQUFLekIsU0FBQSxDQUFVc0UsYUFBQSxDQUFjM0UsQ0FBQSxJQUN0RCxLQUFLNEUsU0FBQSxHQUFZNUUsQ0FBQSxHQUNSK0IsQ0FBQSxJQUFvQjhDLFFBQUEsQ0FBU3hFLFNBQUEsQ0FBVXNFLGFBQUEsQ0FBYzNFLENBQUEsSUFDOUQsS0FBSzhFLGFBQUEsR0FBZ0I5RSxDQUFBLEdBQ1oyQixDQUFBLElBQXdCb0QsZUFBQSxDQUFnQjFFLFNBQUEsQ0FBVXNFLGFBQUEsQ0FBYzNFLENBQUEsSUFDekUsS0FBSzBFLFNBQUEsR0FBWTFFLENBQUEsQ0FBS3NDLFFBQUEsS0FDYk4sQ0FBQSxJQUF1QkgsQ0FBQSxLQS9ObEI1QixDQUFBLEdBK042Q0QsQ0FBQSxLQTlOakRnRixRQUFBLENBQVMzRSxTQUFBLENBQVVzRSxhQUFBLENBQWMxRSxDQUFBLEtBK04zQyxLQUFLZ0YsZ0JBQUEsR0FBbUI1RCxDQUFBLENBQVlyQixDQUFBLENBQUtzRSxNQUFBLEdBRXpDLEtBQUtHLFNBQUEsR0FBWSxJQUFJM0MsSUFBQSxDQUFLLENBQUMsS0FBS21ELGdCQUFBLE1BQ3ZCakQsQ0FBQSxLQUF3QkcsV0FBQSxDQUFZOUIsU0FBQSxDQUFVc0UsYUFBQSxDQUFjM0UsQ0FBQSxLQUFTa0MsQ0FBQSxDQUFrQmxDLENBQUEsS0FDaEcsS0FBS2lGLGdCQUFBLEdBQW1CNUQsQ0FBQSxDQUFZckIsQ0FBQSxJQUVwQyxLQUFLMEUsU0FBQSxHQUFZMUUsQ0FBQSxHQUFPYSxNQUFBLENBQU9SLFNBQUEsQ0FBVWlDLFFBQUEsQ0FBUzVCLElBQUEsQ0FBS1YsQ0FBQSxLQWpCdkQsS0FBS3NELE9BQUEsSUFBVSxHQUNmLEtBQUtvQixTQUFBLEdBQVksS0FtQmQsS0FBS1EsT0FBQSxDQUFRQyxHQUFBLENBQUksb0JBQ0EsbUJBQVRuRixDQUFBLEdBQ1QsS0FBS2tGLE9BQUEsQ0FBUWIsR0FBQSxDQUFJLGdCQUFnQiw4QkFDeEIsS0FBS08sU0FBQSxJQUFhLEtBQUtBLFNBQUEsQ0FBVVEsSUFBQSxHQUMxQyxLQUFLRixPQUFBLENBQVFiLEdBQUEsQ0FBSSxnQkFBZ0IsS0FBS08sU0FBQSxDQUFVUSxJQUFBLElBQ3ZDekQsQ0FBQSxJQUF3Qm9ELGVBQUEsQ0FBZ0IxRSxTQUFBLENBQVVzRSxhQUFBLENBQWMzRSxDQUFBLEtBQ3pFLEtBQUtrRixPQUFBLENBQVFiLEdBQUEsQ0FBSSxnQkFBZ0IsbURBR3ZDO0lBQUEsR0FFSXhDLENBQUEsS0FDRixLQUFLd0QsSUFBQSxHQUFPO01BQ1YsSUFBSXJGLENBQUEsR0FBV3FELENBQUEsQ0FBUztNQUN4QixJQUFJckQsQ0FBQSxFQUNGLE9BQU9BLENBQUE7TUFHVCxJQUFJLEtBQUs0RSxTQUFBLEVBQ1AsT0FBT3BCLE9BQUEsQ0FBUThCLE9BQUEsQ0FBUSxLQUFLVixTQUFBO01BQ3ZCLElBQUksS0FBS0ssZ0JBQUEsRUFDZCxPQUFPekIsT0FBQSxDQUFROEIsT0FBQSxDQUFRLElBQUl4RCxJQUFBLENBQUssQ0FBQyxLQUFLbUQsZ0JBQUE7TUFDakMsSUFBSSxLQUFLSCxhQUFBLEVBQ2QsTUFBTSxJQUFJUyxLQUFBLENBQU07TUFFaEIsT0FBTy9CLE9BQUEsQ0FBUThCLE9BQUEsQ0FBUSxJQUFJeEQsSUFBQSxDQUFLLENBQUMsS0FBSzRDLFNBQUEsR0FFMUM7SUFBQSxJQUdGLEtBQUtjLFdBQUEsR0FBYztNQUNqQixJQUFJLEtBQUtQLGdCQUFBLEVBRVAsT0FEaUI1QixDQUFBLENBQVMsVUFHZmxCLFdBQUEsQ0FBWUMsTUFBQSxDQUFPLEtBQUs2QyxnQkFBQSxJQUMxQnpCLE9BQUEsQ0FBUThCLE9BQUEsQ0FDYixLQUFLTCxnQkFBQSxDQUFpQlgsTUFBQSxDQUFPSixLQUFBLENBQzNCLEtBQUtlLGdCQUFBLENBQWlCUSxVQUFBLEVBQ3RCLEtBQUtSLGdCQUFBLENBQWlCUSxVQUFBLEdBQWEsS0FBS1IsZ0JBQUEsQ0FBaUJiLFVBQUEsS0FJdERaLE9BQUEsQ0FBUThCLE9BQUEsQ0FBUSxLQUFLTCxnQkFBQTtNQUV6QixJQUFJcEQsQ0FBQSxFQUNULE9BQU8sS0FBS3dELElBQUEsR0FBT0ssSUFBQSxDQUFLM0IsQ0FBQTtNQUV4QixNQUFNLElBQUl3QixLQUFBLENBQU0sZ0NBRXBCO0lBQUEsR0FFQSxLQUFLSSxJQUFBLEdBQU87TUFDVixJQXhIb0IzRixDQUFBO1FBQ2xCQyxDQUFBO1FBQ0FLLENBQUE7UUFDQUMsQ0FBQTtRQUNBRSxDQUFBO1FBb0hFZ0IsQ0FBQSxHQUFXNEIsQ0FBQSxDQUFTO01BQ3hCLElBQUk1QixDQUFBLEVBQ0YsT0FBT0EsQ0FBQTtNQUdULElBQUksS0FBS21ELFNBQUEsRUFDUCxPQTlIa0I1RSxDQUFBLEdBOEhJLEtBQUs0RSxTQUFBLEVBNUgzQnRFLENBQUEsR0FBVW9ELENBQUEsQ0FEVnpELENBQUEsR0FBUyxJQUFJK0QsVUFBQSxLQUdidkQsQ0FBQSxJQURBRixDQUFBLEdBQVEsMkJBQTJCcUYsSUFBQSxDQUFLNUYsQ0FBQSxDQUFLb0YsSUFBQSxLQUMxQjdFLENBQUEsQ0FBTSxLQUFLLFNBQ2xDTixDQUFBLENBQU80RixVQUFBLENBQVc3RixDQUFBLEVBQU1TLENBQUEsR0FDakJILENBQUE7TUF5SEUsSUFBSSxLQUFLMkUsZ0JBQUEsRUFDZCxPQUFPekIsT0FBQSxDQUFROEIsT0FBQSxDQXZIckIsVUFBK0J0RixDQUFBO1FBSTdCLEtBSEEsSUFBSUMsQ0FBQSxHQUFPLElBQUlrRSxVQUFBLENBQVduRSxDQUFBLEdBQ3RCTSxDQUFBLEdBQVEsSUFBSWMsS0FBQSxDQUFNbkIsQ0FBQSxDQUFLa0IsTUFBQSxHQUVsQlosQ0FBQSxHQUFJLEdBQUdBLENBQUEsR0FBSU4sQ0FBQSxDQUFLa0IsTUFBQSxFQUFRWixDQUFBLElBQy9CRCxDQUFBLENBQU1DLENBQUEsSUFBS0ssTUFBQSxDQUFPa0YsWUFBQSxDQUFhN0YsQ0FBQSxDQUFLTSxDQUFBO1FBRXRDLE9BQU9ELENBQUEsQ0FBTXlGLElBQUEsQ0FBSyxHQUNwQjtNQUFBLENBK0c2QixDQUFzQixLQUFLZCxnQkFBQTtNQUM3QyxJQUFJLEtBQUtILGFBQUEsRUFDZCxNQUFNLElBQUlTLEtBQUEsQ0FBTTtNQUVoQixPQUFPL0IsT0FBQSxDQUFROEIsT0FBQSxDQUFRLEtBQUtaLFNBQUEsQ0FFaEM7SUFBQSxHQUVJM0MsQ0FBQSxLQUNGLEtBQUtpRSxRQUFBLEdBQVc7TUFDZCxPQUFPLEtBQUtMLElBQUEsR0FBT0QsSUFBQSxDQUFLTyxDQUFBLENBQzFCO0lBQUEsSUFHRixLQUFLQyxJQUFBLEdBQU87TUFDVixPQUFPLEtBQUtQLElBQUEsR0FBT0QsSUFBQSxDQUFLUyxJQUFBLENBQUtDLEtBQUEsQ0FDL0I7SUFBQSxHQUVPLElBQ1Q7RUFBQTtFQXpPQXJELENBQUEsQ0FBUTFDLFNBQUEsQ0FBVTZDLE1BQUEsR0FBUyxVQUFTbEQsQ0FBQSxFQUFNQyxDQUFBO0lBQ3hDRCxDQUFBLEdBQU91QyxDQUFBLENBQWN2QyxDQUFBLEdBQ3JCQyxDQUFBLEdBQVF5QyxDQUFBLENBQWV6QyxDQUFBO0lBQ3ZCLElBQUlLLENBQUEsR0FBVyxLQUFLMEMsR0FBQSxDQUFJaEQsQ0FBQTtJQUN4QixLQUFLZ0QsR0FBQSxDQUFJaEQsQ0FBQSxJQUFRTSxDQUFBLEdBQVdBLENBQUEsR0FBVyxPQUFPTCxDQUFBLEdBQVFBLENBQ3hEO0VBQUEsR0FFQThDLENBQUEsQ0FBUTFDLFNBQUEsQ0FBa0JnRyxNQUFBLEdBQUksVUFBU3JHLENBQUE7SUFBQSxPQUM5QixLQUFLZ0QsR0FBQSxDQUFJVCxDQUFBLENBQWN2QyxDQUFBLEVBQ2hDO0VBQUEsR0FFQStDLENBQUEsQ0FBUTFDLFNBQUEsQ0FBVThFLEdBQUEsR0FBTSxVQUFTbkYsQ0FBQTtJQUUvQixPQURBQSxDQUFBLEdBQU91QyxDQUFBLENBQWN2QyxDQUFBLEdBQ2QsS0FBS3NHLEdBQUEsQ0FBSXRHLENBQUEsSUFBUSxLQUFLZ0QsR0FBQSxDQUFJaEQsQ0FBQSxJQUFRLElBQzNDO0VBQUEsR0FFQStDLENBQUEsQ0FBUTFDLFNBQUEsQ0FBVWlHLEdBQUEsR0FBTSxVQUFTdEcsQ0FBQTtJQUMvQixPQUFPLEtBQUtnRCxHQUFBLENBQUl1RCxjQUFBLENBQWVoRSxDQUFBLENBQWN2QyxDQUFBLEVBQy9DO0VBQUEsR0FFQStDLENBQUEsQ0FBUTFDLFNBQUEsQ0FBVWdFLEdBQUEsR0FBTSxVQUFTckUsQ0FBQSxFQUFNQyxDQUFBO0lBQ3JDLEtBQUsrQyxHQUFBLENBQUlULENBQUEsQ0FBY3ZDLENBQUEsS0FBUzBDLENBQUEsQ0FBZXpDLENBQUEsQ0FDakQ7RUFBQSxHQUVBOEMsQ0FBQSxDQUFRMUMsU0FBQSxDQUFVNEMsT0FBQSxHQUFVLFVBQVNqRCxDQUFBLEVBQVVDLENBQUE7SUFDN0MsS0FBSyxJQUFJSyxDQUFBLElBQVEsS0FBSzBDLEdBQUEsRUFDaEIsS0FBS0EsR0FBQSxDQUFJdUQsY0FBQSxDQUFlakcsQ0FBQSxLQUMxQk4sQ0FBQSxDQUFTVSxJQUFBLENBQUtULENBQUEsRUFBUyxLQUFLK0MsR0FBQSxDQUFJMUMsQ0FBQSxHQUFPQSxDQUFBLEVBQU0sS0FHbkQ7RUFBQSxHQUVBeUMsQ0FBQSxDQUFRMUMsU0FBQSxDQUFVbUcsSUFBQSxHQUFPO0lBQ3ZCLElBQUl4RyxDQUFBLEdBQVE7SUFJWixPQUhBLEtBQUtpRCxPQUFBLENBQVEsVUFBU2hELENBQUEsRUFBT0ssQ0FBQTtNQUMzQk4sQ0FBQSxDQUFNeUcsSUFBQSxDQUFLbkcsQ0FBQSxDQUNiO0lBQUEsSUFDT3FDLENBQUEsQ0FBWTNDLENBQUEsQ0FDckI7RUFBQSxHQUVBK0MsQ0FBQSxDQUFRMUMsU0FBQSxDQUFVcUcsTUFBQSxHQUFTO0lBQ3pCLElBQUkxRyxDQUFBLEdBQVE7SUFJWixPQUhBLEtBQUtpRCxPQUFBLENBQVEsVUFBU2hELENBQUE7TUFDcEJELENBQUEsQ0FBTXlHLElBQUEsQ0FBS3hHLENBQUEsQ0FDYjtJQUFBLElBQ08wQyxDQUFBLENBQVkzQyxDQUFBLENBQ3JCO0VBQUEsR0FFQStDLENBQUEsQ0FBUTFDLFNBQUEsQ0FBVXNHLE9BQUEsR0FBVTtJQUMxQixJQUFJM0csQ0FBQSxHQUFRO0lBSVosT0FIQSxLQUFLaUQsT0FBQSxDQUFRLFVBQVNoRCxDQUFBLEVBQU9LLENBQUE7TUFDM0JOLENBQUEsQ0FBTXlHLElBQUEsQ0FBSyxDQUFDbkcsQ0FBQSxFQUFNTCxDQUFBLEVBQ3BCO0lBQUEsSUFDTzBDLENBQUEsQ0FBWTNDLENBQUEsQ0FDckI7RUFBQSxHQUVJNEIsQ0FBQSxLQUNGbUIsQ0FBQSxDQUFRMUMsU0FBQSxDQUFVSCxNQUFBLENBQU9DLFFBQUEsSUFBWTRDLENBQUEsQ0FBUTFDLFNBQUEsQ0FBVXNHLE9BQUE7RUFtTHpELElBQUlDLENBQUEsR0FBVSxDQUFDLFdBQVcsVUFBVSxPQUFPLFFBQVEsV0FBVyxTQUFTLFFBQVEsT0FBTztFQU8vRSxTQUFTQyxFQUFRN0csQ0FBQSxFQUFPQyxDQUFBO0lBQzdCLE1BQU0sZ0JBQWdCNEcsQ0FBQSxHQUNwQixNQUFNLElBQUlsRyxTQUFBLENBQVU7SUFJdEIsSUFYdUJMLENBQUE7TUFDbkJDLENBQUE7TUFVQUUsQ0FBQSxJQURKUixDQUFBLEdBQVVBLENBQUEsSUFBVyxDQUFDLEdBQ0g2RyxJQUFBO0lBRW5CLElBQUk5RyxDQUFBLFlBQWlCNkcsQ0FBQSxFQUFTO01BQzVCLElBQUk3RyxDQUFBLENBQU11RCxRQUFBLEVBQ1IsTUFBTSxJQUFJNUMsU0FBQSxDQUFVO01BRXRCLEtBQUtvRyxHQUFBLEdBQU0vRyxDQUFBLENBQU0rRyxHQUFBLEVBQ2pCLEtBQUtDLFdBQUEsR0FBY2hILENBQUEsQ0FBTWdILFdBQUEsRUFDcEIvRyxDQUFBLENBQVFpRixPQUFBLEtBQ1gsS0FBS0EsT0FBQSxHQUFVLElBQUluQyxDQUFBLENBQVEvQyxDQUFBLENBQU1rRixPQUFBLElBRW5DLEtBQUsrQixNQUFBLEdBQVNqSCxDQUFBLENBQU1pSCxNQUFBLEVBQ3BCLEtBQUtDLElBQUEsR0FBT2xILENBQUEsQ0FBTWtILElBQUEsRUFDbEIsS0FBS0MsTUFBQSxHQUFTbkgsQ0FBQSxDQUFNbUgsTUFBQSxFQUNmMUcsQ0FBQSxJQUEyQixRQUFuQlQsQ0FBQSxDQUFNeUUsU0FBQSxLQUNqQmhFLENBQUEsR0FBT1QsQ0FBQSxDQUFNeUUsU0FBQSxFQUNiekUsQ0FBQSxDQUFNdUQsUUFBQSxJQUFXLEVBRXJCO0lBQUEsT0FDRSxLQUFLd0QsR0FBQSxHQUFNbkcsTUFBQSxDQUFPWixDQUFBO0lBaUJwQixJQWRBLEtBQUtnSCxXQUFBLEdBQWMvRyxDQUFBLENBQVErRyxXQUFBLElBQWUsS0FBS0EsV0FBQSxJQUFlLGdCQUMxRC9HLENBQUEsQ0FBUWlGLE9BQUEsSUFBWSxLQUFLQSxPQUFBLEtBQzNCLEtBQUtBLE9BQUEsR0FBVSxJQUFJbkMsQ0FBQSxDQUFROUMsQ0FBQSxDQUFRaUYsT0FBQSxJQUVyQyxLQUFLK0IsTUFBQSxJQXBDRDFHLENBQUEsSUFEbUJELENBQUEsR0FxQ09MLENBQUEsQ0FBUWdILE1BQUEsSUFBVSxLQUFLQSxNQUFBLElBQVUsT0FwQzFDRyxXQUFBLElBQ2RSLENBQUEsQ0FBUXZFLE9BQUEsQ0FBUTlCLENBQUEsS0FBWSxJQUFJQSxDQUFBLEdBQVVELENBQUEsR0FvQ2pELEtBQUs0RyxJQUFBLEdBQU9qSCxDQUFBLENBQVFpSCxJQUFBLElBQVEsS0FBS0EsSUFBQSxJQUFRLE1BQ3pDLEtBQUtDLE1BQUEsR0FBU2xILENBQUEsQ0FBUWtILE1BQUEsSUFBVSxLQUFLQSxNQUFBLElBQVc7TUFDOUMsSUFBSSxxQkFBcUIxRixDQUFBLEVBRXZCLE9BRFcsSUFBSTRGLGVBQUEsR0FDSEYsTUFFaEI7SUFBQSxDQUwrQyxJQU0vQyxLQUFLRyxRQUFBLEdBQVcsT0FFSyxVQUFoQixLQUFLTCxNQUFBLElBQW9DLFdBQWhCLEtBQUtBLE1BQUEsS0FBc0J4RyxDQUFBLEVBQ3ZELE1BQU0sSUFBSUUsU0FBQSxDQUFVO0lBSXRCLElBRkEsS0FBSzZELFNBQUEsQ0FBVS9ELENBQUEsS0FFSyxVQUFoQixLQUFLd0csTUFBQSxJQUFvQyxXQUFoQixLQUFLQSxNQUFBLElBQ1YsZUFBbEJoSCxDQUFBLENBQVFzSCxLQUFBLElBQTBDLGVBQWxCdEgsQ0FBQSxDQUFRc0gsS0FBQSxHQUFzQjtNQUVoRSxJQUFJNUYsQ0FBQSxHQUFnQjtNQUNoQkEsQ0FBQSxDQUFjYSxJQUFBLENBQUssS0FBS3VFLEdBQUEsSUFFMUIsS0FBS0EsR0FBQSxHQUFNLEtBQUtBLEdBQUEsQ0FBSVMsT0FBQSxDQUFRN0YsQ0FBQSxFQUFlLFNBQVMsSUFBSThGLElBQUEsR0FBT0MsT0FBQSxNQUkvRCxLQUFLWCxHQUFBLEtBRGUsS0FDT3ZFLElBQUEsQ0FBSyxLQUFLdUUsR0FBQSxJQUFPLE1BQU0sT0FBTyxPQUFPLElBQUlVLElBQUEsR0FBT0MsT0FBQSxFQUUvRTtJQUFBO0VBRUo7RUFNQSxTQUFTekIsRUFBT2pHLENBQUE7SUFDZCxJQUFJQyxDQUFBLEdBQU8sSUFBSTRFLFFBQUE7SUFZZixPQVhBN0UsQ0FBQSxDQUNHMkgsSUFBQSxHQUNBQyxLQUFBLENBQU0sS0FDTjNFLE9BQUEsQ0FBUSxVQUFTakQsQ0FBQTtNQUNoQixJQUFJQSxDQUFBLEVBQU87UUFDVCxJQUFJTSxDQUFBLEdBQVFOLENBQUEsQ0FBTTRILEtBQUEsQ0FBTTtVQUNwQnJILENBQUEsR0FBT0QsQ0FBQSxDQUFNdUMsS0FBQSxHQUFRMkUsT0FBQSxDQUFRLE9BQU87VUFDcEMvRyxDQUFBLEdBQVFILENBQUEsQ0FBTXlGLElBQUEsQ0FBSyxLQUFLeUIsT0FBQSxDQUFRLE9BQU87UUFDM0N2SCxDQUFBLENBQUtpRCxNQUFBLENBQU8yRSxrQkFBQSxDQUFtQnRILENBQUEsR0FBT3NILGtCQUFBLENBQW1CcEgsQ0FBQSxFQUMzRDtNQUFBO0lBQ0YsSUFDS1IsQ0FDVDtFQUFBO0VBZ0NPLFNBQVM2SCxFQUFTOUgsQ0FBQSxFQUFVQyxDQUFBO0lBQ2pDLE1BQU0sZ0JBQWdCNkgsQ0FBQSxHQUNwQixNQUFNLElBQUluSCxTQUFBLENBQVU7SUFRdEIsSUFOS1YsQ0FBQSxLQUNIQSxDQUFBLEdBQVUsQ0FBQyxJQUdiLEtBQUttRixJQUFBLEdBQU8sV0FDWixLQUFLMkMsTUFBQSxRQUE0QixNQUFuQjlILENBQUEsQ0FBUThILE1BQUEsR0FBdUIsTUFBTTlILENBQUEsQ0FBUThILE1BQUEsRUFDdkQsS0FBS0EsTUFBQSxHQUFTLE9BQU8sS0FBS0EsTUFBQSxHQUFTLEtBQ3JDLE1BQU0sSUFBSUMsVUFBQSxDQUFXO0lBRXZCLEtBQUtDLEVBQUEsR0FBSyxLQUFLRixNQUFBLElBQVUsT0FBTyxLQUFLQSxNQUFBLEdBQVMsS0FDOUMsS0FBS0csVUFBQSxRQUFvQyxNQUF2QmpJLENBQUEsQ0FBUWlJLFVBQUEsR0FBMkIsS0FBSyxLQUFLakksQ0FBQSxDQUFRaUksVUFBQSxFQUN2RSxLQUFLaEQsT0FBQSxHQUFVLElBQUluQyxDQUFBLENBQVE5QyxDQUFBLENBQVFpRixPQUFBLEdBQ25DLEtBQUs2QixHQUFBLEdBQU05RyxDQUFBLENBQVE4RyxHQUFBLElBQU8sSUFDMUIsS0FBS3ZDLFNBQUEsQ0FBVXhFLENBQUEsQ0FDakI7RUFBQTtFQXBFQTZHLENBQUEsQ0FBUXhHLFNBQUEsQ0FBVThILEtBQUEsR0FBUTtJQUN4QixPQUFPLElBQUl0QixDQUFBLENBQVEsTUFBTTtNQUFDQyxJQUFBLEVBQU0sS0FBS3JDO0lBQUEsRUFDdkM7RUFBQSxHQThDQUYsQ0FBQSxDQUFLN0QsSUFBQSxDQUFLbUcsQ0FBQSxDQUFReEcsU0FBQSxHQXNCbEJrRSxDQUFBLENBQUs3RCxJQUFBLENBQUtvSCxDQUFBLENBQVN6SCxTQUFBLEdBRW5CeUgsQ0FBQSxDQUFTekgsU0FBQSxDQUFVOEgsS0FBQSxHQUFRO0lBQ3pCLE9BQU8sSUFBSUwsQ0FBQSxDQUFTLEtBQUtyRCxTQUFBLEVBQVc7TUFDbENzRCxNQUFBLEVBQVEsS0FBS0EsTUFBQTtNQUNiRyxVQUFBLEVBQVksS0FBS0EsVUFBQTtNQUNqQmhELE9BQUEsRUFBUyxJQUFJbkMsQ0FBQSxDQUFRLEtBQUttQyxPQUFBO01BQzFCNkIsR0FBQSxFQUFLLEtBQUtBO0lBQUEsRUFFZDtFQUFBLEdBRUFlLENBQUEsQ0FBU2hFLEtBQUEsR0FBUTtJQUNmLElBQUk5RCxDQUFBLEdBQVcsSUFBSThILENBQUEsQ0FBUyxNQUFNO01BQUNDLE1BQUEsRUFBUTtNQUFLRyxVQUFBLEVBQVk7SUFBQTtJQUk1RCxPQUhBbEksQ0FBQSxDQUFTaUksRUFBQSxJQUFLLEdBQ2RqSSxDQUFBLENBQVMrSCxNQUFBLEdBQVMsR0FDbEIvSCxDQUFBLENBQVNvRixJQUFBLEdBQU8sU0FDVHBGLENBQ1Q7RUFBQTtFQUVBLElBQUlvSSxDQUFBLEdBQW1CLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSztFQUU1Q04sQ0FBQSxDQUFTTyxRQUFBLEdBQVcsVUFBU3JJLENBQUEsRUFBS0MsQ0FBQTtJQUNoQyxLQUEwQyxNQUF0Q21JLENBQUEsQ0FBaUIvRixPQUFBLENBQVFwQyxDQUFBLEdBQzNCLE1BQU0sSUFBSStILFVBQUEsQ0FBVztJQUd2QixPQUFPLElBQUlGLENBQUEsQ0FBUyxNQUFNO01BQUNDLE1BQUEsRUFBUTlILENBQUE7TUFBUWlGLE9BQUEsRUFBUztRQUFDb0QsUUFBQSxFQUFVdEk7TUFBQTtJQUFBLEVBQ2pFO0VBQUE7RUFFTyxJQUFJdUksQ0FBQSxHQUFlOUcsQ0FBQSxDQUFFK0csWUFBQTtFQUM1QjtJQUNFLElBQUlELENBQ04sQ0FETSxDQUNOO0VBQUEsQ0FBRSxRQUFPdkksQ0FBQTtJQUFBLENBQ1B1SSxDQUFBLEdBQWUsU0FBQUMsQ0FBU3hJLENBQUEsRUFBU0MsQ0FBQTtNQUMvQixLQUFLd0ksT0FBQSxHQUFVekksQ0FBQSxFQUNmLEtBQUswSSxJQUFBLEdBQU96SSxDQUFBO01BQ1osSUFBSUssQ0FBQSxHQUFRaUYsS0FBQSxDQUFNdkYsQ0FBQTtNQUNsQixLQUFLMkksS0FBQSxHQUFRckksQ0FBQSxDQUFNcUksS0FDckI7SUFBQSxHQUNhdEksU0FBQSxHQUFZUSxNQUFBLENBQU8rSCxNQUFBLENBQU9yRCxLQUFBLENBQU1sRixTQUFBLEdBQzdDa0ksQ0FBQSxDQUFhbEksU0FBQSxDQUFVRCxXQUFBLEdBQWNtSSxDQUN2QztFQUFBO0VBRU8sU0FBU00sRUFBTTdJLENBQUEsRUFBT0MsQ0FBQTtJQUMzQixPQUFPLElBQUl1RCxPQUFBLENBQVEsVUFBU2xELENBQUEsRUFBU0MsQ0FBQTtNQUNuQyxJQUFJRSxDQUFBLEdBQVUsSUFBSW9HLENBQUEsQ0FBUTdHLENBQUEsRUFBT0MsQ0FBQTtNQUVqQyxJQUFJUSxDQUFBLENBQVEwRyxNQUFBLElBQVUxRyxDQUFBLENBQVEwRyxNQUFBLENBQU8yQixPQUFBLEVBQ25DLE9BQU92SSxDQUFBLENBQU8sSUFBSWdJLENBQUEsQ0FBYSxXQUFXO01BRzVDLElBQUk1RyxDQUFBLEdBQU0sSUFBSW9ILGNBQUE7TUFFZCxTQUFTbkgsRUFBQTtRQUNQRCxDQUFBLENBQUlxSCxLQUFBLEVBQ047TUFBQTtNQWlFQSxJQS9EQXJILENBQUEsQ0FBSWdDLE1BQUEsR0FBUztRQUNYLElBNUdnQjNELENBQUE7VUFDaEJDLENBQUE7VUEyR0lNLENBQUEsR0FBVTtZQUNaMkgsVUFBQSxFQUFZdkcsQ0FBQSxDQUFJdUcsVUFBQTtZQUNoQmhELE9BQUEsR0E5R2NsRixDQUFBLEdBOEdRMkIsQ0FBQSxDQUFJc0gscUJBQUEsTUFBMkIsSUE3R3ZEaEosQ0FBQSxHQUFVLElBQUk4QyxDQUFBLElBR1EvQyxDQUFBLENBQVd3SCxPQUFBLENBQVEsZ0JBQWdCLEtBSzFESSxLQUFBLENBQU0sTUFDTjVFLEdBQUEsQ0FBSSxVQUFTaEQsQ0FBQTtjQUNaLE9BQWdDLE1BQXpCQSxDQUFBLENBQU9xQyxPQUFBLENBQVEsUUFBY3JDLENBQUEsQ0FBT2tKLE1BQUEsQ0FBTyxHQUFHbEosQ0FBQSxDQUFPbUIsTUFBQSxJQUFVbkIsQ0FDeEU7WUFBQSxHQUNDaUQsT0FBQSxDQUFRLFVBQVNqRCxDQUFBO2NBQ2hCLElBQUlNLENBQUEsR0FBUU4sQ0FBQSxDQUFLNEgsS0FBQSxDQUFNO2dCQUNuQnJILENBQUEsR0FBTUQsQ0FBQSxDQUFNdUMsS0FBQSxHQUFROEUsSUFBQTtjQUN4QixJQUFJcEgsQ0FBQSxFQUFLO2dCQUNQLElBQUlFLENBQUEsR0FBUUgsQ0FBQSxDQUFNeUYsSUFBQSxDQUFLLEtBQUs0QixJQUFBO2dCQUM1QjtrQkFDRTFILENBQUEsQ0FBUWlELE1BQUEsQ0FBTzNDLENBQUEsRUFBS0UsQ0FBQSxDQUN0QjtnQkFBQSxDQUFFLFFBQU9ULENBQUE7a0JBQ1BtSixPQUFBLENBQVFDLElBQUEsQ0FBSyxjQUFjcEosQ0FBQSxDQUFNeUksT0FBQSxDQUNuQztnQkFBQTtjQUNGO1lBQ0YsSUFDS3hJLENBQUE7VUFBQTtRQXlGb0MsTUFBbkNRLENBQUEsQ0FBUXNHLEdBQUEsQ0FBSTFFLE9BQUEsQ0FBUSxlQUFxQlYsQ0FBQSxDQUFJb0csTUFBQSxHQUFTLE9BQU9wRyxDQUFBLENBQUlvRyxNQUFBLEdBQVMsT0FDNUV4SCxDQUFBLENBQVF3SCxNQUFBLEdBQVMsTUFFakJ4SCxDQUFBLENBQVF3SCxNQUFBLEdBQVNwRyxDQUFBLENBQUlvRyxNQUFBLEVBRXZCeEgsQ0FBQSxDQUFRd0csR0FBQSxHQUFNLGlCQUFpQnBGLENBQUEsR0FBTUEsQ0FBQSxDQUFJMEgsV0FBQSxHQUFjOUksQ0FBQSxDQUFRMkUsT0FBQSxDQUFRQyxHQUFBLENBQUk7UUFDM0UsSUFBSTFELENBQUEsR0FBTyxjQUFjRSxDQUFBLEdBQU1BLENBQUEsQ0FBSTJILFFBQUEsR0FBVzNILENBQUEsQ0FBSTRILFlBQUE7UUFDbERDLFVBQUEsQ0FBVztVQUNUbEosQ0FBQSxDQUFRLElBQUl3SCxDQUFBLENBQVNyRyxDQUFBLEVBQU1sQixDQUFBLEVBQzdCO1FBQUEsR0FBRyxFQUNMO01BQUEsR0FFQW9CLENBQUEsQ0FBSWtDLE9BQUEsR0FBVTtRQUNaMkYsVUFBQSxDQUFXO1VBQ1RqSixDQUFBLENBQU8sSUFBSUksU0FBQSxDQUFVLDBCQUN2QjtRQUFBLEdBQUcsRUFDTDtNQUFBLEdBRUFnQixDQUFBLENBQUk4SCxTQUFBLEdBQVk7UUFDZEQsVUFBQSxDQUFXO1VBQ1RqSixDQUFBLENBQU8sSUFBSUksU0FBQSxDQUFVLDZCQUN2QjtRQUFBLEdBQUcsRUFDTDtNQUFBLEdBRUFnQixDQUFBLENBQUkrSCxPQUFBLEdBQVU7UUFDWkYsVUFBQSxDQUFXO1VBQ1RqSixDQUFBLENBQU8sSUFBSWdJLENBQUEsQ0FBYSxXQUFXLGNBQ3JDO1FBQUEsR0FBRyxFQUNMO01BQUEsR0FVQTVHLENBQUEsQ0FBSWdJLElBQUEsQ0FBS2xKLENBQUEsQ0FBUXdHLE1BQUEsRUFSakIsVUFBZ0JqSCxDQUFBO1FBQ2Q7VUFDRSxPQUFlLE9BQVJBLENBQUEsSUFBY3lCLENBQUEsQ0FBRTZHLFFBQUEsQ0FBU3NCLElBQUEsR0FBT25JLENBQUEsQ0FBRTZHLFFBQUEsQ0FBU3NCLElBQUEsR0FBTzVKLENBQzNEO1FBQUEsQ0FBRSxRQUFPQyxDQUFBO1VBQ1AsT0FBT0QsQ0FDVDtRQUFBO01BQ0YsQ0FFeUIsQ0FBT1MsQ0FBQSxDQUFRc0csR0FBQSxJQUFNLElBRWxCLGNBQXhCdEcsQ0FBQSxDQUFRdUcsV0FBQSxHQUNWckYsQ0FBQSxDQUFJa0ksZUFBQSxJQUFrQixJQUNXLFdBQXhCcEosQ0FBQSxDQUFRdUcsV0FBQSxLQUNqQnJGLENBQUEsQ0FBSWtJLGVBQUEsSUFBa0IsSUFHcEIsa0JBQWtCbEksQ0FBQSxLQUNoQkUsQ0FBQSxHQUNGRixDQUFBLENBQUltSSxZQUFBLEdBQWUsU0FFbkI5SCxDQUFBLEtBRUFMLENBQUEsQ0FBSW1JLFlBQUEsR0FBZSxpQkFJbkI3SixDQUFBLElBQWdDLG1CQUFqQkEsQ0FBQSxDQUFLaUYsT0FBQSxNQUEwQmpGLENBQUEsQ0FBS2lGLE9BQUEsWUFBbUJuQyxDQUFBLElBQVl0QixDQUFBLENBQUVzSSxPQUFBLElBQVc5SixDQUFBLENBQUtpRixPQUFBLFlBQW1CekQsQ0FBQSxDQUFFc0ksT0FBQSxHQUFXO1FBQ3RJLElBQUloSSxDQUFBLEdBQVE7UUFDWmxCLE1BQUEsQ0FBT3VDLG1CQUFBLENBQW9CbkQsQ0FBQSxDQUFLaUYsT0FBQSxFQUFTakMsT0FBQSxDQUFRLFVBQVNqRCxDQUFBO1VBQ3hEK0IsQ0FBQSxDQUFNMEUsSUFBQSxDQUFLbEUsQ0FBQSxDQUFjdkMsQ0FBQSxJQUN6QjJCLENBQUEsQ0FBSXFJLGdCQUFBLENBQWlCaEssQ0FBQSxFQUFNMEMsQ0FBQSxDQUFlekMsQ0FBQSxDQUFLaUYsT0FBQSxDQUFRbEYsQ0FBQSxHQUN6RDtRQUFBLElBQ0FTLENBQUEsQ0FBUXlFLE9BQUEsQ0FBUWpDLE9BQUEsQ0FBUSxVQUFTakQsQ0FBQSxFQUFPQyxDQUFBO1VBQUEsQ0FDVCxNQUF6QjhCLENBQUEsQ0FBTU0sT0FBQSxDQUFRcEMsQ0FBQSxLQUNoQjBCLENBQUEsQ0FBSXFJLGdCQUFBLENBQWlCL0osQ0FBQSxFQUFNRCxDQUFBLENBRS9CO1FBQUEsRUFDRjtNQUFBLE9BQ0VTLENBQUEsQ0FBUXlFLE9BQUEsQ0FBUWpDLE9BQUEsQ0FBUSxVQUFTakQsQ0FBQSxFQUFPQyxDQUFBO1FBQ3RDMEIsQ0FBQSxDQUFJcUksZ0JBQUEsQ0FBaUIvSixDQUFBLEVBQU1ELENBQUEsQ0FDN0I7TUFBQTtNQUdFUyxDQUFBLENBQVEwRyxNQUFBLEtBQ1YxRyxDQUFBLENBQVEwRyxNQUFBLENBQU84QyxnQkFBQSxDQUFpQixTQUFTckksQ0FBQSxHQUV6Q0QsQ0FBQSxDQUFJdUksa0JBQUEsR0FBcUI7UUFFQSxNQUFuQnZJLENBQUEsQ0FBSXdJLFVBQUEsSUFDTjFKLENBQUEsQ0FBUTBHLE1BQUEsQ0FBT2lELG1CQUFBLENBQW9CLFNBQVN4SSxDQUFBLENBRWhEO01BQUEsSUFHRkQsQ0FBQSxDQUFJMEksSUFBQSxNQUFrQyxNQUF0QjVKLENBQUEsQ0FBUWdFLFNBQUEsR0FBNEIsT0FBT2hFLENBQUEsQ0FBUWdFLFNBQUEsQ0FDckU7SUFBQSxFQUNGO0VBQUE7RUN4bkJBLFNBQVM2RixFQUFnQnRLLENBQUEsRUFBR0MsQ0FBQTtJQUMxQixNQUFNRCxDQUFBLFlBQWFDLENBQUEsR0FBSSxNQUFNLElBQUlVLFNBQUEsQ0FBVSxvQ0FDN0M7RUFBQTtFQ0RBLFNBQVM0SixFQUFrQnZLLENBQUEsRUFBR0MsQ0FBQTtJQUM1QixLQUFLLElBQUlNLENBQUEsR0FBSSxHQUFHQSxDQUFBLEdBQUlOLENBQUEsQ0FBRWtCLE1BQUEsRUFBUVosQ0FBQSxJQUFLO01BQ2pDLElBQUlFLENBQUEsR0FBSVIsQ0FBQSxDQUFFTSxDQUFBO01BQ1ZFLENBQUEsQ0FBRU8sVUFBQSxHQUFhUCxDQUFBLENBQUVPLFVBQUEsS0FBYyxHQUFJUCxDQUFBLENBQUVRLFlBQUEsSUFBZSxHQUFJLFdBQVdSLENBQUEsS0FBTUEsQ0FBQSxDQUFFUyxRQUFBLElBQVcsSUFBS0wsTUFBQSxDQUFPQyxjQUFBLENBQWVkLENBQUEsRUFBR00sQ0FBQSxDQUFjRyxDQUFBLENBQUUrSixHQUFBLEdBQU0vSixDQUFBLENBQzVJO0lBQUE7RUFDRjtFQUNBLFNBQVNnSyxFQUFhekssQ0FBQSxFQUFHQyxDQUFBLEVBQUdLLENBQUE7SUFDMUIsT0FBT0wsQ0FBQSxJQUFLc0ssQ0FBQSxDQUFrQnZLLENBQUEsQ0FBRUssU0FBQSxFQUFXSixDQUFBLEdBQUlLLENBQUEsSUFBS2lLLENBQUEsQ0FBa0J2SyxDQUFBLEVBQUdNLENBQUEsR0FBSU8sTUFBQSxDQUFPQyxjQUFBLENBQWVkLENBQUEsRUFBRyxhQUFhO01BQ2pIa0IsUUFBQSxHQUFVO0lBQUEsSUFDUmxCLENBQ047RUFBQTtFRittQkE2SSxDQUFBLENBQU02QixRQUFBLElBQVcsR0FFWmpKLENBQUEsQ0FBRWtKLEtBQUEsS0FDTGxKLENBQUEsQ0FBRWtKLEtBQUEsR0FBUTlCLENBQUEsRUFDVnBILENBQUEsQ0FBRXNJLE9BQUEsR0FBVWhILENBQUEsRUFDWnRCLENBQUEsQ0FBRW1KLE9BQUEsR0FBVS9ELENBQUEsRUFDWnBGLENBQUEsQ0FBRW9KLFFBQUEsR0FBVy9DLENBQUE7RUcvbkJSLElBQU1nRCxDQUFBLEdBQWdCO0lBQUEsT0FBQUwsQ0FBQSxVQUFBekssRUFBQTtNQUFBc0ssQ0FBQSxPQUFBdEssQ0FBQTtJQUFBO01BQUF3SyxHQUFBO01BQUF6SixLQUFBLEVBQ3pCLFNBQUFBLENBQXFCZixDQUFBLEVBQWFDLENBQUE7UUFDOUIsSUFBSUssQ0FBQSxJQUFlO1VBQ2JDLENBQUEsR0FBT3dLLFFBQUEsQ0FBU0Msb0JBQUEsQ0FBcUIsUUFBUSxNQUFNRCxRQUFBLENBQVNFLGVBQUE7VUFFNUR4SyxDQUFBLEdBQWNzSyxRQUFBLENBQVNHLGFBQUEsQ0FBYztRQUUzQyxTQUFTekosRUFBQTtVQUNEbkIsQ0FBQSxJQUlDRyxDQUFBLENBQU8wSixVQUFBLElBQW9DLGFBQXRCMUosQ0FBQSxDQUFPMEosVUFBQSxJQUFpRCxlQUF0QjFKLENBQUEsQ0FBTzBKLFVBQUEsS0FDL0Q3SixDQUFBLElBQWUsR0FDZkwsQ0FBQSxHQUVSO1FBQUE7UUFNQVEsQ0FBQSxDQUFPa0QsTUFBQSxHQUFTbEMsQ0FBQSxFQUNoQmhCLENBQUEsQ0FBT3lKLGtCQUFBLEdBQXFCekksQ0FBQSxFQUk1QmhCLENBQUEsQ0FBT29ELE9BQUEsR0FBVTtVQUNUcEQsQ0FBQSxDQUFPMEssVUFBQSxJQUNQMUssQ0FBQSxDQUFPMEssVUFBQSxDQUFXQyxXQUFBLENBQVkzSyxDQUFBLEdBRWxDUixDQUFBLENBQVMsSUFBSXNGLEtBQUEsQ0FBTSwrQkFDdkI7UUFBQSxHQUtBOUUsQ0FBQSxDQUFPNEssR0FBQSxHQUFNckwsQ0FBQSxFQUNiUyxDQUFBLENBQU82SyxZQUFBLENBQWEsZUFBZSxvQkFDbkMvSyxDQUFBLENBQUtnTCxXQUFBLENBQVk5SyxDQUFBLENBQ3JCO01BQUE7SUFBQSxHQUFDO01BQUErSixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBeUJmLENBQUEsRUFBYUMsQ0FBQSxFQUFzQkssQ0FBQTtRQUF5QyxJQUFBQyxDQUFBO1VBVTNGRSxDQUFBLEdBQStDLFVBQTNDRixDQUFBLEdBQUd3SyxRQUFBLENBQVNDLG9CQUFBLENBQXFCLFFBQVEsWUFBRSxNQUFBekssQ0FBQSxHQUFBQSxDQUFBLEdBQUl3SyxRQUFBLENBQVNFLGVBQUE7VUFDNUR4SixDQUFBLEdBQU9zSixRQUFBLENBQVNHLGFBQUEsQ0FBYztRQUVwQ3pKLENBQUEsQ0FBSzZKLFlBQUEsQ0FBYSxPQUFPLGVBQ3pCN0osQ0FBQSxDQUFLNkosWUFBQSxDQUFhLFFBQVEsYUFDMUI3SixDQUFBLENBQUt3SSxnQkFBQSxDQUFpQixRQWROO1VBQUgsT0FBUzNKLENBQUEsTUFBUyxFQUFVO1FBQUEsSUFlekNtQixDQUFBLENBQUt3SSxnQkFBQSxDQUFpQixTQWRQO1VBRVAzSixDQUFBLENBREFMLENBQUEsUUFDUyxJQUVBLElBQUlzRixLQUFBLENBQU0sbUNBRTNCO1FBQUEsSUFTQTlFLENBQUEsQ0FBSzhLLFdBQUEsQ0FBWTlKLENBQUEsR0FDakJBLENBQUEsQ0FBSzZKLFlBQUEsQ0FBYSxRQUFRdEwsQ0FBQSxDQUM5QjtNQUFBO0lBQUEsR0FBQztFQUFBLENBN0R3QjtFQ0Q3QixTQUFTd0wsRUFBVXhMLENBQUE7SUFDZixPQUFxQixtQkFBVkEsQ0FBQSxHQUNPLFlBQVZBLENBQUEsSUFHVSxXQUFWQSxDQUFBLEdBS0R5TCxPQUFBLENBQVF6TCxDQUFBLENBQ25CO0VBQUE7RUFFTyxJQUFNMEwsQ0FBQSxHQUFpQjtJQUMxQkMsVUFBQSxFQUFZSCxDQUFBLENBQVU7SUFDdEJJLGNBQUEsRUFBZ0I7SUFDaEJDLFlBQUEsRUFBY0wsQ0FBQSxDQUFVO0lBQ3hCTSxtQkFBQSxFQUFxQk4sQ0FBQSxDQUFVO0lBQy9CTyxxQkFBQSxFQUF1QlAsQ0FBQSxDQUFVO0lBQ2pDUSxZQUFBLEVBQWM7SUFDZEMsYUFBQSxFQUFlO0VBQUE7RUNwQm5CLFNBQVNDLEVBQW1CbE0sQ0FBQSxFQUFHQyxDQUFBLEVBQUdLLENBQUEsRUFBR0MsQ0FBQSxFQUFHRSxDQUFBLEVBQUdnQixDQUFBLEVBQUdFLENBQUE7SUFDNUM7TUFDRSxJQUFJQyxDQUFBLEdBQUk1QixDQUFBLENBQUV5QixDQUFBLEVBQUdFLENBQUE7UUFDWEUsQ0FBQSxHQUFJRCxDQUFBLENBQUViLEtBQ1Y7SUFBQSxDQUFFLFFBQU9mLENBQUE7TUFDUCxZQUFZTSxDQUFBLENBQUVOLENBQUEsQ0FDaEI7SUFBQTtJQUNBNEIsQ0FBQSxDQUFFa0IsSUFBQSxHQUFPN0MsQ0FBQSxDQUFFNEIsQ0FBQSxJQUFLMkIsT0FBQSxDQUFROEIsT0FBQSxDQUFRekQsQ0FBQSxFQUFHNkQsSUFBQSxDQUFLbkYsQ0FBQSxFQUFHRSxDQUFBLENBQzdDO0VBQUE7RUFDQSxTQUFTMEwsRUFBa0JuTSxDQUFBO0lBQ3pCLE9BQU87TUFDTCxJQUFJQyxDQUFBLEdBQUk7UUFDTkssQ0FBQSxHQUFJOEwsU0FBQTtNQUNOLE9BQU8sSUFBSTVJLE9BQUEsQ0FBUSxVQUFVakQsQ0FBQSxFQUFHRSxDQUFBO1FBQzlCLElBQUlnQixDQUFBLEdBQUl6QixDQUFBLENBQUVxTSxLQUFBLENBQU1wTSxDQUFBLEVBQUdLLENBQUE7UUFDbkIsU0FBU3FCLEVBQU0zQixDQUFBO1VBQ2JrTSxDQUFBLENBQW1CekssQ0FBQSxFQUFHbEIsQ0FBQSxFQUFHRSxDQUFBLEVBQUdrQixDQUFBLEVBQU9DLENBQUEsRUFBUSxRQUFRNUIsQ0FBQSxDQUNyRDtRQUFBO1FBQ0EsU0FBUzRCLEVBQU81QixDQUFBO1VBQ2RrTSxDQUFBLENBQW1CekssQ0FBQSxFQUFHbEIsQ0FBQSxFQUFHRSxDQUFBLEVBQUdrQixDQUFBLEVBQU9DLENBQUEsRUFBUSxTQUFTNUIsQ0FBQSxDQUN0RDtRQUFBO1FBQ0EyQixDQUFBLE1BQU0sRUFDUjtNQUFBLEVBQ0Y7SUFBQSxDQUNGO0VBQUE7RUN4QkEsU0FBUzJLLEVBQWdCdE0sQ0FBQTtJQUN2QixPQUFPc00sQ0FBQSxHQUFrQnpMLE1BQUEsQ0FBTzBMLGNBQUEsR0FBaUIxTCxNQUFBLENBQU8yTCxjQUFBLENBQWVDLElBQUEsS0FBUyxVQUFVek0sQ0FBQTtNQUN4RixPQUFPQSxDQUFBLENBQUUwTSxTQUFBLElBQWE3TCxNQUFBLENBQU8yTCxjQUFBLENBQWV4TSxDQUFBLENBQzlDO0lBQUEsR0FBR3NNLENBQUEsQ0FBZ0J0TSxDQUFBLENBQ3JCO0VBQUE7RUNKQSxTQUFTMk0sRUFBZ0IzTSxDQUFBLEVBQUdDLENBQUE7SUFDMUIsT0FBTzBNLENBQUEsR0FBa0I5TCxNQUFBLENBQU8wTCxjQUFBLEdBQWlCMUwsTUFBQSxDQUFPMEwsY0FBQSxDQUFlRSxJQUFBLEtBQVMsVUFBVXpNLENBQUEsRUFBR0MsQ0FBQTtNQUMzRixPQUFPRCxDQUFBLENBQUUwTSxTQUFBLEdBQVl6TSxDQUFBLEVBQUdELENBQzFCO0lBQUEsR0FBRzJNLENBQUEsQ0FBZ0IzTSxDQUFBLEVBQUdDLENBQUEsQ0FDeEI7RUFBQTtFQ0hBLFNBQVMyTSxFQUFVNU0sQ0FBQSxFQUFHQyxDQUFBO0lBQ3BCLElBQUkscUJBQXFCQSxDQUFBLElBQUssU0FBU0EsQ0FBQSxFQUFHLE1BQU0sSUFBSVUsU0FBQSxDQUFVO0lBQzlEWCxDQUFBLENBQUVLLFNBQUEsR0FBWVEsTUFBQSxDQUFPK0gsTUFBQSxDQUFPM0ksQ0FBQSxJQUFLQSxDQUFBLENBQUVJLFNBQUEsRUFBVztNQUM1Q0QsV0FBQSxFQUFhO1FBQ1hXLEtBQUEsRUFBT2YsQ0FBQTtRQUNQa0IsUUFBQSxHQUFVO1FBQ1ZELFlBQUEsR0FBYztNQUFBO0lBQUEsSUFFZEosTUFBQSxDQUFPQyxjQUFBLENBQWVkLENBQUEsRUFBRyxhQUFhO01BQ3hDa0IsUUFBQSxHQUFVO0lBQUEsSUFDUmpCLENBQUEsSUFBSzBNLENBQUEsQ0FBZTNNLENBQUEsRUFBR0MsQ0FBQSxDQUM3QjtFQUFBO0VDWkEsU0FBUzRNLEVBQUE7SUFDUDtNQUNFLElBQUk3TSxDQUFBLElBQUt5TCxPQUFBLENBQVFwTCxTQUFBLENBQVV5TSxPQUFBLENBQVFwTSxJQUFBLENBQUtxTSxPQUFBLENBQVFDLFNBQUEsQ0FBVXZCLE9BQUEsRUFBUyxJQUFJLGFBQWEsR0FDdEY7SUFBQSxDQUFFLFFBQU96TCxDQUFBLEdBQUk7SUFDYixRQUFRNk0sQ0FBQSxHQUE0QixTQUFBSSxDQUFBO01BQ2xDLFNBQVNqTixDQUNYO0lBQUEsSUFDRjtFQUFBO0VDSEEsU0FBU2tOLEVBQWlCbE4sQ0FBQTtJQUN4QixJQUFJQyxDQUFBLEdBQUkscUJBQXFCa04sR0FBQSxHQUFNLElBQUlBLEdBQUEsVUFBUTtJQUMvQyxPQUFPRCxDQUFBLEdBQW1CLFNBQUFFLENBQTBCcE4sQ0FBQTtNQUNsRCxJQUFJLFNBQVNBLENBQUEsS0NQakIsVUFBMkJBLENBQUE7UUFDekI7VUFDRSxRQUFRLE1BQU11QixRQUFBLENBQVNlLFFBQUEsQ0FBUzVCLElBQUEsQ0FBS1YsQ0FBQSxFQUFHcUMsT0FBQSxDQUFRLGdCQUNsRDtRQUFBLENBQUUsUUFBT3BDLENBQUE7VUFDUCxPQUFPLHFCQUFxQkQsQ0FDOUI7UUFBQTtNQUNGLENEQ3VCLENBQWlCQSxDQUFBLEdBQUksT0FBT0EsQ0FBQTtNQUMvQyxJQUFJLHFCQUFxQkEsQ0FBQSxFQUFHLE1BQU0sSUFBSVcsU0FBQSxDQUFVO01BQ2hELFNBQUksTUFBV1YsQ0FBQSxFQUFHO1FBQ2hCLElBQUlBLENBQUEsQ0FBRXFHLEdBQUEsQ0FBSXRHLENBQUEsR0FBSSxPQUFPQyxDQUFBLENBQUVrRixHQUFBLENBQUluRixDQUFBO1FBQzNCQyxDQUFBLENBQUVvRSxHQUFBLENBQUlyRSxDQUFBLEVBQUdNLENBQUEsQ0FDWDtNQUFBO01BQ0EsU0FBU0EsRUFBQTtRQUNQLE9FWk4sVUFBb0JOLENBQUEsRUFBR0MsQ0FBQSxFQUFHSyxDQUFBO1VBQ3hCLElBQUl1TSxDQUFBLElBQTRCLE9BQU9FLE9BQUEsQ0FBUUMsU0FBQSxDQUFVWCxLQUFBLENBQU0sTUFBTUQsU0FBQTtVQUNyRSxJQUFJN0wsQ0FBQSxHQUFJLENBQUM7VUFDVEEsQ0FBQSxDQUFFa0csSUFBQSxDQUFLNEYsS0FBQSxDQUFNOUwsQ0FBQSxFQUFHTixDQUFBO1VBQ2hCLElBQUlRLENBQUEsR0FBSSxLQUFLVCxDQUFBLENBQUV5TSxJQUFBLENBQUtKLEtBQUEsQ0FBTXJNLENBQUEsRUFBR08sQ0FBQTtVQUM3QixPQUFPRCxDQUFBLElBQUtxTSxDQUFBLENBQWVsTSxDQUFBLEVBQUdILENBQUEsQ0FBRUQsU0FBQSxHQUFZSSxDQUM5QztRQUFBLENGTWEsQ0FBVVQsQ0FBQSxFQUFHb00sU0FBQSxFQUFXRSxDQUFBLENBQWUsTUFBTWxNLFdBQUEsQ0FDdEQ7TUFBQTtNQUNBLE9BQU9FLENBQUEsQ0FBUUQsU0FBQSxHQUFZUSxNQUFBLENBQU8rSCxNQUFBLENBQU81SSxDQUFBLENBQUVLLFNBQUEsRUFBVztRQUNwREQsV0FBQSxFQUFhO1VBQ1hXLEtBQUEsRUFBT1QsQ0FBQTtVQUNQVSxVQUFBLEdBQVk7VUFDWkUsUUFBQSxHQUFVO1VBQ1ZELFlBQUEsR0FBYztRQUFBO01BQUEsSUFFZDBMLENBQUEsQ0FBZXJNLENBQUEsRUFBU04sQ0FBQSxDQUM5QjtJQUFBLEdBQUdrTixDQUFBLENBQWlCbE4sQ0FBQSxDQUN0QjtFQUFBOztxQkd2QkEsVUFBb0NBLENBQUEsRUFBR00sQ0FBQTtNQUNyQyxJQUFJQSxDQUFBLEtBQU0sWUFBWUwsQ0FBQSxDQUFRSyxDQUFBLEtBQU0scUJBQXFCQSxDQUFBLEdBQUksT0FBT0EsQ0FBQTtNQUNwRSxTQUFJLE1BQVdBLENBQUEsRUFBRyxNQUFNLElBQUlLLFNBQUEsQ0FBVTtNQUN0QyxPQ0xGLFVBQWdDWCxDQUFBO1FBQzlCLFNBQUksTUFBV0EsQ0FBQSxFQUFHLE1BQU0sSUFBSXFOLGNBQUEsQ0FBZTtRQUMzQyxPQUFPck4sQ0FDVDtNQUFBLENERVMsQ0FBc0JBLENBQUEsQ0FDL0I7SUFBQSxDOzs7Ozs7Ozs7O0VFTk8sSUFPTXNOLENBQUEsR0FBbUIsVUFBQXROLENBQUE7SUFDNUIsU0FBQUMsRUFBQTtNQUFxQixPQUFBcUssQ0FBQSxPQUFBckssQ0FBQSxHQUFBc04sQ0FBQSxPQUFBdE4sQ0FBQSxHQUNYLDZCQUNWO0lBQUE7SUFBQyxPQUFBMk0sQ0FBQSxDQUFBM00sQ0FBQSxFQUFBRCxDQUFBLEdBQUF5SyxDQUFBLENBQUF4SyxDQUFBO0VBQUEsQ0FIMkIsQ0FQSCxVQUFBRCxDQUFBO0lBQ3pCLFNBQUFDLEVBQW1CRCxDQUFBO01BQWlCLElBQUFNLENBQUE7TUFFRSxPQUZGZ0ssQ0FBQSxPQUFBckssQ0FBQSxJQUNoQ0ssQ0FBQSxHQUFBaU4sQ0FBQSxPQUFBdE4sQ0FBQSxHQUFNRCxDQUFBLElBQ0QwSSxJQUFBLEdBQU9wSSxDQUFBLENBQUtGLFdBQUEsQ0FBWXNJLElBQUEsRUFBS3BJLENBQ3RDO0lBQUE7SUFBQyxPQUFBc00sQ0FBQSxDQUFBM00sQ0FBQSxFQUFBRCxDQUFBLEdBQUF5SyxDQUFBLENBQUF4SyxDQUFBO0VBQUEsQ0FKd0IsQ0FJeEJpTixDQUFBLENBSmlDM0gsS0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ3dEL0IsU0FBU2lJLEVBQXFCeE4sQ0FBQSxFQUFlQyxDQUFBO0lBQ2hELElBQWlCLFFBQWJBLENBQUEsRUFBd0I7TUFDeEIsSUFBWSxRQUFSRCxDQUFBLEVBQ0EsTUFBTSxJQUFJdUYsS0FBQSxDQUFNO01BRXBCLE9BQU8sQ0FBQyxTQUFTLFVBQVV2RixDQUFBLEVBQU1DLENBQUEsQ0FDckM7SUFBQTtJQUNBLE9BQVksUUFBUkQsQ0FBQSxHQUNPLENBQUMsU0FBUyxVQUFVQSxDQUFBLElBRXhCLENBQUMsU0FBUyxTQUNyQjtFQUFBO0VBRUEsU0FBU3lOLEVBQWV6TixDQUFBO0lBQ3BCLE9BQU9hLE1BQUEsQ0FBTzJGLElBQUEsQ0FBS3hHLENBQUEsRUFDZDBOLE1BQUEsQ0FBTyxVQUFBek4sQ0FBQTtNQUFJLE9BQUlELENBQUEsQ0FBTUMsQ0FBQSxLQUFTWSxNQUFBLENBQU9SLFNBQUEsQ0FBVWtHLGNBQUEsQ0FBZTdGLElBQUEsQ0FBS1YsQ0FBQSxDQUFNQyxDQUFBLEdBQU8sUUFBUTtJQUFBLEdBQ3hGK0MsR0FBQSxDQUFJLFVBQUEvQyxDQUFBO01BQ0QsSUFBTUssQ0FBQSxHQUFTTixDQUFBLENBQU1DLENBQUE7TUFDckIsT0FBYyxRQUFWSyxDQUFBLEdBQ08sQ0FBQyxJQUVaQyxDQUFBLEtBQVVOLENBQUEsRUFBT0ssQ0FBQSxDQUFPUyxLQUFBLENBQzVCO0lBQUEsRUFDUjtFQUFBO0VBRUEsU0FBUzRNLEVBQWtCM04sQ0FBQTtJQUN2QixPQUFPQSxDQUFBLENBQU80TixNQUFBLENBQ1YsVUFBQzVOLENBQUEsRUFBUUMsQ0FBQTtNQUFLLE9BQUE0TixDQUFBLENBQUFBLENBQUEsS0FDUDdOLENBQUEsR0FDQUMsQ0FBQSxDQUFLO0lBQUEsR0FFWixDQUFDLEVBRVQ7RUFBQTtFQUFDLElBRUs2TixDQUFBLEdBQWdCO0lBS2pCLE9BQUFyRCxDQUFBLENBRkQsU0FBQXpLLEVBQW1CQyxDQUFBO01BQW1CcUssQ0FBQSxPQUFBdEssQ0FBQSxRQUZyQitOLElBQUEsUUFBSSxHQUdqQixLQUFLQSxJQUFBLEdBQU85TixDQUNoQjtJQUFBLEdBQUM7TUFBQXVLLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFpQ2YsQ0FBQTtRQUM3QixNQUFNLElBQUl1RixLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQUNJLE1BQU0sSUFBSXdFLEtBQUEsQ0FBTSwwQkFDcEI7TUFBQTtJQUFBLEdBQUM7TUFBQWlGLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFBO1FBQ0ksTUFBTSxJQUFJd0UsS0FBQSxDQUFNLDBCQUNwQjtNQUFBO0lBQUEsR0FBQztNQUFBaUYsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQW1CZixDQUFBO1FBQ2YsTUFBTSxJQUFJdUYsS0FBQSxDQUFNLDBCQUNwQjtNQUFBO0lBQUEsR0FBQztNQUFBaUYsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQUE7UUFDSSxNQUFNLElBQUl3RSxLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBbUJmLENBQUE7UUFDZixNQUFNLElBQUl1RixLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEdBQUFOLENBQUEsR0FBQTBMLENBQUEsQ0FBQTZCLGtCQUFBLENBQUFDLElBQUEsQ0FFRCxTQUFBak8sRUFBb0NDLENBQUE7UUFBWSxPQUFBK04sa0JBQUEsQ0FBQUUsSUFBQSxXQUFBbE8sQ0FBQTtVQUFBLGlCQUFBQSxDQUFBLENBQUFtTyxJQUFBLEdBQUFuTyxDQUFBLENBQUE0QyxJQUFBO1lBQUE7Y0FBQSxNQUN0QyxJQUFJMkMsS0FBQSxDQUFNO1lBQTBCO1lBQUE7Y0FBQSxPQUFBdkYsQ0FBQSxDQUFBb08sSUFBQTtVQUFBO1FBQUEsR0FBQXBPLENBQUE7TUFBQSxLQUM3QyxVQUFBQSxDQUFBO1FBQUEsT0FBQVMsQ0FBQSxDQUFBNEwsS0FBQSxPQUFBRCxTQUFBO01BQUE7SUFBQTtNQUFBNUIsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQUE7UUFDSSxNQUFNLElBQUl3RSxLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEdBQUFULENBQUEsR0FBQTZMLENBQUEsQ0FBQTZCLGtCQUFBLENBQUFDLElBQUEsQ0FFRCxTQUFBak8sRUFDSUMsQ0FBQTtRQUFnQixPQUFBK04sa0JBQUEsQ0FBQUUsSUFBQSxXQUFBbE8sQ0FBQTtVQUFBLGlCQUFBQSxDQUFBLENBQUFtTyxJQUFBLEdBQUFuTyxDQUFBLENBQUE0QyxJQUFBO1lBQUE7Y0FBQSxNQUVWLElBQUkyQyxLQUFBLENBQU07WUFBMEI7WUFBQTtjQUFBLE9BQUF2RixDQUFBLENBQUFvTyxJQUFBO1VBQUE7UUFBQSxHQUFBcE8sQ0FBQTtNQUFBLEtBQzdDLFVBQUFBLENBQUE7UUFBQSxPQUFBTSxDQUFBLENBQUErTCxLQUFBLE9BQUFELFNBQUE7TUFBQTtJQUFBO01BQUE1QixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBa0NmLENBQUE7UUFDOUIsTUFBTSxJQUFJdUYsS0FBQSxDQUFNLDBCQUNwQjtNQUFBO0lBQUEsR0FBQztNQUFBaUYsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQUE7UUFDSSxNQUFNLElBQUl3RSxLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBZ0JmLENBQUE7UUFDWixNQUFNLElBQUl1RixLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FDSWYsQ0FBQTtRQUVBLE1BQU0sSUFBSXVGLEtBQUEsQ0FBTSwwQkFDcEI7TUFBQTtJQUFBLEdBQUM7TUFBQWlGLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUF1QmYsQ0FBQSxFQUF1QkMsQ0FBQTtRQUMxQyxNQUFNLElBQUlzRixLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBYWYsQ0FBQSxFQUFzQkMsQ0FBQTtRQUMvQixNQUFNLElBQUlzRixLQUFBLENBQU0sMEJBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBQ0QsU0FBQUEsQ0FBcUJmLENBQUEsRUFBa0JDLENBQUE7UUFDbkMsTUFBTSxJQUFJc0YsS0FBQSxDQUFNLDBCQUNwQjtNQUFBO0lBQUEsR0FBQztNQUFBaUYsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQWdCZixDQUFBLEVBQWFDLENBQUE7UUFDekIsT0FBTyxLQUFLOE4sSUFBQSxDQUFLTSxpQkFBQSxDQUFrQkMsb0JBQUEsQ0FBcUJ0TyxDQUFBLEVBQUt1TyxLQUFBLENBQU10TyxDQUFBLENBQ3ZFO01BQUE7SUFBQSxHQUFDO01BQUF1SyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBVWYsQ0FBQSxFQUFtQkMsQ0FBQTtRQUN6QixLQUFLOE4sSUFBQSxDQUFLUyxZQUFBLENBQWFDLEVBQUEsQ0FBRyxDQUFDLFFBQVF6TyxDQUFBLEdBQVlDLENBQUEsQ0FDbkQ7TUFBQTtJQUFBLEdBQUM7TUFBQXVLLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFXZixDQUFBLEVBQW1CQyxDQUFBO1FBQzFCLEtBQUs4TixJQUFBLENBQUtTLFlBQUEsQ0FBYUUsR0FBQSxDQUFJLENBQUMsUUFBUTFPLENBQUEsR0FBWUMsQ0FBQSxDQUNwRDtNQUFBO0lBQUEsR0FBQztNQUFBdUssR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQXFCZixDQUFBLEVBQXlCQyxDQUFBO1FBRTFDLE1BQU1zRixLQUFBLENBQU0sNENBQ2hCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQUNJLE9BQU8sS0FBS2dOLElBQUEsQ0FBS1ksU0FBQSxDQUFVdEUsSUFBQSxFQUMvQjtNQUFBO0lBQUEsR0FBQztNQUFBRyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQU1JLE9BTEEsS0FBS2dOLElBQUEsQ0FBS1ksU0FBQSxDQUFVQyxZQUFBLElBQ2hCLEtBQUtiLElBQUEsQ0FBS2MsT0FBQSxJQUNWLEtBQUtkLElBQUEsQ0FBS2MsT0FBQSxJQUdQLEtBQUtkLElBQUEsQ0FBS1ksU0FBQSxDQUFVdEUsSUFBQSxFQUMvQjtNQUFBO0lBQUEsR0FBQztNQUFBRyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQUVJLE9BQU8sRUFDWDtNQUFBO0lBQUEsR0FBQztNQUFBeUosR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQUE7UUFDSSxJQUFNZixDQUFBLEdBQU9hLE1BQUEsQ0FBTzJGLElBQUEsQ0FBSyxLQUFLdUgsSUFBQSxDQUFLZSxLQUFBLENBQU1DLFFBQUEsQ0FBUyxLQUFLaEIsSUFBQSxDQUFLaUIsUUFBQSxDQUFTQyxRQUFBO1FBR3JFLE9BQU8sS0FBS2xCLElBQUEsQ0FBS21CLFNBQUEsQ0FBVUMsV0FBQSxDQUFZblAsQ0FBQSxDQUMzQztNQUFBO0lBQUEsR0FBQztNQUFBd0ssR0FBQTtNQUFBekosS0FBQSxFQUNELFNBQUFBLENBQWlDZixDQUFBO1FBQzdCLE1BQU0sSUFBSXVGLEtBQUEsQ0FBTSxrQkFDcEI7TUFBQTtJQUFBLEdBQUM7TUFBQWlGLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFBO1FBQ0ksTUFBTSxJQUFJd0UsS0FBQSxDQUFNLGtCQUNwQjtNQUFBO0lBQUEsR0FBQztNQUFBaUYsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQUE7UUFDSSxNQUFNLElBQUl3RSxLQUFBLENBQU0sa0JBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQUNJLE1BQU0sSUFBSXdFLEtBQUEsQ0FBTSxrQkFDcEI7TUFBQTtJQUFBLEdBQUM7TUFBQWlGLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFtQmYsQ0FBQSxFQUFnQkMsQ0FBQSxHQUVuQztJQUFBLEdBQUM7TUFBQXVLLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFxQmYsQ0FBQTtRQUNqQixNQUFNLElBQUl1RixLQUFBLENBQU0sa0JBQ3BCO01BQUE7SUFBQSxHQUFDO01BQUFpRixHQUFBO01BQUF6SixLQUFBLEdBQUFmLENBQUEsR0FBQW1NLENBQUEsQ0FBQTZCLGtCQUFBLENBQUFDLElBQUEsQ0FFRCxTQUFBak8sRUFBQTtRQUFBLE9BQUFnTyxrQkFBQSxDQUFBRSxJQUFBLFdBQUFsTyxDQUFBO1VBQUEsaUJBQUFBLENBQUEsQ0FBQW1PLElBQUEsR0FBQW5PLENBQUEsQ0FBQTRDLElBQUE7WUFBQTtjQUFBLE1BQ1UsSUFBSTJDLEtBQUEsQ0FBTTtZQUFrQjtZQUFBO2NBQUEsT0FBQXZGLENBQUEsQ0FBQW9PLElBQUE7VUFBQTtRQUFBLEdBQUFwTyxDQUFBO01BQUEsS0FDckM7UUFBQSxPQUFBQSxDQUFBLENBQUFxTSxLQUFBLE9BQUFELFNBQUE7TUFBQTtJQUFBO01BQUE1QixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBbUNmLENBQUE7UUFDL0IsTUFBTSxJQUFJdUYsS0FBQSxDQUFNLGtCQUNwQjtNQUFBO0lBQUEsR0FBQztNQUFBaUYsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQUE7UUFDSSxJQUFNZixDQUFBLEdBQWEsS0FBSytOLElBQUEsQ0FBS2UsS0FBQSxDQUFNM0osR0FBQSxDQUFJLEtBQUs0SSxJQUFBLENBQUtpQixRQUFBLENBQVNDLFFBQUEsRUFBVTtRQUNwRSxPQUFxQixRQUFkalAsQ0FBQSxJQUEyQkEsQ0FBQSxHQUFhLENBQ25EO01BQUE7SUFBQSxHQUFDO01BQUF3SyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBNEJmLENBQUE7UUFDeEIsS0FBSytOLElBQUEsQ0FBS1MsWUFBQSxDQUFhQyxFQUFBLENBQUdqQixDQUFBLENBQXFCLEtBQUtPLElBQUEsQ0FBS2lCLFFBQUEsQ0FBU0MsUUFBQSxFQUFVLGdCQUFnQmpQLENBQUEsQ0FDaEc7TUFBQTtJQUFBLEdBQUM7TUFBQXdLLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUE2QmYsQ0FBQTtRQUN6QixLQUFLK04sSUFBQSxDQUFLUyxZQUFBLENBQWFFLEdBQUEsQ0FBSWxCLENBQUEsQ0FBcUIsS0FBS08sSUFBQSxDQUFLaUIsUUFBQSxDQUFTQyxRQUFBLEVBQVUsZ0JBQWdCalAsQ0FBQSxDQUNqRztNQUFBO0lBQUEsR0FBQztNQUFBd0ssR0FBQTtNQUFBekosS0FBQSxFQUlELFNBQUFBLENBQ0lmLENBQUEsRUFDQU0sQ0FBQTtRQUVBLElBQ3lCLFNBQXJCTixDQUFBLElBQzRCLG1CQUFyQkEsQ0FBQSxJQUNxQixhQUE1QkMsQ0FBQSxDQUFPRCxDQUFBLEtBQ05vQixLQUFBLENBQU0rQixPQUFBLENBQVFuRCxDQUFBLEdBSm5CO1VBZUEsSUFBZ0MsbUJBQXJCQSxDQUFBLEVBS1gsTUFBTSxJQUFJdUYsS0FBQSxDQUFNO1VBSlosS0FBS3dJLElBQUEsQ0FBS2UsS0FBQSxDQUFNekssR0FBQSxDQUFJckUsQ0FBQSxFQUFrQixTQUFTTSxDQUFBLENBSG5EO1FBQUEsT0FiQTtVQU1JLElBQU1HLENBQUEsR0FBYUksTUFBQSxDQUFPMkYsSUFBQSxDQUFLeEcsQ0FBQSxFQUFrQjROLE1BQUEsQ0FDN0MsVUFBQzNOLENBQUEsRUFBUUssQ0FBQTtZQUFJLE9BQUF1TixDQUFBLENBQUF0TixDQUFBLEtBQVNELENBQUEsRUFBTztjQUFFUyxLQUFBLEVBQU9mLENBQUEsQ0FBaUJNLENBQUE7WUFBQSxJQUFZTCxDQUFBLENBQU07VUFBQSxHQUN6RSxDQUFDO1VBR0wsS0FBSzhOLElBQUEsQ0FBS2UsS0FBQSxDQUFNTSxJQUFBLENBQUszTyxDQUFBLENBRXpCO1FBQUE7TUFRSjtJQUFBLEdBQUM7TUFBQStKLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFXZixDQUFBO1FBQWdFLElBQUFDLENBQUE7UUFDdkUsSUFBSW1CLEtBQUEsQ0FBTStCLE9BQUEsQ0FBUW5ELENBQUEsR0FDZCxPQUFPMk4sQ0FBQSxDQUNIM04sQ0FBQSxDQUNLZ0QsR0FBQSxDQUFJLFVBQUFoRCxDQUFBO1VBQUksT0FBSXlOLENBQUEsQ0FBZXhOLENBQUEsQ0FBSzhOLElBQUEsQ0FBS2UsS0FBQSxDQUFNQyxRQUFBLENBQVMvTyxDQUFBLEVBQU07UUFBQSxHQUUxRDROLE1BQUEsQ0FBOEMsVUFBQzVOLENBQUEsRUFBUUMsQ0FBQTtVQUFLLE9BQUtELENBQUEsQ0FBT3FQLE1BQUEsQ0FBT3BQLENBQUEsQ0FBTTtRQUFBLEdBQUU7UUFJcEcsSUFBMkIsbUJBQWhCRCxDQUFBLEVBQ1AsT0FBTzJOLENBQUEsQ0FBa0JGLENBQUEsQ0FBZSxLQUFLTSxJQUFBLENBQUtlLEtBQUEsQ0FBTUMsUUFBQSxDQUFTL08sQ0FBQTtRQUdyRSxTQUFvQixNQUFoQkEsQ0FBQSxFQUNBLE9BQU8yTixDQUFBLENBQWtCRixDQUFBLENBQWUsS0FBS00sSUFBQSxDQUFLZSxLQUFBLENBQU1DLFFBQUEsQ0FBUyxLQUFLaEIsSUFBQSxDQUFLaUIsUUFBQSxDQUFTQyxRQUFBO1FBRXhGLE1BQU0sSUFBSTFKLEtBQUEsQ0FBTSwrREFDcEI7TUFBQTtJQUFBLEdBQUM7TUFBQWlGLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFnQmYsQ0FBQTtRQUVaLE9BQU8sS0FBSytOLElBQUEsQ0FBS2UsS0FBQSxDQUFNM0osR0FBQSxDQUFJbkYsQ0FBQSxFQUFNLFFBQ3JDO01BQUE7SUFBQSxHQUFDO01BQUF3SyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FDSWYsQ0FBQSxFQUNBQyxDQUFBLEVBQ0FLLENBQUE7UUFFQSxNQUFNLElBQUlnTixDQUNkLENBRGMsQ0FDZDtNQUFBO0lBQUEsR0FBQztNQUFBOUMsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQW1CZixDQUFBO1FBQ2YsTUFBTSxJQUFJc04sQ0FDZCxDQURjLENBQ2Q7TUFBQTtJQUFBLEdBQUM7TUFBQTlDLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFtQmYsQ0FBQTtRQUNmLE1BQU0sSUFBSXNOLENBQ2QsQ0FEYyxDQUNkO01BQUE7SUFBQSxHQUFDO01BQUE5QyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQUNJLE1BQU0sSUFBSXVNLENBQ2QsQ0FEYyxDQUNkO01BQUE7SUFBQSxHQUFDO01BQUE5QyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBaUJmLENBQUE7UUFDYixNQUFNLElBQUlzTixDQUNkLENBRGMsQ0FDZDtNQUFBO0lBQUEsR0FBQztNQUFBOUMsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQWtCZixDQUFBO1FBQ2QsTUFBTSxJQUFJc04sQ0FDZCxDQURjLENBQ2Q7TUFBQTtJQUFBLEdBQUM7TUFBQTlDLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUF1QmYsQ0FBQTtRQUNuQixNQUFNLElBQUlzTixDQUNkLENBRGMsQ0FDZDtNQUFBO0lBQUEsR0FBQztNQUFBOUMsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQXNDZixDQUFBO1FBQ2xDLE1BQU0sSUFBSXNOLENBQ2QsQ0FEYyxDQUNkO01BQUE7SUFBQSxHQUFDO01BQUE5QyxHQUFBO01BQUF6SixLQUFBLEVBQ0QsU0FBQUEsQ0FBMkJmLENBQUE7UUFDdkIsTUFBTSxJQUFJc04sQ0FDZCxDQURjLENBQ2Q7TUFBQTtJQUFBLEdBQUM7TUFBQTlDLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUEwQmYsQ0FBQTtRQUN0QixNQUFNLElBQUlzTixDQUNkLENBRGMsQ0FDZDtNQUFBO0lBQUEsR0FBQztNQUFBOUMsR0FBQTtNQUFBekosS0FBQSxFQUVELFNBQUFBLENBQXNCZixDQUFBLEVBQWNDLENBQUE7UUFDaEMsTUFBTSxJQUFJcU4sQ0FDZCxDQURjLENBQ2Q7TUFBQTtJQUFBLEdBQUM7TUFBQTlDLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUF1QmYsQ0FBQSxFQUFjQyxDQUFBO1FBQ2pDLE1BQU0sSUFBSXFOLENBQ2QsQ0FEYyxDQUNkO01BQUE7SUFBQSxHQUFDO01BQUE5QyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBNkJmLENBQUE7UUFDekIsTUFBTSxJQUFJc04sQ0FDZCxDQURjLENBQ2Q7TUFBQTtJQUFBLEdBQUM7TUFBQTlDLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUFnQ2YsQ0FBQTtRQUM1QixPQUFPd0QsT0FBQSxDQUFROEIsT0FBQSxNQUFRLEVBQzNCO01BQUE7SUFBQSxHQUFDO01BQUFrRixHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FDSWYsQ0FBQTtRQUdBLE1BQU0sSUFBSXVGLEtBQUEsQ0FBTSwwQkFDcEI7TUFBQTtJQUFBLEdBQUM7TUFBQWlGLEdBQUE7TUFBQXpKLEtBQUEsRUFFRCxTQUFBQSxDQUF1QmYsQ0FBQSxFQUFzQkMsQ0FBQTtRQUN6QyxNQUFNLElBQUlxTixDQUNkLENBRGMsQ0FDZDtNQUFBO0lBQUEsR0FBQztNQUFBOUMsR0FBQTtNQUFBekosS0FBQSxFQUNELFNBQUFBLENBQThCZixDQUFBO1FBQzFCLE1BQU0sSUFBSXNOLENBQ2QsQ0FEYyxDQUNkO01BQUE7SUFBQSxHQUFDO01BQUE5QyxHQUFBO01BQUF6SixLQUFBLEVBRUQsU0FBQUEsQ0FBQTtRQUNJLE1BQU0sSUFBSXVNLENBQ2QsQ0FEYyxDQUNkO01BQUE7SUFBQTtJQXhKQyxJQUFBdE4sQ0FBQSxFQXBHQU0sQ0FBQSxFQVJBRyxDQW9RQTtFQUFBLENBalNpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ3pCdEIsU0FBUzZPLEVBQUEsR0FDTDtFQWdCSixTQUFTQyxHQUFBO0lBQXNDLElBQWxDdFAsQ0FBQSxHQUFtQm1NLFNBQUEsQ0FBQWpMLE1BQUEsbUJBQUFpTCxTQUFBLE1BQUFBLFNBQUEsTUFBRztNQUN6QjlMLENBQUEsR0FBVU4sQ0FBQSxDQUFBcUIsQ0FBQSxDQUFPbU8sRUFBQSxDQUFHQyxVQUFBLElBQWM7SUFFeEMsT0FBTyxHQUFBSixNQUFBLENBQUcvTyxDQUFBLEVBQU8sS0FBQStPLE1BQUEsQ0FBSXBQLENBQUEsRUFBY3VILE9BQUEsQ0FBUSxpQkFBaUIsTUFDaEU7RUFBQTtFQUVBLFNBQVNrSSxHQUFTMVAsQ0FBQSxFQUFjQyxDQUFBO0lBQzVCLFNBQWUsTUFBWEEsQ0FBQSxFQUNBLE9BQU9ELENBQUE7SUFHWCxLQURBLElBQU1NLENBQUEsR0FBdUIsSUFDN0JDLENBQUEsTUFBQUUsQ0FBQSxHQUF3QkksTUFBQSxDQUFPMkYsSUFBQSxDQUFLdkcsQ0FBQSxHQUFPTSxDQUFBLEdBQUFFLENBQUEsQ0FBQVUsTUFBQSxFQUFBWixDQUFBLElBQUU7TUFBeEMsSUFBTWtCLENBQUEsR0FBU2hCLENBQUEsQ0FBQUYsQ0FBQTtRQUNWb0IsQ0FBQSxHQUFhMUIsQ0FBQSxDQUFPd0IsQ0FBQTtNQUNSLFFBQWRFLENBQUEsSUFDQXJCLENBQUEsQ0FBV21HLElBQUEsQ0FBSyxHQUFENEksTUFBQSxDQUFJNU4sQ0FBQSxFQUFTLEtBQUE0TixNQUFBLENBQUlNLGtCQUFBLENBQW1CaE8sQ0FBQSxHQUUzRDtJQUFBO0lBQ0EsT0FBMEIsTUFBdEJyQixDQUFBLENBQVdhLE1BQUEsR0FDSm5CLENBQUEsR0FFSkEsQ0FBQSxHQUFPLE1BQU1NLENBQUEsQ0FBV3lGLElBQUEsQ0FBSyxJQUN4QztFQUFBO0VBUUEsU0FBUzZKLEdBQW1CM1AsQ0FBQTtJQUN4QixRQUNLRCxDQUFBLENBQUFxQixDQUFBLENBQU9pSCxRQUFBLENBQVN1SCxNQUFBLENBQ1psSSxJQUFBLEdBQ0FILE9BQUEsQ0FBUSxhQUFhLElBQ3JCSSxLQUFBLENBQU0sS0FDTjVFLEdBQUEsQ0FBSSxVQUFBaEQsQ0FBQTtNQUFLLE9BQUlBLENBQUEsQ0FBTXdILE9BQUEsQ0FBUSxPQUFPLEtBQUtJLEtBQUEsQ0FBTSxLQUFLNUUsR0FBQSxDQUFJNkUsa0JBQUEsQ0FBbUI7SUFBQSxHQUV6RWlJLElBQUEsQ0FBSyxVQUFBOVAsQ0FBQTtNQUFLLFFDcEhDTSxDQUFBLEdEb0hOTixDQUFBLEVDcEhTTyxDQUFBLEdEb0hULEdFeEhsQixVQUF5QlAsQ0FBQTtRQUN2QixJQUFJb0IsS0FBQSxDQUFNK0IsT0FBQSxDQUFRbkQsQ0FBQSxHQUFJLE9BQU9BLENBQy9CO01BQUEsQ0RHUyxDQUFlTSxDQUFBLEtFTHhCLFVBQStCTixDQUFBLEVBQUdDLENBQUE7UUFDaEMsSUFBSUssQ0FBQSxHQUFJLFFBQVFOLENBQUEsR0FBSSxPQUFPLHNCQUFzQkUsTUFBQSxJQUFVRixDQUFBLENBQUVFLE1BQUEsQ0FBT0MsUUFBQSxLQUFhSCxDQUFBLENBQUU7UUFDbkYsSUFBSSxRQUFRTSxDQUFBLEVBQUc7VUFDYixJQUFJQyxDQUFBO1lBQ0ZFLENBQUE7WUFDQWdCLENBQUE7WUFDQUUsQ0FBQTtZQUNBQyxDQUFBLEdBQUk7WUFDSkMsQ0FBQSxJQUFJO1lBQ0pFLENBQUEsSUFBSTtVQUNOO1lBQ0UsSUFBSU4sQ0FBQSxJQUFLbkIsQ0FBQSxHQUFJQSxDQUFBLENBQUVJLElBQUEsQ0FBS1YsQ0FBQSxHQUFJNEMsSUFBQSxFQUFNLE1BQU0zQyxDQUFBLEVBQUc7Y0FDckMsSUFBSVksTUFBQSxDQUFPUCxDQUFBLE1BQU9BLENBQUEsRUFBRztjQUNyQnVCLENBQUEsSUFBSSxDQUNOO1lBQUEsT0FBTyxTQUFTQSxDQUFBLElBQUt0QixDQUFBLEdBQUlrQixDQUFBLENBQUVmLElBQUEsQ0FBS0osQ0FBQSxHQUFJd0MsSUFBQSxNQUFVbEIsQ0FBQSxDQUFFNkUsSUFBQSxDQUFLbEcsQ0FBQSxDQUFFUSxLQUFBLEdBQVFhLENBQUEsQ0FBRVQsTUFBQSxLQUFXbEIsQ0FBQSxHQUFJNEIsQ0FBQSxJQUFJO1VBQ3RGLENBQUUsUUFBTzdCLENBQUE7WUFDUCtCLENBQUEsSUFBSSxHQUFJdEIsQ0FBQSxHQUFJVCxDQUNkO1VBQUEsQ0FBRTtZQUNBO2NBQ0UsS0FBSzZCLENBQUEsSUFBSyxRQUFRdkIsQ0FBQSxDQUFVeVAsTUFBQSxLQUFNcE8sQ0FBQSxHQUFJckIsQ0FBQSxDQUFVeVAsTUFBQSxJQUFLbFAsTUFBQSxDQUFPYyxDQUFBLE1BQU9BLENBQUEsR0FBSTtZQUN6RSxDQUFFO2NBQ0EsSUFBSUksQ0FBQSxFQUFHLE1BQU10QixDQUNmO1lBQUE7VUFDRjtVQUNBLE9BQU9tQixDQUNUO1FBQUE7TUFDRixDRnJCOEIsQ0FBcUJ0QixDQUFBLEVBQUdDLENBQUEsS0dKdEQsVUFBcUNQLENBQUEsRUFBR0MsQ0FBQTtRQUN0QyxJQUFJRCxDQUFBLEVBQUc7VUFDTCxJQUFJLG1CQUFtQkEsQ0FBQSxFQUFHLE9BQU9TLENBQUEsQ0FBaUJULENBQUEsRUFBR0MsQ0FBQTtVQUNyRCxJQUFJSyxDQUFBLEdBQUksQ0FBQyxFQUFFZ0MsUUFBQSxDQUFTNUIsSUFBQSxDQUFLVixDQUFBLEVBQUdrRSxLQUFBLENBQU0sSUFBSTtVQUN0QyxPQUFPLGFBQWE1RCxDQUFBLElBQUtOLENBQUEsQ0FBRUksV0FBQSxLQUFnQkUsQ0FBQSxHQUFJTixDQUFBLENBQUVJLFdBQUEsQ0FBWXNJLElBQUEsR0FBTyxVQUFVcEksQ0FBQSxJQUFLLFVBQVVBLENBQUEsR0FBSWMsS0FBQSxDQUFNNE8sSUFBQSxDQUFLaFEsQ0FBQSxJQUFLLGdCQUFnQk0sQ0FBQSxJQUFLLDJDQUEyQ2tDLElBQUEsQ0FBS2xDLENBQUEsSUFBS0csQ0FBQSxDQUFpQlQsQ0FBQSxFQUFHQyxDQUFBLFNBQUssQ0FDdE47UUFBQTtNQUNGLENIRjRELENBQTJCSyxDQUFBLEVBQUdDLENBQUEsS0lMMUY7UUFDRSxNQUFNLElBQUlJLFNBQUEsQ0FBVSw0SUFDdEI7TUFBQSxDSkdnRyxJRG1IekUsTUFBYVYsQ0FBQTtNQ3BIcEMsSUFBd0JLLENBQUEsRUFBR0MsQ0RvSGE7SUFBQSxNQUFLLElBQUksRUFFakQ7RUFBQTtFQTJPQSxJQUFNMFAsRUFBQSxHQUE2QztJQUMvQ0MsS0FBQSxFQWhHSixTQUFBQSxDQUNJalEsQ0FBQSxFQUNBSyxDQUFBO01BRUksSUFBQUMsQ0FBQTtRQUFBRSxDQUFBO1FBREpnQixDQUFBLEdBQXlDMkssU0FBQSxDQUFBakwsTUFBQSxtQkFBQWlMLFNBQUEsTUFBQUEsU0FBQSxNQUFHa0QsQ0FBQTtRQUV4QzNOLENBQUEsR0FBUTtRQUNKQyxDQUFBLEdBQWdCdEIsQ0FBQSxDQUFoQjZQLEVBQUE7UUFBSXRPLENBQUEsR0FBWXZCLENBQUEsQ0FBWjhQLE9BQUE7TUFZWixJQTdLTyxJQUFJQyxNQUFBLENBQU8sT0FBRGhCLE1BQUEsQ0FtS0YzRCxDQUFBLENBQWVPLGFBQUEsQ0FuS0d6RSxPQUFBLENBQVEsT0FBTyxPQUFPQSxPQUFBLENBQVEsT0FBTyxpQkFBZSxPQUFNaEYsSUFBQSxDQUN2RnhDLENBQUEsQ0FBQXFCLENBQUEsQ0FBT2lILFFBQUEsQ0FBU2dJLElBQUEsSUFvS1I1RSxDQUFBLENBQWVDLFVBQUEsR0FFZjlKLENBQUEsR0FFQUQsQ0FBQSxLQUNSRCxDQUFBLEdBQVEsSUFBSTRELEtBQUEsQ0FBTSw2QkFGbEI1RCxDQUFBLEdBQVEsSUFBSTRELEtBQUEsQ0FBTSxpQ0FGbEI1RCxDQUFBLEdBQVEsSUFBSTRELEtBQUEsQ0FBTSwwQkFGbEI1RCxDQUFBLEdBQVEsSUFBSTRELEtBQUEsQ0FBTSxxQkFTbEI1RCxDQUFBLEVBQ0FGLENBQUEsQ0FBU0UsQ0FBQSxPQURiO1FBS0EsSUFBTUksQ0FBQSxHQUFtQyxVQUF2QnhCLENBQUEsR0FBR0QsQ0FBQSxDQUFRaVEsWUFBQSxVQUFZLE1BQUFoUSxDQUFBLEdBQUFBLENBQUEsR0FBSXFQLEVBQUEsQ0FBbUI7VUFDMUQ1TixDQUFBLEdBQWlCME4sRUFBQSxDQUFTSCxFQUFBLENNNVI3QixVQUErQnZQLENBQUE7WUFHbEMsT0FBTyxTQUFQcVAsTUFBQSxDQUFnQnJQLENBQUEsQ0FBUW1RLEVBQUEsRUFBRSxZQUFBZCxNQUFBLENBQVdyUCxDQUFBLENBQVFvUSxPQUFBLEVBQU8scUJBQ3hEO1VBQUEsQ053UndDLENBQXNCO1lBQUVELEVBQUEsRUFBSXZPLENBQUE7WUFBSXdPLE9BQUEsRUFBU3ZPO1VBQUEsS0FBYTtZQUN0RjBPLFlBQUEsRUFBY3hPO1VBQUE7VUFHWkUsQ0FBQSxHQUE4QjtZQUFFZ0YsTUFBQSxFQUFRO1VBQUE7UUFDOUMsSUFBOEIsUUFBMUIzRyxDQUFBLENBQVFrUSxjQUFBLElBQTBELGtDQUEzQmxRLENBQUEsQ0FBUWtRLGNBQUEsRUFDL0N2TyxDQUFBLENBQWUrRSxXQUFBLEdBQWMsZUFDMUIsSUFBSSxhQUFhMUcsQ0FBQSxDQUFRa1EsY0FBQSxJQUFvRCxRQUFsQ2xRLENBQUEsQ0FBUWtRLGNBQUEsQ0FBZUMsT0FBQSxFQUFzQjtVQUFBLElBQUF2TyxDQUFBO1VBQzNGRCxDQUFBLENBQWUrRSxXQUFBLEdBQWMsUUFDN0IvRSxDQUFBLENBQWVpRCxPQUFBLEdBQWdDLFVBQXpCaEQsQ0FBQSxHQUFHRCxDQUFBLENBQWVpRCxPQUFBLFVBQU8sTUFBQWhELENBQUEsR0FBQUEsQ0FBQSxHQUFJLENBQUMsR0FDcERELENBQUEsQ0FBZWlELE9BQUEsQ0FBdUJ3TCxhQUFBLEdBQUksWUFBSHJCLE1BQUEsQ0FBZS9PLENBQUEsQ0FBUWtRLGNBQUEsQ0FBZUMsT0FBQSxDQUNqRjtRQUFBLE9BQ0l4TyxDQUFBLENBQWUrRSxXQUFBLEdBQWM7UUFBQSxDQUVGLFVBQWhCdkcsQ0FBQSxHQUFHSCxDQUFBLENBQVFxSyxLQUFBLFVBQUssTUFBQWxLLENBQUEsR0FBQUEsQ0FBQSxHQUFJb0ksQ0FBQSxFQUV6QjdHLENBQUEsRUFBZ0JDLENBQUEsRUFDckJ5RCxJQUFBLENBQUssVUFBQTFGLENBQUE7VUFBQyxPQUFJQSxDQUFBLENBQUVrRyxJQUFBLEVBQU07UUFBQSxHQUNsQlIsSUFBQSxDQUFLLFVBQUNuRixDQUFBO1VBQTZDLElBQUFFLENBQUE7WUFBQWtCLENBQUE7WUFBQUMsQ0FBQTtZQUFBQyxDQUFBO1lBQUFHLENBQUE7WUFDMUNDLENBQUEsR0FBTTFCLENBQUEsQ0FBZ0JvUSxHQUFBO1lBQ3RCek8sQ0FBQSxHQUFnQjNCLENBQUEsQ0FBZ0JxUSxhQUFBO1lBQ2hDck8sQ0FBQSxHQUFnQnNPLENBQUEsQ0FBQUEsQ0FBQSxDQUFBQSxDQUFBO2NBQ2xCbEYsVUFBQSxFQUFZRCxDQUFBLENBQWVDLFVBQUE7Y0FDM0JDLGNBQUEsRUFBZ0JGLENBQUEsQ0FBZUUsY0FBQTtjQUMvQkMsWUFBQSxFQUFjSCxDQUFBLENBQWVHLFlBQUE7Y0FDN0JDLG1CQUFBLEVBQXFCSixDQUFBLENBQWVJLG1CQUFBO2NBQ3BDQyxxQkFBQSxFQUF1QkwsQ0FBQSxDQUFlSyxxQkFBQTtjQUN0Q0MsWUFBQSxFQUFjTixDQUFBLENBQWVNLFlBQUE7Y0FDN0JDLGFBQUEsRUFBZVAsQ0FBQSxDQUFlTyxhQUFBO2NBQzlCNkUscUJBQUEsRUFBb0QsVUFBL0JyUSxDQUFBLEdBQUVILENBQUEsQ0FBUXdRLHFCQUFBLFVBQXFCLE1BQUFyUSxDQUFBLElBQUFBLENBQUE7Y0FDcERzUSxrQkFBQSxFQUFvQnpRLENBQUEsQ0FBUXlRO1lBQUEsR0FDekJ6USxDQUFBLEdBQ0FDLENBQUEsR0FBZTtjQUNsQm9RLEdBQUEsRUFBSzFPLENBQUE7Y0FDTDJPLGFBQUEsRUFBZTFPLENBQUE7Y0FDZjhPLGVBQUEsRUFBd0MsVUFBekJyUCxDQUFBLEdBQUVyQixDQUFBLENBQVEwUSxlQUFBLFVBQWUsTUFBQXJQLENBQUEsR0FBQUEsQ0FBQSxHQUFJcEIsQ0FBQSxDQUFnQnlRLGVBQUE7Y0FDNURDLG1CQUFBLEVBQWdELFVBQTdCclAsQ0FBQSxHQUFFdEIsQ0FBQSxDQUFRMlEsbUJBQUEsVUFBbUIsTUFBQXJQLENBQUEsSUFBQUEsQ0FBQTtjQUNoRHNQLHFCQUFBLEVBQW9ELFVBQS9CclAsQ0FBQSxHQUFFdkIsQ0FBQSxDQUFRNFEscUJBQUEsVUFBcUIsTUFBQXJQLENBQUEsSUFBQUEsQ0FBQTtjQUNwRHNQLDRCQUFBLEVBQWtFLFVBQXRDblAsQ0FBQSxHQUFFMUIsQ0FBQSxDQUFRNlEsNEJBQUEsVUFBNEIsTUFBQW5QLENBQUEsSUFBQUEsQ0FBQTtjQUNsRXVPLFlBQUEsRUFBY3hPO1lBQUE7VUFBQSxDQXBKOUIsVUFBa0I5QixDQUFBLEVBQTRCSyxDQUFBO1lBQzFDLElBQVFDLENBQUEsR0FBdUJOLENBQUEsQ0FBdkIwUSxHQUFBO2NBQUtsUSxDQUFBLEdBQWtCUixDQUFBLENBQWxCMlEsYUFBQTtZQUViLElBQUk1USxDQUFBLENBQUFxQixDQUFBLENBQU9tTyxFQUFBLENBQUc0QixVQUFBLENBQVc3USxDQUFBLEdBQ3JCRCxDQUFBLFFBREo7Y0FJQSxJQUFNbUIsQ0FBQSxHQUFlaEIsQ0FBQSxLQUFrQlQsQ0FBQSxDQUFBcUIsQ0FBQSxDQUFPWixDQUFBO2dCQUd4Q2tCLENBQUEsR0FBc0MsV0FBaENpTyxFQUFBLENBQW1CLFdBQXNCLEtBQUs7Z0JBQ3BEaE8sQ0FBQSxHQUFnQjtnQkFFaEJDLENBQUEsR0FBUztrQkFBRTBPLFlBQUEsRUFBY3RRLENBQUEsQ0FBU3NRO2dCQUFBO2NBRXBDM08sQ0FBQSxDQUFNNkUsSUFBQSxDQUFLLFVBQUF6RyxDQUFBO2dCQUFFLE9BQ1Q4SyxDQUFBLENBQWlCdUcsVUFBQSxDQUFXOUIsRUFBQSxDQUFJRyxFQUFBLENBQVMsd0JBQURMLE1BQUEsQ0FBeUI5TyxDQUFBLEVBQUc4TyxNQUFBLENBQUcxTixDQUFBLEVBQUcsU0FBUUUsQ0FBQSxLQUFVLEdBQU03QixDQUFBLENBQUc7Y0FBQSxJQUc3RzRCLENBQUEsQ0FBTTZFLElBQUEsQ0FBSyxVQUFBekcsQ0FBQTtnQkFBRSxPQUFJOEssQ0FBQSxDQUFpQndHLE1BQUEsQ0FBTy9CLEVBQUEsQ0FBSUcsRUFBQSxDQUFTLHlCQUFETCxNQUFBLENBQTBCOU8sQ0FBQSxFQUFHOE8sTUFBQSxDQUFHMU4sQ0FBQSxFQUFHLFFBQU9FLENBQUEsSUFBVTdCLENBQUEsQ0FBRztjQUFBLElBRXhHeUIsQ0FBQSxJQUNBRyxDQUFBLENBQU02RSxJQUFBLENBQ0YsVUFBQXpHLENBQUE7Z0JBQUUsT0FDRThLLENBQUEsQ0FBaUJ1RyxVQUFBLENBQ2I5QixFQUFBLENBQUlHLEVBQUEsQ0FBUyw4QkFBREwsTUFBQSxDQUErQjVPLENBQUEsRUFBYTRPLE1BQUEsQ0FBRzFOLENBQUEsRUFBRyxTQUFRRSxDQUFBLEtBQ3RFLEdBQ0E3QixDQUFBLENBQ0g7Y0FBQSxHQUNMLFVBQUFBLENBQUE7Z0JBQUUsT0FDRThLLENBQUEsQ0FBaUJ3RyxNQUFBLENBQ2IvQixFQUFBLENBQUlHLEVBQUEsQ0FBUywrQkFBREwsTUFBQSxDQUFnQzVPLENBQUEsRUFBYTRPLE1BQUEsQ0FBRzFOLENBQUEsRUFBRyxRQUFPRSxDQUFBLElBQ3RFN0IsQ0FBQSxDQUNIO2NBQUEsSUFwRmpCLFVBQXFCQSxDQUFBLEVBQWVDLENBQUE7Z0JBQ2hDLElBQUlLLENBQUEsR0FBWTtnQkFFaEJOLENBQUEsQ0FBTWlELE9BQUEsQ0FBUSxVQUFBMUMsQ0FBQTtrQkFDVkEsQ0FBQSxDQUFLLFVBQUFBLENBQUE7b0JBQ0QsSUFBSUQsQ0FBQSxLQUFjTixDQUFBLENBQU1tQixNQUFBLEVBQXhCO3NCQUdBLElBQUlaLENBQUEsRUFJQSxPQUhBRCxDQUFBLEdBQVlOLENBQUEsQ0FBTW1CLE1BQUEsT0FDbEJsQixDQUFBLENBQVNNLENBQUE7c0JBQUEsQ0FJYkQsQ0FBQSxJQUFhLE9BQ0tOLENBQUEsQ0FBTW1CLE1BQUEsSUFDcEJsQixDQUFBLEVBVEo7b0JBQUE7a0JBV0osRUFDSjtnQkFBQSxFQUNKO2NBQUEsQ0FvRUksQ0FBWTJCLENBQUEsRUFBT3RCLENBQUEsQ0EvQm5CO1lBQUE7VUFnQ0osQ0FpSFksQ0FDSTtZQUNJcVEsR0FBQSxFQUFLcE8sQ0FBQSxDQUFpQm9PLEdBQUE7WUFDdEJDLGFBQUEsRUFBZXJPLENBQUEsQ0FBaUJxTyxhQUFBO1lBQ2hDTCxZQUFBLEVBQWNoTyxDQUFBLENBQWlCZ08sWUFBQTtZQUMvQmdCLEtBQUEsRUFBT2hQLENBQUEsQ0FBaUJnUDtVQUFBLEdBRTVCLFVBQUFoUixDQUFBO1lBQ0ksS0FBSUEsQ0FBQSxJQUFjUCxDQUFBLENBQUFxQixDQUFBLENBQU9tTyxFQUFBLENBQUc0QixVQUFBLENBQVduUCxDQUFBLEdBQXZDO2NBSUEsSUFBTXhCLENBQUEsR0F0RjFCLFVBQTZCUixDQUFBO2dCQUN6QixJQUFxQixRQUFqQkEsQ0FBQSxFQUlKLE9BQU9ELENBQUEsQ0FBQXFCLENBQUEsQ0FBT3BCLENBQUEsS0FBa0JELENBQUEsQ0FBQXFCLENBQUEsQ0FBT3BCLENBQUEsRUFBY3VSLE9BQ3pEO2NBQUEsQ0FnRm1DLENBQW9CdFAsQ0FBQTtjQUFBLENBM0h2RCxVQUNJakMsQ0FBQSxFQUNBSyxDQUFBLEVBQ0FDLENBQUE7Z0JBQ0ksSUFBQUUsQ0FBQTtnQkFBQSxDQUUwQyxVQUQxQkEsQ0FBQSxHQUNoQlQsQ0FBQSxDQUFBcUIsQ0FBQSxDQUFPbU8sRUFBQSxDQUFHNEIsVUFBQSxDQUFXOVEsQ0FBQSxDQUFpQnFRLEdBQUEsV0FBSSxNQUFBbFEsQ0FBQSxHQUFBQSxDQUFBLEdPdE0zQyxVQUFnQlQsQ0FBQTtrQkFDbkIsTUFBdUIsbUJBQVpBLENBQUEsSUFBbUMsUUFBWEEsQ0FBQSxHQUN6QixJQUFJdUYsS0FBQSxDQUFNLFFBQUF2RixDQUFBLEdBQUFBLENBQUEsR0FBVyw4QkFFckJBLENBRWQ7Z0JBQUEsQ1BnTXNELENBQU8sb0JBQURxUCxNQUFBLENBQXFCL08sQ0FBQSxDQUFpQnFRLEdBQUEsRUFBRyxpQkFDbEYxUSxDQUFBLEVBQWFLLENBQUEsRUFDdkJvRixJQUFBLENBQUssVUFBQTFGLENBQUE7a0JBQ0YsSUFBTUMsQ0FBQSxHQUFhRCxDQUFBLENBQUt5UixVQUFBLElENko3QixVQUFnQ3pSLENBQUE7b0JBRW5DLE9BQU8sSUFBSThOLENBQUEsQ0FBaUI5TixDQUFBLENBQ2hDO2tCQUFBLENDaEtrRCxDQUF1QkEsQ0FBQTtrQkFFN0RPLENBQUEsQ0FBUyxNQUFNTixDQUFBLENBQ25CO2dCQUFBLEdBQUV5UixLQUFBLENBQ0tuUixDQUFBLENBQ2Y7Y0FBQSxDQStHb0IsQ0FDSU4sQ0FBQSxFQUFXNFEsQ0FBQSxDQUFBQSxDQUFBLEtBRUp0TyxDQUFBLEdBQWdCO2dCQUNuQm9QLFlBQUEsRUFBY3JSLENBQUEsQ0FBUXFSLFlBQUE7Z0JBQ3RCQyxVQUFBLEVBQVluUjtjQUFBLElBRWhCZ0IsQ0FBQSxDQVZKO1lBQUEsT0FGSUEsQ0FBQSxDQUFTLElBQUk4RCxLQUFBLENBQU0sNENBQUQ4SixNQUFBLENBQTZDcE4sQ0FBQSxHQWN2RTtVQUFBLEVBRVI7UUFBQSxHQUFFeVAsS0FBQSxDQUNLalEsQ0FBQSxDQXZFWDtNQUFBO0lBd0VKO0lBSUkyUCxVQUFBLEVBQVksQ0FBQztJQUNiUyxzQkFBQSxHQUFrQyw2QkE3UjFCO0lBOFJScEMsVUFBQSxFQUFZO0VBQUE7RUFHaEJ6UCxDQUFBLENBQUFxQixDQUFBLENBQU9tTyxFQUFBLEdBQUtTLEUiLCJpZ25vcmVMaXN0IjpbXX0=
1076
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJyIiwibiIsInRvUHJpbWl0aXZlIiwibyIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwiQXJyYXkiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwid2luZG93IiwiaSIsInNlbGYiLCJhIiwidSIsInMiLCJCbG9iIiwiYyIsImwiLCJmIiwiaCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInRvU3RyaW5nIiwiZCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsInAiLCJ5IiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsIm0iLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ2IiwiX25vQm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJ3IiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIkUiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJleGVjIiwicmVhZEFzVGV4dCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJmb3JtRGF0YSIsIkEiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZGVsZXRlIiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJPIiwiayIsImJvZHkiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1ldGhvZCIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsIkFib3J0Q29udHJvbGxlciIsInJlZmVycmVyIiwiY2FjaGUiLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJ0cmltIiwic3BsaXQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJqIiwic3RhdHVzIiwiUmFuZ2VFcnJvciIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiUyIsInJlZGlyZWN0IiwibG9jYXRpb24iLCJUIiwiRE9NRXhjZXB0aW9uIiwibWVzc2FnZSIsIm5hbWUiLCJzdGFjayIsImNyZWF0ZSIsIlAiLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsImNvbnNvbGUiLCJ3YXJuIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0Iiwib3BlbiIsImhyZWYiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJfIiwiQiIsImtleSIsIkMiLCJwb2x5ZmlsbCIsImZldGNoIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiUiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJJIiwiQm9vbGVhbiIsIkQiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwia29udHVyRG9tYWlucyIsIlUiLCJ4IiwiYXJndW1lbnRzIiwiYXBwbHkiLCJGIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJNIiwiTiIsIkwiLCJ2YWx1ZU9mIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJIIiwiTWFwIiwiX3dyYXBOYXRpdmVTdXBlciIsIlJlZmVyZW5jZUVycm9yIiwiViIsInoiLCIkIiwiWCIsImZpbHRlciIsIkoiLCJyZWR1Y2UiLCJHIiwiVyIsImZvcm0iLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwid3JhcCIsInByZXYiLCJzdG9wIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXREaWdlc3RBcGlQaWNrbGlzdCIsInF1ZXJ5IiwiZXZlbnRNYW5hZ2VyIiwib24iLCJvZmYiLCJjaGFuZ2VTZXQiLCJzdG9wQXV0b3NlbmQiLCJ1bm1vdW50IiwibW9kZWwiLCJnZXRDaHVuayIsInNldHRpbmdzIiwiZm9ybVJvb3QiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZUFsbCIsImZpbGwiLCJjb25jYXQiLCJZIiwiZWUiLCJDRiIsImtlZm9ybXNVcmwiLCJ0ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlIiwic2VhcmNoIiwiZmluZCIsInJldHVybiIsImZyb20iLCJuZSIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiUSIsInNob3dOYXZpZ2F0aW9uU2lkZWJhciIsIm9uUmVtb3ZlQXR0YWNobWVudCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiZW50cnlQb2ludCIsInN0eWxlU2hlZXQiLCJzY3JpcHQiLCJ0aGVtZSIsImRlZmF1bHQiLCJwdWJsaWNGb3JtIiwiY2F0Y2giLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybS50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vVHlwaW5nVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xuICByZXR1cm4gbjtcbn1cbmV4cG9ydCB7IF9hcnJheUxpa2VUb0FycmF5IGFzIGRlZmF1bHQgfTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVDbGFzcyBhcyBkZWZhdWx0IH07IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5leHBvcnQgeyBfZ2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufVxuZXhwb3J0IHsgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgdmFyIHIgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgICBpZiAobnVsbCA9PT0gdCB8fCAhaXNOYXRpdmVGdW5jdGlvbih0KSkgcmV0dXJuIHQ7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgIGlmIChyLmhhcyh0KSkgcmV0dXJuIHIuZ2V0KHQpO1xuICAgICAgci5zZXQodCwgV3JhcHBlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KHQsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfVxuICAgIH0pLCBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCB0KTtcbiAgfSwgX3dyYXBOYXRpdmVTdXBlcih0KTtcbn1cbmV4cG9ydCB7IF93cmFwTmF0aXZlU3VwZXIgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKHQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gLTEgIT09IEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIik7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0O1xuICB9XG59XG5leHBvcnQgeyBfaXNOYXRpdmVGdW5jdGlvbiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2NvbnN0cnVjdCh0LCBlLCByKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gW251bGxdO1xuICBvLnB1c2guYXBwbHkobywgZSk7XG4gIHZhciBwID0gbmV3ICh0LmJpbmQuYXBwbHkodCwgbykpKCk7XG4gIHJldHVybiByICYmIHNldFByb3RvdHlwZU9mKHAsIHIucHJvdG90eXBlKSwgcDtcbn1cbmV4cG9ydCB7IF9jb25zdHJ1Y3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxuZXhwb3J0IHsgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbXBsb3llZSxcbiAgICBFbXBsb3llZUxpc3QsXG4gICAgR2V0RW1wbG95ZWVzV2l0aEFjdGl2ZVBlcmlvZFF1ZXJ5LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIE1hdGNoRW1wbG95ZWVSZXF1ZXN0LFxuICAgIE1hdGNoRW1wbG95ZWVSZXNwb25zZSxcbiAgICBNZXJnZVJlbGF0aXZlUmVzcG9uc2UsXG4gICAgUGF0Y2hSZWxhdGl2ZVJlc3BvbnNlLFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLXNlbGVjdG9yLXdpZGdldFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIkVuZ2luZS9zcmMvRW5naW5lL0Zvcm0vTW9kZWxDaGFuZ2VFdmVudExpc3RlbmVyXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcbmltcG9ydCB7XG4gICAgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyxcbiAgICBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMsXG4gICAgUHJlZmVycmVkSW50ZXJkb2N1bWVudFRyYW5zZmVyUHJvcHMsXG59IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0luaXRTZWN0aW9uTGlnaHRib3hcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IEZpYXNBcGksIEZpYXNDbGllbnRJbml0T3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9WYWx1ZUVkaXRvcnMvRmlhcy9GaWFzSW5wdXQvRmlhc0FwaVwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0RyYWZ0QWN0aW9ucy9Db21iaW5lRnVmUmVzdWx0XCI7XG5pbXBvcnQgeyBJQ2FuZHlDb21wb25lbnRIYW5kbGUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29tcG9uZW50SGFuZGxlUmVnaXN0cnkvSUNhbmR5Q29tcG9uZW50SGFuZGxlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUGF0aE1hcHBlciB9IGZyb20gXCIuLi8uLi9JbmplY3RhYmxlTW9kdWxlcy9JbmplY3RhYmxlRW5naW5lTW9kdWxlc1wiO1xuaW1wb3J0IHtcbiAgICBFbXBsb3llck5vcm1hbGl6ZWRUYWcsXG4gICAgSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vLi4vU3RhZmZTZXJ2aWNlSW50ZWdyYXRpb24vRW1wbG95ZWVTZXJ2aWNlVHlwZXNcIjtcbmltcG9ydCB7IFRhYkluZm9zU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvTXVsdGlDb250cm9scy9UYWJzL1N0b3JlL1RhYkluZm9zU3RhdGVcIjtcbmltcG9ydCB7IE1ldHJpY3NQYXlsb2FkIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9NZXRyaWNzL01ldHJpY3NQcm92aWRlclwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGVCeUhpZ2hsYW5kZXJQYXRocyhwYXRoczogc3RyaW5nW10pOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsU2VsZWN0UmVsYXRpdmUoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXZpZ2F0aW9uUGF0aE1hcHBlcigpOiBOYXZpZ2F0aW9uUGF0aE1hcHBlciB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBiYXRjaFVwZGF0ZSh1cGRhdGVQcm9jOiAodXBkYXRlQWNjZXNzb3I6IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvcikgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQ2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFcnJvckxvZyhlcnJvckxvZzogUGFydGlhbDxTZXJ2ZXJFcnJvckxvZz4pOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHZhbGlkYXRlQ2hpbGRyZW5CeVBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfX0lOVEVSTkFMX19pbXBvcnRGcm9tRW1wbG95ZWVTZXJ2aWNlKCk6IFByb21pc2U8RW1wbG95ZWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX19JTlRFUk5BTF9fZ2V0U2VsZWN0RnVuY3Rpb25Gb3JEaXNhYmxlRW1wbG95ZWVJblNTKFxuICAgICAgICBwYXRoU3BlYzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTwoZW1wbG95ZWU6IEVtcGxveWVlKSA9PiBib29sZWFuPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNb2RhbFVuaXRPcGVuZWRJbnN0YW5jZShwYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFic1N0YXRlKCk6IFRhYkluZm9zU3RhdGUge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGUobmF2aWdhdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8SUNhbmR5Q29tcG9uZW50SGFuZGxlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llckRvY3VtZW50cyhcbiAgICAgICAgb3B0aW9uczogSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zXG4gICAgKTogUHJvbWlzZTxFbXBsb3llck5vcm1hbGl6ZWRUYWcgfCB1bmRlZmluZWQgfCBudWxsPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZXNXaXRoQWN0aXZlUGVyaW9kUXVlcnkpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVtcGxveWVlcygpOiBQcm9taXNlPEVtcGxveWVlTGlzdD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlUmVsYXRpdmUoKTogUHJvbWlzZTxNZXJnZVJlbGF0aXZlUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaFJlbGF0aXZlKCk6IFByb21pc2U8UGF0Y2hSZWxhdGl2ZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZE1ldHJpY3MoYWN0aW9uOiBzdHJpbmcsIHBheWxvYWQ/OiBNZXRyaWNzUGF5bG9hZCk6IHZvaWQge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEVtcGxveWVlKHF1ZXJ5OiBNYXRjaEVtcGxveWVlUmVxdWVzdCk6IFByb21pc2U8TWF0Y2hFbXBsb3llZVJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVsb2FkSW5uZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ya2luZ0V2ZW50c0ZvckVtcGxveWVlKGZpbHRlcnM6IEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0KTogUHJvbWlzZTxXb3JraW5nRXZlbnRMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1dWlkR2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd01vZGFsKG9wdGlvbnM6IE1vZGFsT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWN0aW9uKG9wdGlvbnM6IEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsSW5pdFNlY3Rpb24ob3B0aW9uczogQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmVmZXJyZWRJbnRlcmRvY3VtZW50VHJhbnNmZXIob3B0aW9uczogUHJlZmVycmVkSW50ZXJkb2N1bWVudFRyYW5zZmVyUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG5wKCk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZEluc3RhbmNlcyhcbiAgICAgICAgbXVsdGlwbGljaXR5UGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YWJsZVVuaXFJZDogc3RyaW5nLFxuICAgICAgICBwYXRoVG9DaGVja2VkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoaW50PzogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGlkPzogc3RyaW5nO1xuICAgIHdlaWdodDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVuZGVyRm9ybVNldHRpbmdzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIHBhbmVsQWN0aW9ucz86IEFjdGlvbkRlc2NyaXB0aW9uW107XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5fXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xuICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcj86IGJvb2xlYW47XG4gICAgb25SZW1vdmVBdHRhY2htZW50PzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcjogb3B0aW9ucy5zaG93TmF2aWdhdGlvblNpZGViYXIgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblJlbW92ZUF0dGFjaG1lbnQ6IG9wdGlvbnMub25SZW1vdmVBdHRhY2htZW50LFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xuICBpZiAocikge1xuICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcbiAgICB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cbmV4cG9ydCB7IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlSXNBcnJheTxUPihpdGVtczogdW5rbm93bik6IFRbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE11c3QgYmUgYW4gYXJyYXkhYCk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcyBhcyBUW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7RUFDQSxJQUFJQSxDQUFBLEdBQXNCLENBQUM7RUNEM0IsU0FBU0MsRUFBUUQsQ0FBQTtJQUdmLE9BQU9DLENBQUEsR0FBVSxxQkFBcUJDLE1BQUEsSUFBVSxtQkFBbUJBLE1BQUEsQ0FBT0MsUUFBQSxHQUFXLFVBQVVILENBQUE7TUFDN0YsY0FBY0EsQ0FDaEI7SUFBQSxJQUFJLFVBQVVBLENBQUE7TUFDWixPQUFPQSxDQUFBLElBQUsscUJBQXFCRSxNQUFBLElBQVVGLENBQUEsQ0FBRUksV0FBQSxLQUFnQkYsTUFBQSxJQUFVRixDQUFBLEtBQU1FLE1BQUEsQ0FBT0csU0FBQSxHQUFZLGtCQUFrQkwsQ0FDcEg7SUFBQSxHQUFHQyxDQUFBLENBQVFELENBQUEsQ0FDYjtFQUFBO0VDTkEsU0FBU00sRUFBY04sQ0FBQTtJQUNyQixJQUFJTSxDQUFBLEdDRk4sVUFBcUJOLENBQUEsRUFBR00sQ0FBQTtNQUN0QixJQUFJLFlBQVlMLENBQUEsQ0FBUUQsQ0FBQSxNQUFPQSxDQUFBLEVBQUcsT0FBT0EsQ0FBQTtNQUN6QyxJQUFJTyxDQUFBLEdBQUlQLENBQUEsQ0FBRUUsTUFBQSxDQUFPTSxXQUFBO01BQ2pCLFNBQUksTUFBV0QsQ0FBQSxFQUFHO1FBQ2hCLElBQUlFLENBQUEsR0FBSUYs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